0
0

docker環境でGCPのsecret managerを使おうとしてハマった記録

Posted at

ハマった詳細

docker環境でGCPのSecretManagerの値を参照しようとすると下記エラーが発生し、権限不足でエラー

google.api_core.exceptions.PermissionDenied: 403 Permission 'secretmanager.versions.access' denied for resource 'projects/pj-love-shizuka/secrets/API_KEY/versions/1' (or it may not exist).

解消した方法

  1. GCPの「IAMと管理」ページで「Secret Manager のシークレット アクセサー」ロールを付与
    スクリーンショット 2024-01-06 20.09.13.png
  2. 3分程待機(←3分も待たんで良いかもだが、少し時間差で反映されるためせっかちな人は注意)

解消方法はシンプルですが、このエラーで1時間程溶かしたので同士はご注意ください。色々と調べていると下記のような情報にたどり着き、謎がどんどん深まっていきます。

上記の兄さん達と今回は微妙に条件が違う?ためか解消できずに「secretmanager」モジュールの関数やクラスの引数などの値の与え方が悪いかもと思い色々試しました..

実装しているコード

1. ローカルのzsrhcに追加した環境変数

export GOOGLE_APPLICATION_CREDENTIALS="/Users/bokudoraemon/dev/project_configs/gcp/{gcpサービスアカウントの鍵}.json"

2. docker-compose.ymlの設定

version: "3.7"
services:
  web:
    build:
      context: ./
      dockerfile: Dockerfile.local
    env_file:
      - ./.env
    command: "uvicorn main:app --host 0.0.0.0 --port ${PORT} --reload"
    environment:
      GOOGLE_APPLICATION_CREDENTIALS: /code/gc.json
    volumes:
      - .:/code
      - ${GOOGLE_APPLICATION_CREDENTIALS}:/code/gc.json:ro
    ports:
      - "${PORT}:${PORT}"
    networks:
      - default

3. pythonでSecretManagerの利用

from google.cloud import secretmanager

def get_secret_key(project_id, secret_ver, secret_name):
    client = secretmanager.SecretManagerServiceClient()
    name = client.secret_version_path(project_id, secret_name, secret_ver)
    response = client.access_secret_version(name=name)
    return response.payload.data.decode('UTF-8')

project_id = "pj-love-shizuka"
secret_ver = "1"
API_KEY = get_secret_text(project_id, secret_ver, "API_KEY")

ついでに、

スクリーンショット 2024-01-06 20.32.57.png
上記スクショの赤枠の部分について、pythonのコードで呼び出すときはGCPのproject-idを指定して呼び出すのにGCPのSecretManagerのコンソール画面では数値になっているのでここが悪いのか?という疑念が浮かびます。

結論としは数値になっていることはスルーでおkで、僕が記載しているpythonコードで参照可能となっています

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0