GCPのリソースと認証・認可の方法

GCP上のリソースにアクセスする場合、公式から提供されているCLIやプログラムからアクセスするためのSDKなど、使用するクライアントに応じて複数の認証・認可の方法が用意されている。 どのような場合にどの認証・認可方法を採用すべきか迷うことが多いので、整理しておきたい。

まず、認証と認可について簡単に整理しておく。Auth0のドキュメントより

  • 認証: ユーザーが本人かどうかを確認するプロセスのこと
  • 認可: リソースがどの対象にアクセスすることができるか?どのアクションを実行することができるか?を確認するプロセスのこと

認証・認可の種類

操作によって認証・認可の方法が異なる

  • CLIGCPで提供されているCLIを使用する場合
  • 【プログラム】GCPAPISDKなどのプログラムを実行する場合

CLIGCPで提供されている各CLIを使用する場合

  • gcloud CLIを使用するためにはGoogleアカウントを使用した認証が必要となる
  • 認可の方式は、2通り用意されている

  • ユーザーアカウントによる認可

  • サービスアカウントによる認可

1. ユーザーアカウントによる認可

  • Google Cloudアカウント(Googleユーザー)を使用した認可方法
  • 開発者のPCからgcloud cliを使用して作業する場合にはこの方式を使用することが推奨される

認可の方法

  • gcloud init
    • 認可 + configurationsも同時に作成してくれるコマンド
    • 対象のユーザーアカウントにはじめて認可する場合に使用する
  • gcloud auth login
    • 認可のみを行うコマンド

2. サービスアカウントによる認可

  • 特定のGoogleユーザーとは関係のないサービスアカウントを使用した認可方法
  • Cloud SDK を本番環境へのマシンのデプロイの一環としてインストールして設定する場合や、すべてのユーザーが root にアクセスできる Compute Engine 仮想マシン インスタンスで使用する場合に推奨される。
    • CIやCDなど
    • 運用効率化のためのシステムから各コマンド実行したい場合は、特定のユーザーに紐づいていない形で実行したいはずなのでこっち?

認可の方法

  • gcloud auth login (--cred-fileオプションを設定)

詳しくは以下

【プログラム】GCPAPISDKなどのプログラムを実行する場合

  • Application Default Credentials (ADC)を使うことが推奨される
  • ADCに則ることで、Google Client LibraryやGoogle API Client LibraryなどのSDKを使用したアプリケーションプログラムから認可済の認証情報を自動で検索して使用することがきる
  • ADCを使用すると、同じ認証・認可方法で開発環境や本番環境でコードを実行することができるので管理もしやすい

ADCによる認可済認証情報の検索

  1. GOOGLE_APPLICATION_CREDENTIALS環境変数

  2. gcloud cliで設定されたユーザー認証情報

    • gcloud auth application-default login
    • 提供された認証情報(通常は Google アカウントからの認証情報)を含むJSON ファイルがファイル システム上に配置される
      • LinuxMacだと$HOME/.config/gcloud/application_default_credentials.json
      • 操作対象のアカウントが持つ複数のプロジェクトの認証情報がJSONファイルに書き込まれる(1アカウントで複数のプロジェクトのリソースに認証を通すことができる)
  3. 接続済のサービスアカウント

    • VMをはじめとしたGoogle Cloudのリソースに紐付けられたサービスアカウント
    • コンピューティングリソースに設定されたサービスアカウントに権限をもたせれば、わざわざアプリケーションにサービスアカウントを設定する必要はない

上から順番に検索に該当したものが選択・使用される

詳しくは以下

使い分けの判断方法

リモート環境での認証・認可方法の使い分けに関しては、公式ドキュメントに判断のためのフローチャートが用意されていた。

ローカル環境でクライアント毎にどの認証・認可の方法を採用するとよさそうか、同じようにフローチャートで整理しておく。

ローカル環境編

リモート環境編