LIFULLのYstgです。3ペダルMT車至上主義です。愛車は15年式デミオ(ディーゼル)です。
はじめに
この記事はLIFULL Advent Calendar 2022の5日目の記事です。
GoogleCloud の Workload Identity 連携を使ってEC2インスタンスからBigQueryに接続してみました。
EC2インスタンスからサービスアカウントキーによる認証で GoogleCloud に接続している人は参考になるかもしれません。
Workload Identity 連携とは
Google Cloudのドキュメントには下記のように書かれています。
外部ワークロードのためのID連携を使用することで、サービスアカウントキーを使用せずに、Google Cloudリソースへのアクセス権を、オンプレミスまたはマルチクラウドのワークロードに付与できます。
(Workload Identity 連携より引用)
文章で読んでもなんだかわかりにくいと思うので、図で。
従来のサービスアカウントキーによる認証
図のようにGoogleのIAMで設定したサービスアカウントの認証キーを用いて認証をする必要があり、また、サービスアカウントには強力な認可が与えられているため、漏出した時のリスクが大きいため、認証キー(図中の赤いファイル)の管理は厳重に行う必要がありました。
Workload Identity 連携 による認証
下記のような手順に変わります。(実際は3の部分はgcloud auth login
コマンド実行で行われ、4の認証はbq
コマンド実行時に毎回行われます)
- AWSのIAM Role をWorkload Identity Pool上でサービスアカウントに紐づけておく。
- 紐付けの設定ファイル(clientLibraryConfig.json)が得られるのでこちらをBigQueryにアクセスさせたいEC2上においておく
- 設定ファイルを用いて認証を行うと有効期間の短いアクセストークンが得られる
- 有効期限の短いアクセストークンを用いて認証するとサービスアカウントと同等の認可が得られる
紐付けの設定ファイルには機密情報は記述されていないため、github上での管理やAMIへの保存も可能です。万が一漏出してもAWS側の認証が通らなければサービスアカウントとしてBigQueryや他のGoogleCloudサービスに不正にアクセスされることはありません。
具体的な手順などは 参考とさせてもらった記事 などに詳しいです。
サービスアカウントの認証情報を利用せずにサービスアカウントの権限をAWSのRoleに委譲できるので大変便利です。
なお、gcloud sdk のバージョンが古いと利用できないので注意してください。
参考資料
Workload Identity連携でAWS(EC2/ECS/EKS)からサービスアカウントキーなしでBigQueryにアクセスする