指定哪个帐户/用户可以使用SAM和API网关调用API

时间:2019-03-14 00:09:44

标签: amazon-web-services aws-lambda aws-api-gateway aws-sam

我正在尝试创建一个API网关,该网关使用SAM调用Lambda函数。我想以仅某些IAM帐户/用户可以访问API的方式限制对API的访问。我应该怎么做?我找不到将资源访问策略附加到SAM中的API端点的正确方法。

2 个答案:

答案 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组相关联的手动步骤。