【GCP】KMSを使ってシークレットを管理する方法のお勉強
以前ワーッて納期に追われながら実装して、全然覚えていなかったので一度まとめておこうと思いまして。
KMSって何
key management system。キーをマネジメントするシステム。秘匿したい情報をの暗号化⇔復号化をやってくれて、暗号鍵の管理をしてくれる。
使い方のイメージ
【パスワードなどの暗号化したい情報】→平文で保存しておきたくないじゃん。
保存するときは【秘密情報】→【kmsが発行した鍵】を使って暗号化→【暗号化した秘密情報】をファイルとして保存しておく
使う時は、【暗号化した秘密情報ファイル】をプログラムから呼び出し→kmsにファイルから読み出した【暗号化した秘密情報】を投げる→【秘密情報】が戻ってくるので、それを使う
鍵の発行
GCPの管理画面>セキュリティ>暗号鍵を選んでキーリング(鍵の束)と鍵を発行する
画面の指示に従って作れば作れる。
(コマンドラインからでも出来るけど、GUI使った方がわかりやすいので)
暗号化
まず、暗号化したい情報を一旦平文で保存しておく。(GoogleCloudSDKは入っているものとする)
で
$gcloud auth login
しておいて、
$ gcloud kms encrypt --location global \
--keyring YOUR_KEYRING --key YOUR_KEY \
--plaintext-file hoge/kms/seacret/plaintext.txt \
--ciphertext-file hoge/kms/key/seacret_encrypted
YOUR_KEYRINGとYOUR_KEYには先ほど発行したキーリングと鍵の名前を入れる。plaintext-fileには平文のファイルパスを、ciphertext-fileには暗号化後の任意のファイル名を入力。
で、出力されたバイナリファイルを保存しておく。
復号化
pythonの場合
from google.cloud import kms_v1
def __decript():
cipherTextFile = "hoge/kms/key/seacret_encrypted"
client = kms_v1.KeyManagementServiceClient()
with open(cipherTextFile,"rb") as f:
ciphertext = f.read()
name = client.crypto_key_path_path("encryptionkeys", "global", YOUR_KEYRING,YOUR_KEY)
response = client.decrypt(name, ciphertext)
encordtext = response.plaintext.decode("UTF-8")
return(encordtext)
で、平文が取得できる
色々細かいところが抜けている気はするけど、とりあえず最低限これでなんとかなるはず
この記事が気に入ったらサポートをしてみませんか?