AWSとGCPのサービスアカウントを紐づけた処理で”The size of mapped attribute google.subject exceeds the 127 bytes limit.”エラー

AWS Lambdaの処理でGoogle Workspace内のスプレッドシートにアクセスする際、タイトルのようにエラーがでました。エラーメッセージの全文は以下のとおりです。

“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.”

今回はその解決方法について記録します。

なお、前提としてWorkload Identityについての設定内容や手順はこちらです。設定内容に差異がある場合は結果も異なると思うので、比較参考にしてください。

目次

エラー原因

まずこのエラーの原因ですが、Workload Identity連携している環境下で、Lambda実行のIAMロール名が長すぎることでこのエラーが発生します。

GCP側の観点で言えば、SSOにおいてgoogle.subjectが長すぎるためinvalid_requestを返している状態です。

ここで渡される値がIAMロール名です。SAM CLIを使って設定する場合、明示的に指定していないとデフォルトで関数名やIDなどがついた長いロール名になってしまうため、このエラーが起きやすくなっています。

解決方法

一番簡単な解決方法は、IAMロールを短い名前に設定することです。

template.yamlに以下のような形でロール名を設定できます。

Resources:
  LambdaFunctionRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: {任意の短いロール名}
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
      ...

  LambdaFunction:
    ...
    Properties:
      ...
      Role: !GetAtt LambdaFunctionRole.Arn
    ...

あとは元々関数の方で指定していたポリシーなどをこっちに移すなど上手いこと調整すれば完了です。

まとめ

エラーメッセージを読んで「google.subjectが長いと言われても何を変更すればいいんだ」となってしまったので、備忘録を兼ねて解説しました。

少しでも調査対応の手間を減らせられれば幸いです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

Author

都内Edtech企業のコーポレートエンジニア。
業務改善・自動化についての開発をしています。
エンジニア歴13年、コーポレートエンジニア歴6年ぐらい。

目次