【问题标题】:Specify which account/user can invoke the API using SAM and API Gateway指定哪个账户/用户可以使用 SAM 和 API Gateway 调用 API
【发布时间】:2019-06-14 03:58:57
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

您可以在配置有Auth 对象的SAM 模板中指定AWS::Serverless::Api 资源,该对象又应具有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 组相关联的手动步骤。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-22
      • 1970-01-01
      • 2020-04-30
      • 1970-01-01
      • 2021-06-10
      • 2016-10-02
      • 2014-07-12
      • 1970-01-01
      相关资源
      最近更新 更多