【Google Cloud】ローカル環境とAWSからGoogle Cloudを操作する際の認証情報について
目次
はじめに
はじめまして!
クラウドビルダーズのKawabataと申します
普段はAWSを使っているのですが、Google Cloudのサービスを利用する機会がありまして、
認証情報周りで、AWSと異なる部分があり戸惑ってしまったので
今回はその違いについてブログに残しておきたいと思います
Google Cloud認証情報の基本
Google Cloudの認証情報は、大きく分けて2種類あります:
- gcloud CLIの設定(AWSでいうAWS CLIの設定に相当)
- アプリケーションデフォルトクレデンシャル(AWSでいうIAMロールに近い)
gcloud CLIの設定
こちらはAWS CLIのaws configure
に相当するgcloud init
で設定する認証情報です。
主にコマンドライン操作時に使用される設定で、以下のコマンドで設定します:
# 初期設定
gcloud init
# 現在の設定確認
gcloud config list
アプリケーションデフォルトクレデンシャル(ADC)
こちらが実際にアプリケーションから利用する認証情報です
アプリケーションデフォルトクレデンシャルがGoogleアカウントに紐づく権限によって作成されるため、IAMロールに近いかなと思っています
アプリケーションがGoogle Cloudのサービスにアクセスする際に使用されます
ローカル環境での認証設定
ローカル環境でGoogle Cloudのサービスを利用する場合は、以下のコマンドで認証情報を設定します:
gcloud auth application-default login
このコマンドを実行すると:
- ブラウザが開き、Googleアカウントでログインを求められます
- 認証が完了すると
~/.config/gcloud/application_default_credentials.json
が作成されます - このJSONファイルがアプリケーションの認証情報として使用されます
application_default_credentials.jsonの仕組みと権限
gcloud auth application-default login
を実行すると、以下の処理が行われます:
- 認証情報の生成:
- OAuth 2.0クライアント認証情報が生成されます
- ログインしたGoogleアカウントの権限が反映されます
2. 権限の継承:
- 作成されるJSONファイルには、実行時に使用したGoogleアカウントの権限が付与されます
- つまり、そのGoogleアカウントがGoogle Cloud上で持っているIAMロールや権限がそのまま適用されます
3. 有効期限:
- デフォルトでは認証情報に有効期限が設定されます
- 定期的な再認証が必要になる場合があります
AWSからGoogle Cloudを利用する場合
ECSやLambdaなどのAWSサービスからGoogle Cloudを利用する場合は、サービスアカウントを使用します
これはAWSでいうIAMユーザーのアクセスキー/シークレットキーに近い概念です
- サービスアカウントの作成:
- Google CloudコンソールのIAMと管理 > サービスアカウントから作成
- 必要な権限(ロール)を付与
2. 認証情報のダウンロード:
- サービスアカウントの詳細画面から鍵(JSONファイル)をダウンロード
- このJSONファイルを安全に管理(AWSのSecrets ManagerやParameter Storeなど)
3. AWSサービスでの利用:
- ECS: コンテナの環境変数として設定
- Lambda: 環境変数やParameter Storeから読み込み
以前投稿したLambdaからBigQueryを操作するブログで認証情報の設定を行っているので参考にしてみてください!
AWSとGoogle Cloudの認証情報の対応関係
AWS | Google Cloud | 説明 |
---|---|---|
AWS CLI設定 | gcloud CLI設定 | CLIツール用の設定 |
IAMロール | アプリケーションデフォルトクレデンシャル | アプリケーションの実行権限 |
IAMユーザーのアクセスキー | サービスアカウントキー | 外部からのアクセス用の認証情報 |
番外編:EC2での認証情報設定
IP制限などで直接ログインできない場合の対処法
先日、GoogleアカウントにIP制限が設けられていて、EC2からGoogleアカウントにログインできない状況がありました
gcloud auth application-default login
は、IP制限などがあるとEC2インスタンスからGoogle認証を実行すると制限に引っかかって実行できません
コマンド実行時に提供されるURLにIP制限突破可能なブラウザからアクセスしても、ローカルホストへアクセスし設定するフェーズがあるので失敗してしまいます
なので、ローカル環境でapplication_default_credentials.json
を作成して、EC2上に配置する方法を利用します
以下の手順で対応できます:
- ローカル環境での準備:
# ローカルマシンで実行
gcloud auth application-default login
# ~/.config/gcloud/application_default_credentials.json が作成される
- EC2環境の準備:
# EC2上で実行
# gcloudコマンドがない場合はインストール
sudo apt-get install google-cloud-sdk # Ubuntuの場合
# gcloud initの実行
gcloud init --console-only
# 表示されたURLにGoogle認証可能な環境のブラウザからアクセス
# Googleアカウントでログイン後、認証コードをEC2に入力
- 認証情報の転送:
- EC2上で~/.config/gcloud/application_default_credentials.jsonを作成しローカルで作成したapplication_default_credentials.jsonの内容を貼り付け
4. 権限の設定:
# EC2上で実行
chmod 600 ~/.config/gcloud/application_default_credentials.json
注意点:
- 認証情報ファイルには機密情報が含まれるため、適切なアクセス権限設定が重要です
- 可能な限り、サービスアカウントの使用を推奨します
まとめ
- ローカル開発時は
gcloud auth application-default login
で簡単に認証設定が可能 - AWS環境からの利用時はサービスアカウントのJSONキーを使用
- AWSの認証情報と似て非なる部分があるので、概念の違いを理解することが重要
おわりに
Google Cloudの認証情報は最初は少し複雑に感じましたが、AWSの概念と対比させることで理解が深まりました
この記事が、AWSをメインで使っている方がGoogle Cloudを利用する際の参考になれば幸いです!