如何构造命令筛选列出AWS账户中带指定标签的KMS密钥?
列出带有指定标签的AWS KMS密钥
我需要构造命令,批量列出AWS账户中匹配特定标签(比如env=prod)的KMS密钥,目前尝试了两个命令但未实现需求:
已尝试的操作示例
1. 查询单条KMS密钥的标签
这个命令只能查看指定ID的密钥标签,无法批量筛选:
% aws kms list-resource-tags --key-id 01e685-a1-482-ba3-9c4ac3adf { "Tags": [ { "TagKey": "env", "TagValue": "prod" }, { "TagKey": "owner", "TagValue": "kms" }, ] }
2. 使用资源标签API尝试筛选
用这个命令查询时,结果格式包含ARN和标签,但未直接提取出密钥ID,且需要完善参数:
% aws resourcegroupstaggingapi get-resources --region us-east-1 --resource-type-filters kms --tag-filters Key=Initiator,Values=Terraform { "ResourceTagMappingList": [ { "ResourceARN": "arn:aws:kms:us-east-", "Tags": [ { "Key": "env", "Value": "prod" }, { "Key": "hello", "Value": "hello" }, { "Key": "Initiator", "Value": "Terraform" }, {
可行的解决方案
利用resourcegroupstaggingapi get-resources可以批量筛选带指定标签的KMS资源,结合参数调整可以直接输出密钥ID:
1. 筛选匹配单个标签的密钥(如env=prod)
aws resourcegroupstaggingapi get-resources \ --region us-east-1 \ --resource-type-filters "kms" \ --tag-filters Key=env,Values=prod \ --query 'ResourceTagMappingList[*].ResourceARN' \ --output text | awk -F'[:/]' '{print $NF}'
- 用
--tag-filters指定标签键值对,Key是标签名,Values是标签值 --query提取资源ARN,再通过awk截取ARN末尾的密钥ID(兼容带key/和不带的ARN格式)
2. 筛选同时匹配多个标签的密钥(如env=prod且owner=kms)
aws resourcegroupstaggingapi get-resources \ --region us-east-1 \ --resource-type-filters "kms" \ --tag-filters Key=env,Values=prod Key=owner,Values=kms \ --query 'ResourceTagMappingList[*].ResourceARN' \ --output text | awk -F'[:/]' '{print $NF}'
- 多个标签筛选需重复
Key=xxx,Values=xxx参数,只有同时满足所有标签的资源才会被返回
3. 输出包含标签的完整信息
如果需要查看密钥的标签详情,去掉--query和管道部分即可:
aws resourcegroupstaggingapi get-resources \ --region us-east-1 \ --resource-type-filters "kms" \ --tag-filters Key=env,Values=prod
内容的提问来源于stack exchange,提问作者Satyam Pandey
相关产品推荐
相关产品推荐

