如何使用 AWS CLI 创建、列出或更新 AWS WAF IPSet?

上次更新时间:2020 年 1 月 22 日

如何使用 AWS 命令行界面 (AWS CLI) 在 AWS WAF 中创建、列出或更新 IPSet?

简短描述

IPSet 指定了根据请求的来源 IP 地址将允许或阻止的 Web 请求。通过 AWS CLI,您可以使用 IPSet 来定义 Web 访问控制列表 (ACL) 的 IP 地址集。

解决方法

开始操作之前,请务必安装 AWS CLI 或升级到最新版本。

此解决方法将使用 waf-regional CLI(在 botocore 版本 1.4.85 或更高版本中可用)命令在特定 AWS 区域创建一个 IPSet。如果您在 Amazon CloudFront 中创建了全局 IPSet,您可以使用 Waf CLI 命令。

重要提示:如果您使用 waf-regional 命令,请在开始操作前确保选择了 AWS CLI 的默认区域,并验证该区域正是您要在其中创建 IPSet 的区域。否则,您必须在命令中为 IPSet 指定正确的 AWS 区域(使用 --region 选项)。

创建 IPSet

1.    登录到 AWS CLI。

2.    使用命令 get-change-token 生成更改令牌。

注意:更改令牌可防止应用程序向 AWS WAF 提交冲突的请求。您必须获得更改令牌并将其包括在创建、更新或删除 AWS WAF 对象的请求中。每个请求都必须使用一个唯一的更改令牌。有关更多信息,请参阅 GetChangeToken

示例输出:

$ aws waf-regional get-change-token
{
    "ChangeToken": "96836241-b667-4f0a-a655-e4bc49eaa2c4"
}

3.    使用 create-ip-set 命令创建一个 IPSet。示例输出:

$ aws waf-regional create-ip-set --name test_ipset --change-token 96836241-b667-4f0a-a655-e4bc49eaa2c4
{
    "IPSet": {
        "IPSetId": " bd37ef8c-102b-4d7a-9532-80fb97e4c281",
        "Name": "test_ipset",
        "IPSetDescriptors": []
    },
    "ChangeToken": "96836241-b667-4f0a-a655-e4bc49eaa2c4"
}

列出 IPSet

要列出 IPSet,请使用 list-ip-sets 命令。此命令的响应将会返回一组 IPSetSummary 对象。

示例输出:

$ aws waf-regional list-ip-sets
{
    "IPSets": [
        {
            "IPSetId": "bd37ef8c-102b-4d7a-9532-80fb97e4c281",
            "Name": "test-ipset"
        }
    ],
    "NextMarker": "bd37ef8c-102b-4d7a-9532-80fb97e4c281"
}

注意:如果您指定了“限制”值并且您拥有的 IPSet 数超过该值,则 AWS WAF 将返回一个 NextMarker 值。请参阅请求参数

更新 IPSet

要更新 IPSet,请通过 速记语法或 JSON 文件使用 update-ip-set 命令。

注意:每次 API 调用最多可以更新 1000 个 IP 地址。 

速记语法方法:

$ aws waf-regional update-ip-set --ip-set-id bd37ef8c-102b-4d7a-9532-80fb97e4c281 --change-token c47ddcba-d128-4ec9-acd6-ce981c6655c5 --updates Action="INSERT",IPSetDescriptor='{Type="IPV4",Value="192.168.2.1/32"}' Action="INSERT",IPSetDescriptor='{Type="IPV4",Value="192.168.2.2/32"}' Action="INSERT",IPSetDescriptor='{Type="IPV4",Value="192.168.2.3/32"}' Action="INSERT",IPSetDescriptor='{Type="IPV4",Value="192.168.2.4/32"}' Action="INSERT",IPSetDescriptor='{Type="IPV4",Value="192.168.2.5/32"}'
{
    "ChangeToken": " c47ddcba-d128-4ec9-acd6-ce981c6655c5"
}

JSON 文件方法:

1.    根据前面创建 IPSet部分所述,使用 get-change-token 命令生成更改令牌。

2.    在您的首选编辑器中使用您的更新请求语法创建一个 JSON 文件(如 test.json)。例如:

$ nano test.json
{
       "ChangeToken": "b3d8178a-666a-484a-92af-1dcd02cafcfa",
       "IPSetId": "bd37ef8c-102b-4d7a-9532-80fb97e4c281",
       "Updates": [{
              "Action": "DELETE",
              "IPSetDescriptor": {
                      "Type": "IPV4",
                      "Value": "192.168.2.5/32"
              }
       }]
}

3.    使用 update-ip-set 命令将您通过刚刚创建的 JSON 文件请求的更改应用到该 IPSet。例如:

$ aws waf-regional update-ip-set --ip-set-id bd37ef8c-102b-4d7a-9532-80fb97e4c281 --cli-input-json file:///home/ec2-user/test.json
{
    "ChangeToken": "b3d8178a-666a-484a-92af-1dcd02cafcfa"
}

4.    使用 get-ip-set 命令验证您请求对该 IPSet 作出的更改。例如:

$ aws waf-regional get-ip-set --ip-set-id bd37ef8c-102b-4d7a-9532-80fb97e4c281
{
    "IPSet": {
        "IPSetId": "bd37ef8c-102b-4d7a-9532-80fb97e4c281",
        "Name": "test-ipset",
        "IPSetDescriptors": [
            {
                "Type": "IPV4",
                "Value": "192.168.2.2/32"
            },
            {
                "Type": "IPV4",
                "Value": "192.168.2.3/32"
            },
            {
                "Type": "IPV4",
                "Value": "192.168.2.1/32"
            },
            {
                "Type": "IPV4",
                "Value": "192.168.2.4/32"
            }
        ]
    }
}

AWS WAF(支持的 API 操作)

使用 IP 匹配条件(AWS WAF 控制台)

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?