如何将 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 在评论中提到的,以下是必需的:
- 从
Auth
部分删除 DefaultAuthorizer: AWS_IAM
。
- 将以下内容添加到 IAM 受保护方法端点的 swagger 定义中
post:
x-amazon-apigateway-auth:
type : "AWS_IAM"
- 将以下内容添加到未受保护的方法端点的 swagger 定义中:
get:
x-amazon-apigateway-auth:
type : "NONE"
我目前正在创建一个定义 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 在评论中提到的,以下是必需的:
- 从
Auth
部分删除DefaultAuthorizer: AWS_IAM
。 - 将以下内容添加到 IAM 受保护方法端点的 swagger 定义中
post:
x-amazon-apigateway-auth:
type : "AWS_IAM"
- 将以下内容添加到未受保护的方法端点的 swagger 定义中:
get:
x-amazon-apigateway-auth:
type : "NONE"