Amazon API Gateway
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

针对调用 API 的访问控制

在本节中,您将了解如何编写 IAM 策略语句,以控制谁可以或不可以调用 API Gateway 中部署的 API。在这里,您还将找到策略语句参考,包括与 API 执行服务有关的 ActionResource 字段的格式。

控制谁可以使用 IAM 策略调用 API Gateway API 方法

要控制谁可以或不可以使用 IAM 许可调用已部署的 API,请创建一个包含必要许可的 IAM 策略文档。此类策略文档的模板如下所示。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Permission", "Action": [ "execute-api:Execution-operation" ], "Resource": [ "arn:aws:execute-api:region:account-id:api-id/stage/METHOD_HTTP_VERB/Resource-path" ] } ] }

此处,许可将被替换为 AllowDeny,具体取决于您是要授予或撤消相应许可。执行操作将被替换为受 API 执行服务支持的操作。METHOD_HTTP_VERB 表示受指定资源支持的 HTTP 动词。Resource-path 是已部署的 API 资源实例的 URL 路径占位符,该实例可支持上述的 METHOD_HTTP-VERB。有关更多信息,请参阅 在 API Gateway 中执行 API 的 IAM 策略语句参考

注意

要使 IAM 策略生效,您必须将该方法的 authorizationType 属性设置为 AWS_IAM,对 API 方法启用 IAM 身份验证。否则,这些 API 方法会很容易从外部进行访问。

对特定资源启用 AWS Identity and Access Management 后,由于 API Gateway 当前不支持跨账户身份验证,因此使用不同 AWS 账户的 IAM 用户无法访问该资源,除非允许调用方担任资源所有者的角色。

例如,要授予用户访问特定 API 提供的宠物列表的许可,同时拒绝用户向列表添加宠物的许可,您可以创建以下策略语句:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "execute-api:Invoke" ], "Resource": [ "arn:aws:execute-api:us-east-1:account-id:api-id/*/GET/pets" ] }, { "Effect": "Deny", "Action": [ "execute-api:Invoke" ], "Resource": [ "arn:aws:execute-api:us-east-1:account-id:api-id/*/POST/pets" ] } ] }

对于负责测试 API 的开发人员团队,您可以创建以下策略语句,允许该团队针对 test 阶段任何开发人员创建的任何 API 的任何资源调用任意方法。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "execute-api:Invoke", "execute-api:InvalidateCache" ], "Resource": [ "arn:aws:execute-api:*:*:*/test/*" ] } ] }

在 API Gateway 中执行 API 的 IAM 策略语句参考

以下信息将介绍执行 API 的访问许可的 IAM 策略语句的 Action 和 Resource 格式。

在 API Gateway 中执行 API 的许可的 Action 格式

API 执行的 Action 表达式有以下一般格式:

execute-api:action

其中 action 是一项可用的 API 执行操作:

  • *,代表以下所有操作。

  • Invoke,用于根据客户端请求调用 API。

  • InvalidateCache,用于根据客户端请求使 API 缓存失效。

在 API Gateway 中执行 API 的许可的 Resource 格式

API 执行的 Resource 表达式有以下一般格式:

arn:aws:execute-api:region:account-id:api-id/stage-name/HTTP-VERB/resource-path-specifier

其中:

  • region 为 AWS 区域 (例如,适用于所有 AWS 区域的 us-east-1*),与该方法已部署的 API 相对应。

  • account-id 是 REST API 所有者的 12 位 AWS 账户 ID。

  • api-id 是该方法中 API Gateway 为 API 分配的标识符。(* 可用于所有 API,无论 API 的标识符如何。)

  • stage-name 是与该方法相关联的阶段的名称 (* 可用于所有阶段,无论阶段名称如何。)

  • HTTP-VERB 是该方法的 HTTP 动词。它可以是以下任一动词:GET、POST、PUT、DELETE、PATCH、HEAD 和 OPTIONS。

  • resource-path-specifier 是前往预期方法的路径。(* 可用于所有路径)。

一些示例资源表达式包括:

  • arn:aws:execute-api:*:*:*,适用于任何 AWS 区域内任何 API 的任何阶段中的任何资源路径。(这等同于 *)。

  • arn:aws:execute-api:us-east-1:*:*,适用于 AWS 区域 us-east-1 中任何 API 的任何阶段中的任何资源路径。

  • arn:aws:execute-api:us-east-1:*:api-id/*,适用于任何阶段中的任何资源路径,这里指 AWS 区域 us-east-1 内带 api-id 标识符的 API 中。

  • arn:aws:execute-api:us-east-1:*:api-id/test/*,适用于 test 阶段中的资源路径,这里指 AWS 区域 us-east-1 内带 api-id 标识符的 API 中。

  • arn:aws:execute-api:us-east-1:*:api-id/test/*/mydemoresource/*,适用于采用 mydemoresource 路径的任何资源路径,以及 test 阶段中的任何 HTTP 方法,这里指 AWS 区域 us-east-1 内带 api-id 标识符的 API 中。

  • arn:aws:execute-api:us-east-1:*:api-id/test/GET/mydemoresource/*,适用于采用 mydemoresource 路径的任何资源路径下的 GET 方法,这里指 AWS 区域 us-east-1 内带 api-id 标识符的 API 中的 test 阶段内。