3

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

4

2 回答 2

3

您可以在您的 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 组关联的手动步骤。

于 2019-06-13T19:58:57.083 回答
0

通常,您可以使用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

于 2019-03-24T03:29:50.997 回答