首页 > 解决方案 > 查明并更新所有 GCP 项目防火墙中的特定 IP

问题描述

有没有办法(例如使用 Cloud 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,但至少我可以看到它们在哪里,并且我也可以 grep 我正在搜索的静态 IP 的结果。

标签: google-cloud-platformautomationipfirewall

解决方案


这是在许多项目中查找具有给定源范围 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 调用来执行其功能。

推荐阅读