如何将 IAM Auth 仅应用于 API 网关路径的一种方法 - SAM 模板

How to apply IAM Auth to only one method of an API gateway path - SAM template

我目前正在创建一个定义 AWS API 网关的 SAM 模板。我有一条路径 /example,它有 3 种方法;获取、POST 和选项。我希望 POST 方法具有 IAM 授权,但其他方法 public 没有授权。我的 SAM 模板目前看起来像这样:

Resources:
  ApiGatewayApi:
    Type: AWS::Serverless::Api
    Properties:
      Name: <API NAME>
      StageName: <Stage Name>
      Auth:
        ApiKeyRequired: false
        AddDefaultAuthorizerToCorsPreflight: false
        DefaultAuthorizer: AWS_IAM
        ResourcePolicy:
          CustomStatements: [
            {
              "Effect": "Allow",
              "Principal": {
                "AWS": [
                  "arn:aws:iam::...",
                ]
              },
              "Action": "execute-api:Invoke",
              "Resource": "execute-api:/<Stage Name>/POST/example"
            }]
      Tags:
        <Key>: <Value>
      DefinitionBody:
        <Swagger definition>

然而,这是将 IAM 身份验证附加到所有方法。如何指定它只附加到其中一种方法?

谢谢!

正如@kaustubh-khavnekar 在评论中提到的,以下是必需的:

  1. Auth 部分删除 DefaultAuthorizer: AWS_IAM
  2. 将以下内容添加到 IAM 受保护方法端点的 swagger 定义中
post:
  x-amazon-apigateway-auth:
    type : "AWS_IAM"
  1. 将以下内容添加到未受保护的方法端点的 swagger 定义中:
get:
  x-amazon-apigateway-auth:
    type : "NONE"