GCP上のリソースにアクセスする場合、公式から提供されているCLIやプログラムからアクセスするためのSDKなど、使用するクライアントに応じて複数の認証・認可の方法が用意されている。 どのような場合にどの認証・認可方法を採用すべきか迷うことが多いので、整理しておきたい。
まず、認証と認可について簡単に整理しておく。Auth0のドキュメントより
- 認証: ユーザーが本人かどうかを確認するプロセスのこと
- 認可: リソースがどの対象にアクセスすることができるか?どのアクションを実行することができるか?を確認するプロセスのこと
認証・認可の種類
操作によって認証・認可の方法が異なる
【CLI】GCPで提供されている各CLIを使用する場合
1. ユーザーアカウントによる認可
認可の方法
- gcloud init
- 認可 + configurationsも同時に作成してくれるコマンド
- 対象のユーザーアカウントにはじめて認可する場合に使用する
- gcloud auth login
- 認可のみを行うコマンド
2. サービスアカウントによる認可
- 特定のGoogleユーザーとは関係のないサービスアカウントを使用した認可方法
- Cloud SDK を本番環境へのマシンのデプロイの一環としてインストールして設定する場合や、すべてのユーザーが
root
にアクセスできる Compute Engine 仮想マシン インスタンスで使用する場合に推奨される。- CIやCDなど
- 運用効率化のためのシステムから各コマンド実行したい場合は、特定のユーザーに紐づいていない形で実行したいはずなのでこっち?
認可の方法
- gcloud auth login (--cred-fileオプションを設定)
詳しくは以下
【プログラム】GCPのAPIやSDKなどのプログラムを実行する場合
- Application Default Credentials (ADC)を使うことが推奨される
- ADCに則ることで、Google Client LibraryやGoogle API Client LibraryなどのSDKを使用したアプリケーションプログラムから認可済の認証情報を自動で検索して使用することがきる
- ADCを使用すると、同じ認証・認可方法で開発環境や本番環境でコードを実行することができるので管理もしやすい
ADCによる認可済認証情報の検索
GOOGLE_APPLICATION_CREDENTIALS環境変数
- Workload Identity 連携の認証情報構成ファイル
- Workload Identity 連携の認証情報構成ファイル
- こちらで分かりやすく解説されている
- サービス アカウント キー
- 漏洩するリスクが高いため、非推奨
- Workload Identity 連携の認証情報構成ファイル
gcloud cliで設定されたユーザー認証情報
接続済のサービスアカウント
上から順番に検索に該当したものが選択・使用される
詳しくは以下
使い分けの判断方法
リモート環境での認証・認可方法の使い分けに関しては、公式ドキュメントに判断のためのフローチャートが用意されていた。
ローカル環境でクライアント毎にどの認証・認可の方法を採用するとよさそうか、同じようにフローチャートで整理しておく。
ローカル環境編
リモート環境編