【Google Cloud】ローカル環境とAWSからGoogle Cloudを操作する際の認証情報について

【Google Cloud】ローカル環境とAWSからGoogle Cloudを操作する際の認証情報について
この記事をシェアする

はじめに

はじめまして!
クラウドビルダーズのKawabataと申します

普段はAWSを使っているのですが、Google Cloudのサービスを利用する機会がありまして、
認証情報周りで、AWSと異なる部分があり戸惑ってしまったので
今回はその違いについてブログに残しておきたいと思います

Google Cloud認証情報の基本

Google Cloudの認証情報は、大きく分けて2種類あります:

  1. gcloud CLIの設定(AWSでいうAWS CLIの設定に相当)
  2. アプリケーションデフォルトクレデンシャル(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

このコマンドを実行すると:

  1. ブラウザが開き、Googleアカウントでログインを求められます
  2. 認証が完了すると~/.config/gcloud/application_default_credentials.jsonが作成されます
  3. このJSONファイルがアプリケーションの認証情報として使用されます

application_default_credentials.jsonの仕組みと権限

gcloud auth application-default loginを実行すると、以下の処理が行われます:

  1. 認証情報の生成:
  • OAuth 2.0クライアント認証情報が生成されます
  • ログインしたGoogleアカウントの権限が反映されます

2. 権限の継承:

  • 作成されるJSONファイルには、実行時に使用したGoogleアカウントの権限が付与されます
  • つまり、そのGoogleアカウントがGoogle Cloud上で持っているIAMロールや権限がそのまま適用されます

3. 有効期限:

  • デフォルトでは認証情報に有効期限が設定されます
  • 定期的な再認証が必要になる場合があります

AWSからGoogle Cloudを利用する場合

ECSやLambdaなどのAWSサービスからGoogle Cloudを利用する場合は、サービスアカウントを使用します
これはAWSでいうIAMユーザーのアクセスキー/シークレットキーに近い概念です

  1. サービスアカウントの作成:
  • Google CloudコンソールのIAMと管理 > サービスアカウントから作成
  • 必要な権限(ロール)を付与

2. 認証情報のダウンロード:

  • サービスアカウントの詳細画面から鍵(JSONファイル)をダウンロード
  • このJSONファイルを安全に管理(AWSのSecrets ManagerやParameter Storeなど)

3. AWSサービスでの利用:

  • ECS: コンテナの環境変数として設定
  • Lambda: 環境変数やParameter Storeから読み込み

以前投稿したLambdaからBigQueryを操作するブログで認証情報の設定を行っているので参考にしてみてください!

AWSとGoogle Cloudの認証情報の対応関係

AWSGoogle 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上に配置する方法を利用します
以下の手順で対応できます:

  1. ローカル環境での準備:
   # ローカルマシンで実行
   gcloud auth application-default login
   # ~/.config/gcloud/application_default_credentials.json が作成される
  1. EC2環境の準備:
   # EC2上で実行
   # gcloudコマンドがない場合はインストール
   sudo apt-get install google-cloud-sdk  # Ubuntuの場合

   # gcloud initの実行
   gcloud init --console-only
   # 表示されたURLにGoogle認証可能な環境のブラウザからアクセス
   # Googleアカウントでログイン後、認証コードをEC2に入力
  1. 認証情報の転送:
  • 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を利用する際の参考になれば幸いです!

この記事をシェアする
著者:kawabata
2023年 Jr.Champions選出 2023, 2024年 All Certificate選出 最近はもっぱらCDKとAIばかりです