我想仅允许特定的 IP 地址访问我的 Amazon API Gateway REST API。
简短描述
要仅允许特定的 IP 地址访问您的 REST API,请创建一个拒绝所有其他 IP 地址访问的资源策略。
将该资源策略附加到您的 REST API 后,具有权限的用户可以从指定的 IP 地址调用 API。您的 API 将拒绝来自任何其他 IP 地址的调用,并显示“HTTP 403 Forbidden”错误。
要阻止特定的 IP 地址并允许所有其他 IP 地址的访问,请参阅示例: 基于源 IP 地址或范围拒绝 API 流量。
**注意:**您可以对 API Gateway HTTP API 使用资源策略。
解决方法
设置 API 方法
要测试访问权限,请使用现有的 API Gateway REST API 或创建示例 REST API。如果您使用 PetStore 示例 API,请继续执行“创建并附加资源策略”。
要为现有 REST API 创建模拟集成,请完成以下步骤:
- 打开 API Gateway 控制台。
- 选择您的 REST API。
- 在 Resources(资源)窗格的 Methods(方法)下,选择 Create method(创建方法)。
- 对于 Method type(方法类型),选择 ANY。
- 对于 Integration type(集成类型),选择 Mock(模拟)。
**注意:**模拟集成会响应到达它的任何请求。
- 选择 Create method(创建方法)。
创建并附加资源策略
完成以下步骤:
- 打开 API Gateway 控制台。
- 选择您的 REST API。
- 在导航窗格中,选择 Resource policy(资源策略)。
- 选择 Create policy(创建策略)。
- 对于 Resource policy(资源策略),输入以下资源策略:
{ "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": {
"NotIpAddress": {
"aws:SourceIp": ["sourceIpOrCIDRBlock", "sourceIpOrCIDRBlock"]
}
}
}
]
}
**注意:**将 sourceIpOrCIDRBlock 替换为您要授予访问权限的 IP 地址。使用 CIDR 表示法指定 IP 地址范围,例如 ["52.95.36.0/22"、"15.230.39.196/31"、"52.93.178.219/32"]。aws:SourceIp 条件仅适用于公共 IP 地址范围。要允许私有 IP 地址范围访问,请使用 aws:VpcSourceIp 条件。对于 aws:VpcSourceIp,请输入 HTTP 客户端的私有 IP 地址,该客户端通过接口虚拟私有云 (VPC) 端点来调用您的私有 API 端点。您只能通过接口 VPC 端点在 API Gateway 中调用私有 API 端点。
- 选择 Save changes(保存更改)。
要查找调用您的 REST API 的私有 IP 地址,请查看 Amazon CloudWatch Logs。有关详细信息,请参阅“教程: 查看 CloudWatch Logs。
部署 API
完成以下步骤:
- 打开 API Gateway 控制台。
- 选择您的 REST API。
- 在 REST API 的 Resources(资源)窗格中,选择 Deploy API(部署 API)。
- 对于 Deployment stage(部署阶段),选择 New stage(新阶段)。
- 对于 Stage name(阶段名称),输入一个名称。例如,输入 v1 或 demo。
- 选择 Deploy(部署)。
**重要事项:**每次更改 REST API 的资源策略时,都必须重新部署该 REST API。
测试资源策略
根据您的操作系统 (OS),运行以下命令之一,使用允许的 IP 地址测试环境。
Linux、Unix 和 macOS 环境:
curl -IX GET https://yourInvokeUrl/
Windows PowerShell:
curl https://yourInvokeUrl/
**注意:**请将 https://yourInvokeUrl/ 替换为您的 REST API 的调用 URL。
如果您正确配置了资源策略,则允许的环境将收到“HTTP 200 OK”响应。在没有允许的 IP 地址的环境中重新运行相同的命令。被拒绝的环境必定会收到“HTTP 403 Forbidden”错误。
要测试您的资源策略,您还可以使用 Postman 网站上的 Postman 应用程序。
**注意:**如果您无法访问多个环境,请启动 Amazon Elastic Compute Cloud (Amazon EC2) 实例。然后,将该实例的 IP 地址添加到 API 的资源策略中,并重新部署您的 API。
相关信息
创建 API Gateway 资源策略并将其附加到 API
API Gateway 资源策略示例
Amazon API Gateway 的访问策略语言概述
在 API Gateway 中控制和管理对 REST API 的访问