API Gateway 资源策略示例 - Amazon API Gateway

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 使用当前区域、您的 AWS 账户 ID 以及与资源策略关联的 REST API 的 ID 来构建完整的 ARN。您可以使用 execute-api:/* 来表示当前 API 中的所有阶段、方法和路径。有关访问策略语言的更多信息,请参阅 Amazon API Gateway 的访问策略语言概述

示例:允许另一个 AWS 账户中的角色使用 API

以下示例资源策略通过签名版本 4(SigV4)协议将一个 AWS 账户中的 API 访问权限授予位于另一个 AWS 账户中的两个角色。具体而言,向由 account-id-2 标识的 AWS 账户的开发人员和管理员角色授予了 execute-api:Invoke 操作权限,允许他们对您 AWS 账户中的 pets 资源(API)执行 GET 操作。

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