【发布时间】:2021-08-18 13:58:29
【问题描述】:
我正在使用 AWS S3 策略,我在其中得到了这个 JSON(白洗):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn1",
"arn2",
"arn3"
]
},
"Action": [
"access1",
"access2",
"access3"
],
"Resource": "arn:aws:s3:::bucket1/*"
},
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn1",
"arn2",
"arn3"
]
},
"Action": "access4",
"Resource": "arn:aws:s3:::bucket1"
},
{
"Effect": "Allow",
"Principal": {
"AWS": "KEY1"
},
"Action": [
"access5",
"access4"
],
"Resource": "arn:aws:s3:::bucket1"
},
{
"Effect": "Allow",
"Principal": {
"AWS": "KEY1"
},
"Action": [
"access2",
"access3",
"access1"
],
"Resource": "arn:aws:s3:::bucket1/directory/*"
}
]
}
我需要过滤掉这两个(最后一个)具有“AWS:KEY1”的数组,只留下前两个(具有“AWS:[arnX]”的数组。
正如,这就是我想要/需要的:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn1",
"arn2",
"arn3"
]
},
"Action": [
"access1",
"access2",
"access3"
],
"Resource": "arn:aws:s3:::bucket1/*"
},
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn1",
"arn2",
"arn3"
]
},
"Action": "access4",
"Resource": "arn:aws:s3:::bucket1"
}
]
}
但我不知道该怎么做! 'AWS' 是 either 字符串 或 相同 JSON 中的数组!不知道如何同时处理两者..
我尝试使用flatten 将其转换为数组,但似乎无法对其进行select()。或者,然后返回整个 JSON(没有我不想要的部分)。
$ cat /tmp/y | jq '.Statement[].Principal.AWS | [.] | flatten'
[
"arn1",
"arn2",
"arn3"
]
[
"arn1",
"arn2",
"arn3"
]
[
"KEY1"
]
[
"KEY1"
]
【问题讨论】: