🔑

google Secret Managerの値を登録してpythonで取得してみる

2023/05/29に公開

手順

  1. Secret Managerの有効化
  2. シークレットの登録
  3. サービスアカウントの作成と権限追加
  4. pythonで呼び出し

※本記事の内容は2023/05/29時点で動作を確認しました。

1. Secret managerの有効化

GCPのsecret managerに行ってAPIを有効化します。
権限あればボタン押すだけで終わります。
https://console.cloud.google.com/security/secret-manager

2. secretの登録

今回はコンソールで設定します。
secret manager画面の上の方に作成ボタンがあるので押します。
そしてシークレットの名前と値を入力して下の作成ボタンを押します。
今回はシークレットの名前をtest-secret
値を何かのログイン情報としてid, passを設定しました。(注: python呼び出し時の問題でシングルクォートは使わない。)

{
"id" : "id",
"pass" : "pass"
}


作成はこれで終わりなので作成されたか確認します。
シークレット作成されていれば一覧にtest-secretが表示されててクリックすると詳細が見れます。
詳細の操作からsecretの値を表示を押すと設定した値も確認できます。

以上でシークレットの設定は終わりです。

3. 呼び出しに使うサービスアカウントに権限追加

シークレット値を呼び出すにはsecretmanager.versions.access権限が必要のようです。
事前定義ロールSecret Manager のシークレット アクセサーが持ってるのでこちらのロールをサービスアカウントに追加します。
https://cloud.google.com/secret-manager/docs/access-control?hl=ja#secretmanager.secretAccessor

使うサービスアカウントは用意されてることとして、
サービスアカウントを指定して、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コードの参考記事
https://thinkami.hatenablog.com/entry/2022/11/06/215622#:~:text=from google.cloud,print(value)

Discussion