

# API Gateway 资源策略示例
<a name="apigateway-resource-policies-examples"></a>

此页面介绍 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 的访问策略语言概述](apigateway-control-access-policy-language-overview.md)。

**Topics**
+ [示例：允许另一个 AWS 账户中的角色使用 API](#apigateway-resource-policies-cross-account-example)
+ [示例：基于源 IP 地址或范围拒绝 API 流量](#apigateway-resource-policies-source-ip-address-example)
+ [示例：使用私有 API 时，基于源 IP 地址或范围拒绝 API 流量](#apigateway-resource-policies-source-ip-address-vpc-example)
+ [示例：允许基于源 VPC 或 VPC 端点的私有 API 流量](#apigateway-resource-policies-source-vpc-example)

## 示例：允许另一个 AWS 账户中的角色使用 API
<a name="apigateway-resource-policies-cross-account-example"></a>

以下示例资源策略通过[签名版本 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/create-signed-request.html)（SigV4）或[签名版本 4a](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html#how-sigv4a-works)（SigV4a）协议，将一个 AWS 账户中的 API 访问权限授予位于另一个 AWS 账户中的两个角色。具体而言，向由 `account-id-2` 标识的 AWS 账户的开发人员和管理员角色授予了 `execute-api:Invoke` 操作权限，允许他们对您 AWS 账户中的 `pets` 资源（API）执行 `GET` 操作。

------
#### [ JSON ]

****  

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

------

## 示例：基于源 IP 地址或范围拒绝 API 流量
<a name="apigateway-resource-policies-source-ip-address-example"></a>

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

------
#### [ JSON ]

****  

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

------

如果您使用任何 IAM 用户策略或 API Gateway 资源策略来控制对 API Gateway 或任何 API Gateway API 的访问权限，请确认您的策略已更新为包含 IPv6 地址范围。当客户端开始使用双堆栈端点时，未更新为处理 IPv6 地址的策略可能会影响客户端对 API Gateway 的访问权限。有关更多信息，请参阅 [在 IAM 策略中使用 IPv6 地址](api-ref.md#api-reference-service-endpoints-dualstack-iam)。

## 示例：使用私有 API 时，基于源 IP 地址或范围拒绝 API 流量
<a name="apigateway-resource-policies-source-ip-address-vpc-example"></a>

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

------
#### [ JSON ]

****  

```
{
    "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 流量
<a name="apigateway-resource-policies-source-vpc-example"></a>

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

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

------
#### [ JSON ]

****  

```
{
    "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 端点：

------
#### [ JSON ]

****  

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

------