我能否编程查找所有未标记的资源?

18
AWS的Web控制台中的标签编辑器允许我搜索未出现特定标签的“所有资源类型”。例如,我可以列出所有缺少“环境”标签的内容。
我想将其作为周期性检查运行,以确保没有创建新的未标记资源。一些Boto代码(作为Lambda计划任务运行)似乎很适合。但是,Boto文档只向我展示了如何查看特定的资源类型(例如EC2实例)。
是否有任何API可以查询标签的相关信息?或者我需要枚举每种资源类型?

5
我把这个放在这里,以便帮助他人 https://github.com/llizamab/aws-tags-monitorization 是一个使用无服务器框架的 CSV 和电子邮件报告项目,用于识别未标记的资源。我制作了这个项目,因为 resourcegroupstaggingapi 不会返回从未被标记过的资源。问候。 - luis lizama
4个回答

19

如果将来有人寻找相同的问题,我在这里发布。

AWS 资源组提供此类功能。您可以通过 AWS 控制台访问资源组,网址为 https://console.aws.amazon.com/resource-groups/home。 我没有找到如何在 CLI 中使用无标记值的 --tag-filters,所以使用了 jq 来过滤结果。

以下是一个示例命令,可获取所有未带环境标记的资源。

aws resourcegroupstaggingapi get-resources --tags-per-page 100 | jq '.ResourceTagMappingList[] | select(contains({Tags: [{Key: "environment"} ]}) | not)'

通过resourcegroupstaggingapi参考获取资源 - https://docs.aws.amazon.com/cli/latest/reference/resourcegroupstaggingapi/get-resources.html

有关资源组API的更多信息,请访问https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/API_GetResources.html


7
这确实有效(有限制)。API不会返回从未被标记的资源,只有在它们过去至少有一个标记时才会返回,即使它们现在没有标记。 - TenPlusFive

11
您可以使用 AWS 资源组从控制台中查找没有标签值的资源,详情请参见this write-up。要查找具有标签键但没有标签值的资源,请选择(未标记)。AWS Resource Groups and Tag Editor 如果您正在寻找自动警报功能,请考虑使用AWS Config Rules,同时查看相关博客。特别是有一个名为“required_tags”的规则模板,可检查最多5个标签的存在。您可以根据需要运行更多规则实例或修改代码。在此处找到其他规则模板链接

我还发现了一篇不错的博客,它通过在调用CLI时使用过滤器来帮助回答问题。

我还发现使用AWS Config也非常有效。一旦为特定的AWS区域设置了AWS Config,则可以提交高级查询以查找缺少的标记,例如以下EC2资源上缺少标记的查询:

SELECT
  resourceId,
  resourceType,
  configuration.instanceType,
  configuration.placement.tenancy,
  configuration.imageId,
  tags,
  availabilityZone
WHERE
  resourceType = 'AWS::EC2::Instance'
  AND tags.key NOT LIKE 'owner'

3

一般情况下没有标签的API,你需要为每种服务类型单独设置。但这不难。我有一个Lambda函数,在S3 PutObject / CloudTrail中执行,它会检查新创建的实例并进行标记(如果需要)。由于CloudTrail监视大多数AWS服务,因此很容易将其扩展到其他AWS服务类型。但是,如果您想找到所有未标记的资源,则需要编写Boto脚本并查询每种服务类型的标记。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接