google Secret Managerの値を登録してpythonで取得してみる
手順
- Secret Managerの有効化
- シークレットの登録
- サービスアカウントの作成と権限追加
- pythonで呼び出し
※本記事の内容は2023/05/29時点で動作を確認しました。
1. Secret managerの有効化
GCPのsecret managerに行ってAPIを有効化します。
権限あればボタン押すだけで終わります。
2. secretの登録
今回はコンソールで設定します。
secret manager画面の上の方に作成ボタンがあるので押します。
そしてシークレットの名前と値を入力して下の作成ボタンを押します。
今回はシークレットの名前をtest-secret
、
値を何かのログイン情報としてid, passを設定しました。(注: python呼び出し時の問題でシングルクォートは使わない。)
{
"id" : "id",
"pass" : "pass"
}
作成はこれで終わりなので作成されたか確認します。
シークレット作成されていれば一覧にtest-secret
が表示されててクリックすると詳細が見れます。
詳細の操作からsecretの値を表示
を押すと設定した値も確認できます。
以上でシークレットの設定は終わりです。
3. 呼び出しに使うサービスアカウントに権限追加
シークレット値を呼び出すにはsecretmanager.versions.access
権限が必要のようです。
事前定義ロールSecret Manager のシークレット アクセサー
が持ってるのでこちらのロールをサービスアカウントに追加します。
使うサービスアカウントは用意されてることとして、
サービスアカウントを指定して、Secret Managerのシークレットアクセサー
ロールを選択します。
3. pythonで呼び出し
サービスアカウントの認証キー(ここではservice_account_key.json
)を準備し
以下のコードで呼び出せます。
シークレットのproject_idとバージョンはシークレットの詳細画面で確認できます。
from google.cloud import secretmanager
from google.oauth2 import service_account
key_path = 'service_account_key.json'
client = secretmanager.SecretManagerServiceClient.from_service_account_json(key_path)
PROJECT_ID = '[シークレットのproject_id]' # ※それそれのproject_idを確認してください。
SECRET_ID = '[シークレット名]' # ※本記事では2で作成した'test-secret')
VERSION = '[シークレットのバージョン]' # ※私が作成した場合はデフォルトで`1`になってました。`latest`でも取得できました。
path = client.secret_version_path(PROJECT_ID, SECRET_ID, VERSION)
response = client.access_secret_version(name=path)
secret_value = response.payload.data.decode('UTF-8')
print(secret_value)
出力結果
{
"id" : "id",
"pass" : "pass"
}
シークレットのproject_idとバージョンの確認方法は詳細ぺーじで。
pythonコードの参考記事
Discussion