我正在尝试创建一个API网关,该网关使用SAM调用Lambda函数。我想以仅某些IAM帐户/用户可以访问API的方式限制对API的访问。我应该怎么做?我找不到将资源访问策略附加到SAM中的API端点的正确方法。
答案 0 :(得分:0)
通常,您可以使用IAM roles限制对API的访问。
但是,SAM仅支持有限数量的resource types,因此您必须使用CloudFormation的IAM Policy type。
由于SAM只是CloudFormation的高层抽象,因此在您的SAM模板中使用本机CloudFormation资源类型没有问题:https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/appendix-appendix-sam-templates-and-cf-templates.html
答案 1 :(得分:0)
您可以在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提供了参考,IAM Policy Examples for API Execution Permissions包含了两个示例
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"execute-api:Invoke"
],
"Resource": [
"arn:aws:execute-api:us-east-1:*:a123456789/test/POST/mydemoresource/*"
]
}
]
}
最后Create and Attach a Policy to an IAM User列出了将策略与IAM用户,IAM角色或IAM组相关联的手动步骤。