【问题标题】:Pinpoint and update a specific IP in all GCP projects firewalls查明并更新所有 GCP 项目防火墙中的特定 IP
【发布时间】:2020-03-02 01:34:57
【问题描述】:

有没有办法(例如在云 shell 上使用一系列 gcloud api 命令)来搜索我有权访问的所有可用 GCP 项目、VPC 以及下面的所有网络和防火墙规则,以获取 特定的 IP,并且只更新那个 IP 地址而不影响其余的?

上下文:
多年来,我在 GCP 中的多个项目、多个防火墙规则(数百个)中将静态 IP 列入白名单,我们即将更改 ISP(因此静态 IP 会更改)。我不想手动搜索,或者冒险丢失其中的一些(容易出错),我想批量更新该 IP,以便一次性完成。

或者,如果没有,至少获取可能设置该 IP 的所有条目的列表。

有可能吗?

谢谢!

更新:
我写了这个简单的脚本,它指出了我至少要更改的 IP,希望对某人有用!

for i in `gcloud projects list| grep -v PROJECT_ID|awk {'print $1'}`
do 
echo $i && gcloud compute firewall-rules list --project $i --format="table(name, network, direction, priority, sourceRanges.list():label=SRC_RANGES, destinationRanges.list():label=DEST_RANGES, allowed[].map().firewall_rule().list():label=ALLOW,denied[].map().firewall_rule().list():label=DENY,sourceTags.list():label=SRC_TAGS,sourceServiceAccounts.list():label=SRC_SVC_ACCT,targetTags.list():label=TARGET_TAGS,targetServiceAccounts.list():label=TARGET_SVC_ACCT)"
done

还没有更新 IP,但至少我可以看到它们在哪里,并且我也可以对我正在搜索的静态 IP 进行 grep 结果。

【问题讨论】:

    标签: google-cloud-platform automation ip firewall


    【解决方案1】:

    这是在许多项目中查找具有给定源范围 IP 的所有防火墙规则的一种方法:

    1. 在所有相关项目中启用 Compute Engine API

    2. 列出项目

    gcloud projects list
    
    1. 针对每个项目
    gcloud compute firewall-rules list 
      --project <PROJECT_ID>
      --filter="DISABLED=False AND DIRECTION=INGRESS"
    
    1. 对于每个防火墙规则
    gcloud compute firewall-rules describe <NAME> 
      --format="value(sourceRanges)"
    
    1. 如果步骤 4 中的输出与您的 IP 地址匹配,请保存规则名称,然后使用更新源范围
    gcloud compute firewall-rules update <NAME> 
      --source-ranges=<NEW_IP>
    

    一些注意事项:

    • 这是所涉及步骤的高级概述,但您可能希望自动执行此过程。
    • 在复杂的环境中,这可能会产生大量的 API 调用。确保您的项目配额不会用尽,以防您的其他服务依赖这些 API 调用来执行其功能。

    【讨论】:

      【解决方案2】:

      这可以通过结合使用 shell 编程和 SDK CLI 来完成。

      但是,使用 Google Cloud SDK 编写 Python 程序会容易得多。这仅取决于您更适合开发哪种环境(shell 或 Python 编程)。 CLI 对此没有简单的命令。

      注意:这可以用任何语言完成,Python 只是一个易于编写简单程序的示例。

      要列出每个项目的每个防火墙规则,您需要为每个项目运行此命令来替换 PROJECT_ID:

      gcloud compute firewall-rules list --project PROJECT_ID
      

      然后为上一条命令输出的每个防火墙规则显示规则:

      gcloud compute firewall-rules describe NAME --project PROJECT_ID
      

      使用您喜欢的文本搜索程序 (grep) 查找当前 IP 地址。

      通过更新新 IP 地址的规则来完成:

      gcloud compute firewall-rules update NAME <replace with command options>
      

      以上命令是使用 CLI 的基础。您需要将其构建为程序或 shell 脚本。

      鉴于这是一项一次性任务,我只需使用上述命令列出每个防火墙规则,然后 grep 输出以查找需要更新的规则。从该列表手动更新 Google Cloud Console 中的规则。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-28
        • 1970-01-01
        • 1970-01-01
        • 2017-03-25
        • 2012-10-22
        • 2019-03-14
        • 1970-01-01
        相关资源
        最近更新 更多