⭐️Cloud Run: (非公開)サービス間認証の要点まとめ

https://docs.cloud.google.com/run/docs/authenticating/service-to-service?hl=ja

  1. 認証の仕組み(IAMによる制御) 非公開なCloud Runサービス同士の通信では、Google CloudのIAM(ID管理)を利用する。「呼び出し側」が「受信側」にアクセスして良いかを、Googleが署名したデジタル身分証明書を使って確認する。

  2. 重要な3つの要素

  • プリンシパル(誰が): 権限を与えられる対象。呼び出し側サービスの「サービスアカウント」を指す。
  • ロール(何を): 許可する操作。受信側の設定で、呼び出し側に「Cloud Run 起動元 (Invoker)」権限を付与する。
  • IDトークン (OIDC/JWT): Googleが発行するデジタル署名付きの身分証明書。リクエストのヘッダー(Authorization)に含めて送信する。(これが無いとアクセスできないので注意!)
  1. 処理の流れ

① [取得]: 呼び出し側が、自身の内部にある「メタデータサーバー」からIDトークンを入手。

② [送信]: HTTPヘッダーに Authorization: Bearer <トークン> を付けてリクエストを送る。

③ [検証]: 受信側のインフラがトークンの署名を確認し、許可された相手なら接続を許可する。

  1. 実装のベストプラクティス
  • 公式ライブラリの活用: Node.jsやGoの公式SDK(google-auth-library等)を使えば、トークンの取得・更新・期限管理をコード数行で自動化できる。
  • 最小権限の原則: サービスごとに専用のサービスアカウントを作成し、特定の相手にだけ「起動元」権限を与えることで、セキュリティを高める。