我正在根据以下json查询AWS CLI输出。
{
"Aliases": [
{
"AliasName": "alias/ab1",
"AliasArn": "arn:aws:kms:eu-west-1:123:alias/key1",
"TargetKeyId": "66"
},
{
"AliasName": "alias/ab2",
"AliasArn": "arn:aws:kms:eu-west-1:123:alias/key2",
"TargetKeyId": "77"
},
{
"AliasName": "alias/ab3",
"AliasArn": "arn:aws:kms:eu-west-1:123:alias/key3",
"TargetKeyId": "88"
},
{
"AliasName": "alias/ab4",
"AliasArn": "arn:aws:kms:eu-west-1:123:alias/aws/key4",
"TargetKeyId": "99"
}
]
}
有查询
.Aliases[] | (.AliasArn | select(contains(":alias/aws/") | not) )
但这仅拉出AliasArn
字段,也需要TargetKeyId
。关于如何同时使用这两个字段的任何想法?
"arn:aws:kms:eu-west-1:123:alias/key1"
"arn:aws:kms:eu-west-1:123:alias/key2"
"arn:aws:kms:eu-west-1:123:alias/key3"
答案 0 :(得分:1)
字符串插值将对此有效。
我直接称为AWS CLI list-aliases
,并将其通过管道传输到jq
,使用选择/包含过滤器,并使用String Interpolation通过管道进行输出。
aws kms list-aliases |jq -r '.Aliases[] |select (.AliasArn |contains(":alias/aws/") | not) | "AliasArn: \(.AliasArn)\t\tTargetKeyId: \(.TargetKeyId)"'
为便于阅读,我在输出中添加了几个标签。
参考
答案 1 :(得分:0)
谢谢Kenlukas,他的头上钉了钉子。
我做了一些细微的改进,只捕获了别名描述以及如此处所示的键-
aws kms list-aliases |jq -r '.Aliases[] |select (.AliasArn |contains(":alias/aws/") | not) | "AliasArn: \(.AliasArn | split("/")[1])\t\tTargetKeyId: \(.TargetKe yId)"'
答案 2 :(得分:0)
您非常接近解决方案。您只需要添加要添加到过滤器中的字段:
.Aliases[]|select(.AliasArn|contains(":alias/aws")|not) |.AliasArn,.TargetKeyId