Google Cloudにて、Application Default Credentials (ADC) にハマってしまったので、ADCの整理と忘備録として、まとめておきます。
はじめに
Application Default Credentials (ADC) の整理と忘備録ですが、対象読者は、以下を想定しています。
- Google Cloudで開発を行っており、認証周りで困った経験がある開発者の方
3行まとめ
- Application Default Credentials (ADC) は環境変数 → 認証ファイル → サービスアカウントの順で認証情報を検索する
-
GOOGLE_APPLICATION_CREDENTIALS
が設定されていると、それが最優先で使用される - 環境変数の確認・削除は、
echo
とunset
コマンドを使い、確認しながら行うこと
Application Default Credentials (ADC) とは?
Application Default Credentials (ADC) は、Google Cloud サービスにアクセスする際の認証を自動化する仕組みです。開発しているアプリケーションのREST APIなどを通して、Cloud クライアント ライブラリ、Google API クライアント ライブラリを利用する際に、環境に応じて最適な認証情報を自動で選択・使用してくれます。
ローカル開発環境、コンテナ環境などコードが実行されている環境ごとに設定が必要となります。
2種類の認証情報
今回はローカル開発環境において、ハマってしまいました。
Application Default Credentials (ADC) は、ユーザー認証情報とサービス アカウント認証情報の2種類を活用できます。
Googleアカウントを利用する場合は、Google Cloud CLIを通して、gcloud auth application-default login
を実行することで、Googleアカウントに紐づけられるアカウントの認証情報を利用できます。
一方で、サービスアカウントを利用する場合は、サービスアカウントの権限借用を使用するか、サービスアカウントキーを使用することになります。
これまでサービスアカウントを借用して、利用していましたが、セキュリティ上の懸念からGoogleアカウントの利用へ切り替えることになりました。
Googleアカウントにて、アカウント認証情報を取得して、実行したのですが、認証情報を取得できていない状況でした。
ADCの認証情報の検索手順
検索の順序は、以下になります。
-
GOOGLE_APPLICATION_CREDENTIALS
環境変数 - gcloud auth application-default login コマンドを使用して作成された認証情報ファイル
- 接続済みのサービスアカウント
今回の問題は、既に設定されていたGOOGLE_APPLICATION_CREDENTIALS
環境変数を認証情報と利用しており、gcloud auth application-default login
にて生成されたJSONファイルの情報を全く利用していない状況でした。
GOOGLE_APPLICATION_CREDENTIALS
を書き換える
以下の手順で修正しました。
-
echo $GOOGLE_APPLICATION_CREDENTIALS
にてキーを確認する -
unset GOOGLE_APPLICATION_CREDENTIALS
にて削除 -
export GOOGLE_APPLICATION_CREDENTIALS = "XXXX"
として設定する
書き換えることで、gcloud auth application-default login
にて生成されたJSONファイルの認証情報を利用してくれるようになりました。
ただ、ローカル開発環境から、サービスアカウントを利用して、Google API クライアント ライブラリを使用しているケースもあるので、この辺りは、整理する必要があります。
サービスアカウントからApplication Default Credentials (ADC) への乗り換え時には、注意が必要
今回は、ドキュメントを確認することでシンプルに解決できました。
認証周りの知識に疎いので、この辺りは、今後もっと整理していかないといけないです。
同時に、Application Default Credentials (ADC) を初めて利用したのですが、かなり便利だと感じました。
まだ、整備しきれていない部分もあるので、サービスアカウントからの切り替えなども含めて、機会があれば、今後も追記していきたいと思います。