【问题标题】:How to apply IAM Auth to only one method of an API gateway path - SAM template如何仅将 IAM Auth 应用于 API 网关路径的一种方法 - SAM 模板
【发布时间】:2022-01-19 23:40:21
【问题描述】:

我目前正在创建一个定义 AWS API 网关的 SAM 模板。我有一个路径/example,它有 3 种方法;获取、发布和选项。我希望 POST 方法具有 IAM 授权,但其他方法在没有授权的情况下公开。我的 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 身份验证附加到所有方法。如何将其指定为仅附加到其中一种方法?

谢谢!

【问题讨论】:

标签: amazon-cloudformation aws-api-gateway amazon-iam aws-sam


【解决方案1】:

正如@kaustubh-khavnekar 在 cmets 中提到的,需要以下内容:

  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"

【讨论】:

    猜你喜欢
    • 2021-01-01
    • 2019-05-21
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 2020-11-14
    相关资源
    最近更新 更多