我想将其作为周期性检查运行,以确保没有创建新的未标记资源。一些Boto代码(作为Lambda计划任务运行)似乎很适合。但是,Boto文档只向我展示了如何查看特定的资源类型(例如EC2实例)。
是否有任何API可以查询标签的相关信息?或者我需要枚举每种资源类型?
如果将来有人寻找相同的问题,我在这里发布。
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
我还发现了一篇不错的博客,它通过在调用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'
一般情况下没有标签的API,你需要为每种服务类型单独设置。但这不难。我有一个Lambda函数,在S3 PutObject / CloudTrail中执行,它会检查新创建的实例并进行标记(如果需要)。由于CloudTrail监视大多数AWS服务,因此很容易将其扩展到其他AWS服务类型。但是,如果您想找到所有未标记的资源,则需要编写Boto脚本并查询每种服务类型的标记。
答案已被接受,但这可能会有所帮助: 使用 AWS 资源浏览器(https://docs.aws.amazon.com/resource-explorer/latest/userguide/using-search-query-syntax.html):
aws resource-explorer-2 search --query-string="tag:none -tag.key:aws* region eu-west-1" >untagged_resource.json
这解决了之前由@Anoop Philip提到的AWS资源组cli命令的限制。
这项服务不需要任何费用。https://aws.amazon.com/resourceexplorer/pricing/