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

针对调用 API 的访问控制

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

注意

您还应该研究Amazon API Gateway 资源策略如何影响授权工作流中的 IAM 部分。

控制谁可以使用 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" ] } ] }

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

注意

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

例如,要授予某个用户查看特定 API 提供的宠物列表的权限,同时拒绝该用户向列表添加宠物的权限,您可以在 IAM 策略中包含以下语句:

{ "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" ] } ] }

要授予某个用户查看配置为 GET /pets/{petId} 的 API 提供的某个特定宠物的权限,您可以在 IAM 策略中包含以下语句:

{ "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/a1b2" ] } ] }

对于负责测试 API 的开发人员团队,您可以在 IAM 策略中包含以下语句,以允许该团队的任何开发人员在 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。

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

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

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

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

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

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

  • 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/*,适用于任何阶段 test 中带 mydemoresource 路径的任何资源路径下的 GET 方法,适用于 AWS 区域 us-east-1 内带 api-id 标识符的 API。