我可以通过编程方式查找所有未标记的资源吗?

时间:2016-01-04 16:33:24

标签: amazon-web-services boto

AWS Web控制台中的标签编辑器允许我搜索不存在特定标签的“所有资源类型”。例如,我可以列出缺少标签“environment”的所有内容。

我想将其作为定期检查来执行,以强制没有创建新的未标记资源。一些Boto代码(作为Lambda cron作业运行)似乎很合适。但是,Boto文档只显示了如何查看特定的资源类型(例如 EC2实例)。

是否有任何API可用于询问标签?或者我是否需要枚举每种资源类型?

3 个答案:

答案 0 :(得分:3)

一般来说,标签没有API。您必须为每种服务类型执行此操作。这并不困难。我有一个Lambda被执行(通过S3 PutObject / CloudTrail),它检查新创建的实例并在需要时标记它们。由于CloudTrail监控大多数AWS服务,因此很容易扩展其他类型的AWS服务。但是,如果您要查找所有未标记的资源,则必须编写Boto脚本并查询每种服务类型的标记。

答案 1 :(得分:3)

如果将来有人要问相同的问题,请在此处发布。

AWS资源组提供了这样的功能。您可以通过https://console.aws.amazon.com/resource-groups/home在AWS控制台中访问资源组。 我没有找到如何在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

答案 2 :(得分:2)

您可以按this write-up在控制台中使用AWS资源组,以查找标记值为空的资源。要查找具有标签键但没有标签值的资源,请选择(未添加标签)。 AWS Resource Groups and Tag Editor

如果您正在寻找自动警报,请考虑使用AWS Config Rules并同时查看此related blog。特别是,存在一个称为“ required_tags”的规则模板,该模板检查最多5个标签的存在。您可以根据需要运行规则的更多实例,或修改代码。查找该链接以及其他rule templates here

我还发现了一个nice blog,它通过CLI调用服务API时通过使用过滤来帮助回答问题。

我还发现使用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'