命令
输出:aws s3api get-bucket-policy --bucket bucketname
{
"Policy": "{\"Version\":\"2012-10-17\",\"Id\":\"S3SecureTransportPolicy\",\"Statement\":[{\"Sid\":\"ForceSSLOnlyAccess\",\"Effect\":\"Deny\",\"Principal\":{\"AWS\":\"*\"},\"Action\":\"s3:*\",\"Resource\":\"arn:aws:s3:::amn/*\",\"Condition\":{\"Bool\":{\"aws:SecureTransport\":\"false\"}}},{\"Sid\":\"AWSCloudTrailAclCheck20150319\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"cloudtrail.amazonaws.com\"},\"Action\":\"s3:GetBucketAcl\",\"Resource\":\"arn:aws:s3:::amn\"},{\"Sid\":\"AWSCloudTrailWrite20150319\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"cloudtrail.amazonaws.com\"},\"Action\":\"s3:PutObject\",\"Resource\":\"arn:aws:s3:::amn/AWSLogs/405042254276/*\",\"Condition\":{\"StringEquals\":{\"s3:x-amz-acl\":\"bucket-owner-full-control\"}}}]}"
}
Run Code Online (Sandbox Code Playgroud)
我需要 grep(即提取)与aws:SecureTransport
此 JSON 中的键关联的值(false
在本例中为 )以及与键关联的值Effect
。
我试过了
aws s3api get-bucket-policy --bucket amn |
grep -Po '"Bool": *\K"[^"]*"'
Run Code Online (Sandbox Code Playgroud)
和
aws s3api get-bucket-policy --bucket amn |
sed 's/.*\(aws:SecureTransport\)[^:]*:"\([0-9]*\)"'
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
Kus*_*nda 10
您从命令中获得的 JSON 文档似乎包含另一个编码的 JSON 文档。您似乎想要从这个编码的文档中获取数据。
要获取内部文件,我们可以使用jq
:
aws ... |
jq -r '.Policy'
Run Code Online (Sandbox Code Playgroud)
要从Effect
包含该aws:SecureTransport
键的位中获取该键的值,我们需要再次解析文档:
aws ... |
jq -r '.Policy' |
jq -r '.Statement[] | select(.Condition.Bool."aws:SecureTransport").Effect'
Run Code Online (Sandbox Code Playgroud)
最后一次jq
调用遍历Statement
数组的所有元素,寻找具有名为 的键的元素.Condition.Bool."aws:SecureTransport"
。然后它获取Effect
与该Statement
元素关联的键的值。
在您的数据上运行它会输出 value Deny
。
如果您想要该.Condition.Bool."aws:SecureTransport"
键的值(false
在您的文档中),请使用.Condition.Bool."aws:SecureTransport"
代替.Effect
上面的。
或者,使用fromjson
指令 injq
而不是第二次jq
调用:
aws ... |
jq -r '.Policy | fromjson | .Statement[] | select(.Condition.Bool."aws:SecureTransport").Effect'
Run Code Online (Sandbox Code Playgroud)
在这里,fromjson
对编码的 JSON 文档进行解码并将其传递给后续的处理阶段。
仅供参考,内部编码的 JSON 文档如下所示 ( aws ... | jq -r '.Policy | fromjson'
):
aws ... |
jq -r '.Policy'
Run Code Online (Sandbox Code Playgroud)