如何使用资源策略将某些 IP 地址列入白名单以访问我的 API Gateway API?

上次更新时间:2019 年 7 月 18 日

我想将某些 IP 地址列入访问我的 Amazon API Gateway API 的白名单,并限制其他人的访问。该如何操作?

简短描述

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

解决方法

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

设置 API 方法

1.    在 API Gateway 控制台中,选择您的 API。

2.    在资源窗格中,选择操作,然后选择创建方法

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

4.    在 /- ANY – 设置窗格中,为集成类型选择模拟,然后选择保存

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

创建并附加资源策略

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

2.    复制此示例资源策略并将其粘贴到资源策略文本框中。

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

4.    选择保存

部署您的 API

1.    在 API Gateway 控制台资源窗格中,选择操作,然后选择部署 API

2.    在部署 API 中,在部署阶段部分选择[新建阶段]

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

4.    选择部署

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

测试资源策略

1.    在 API Gateway 控制台阶段窗格中,在阶段编辑器窗格中复制调用 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”错误。