ガッキーは掟上今日子のガッキーが一番好きな人です。
タイトルと見出し全く関係ありません。
さて、
ちょっとAWS LambdaからGoogle Cloud側のリソースにアクセスする必要があって、
最初、Google Cloudのサービスアカウントのキー情報を組み込んで作ったんですが、
リーダーから、Workload Identity 連携という機能があるという話を聞き、
こっちの方がキーファイル持たないので、セキュアだなあーってことで、対応していました。
やり方とかはこの辺参照のこと。
まあ、AWSのAssumeRole的なものですね(超絶大雑把)
- Access GCP from AWS using Workload Identity Federation
- AWS の IAM ロールと GCP のサービスアカウントを紐付けて鍵なしでアクセスする方法
Lambda関数を直して、
Google Cloud側で
Workload Identity プールとプロバイダーを作成し、
それにサービスアカウントを紐づけて、認証情報ファイルを落として、いざ実行!
エラー・・・。
「The size of mapped attribute google.subject exceeds the 127 bytes limit. Either modify your attribute mapping or the incoming assertion to produce a mapped attribute that is less than 127 bytes.」
なんやなん?
しかも、google-auth-libraryで落ちている・・・。
どういうことや・・・。
別環境で試してみて、上手く行ってますます謎が深まり、色々と見比べてみた結果、
IAMロール名が長いとエラーになる。
ということが判明。
わかった時はまじかーって思いました。
ただ、冷静になって考えてみると、
これって、AWSのAssumeRoleするときも同じなんかなーと、
ちょっと調べたところ、Switch Roleするときにはロール名の制限あるんで、これと同じようなものかなと思った次第。
ロールをプログラムで作成する場合、RoleName に加えて、最大 512 文字の Path を追加できます。ロール名の長さは最大 64 文字です。ただし、AWS マネジメントコンソール の [Switch Role] 機能でロールを使用するには、Path と RoleName の合計が 64 文字を超えることはできません。
忘れてまたハマる嫌なので、備忘兼ねて書きました。
まだまだ勉強になることが多いです。
さてさて、Google Cloud側のリソース、Lambdaでアクセスするぞい(この話はスタートでしかない・・・orz)