我正在查看防火墙规则。规则似乎是通过标记附加的,有没有办法识别没有相应资源的防火墙规则?
对象"VM 实例"和"防火墙规则"具有"网络标记"属性,该属性在逻辑上绑定它们:
CloudShell:$ gcloud compute instances describe lamp-1-vm --zone=us-central1-f
...
tags:
items:
- lamp-1-deployment
CloudShell:$ gcloud compute firewall-rules describe my-http-enable
...
targetTags:
- lamp-1-deployment
您可以使用gcloud
和一些 shell 脚本来构建带有网络标记的防火墙规则列表和带有标记的实例列表,然后使用循环查找其标记未使用的防火墙规则。
在这里,您将找到一些有用的示例:
使用 gcloud(GCP 的命令行界面(进行过滤和格式化的乐趣
我尝试为这个难题构建一个解决方案,可以在这里的公共存储库中找到:
https://github.com/kolban-google/firewall-instances
它的文档是:
在 GCP 项目中,我们可以定义防火墙规则。 这些规则可以与计算相关联 通过使用标签的引擎实例。 在防火墙规则中,我们可以指定一组或多个 命名标记,仅当防火墙规则中的标记与关联的标记匹配时,才会应用规则 使用计算引擎。 随着我们项目的发展,我们最终可能会得到很多防火墙规则,我们可能会 发现自己在问这个问题"是否有任何不匹配的防火墙规则 计算引擎实例? 我们可以手动检查每个防火墙规则,然后查看是否 有任何匹配的实例,但这很费力且容易出错。 在这个项目中,我们描述了 动态检索当前防火墙规则然后自动搜索的示例工具 用于匹配具有相应标记的计算引擎实例。
要运行该工具,请下载,然后:
npm install
node index.js --projectNum [projectNum]
其中 projectNum 是项目的数字 ID。 结果是以下格式的 JSON 字符串:
[
{
"name": "[FIREWALL_RULE_NAME]",
"instances": [
"INSTANCE_NAME",
...
]
},
...
]
如果防火墙规则没有匹配的实例,则不会填充实例字段。
从算法的角度来看:
Get the list of all firewall rules;
For each of the firewall rules {
Get the networkTags for that rule;
Search for all compute instances that have one or more of those tags;
List the rule and the associated compute instances that have the tags;
}
此项目按原样提供作为示例。