API Gateway 资源策略示例 - Amazon API Gateway
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

API Gateway 资源策略示例

此页面介绍 API Gateway 资源策略的几个典型使用案例。

以下示例策略使用简化语法来指定 API 资源。此简化语法是一种缩写方式,通过这种方式,您可以引用 API 资源,而不指定完整的 Amazon Resource Name (ARN)。当您保存策略时,API Gateway 会将缩写语法转换为完整 ARN。例如,您可以在资源策略中指定资源 execute-api:/stage-name/GET/pets。当您保存资源策略时, API Gateway 会将资源转换为 arn:aws:execute-api:us-east-2:123456789012:aabbccddee/stage-name/GET/pets。API Gateway 使用当前区域、您的 Amazon 账户 ID 以及与资源策略关联的 REST API 的 ID 来生成完整的 ARN。您可以使用 execute-api:/* 来表示当前 API 中的所有阶段、方法和路径。有关访问策略语言的更多信息,请参阅 Amazon API Gateway 的访问策略语言概述

示例:允许其他 Amazon 账户中的角色使用 API

以下示例资源策略通过签名版本 4 (Sigv4) 协议向不同 Amazon 账户中的两个角色授予一个账户中的 API 访问权限。 Amazon 具体而言,由标识的 Amazon 账户的开发者和管理员角色account-id-2被授予对您 Amazon 账户中的pets资源 (API) 执行操作的GET操作。execute-api:Invoke

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::account-id-2:role/developer", "arn:aws:iam::account-id-2:role/Admin" ] }, "Action": "execute-api:Invoke", "Resource": [ "execute-api:/stage/GET/pets" ] } ] }

示例:基于源 IP 地址或范围拒绝 API 流量

以下资源策略示例拒绝(阻止)从两个指定源 IP 地址块向 API 传入流量。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": [ "execute-api:/*" ] }, { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": [ "execute-api:/*" ], "Condition" : { "IpAddress": { "aws:SourceIp": ["192.0.2.0/24", "198.51.100.0/24" ] } } } ] }

示例:使用私有 API 时,基于源 IP 地址或范围拒绝 API 流量

以下资源策略示例拒绝(阻止)两个指定源 IP 地址块向私有 API 传入流量。使用私有 API 时,execute-api VPC 终端节点重新写入原始源 IP 地址。aws:VpcSourceIp 条件根据原始请求方 IP 地址筛选请求。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": [ "execute-api:/*" ] }, { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": [ "execute-api:/*" ], "Condition" : { "IpAddress": { "aws:VpcSourceIp": ["192.0.2.0/24", "198.51.100.0/24"] } } } ] }

示例:允许基于源 VPC 或 VPC 终端节点的私有 API 流量

以下示例资源策略允许仅从指定的 Virtual Private Cloud (VPC) 或 VPC 终端节点传入到私有 API 的流量。

此示例资源策略指定源 VPC:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": [ "execute-api:/*" ] }, { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": [ "execute-api:/*" ], "Condition" : { "StringNotEquals": { "aws:SourceVpc": "vpc-1a2b3c4d" } } } ] }

此示例资源策略指定源 VPC 终端节点:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": [ "execute-api:/*" ] }, { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": [ "execute-api:/*" ], "Condition" : { "StringNotEquals": { "aws:SourceVpce": "vpce-1a2b3c4d" } } } ] }