我正在尝试创建一个使用 SAM 调用 Lambda 函数的 API 网关。我想限制对 API 的访问,使得只有某些 IAM 账户/用户可以访问 API。我该怎么做?我找不到将资源访问策略附加到 SAM 中的 API 端点的正确方法。
2 回答
您可以在您的 SAM 模板中指定一个AWS::Serverless::Api资源,该资源配置有一个Auth对象,该对象又应该AWS_IAM
具有DefaultAuthorizer
. 换句话说,类似:
Resources:
ApiWithIamAuth:
Type: AWS::Serverless::Api
Properties:
StageName: Prod
Auth:
DefaultAuthorizer: AWS_IAM
接下来,您需要为您的用户创建一个策略,以便他们可以调用 API。Control Access for Invoking an API提供参考,API Execution Permissions 的 IAM Policy Examples包含两个示例
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"execute-api:Invoke"
],
"Resource": [
"arn:aws:execute-api:us-east-1:*:a123456789/test/POST/mydemoresource/*"
]
}
]
}
最后为 IAM 用户创建和附加策略列出了将策略与 IAM 用户、IAM 角色或 IAM 组关联的手动步骤。
通常,您可以使用IAM 角色限制对 API 的访问。
但是,SAM 仅支持有限数量的资源类型,因此您必须改用 CloudFormation 的IAM 策略类型。
由于 SAM 只是 CloudFormation 的更高级别抽象,因此在您的 SAM 模板中使用原生 CloudFormation 资源类型没有问题:https ://docs.aws.amazon.com/serverless-application-model/latest/developerguide/appendix -appendix-sam-templates-and-cf-templates.html