针对调用 API 的访问控制 - Amazon API Gateway

针对调用 API 的访问控制

在此部分中,您将了解使用 IAM 权限控制对 API 的访问的权限模型。我们介绍模板 IAM 策略语句和策略语句参考。策略语句参考包括与 API 执行服务相关的 ActionResource 字段的格式。使用这些参考可创建您的 IAM 策略语句。在创建 IAM 策略语句时,您可能需要考虑 API Gateway 资源策略会给授权工作流程带来哪些影响。有关更多信息,请参阅 API Gateway 资源策略如何影响授权工作流程

对于私有 API,您应使用 API Gateway 资源策略和 VPC 终端节点策略的组合。有关更多信息,请参阅以下主题:

控制谁可以使用 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 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 区域(例如,适用于所有 us-east-1 区域的 * 或 AWS),与该方法已部署的 API 相对应。

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

  • api-id 是 API Gateway 为该方法分配给 API 的标识符。

  • stage-name 是与方法关联的阶段的名称。

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

  • resource-path-specifier 是前往预期方法的路径。

注意

如果您指定了通配符 (*),则 Resource 表达式会将通配符应用于表达式的其余部分。

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

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

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

要了解更多信息,请参阅 API Gateway Amazon 资源名称 (ARN) 参考