https://docs.cloud.google.com/run/docs/authenticating/service-to-service?hl=ja
認証の仕組み(IAMによる制御) 非公開なCloud Runサービス同士の通信では、Google CloudのIAM(ID管理)を利用する。「呼び出し側」が「受信側」にアクセスして良いかを、Googleが署名したデジタル身分証明書を使って確認する。
重要な3つの要素
- プリンシパル(誰が): 権限を与えられる対象。呼び出し側サービスの「サービスアカウント」を指す。
- ロール(何を): 許可する操作。受信側の設定で、呼び出し側に「Cloud Run 起動元 (Invoker)」権限を付与する。
- IDトークン (OIDC/JWT): Googleが発行するデジタル署名付きの身分証明書。リクエストのヘッダー(Authorization)に含めて送信する。(これが無いとアクセスできないので注意!)
- 処理の流れ
① [取得]: 呼び出し側が、自身の内部にある「メタデータサーバー」からIDトークンを入手。
② [送信]: HTTPヘッダーに Authorization: Bearer <トークン> を付けてリクエストを送る。
③ [検証]: 受信側のインフラがトークンの署名を確認し、許可された相手なら接続を許可する。
- 実装のベストプラクティス
- 公式ライブラリの活用: Node.jsやGoの公式SDK(google-auth-library等)を使えば、トークンの取得・更新・期限管理をコード数行で自動化できる。
- 最小権限の原則: サービスごとに専用のサービスアカウントを作成し、特定の相手にだけ「起動元」権限を与えることで、セキュリティを高める。