如何将现有的 Lightsail 防火墙规则复制到其他 Lightsail 实例?

上次更新日期:2021 年 9 月 28 日

如何将防火墙规则复制到多个 Amazon Lightsail 实例?

简短描述

防火墙规则对于每个 Lightsail 实例都是唯一的。如果您希望多个实例拥有相同的规则,则必须为每个实例编辑规则。您可以使用 AWS Command Line Interface(AWS CLI)和 API 调用来检索当前的防火墙规则,然后将其输出到 .json 文件中。您可以使用 .json 文件将所有规则复制到另一个 Lightsail 实例中。

注意:您必须安装配置 AWS CLI 才能执行以下解决方法步骤。如果在运行 AWS CLI 命令时收到错误,请确保您使用的 AWS CLI 为最新版本。 您还可以使用 AWS CloudShell 来执行这些步骤。

解决方法

1.    运行以下命令以检索要从现有实例复制的当前配置,然后将其输出到 .json 文件。这将生成一个包含防火墙配置的 .json 文件。在以下示例中,将 SourceInstanceNameRegionName 替换为您的实例的正确信息。

$ aws lightsail get-instance-port-states --instance-name SourceInstanceName --region RegionName | grep -v "state" > firewall.json

2.    打开此示例中的 .json 文件 firewall.json,然后将“portStates”替换为“portInfos”。此参数位于文件的开头,如以下示例所示:

{
    "portStates": [
        {
            "fromPort": 80,
            "toPort": 80,
            "protocol": "tcp",
            "cidrs": [
                "0.0.0.0/0"
            ],
            "cidrListAliases": []
        },
        {
            "fromPort": 22,
            "toPort": 22,
            "protocol": "tcp",
            "cidrs": [
                "0.0.0.0/0"
            ],
            "cidrListAliases": []
        },
        {
            "fromPort": 8080,
            "toPort": 8080,
            "protocol": "tcp",
            "cidrs": [
                "11.11.11.0/20",
                "22.22.22.0/20"
            ],
            "cidrListAliases": []
        }
    ]
}

3.    将参数更改为“portInfos”后,您可以使用 .json 文件向其他实例添加相同的配置。在以下示例中,将 DestinationInstanceNamefirewall.jsonRegionName 替换为您的实例的正确信息。

$ aws lightsail put-instance-public-ports --instance-name DestinationInstanceName  --cli-input-json file://firewall.json --region 
RegionName