LoginSignup
8
6

More than 3 years have passed since last update.

API Gateway + Lambda Authorizer + Lambdaプロキシ統合 + AWS SAM CLIを組み合わせたときのCORS設定

Last updated at Posted at 2021-03-25

表題の通りです。苦しめられたので解決方法を共有します。

ポイントとしては、

ハマりどころとしては、

  • Corsプロパティを定義する際、AWS::Serverless::ApiのAuthプロパティで、AddDefaultAuthorizerToCorsPreflightをfalse(デフォルトでtrue)にしない限り、プリフライトのOPTIONSメソッドにまでLambda Authorizerが介入してしまう
    • プリフライトの送信内容はこちらで制御できないため、ほぼ確実にAuthorizerで弾かれてしまう
    • 弾かれたときにAccess-Control系ヘッダーを返しても、ステータスコード200以外は認められない
    • Lambda AuthorizerでOPTIONSメソッドのときだけ無条件で200を返してもいいが、AddDefaultAuthorizerToCorsPreflightをfalseにした方が色々スマート

一応サンプルのtemplate.ymlを残しておきます。

template.yml
  ResourceApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: v1
      Cors:
        AllowMethods: "'GET'"
        AllowHeaders: "'authorization'"
        AllowOrigin: "'*'"
        MaxAge: "'180'"
      GatewayResponses:
        DEFAULT_4XX:
          ResponseParameters:
            Headers:
              Access-Control-Allow-Methods: "'GET'"
              Access-Control-Allow-Headers: "'authorization'"
              Access-Control-Allow-Origin: "'*'"
              Access-Control-Max-Age: "'180'"
        DEFAULT_5XX:
          ResponseParameters:
            Headers:
              Access-Control-Allow-Methods: "'GET'"
              Access-Control-Allow-Headers: "'authorization'"
              Access-Control-Allow-Origin: "'*'"
              Access-Control-Max-Age: "'180'"
      Auth:
        AddDefaultAuthorizerToCorsPreflight: false
        DefaultAuthorizer: LambdaRequestAuthorizer
        Authorizers:
          LambdaRequestAuthorizer:
            FunctionPayloadType: REQUEST
            FunctionArn: !GetAtt checkTokenFunction.Arn
            Identity:
              Headers:
                - Authorization
              ReauthorizeEvery: 0
8
6
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
8
6