google-cloud-platform - 查明并更新所有 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 的结果。
解决方案
这是在许多项目中查找具有给定源范围 IP 的所有防火墙规则的一种方法:
在所有相关项目中启用 Compute Engine API
列出项目
gcloud projects list
- 对于每个项目
gcloud compute firewall-rules list
--project <PROJECT_ID>
--filter="DISABLED=False AND DIRECTION=INGRESS"
- 对于每个防火墙规则
gcloud compute firewall-rules describe <NAME>
--format="value(sourceRanges)"
- 如果步骤 4 中的输出与您的 IP 地址匹配,请保存规则名称,然后使用更新源范围
gcloud compute firewall-rules update <NAME>
--source-ranges=<NEW_IP>
一些警告:
- 这是所涉及步骤的高级概述,但您可能希望自动执行此过程。
- 在复杂的环境中,这可能会进行大量的 API 调用。确保您没有耗尽您的项目配额,以防您的其他服务依赖这些 API 调用来执行其功能。
推荐阅读
- debugging - 使用气流测试与使用 DebugExecutor 调试气流任务
- vba - 获取父母的所有可能的孩子/后代
- python - 如何在 PyGame 中实现选项按钮并更改按钮颜色?
- git - 如何让 git-push 永久跳过详细分支的提交?
- javascript - 如何检查一个对象是否只有一个属性或只有两个属性并且在javascript中没有其他属性
- python - 如何使函数重复,直到使用 pynput 在 python 上按下特定键?
- firebase - Firebase 函数在接下来的 20 秒内调用
- c++ - 取消引用指向对象的指针以调用构造函数
- java - How can I set the not null field? Spring boot, Hibernate
- php - Xdebug Could not connect to debugging client. Tried: localhost:9000