0
0

More than 1 year has passed since last update.

【備忘録】Lambda AuthorizerにHeader情報が渡らない

Last updated at Posted at 2023-06-13

TLDR;

Lambda イベントペイロードタイプをTokenではなくて、Requestに変更する。

事象

SAMテンプレートを使用して、API Gatewayをリソースを作成した時にLambda Authorizerを設定した。いざ叩いてみると、LambdaにHeader情報が渡っていなかった。
Lambdaにログ出力を出して、Cloudwatchで確認すると何も出力されなかった。

Cloudwatch
2023/06/13 08:39:50 Headers: map[]
SAMテンプレート.yaml
  MyApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: dev
      Auth:
        Authorizers:
          CognitoAuthorizer:
            UserPoolArn: !GetAtt MyUserPool.Arn
          MyLambdaAuthorizer:
            FunctionArn: !GetAtt LambdaAuthorizerFunction.Arn
            Identity:
              Headers: ["Id-Token"]
              ReauthorizeEvery: 300
      OpenApiVersion: 3.0.3
      EndpointConfiguration:
        Type: REGIONAL

解決方法

Lambda イベントペイロードをトークンではなくて、リクエストに設定することでHeaderを取得できました。

SAMテンプレート.yaml
  MyApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: dev
      Auth:
        Authorizers:
          CognitoAuthorizer:
            UserPoolArn: !GetAtt MyUserPool.Arn
          MyLambdaAuthorizer:
            FunctionArn: !GetAtt LambdaAuthorizerFunction.Arn
            Identity:
              Headers: ["Id-Token"]
              ReauthorizeEvery: 300
+           FunctionPayloadType: REQUEST
      OpenApiVersion: 3.0.3
      EndpointConfiguration:
        Type: REGIONAL

コンソール画面にて、API Gatewayのオーソライザーから設定を確認できます。

image.png

APIを叩くと無事取れました。

2023/06/13 10:39:50 Headers: map[Id-Token:******]

後書き

LambdaイベントペイロードをTokenにしているとHeaderにAuthrizationがないと、Lambdaが起動すらしません。(起動しないのでCloudwatchにログが出力されない)
頑張ってSAMの設定ができたと思って、一生懸命API叩いてもUnauthrizedしか出てこず、Cloudwatchのログもないのでどこで詰まっているのかわからず、SAMの書き方が悪くてエンドポイントにLambda Authorizerが正しく設定できていないものだと永遠に思ってました。

公式ドキュメント、大事、、、

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0