如何使用资源策略允许某些 IP 地址访问我的 API Gateway API?

上次更新时间:2020 年 8 月 7 日

我想允许某些 IP 地址访问我的 Amazon API Gateway API,并限制其他地址访问。该怎么办?

简短描述

为您的 API 创建资源策略,使用该策略来拒绝任何未被明确允许的 IP 地址的访问。从指定的 IP 地址(被允许的用户)调用 API 的用户可以访问 API。从任何其他 IP 地址进行调用的用户都无法访问并会收到“HTTP 403 Forbidden”错误。

解决方法

对于这些说明,您可以使用现有 API Gateway API,或创建示例 API 来进行测试。如果您使用示例 API (PetStore) 进行此设置,请跳至下面的创建并附加资源策略

设置 API 方法

1.    打开 API 网关控制台,然后选择您的 API。

2.    在 Resources(资源)窗格中,依次选择 Actions(操作)Create Method(创建方法)

3.    在 /resource 节点下的下拉列表中,选择 ANY,然后选择选中标记图标。

4.    在 / - ANY - Setup(设置)窗格中,为 Integration type(集成类型)选择 Mock(模拟),然后选择 Save(保存)

注意:模拟集成会响应任何到达它的请求,这有助于以后进行测试。

创建并附加资源策略

1.    在 API Gateway 控制台的左侧导航窗格中,选择资源策略

2.    复制此示例资源策略并将其粘贴到 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"]
        }
      }
    }
  ]
}

注意:如果您希望阻止某些 IP 地址的访问,并允许其他地址访问,请参阅示例:基于源 IP 地址或范围拒绝 API 流量中的资源策略。

3.    对于 aws:SourceIp,请将 sourceIpOrCIDRBlock 替换为您要允许的特定 IP 地址。您也可以使用 CIDR 表示法指定 IP 地址的范围。例如:

["10.0.0.0/8", "192.168.0.0/16", "172.16.0.1/32"]

注意aws:SourceIp 仅适用于公有 IP 地址范围。要允许访问私有 IP 范围,请使用 aws:VpcSourceIp。此条件对私有 API 有效。有关更多信息,请参阅 aws:VpcSourceIp

4.    选择保存

部署您的 API

1.    在 API Gateway 控制台Resources(资源)窗格中,依次选择 Actions(操作)Deploy API(部署 API)

2.    对于 Deployment stage(部署阶段),选择 [New Stage]([新阶段])

3.    在阶段名称部分输入名称。例如,v1演示

4.    选择 Deploy(部署)

注意:如果在此之后更改资源策略,请确保重新部署 API。

测试资源策略

1.    在 API Gateway 控制台Stages(阶段)窗格中,复制 Invoke URL(调用 URL)

2.    通过具有允许的 IP 地址的环境和没有允许的 IP 地址的环境,测试是否能收到 HTTP 200 响应。从命令行界面使用 curl,或使用 Postman 应用程序。如需关于 curl 的更多信息,请参见 curl 项目网站

注意:如果您还没有使用多个环境进行测试的权限,则可以设置 Amazon Elastic Compute Cloud (Amazon EC2) 实例。请务必在 API 的资源策略中指定要允许访问的所有实例的 IP 地址。然后,重新部署 API。

要使用 curl,请运行以下某项命令,将 https://yourInvokeUrl/ 替换为您的 API 的调用 URL

在 Linux/Unix/macOS 环境中:

curl -IX GET https://yourInvokeUrl/

在 Windows PowerShell 中:

curl https://yourInvokeUrl/

允许的环境会收到 HTTP 200 响应,遭拒的环境会收到“HTTP 403 Forbidden”错误。