阅读此doc,它给出了在存储桶上强制加密的示例:
{
"Version": "2012-10-17",
"Id": "PutObjPolicy",
"Statement": [
{
"Sid": "DenyIncorrectEncryptionHeader",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::YourBucket/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "AES256"
}
}
},
{
"Sid": "DenyUnEncryptedObjectUploads",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::YourBucket/*",
"Condition": {
"Null": {
"s3:x-amz-server-side-encryption": "true"
}
}
}
]
}
实际上做的第二个条件是什么?为什么有必要对我来说,看起来我只需要第一个?我不明白NULL在这里做什么。
答案 0 :(得分:1)
如果s3:x-amz-server-side-encryption key
值为null
,条件块中的Null条件的计算结果为true。此规则正在检查缺少的标头。
在此策略的第一条规则中,正在比较加密值。为了进行这种比较,必须存在标题。第二条规则检测到标头丢失,从而强制执行加密选择。
要点:
第一条规则检查加密标头的值。
第二条规则检查标题是否存在。
答案 1 :(得分:1)
使用Null条件运算符检查是否存在条件键 在授权时。在政策声明中,使用true (密钥不存在 - 它为空)或错误(密钥存在及其存在) value不为null)。
因此,在您的示例中,如果密钥s3:x-amz-server-side-encryption不存在,则它应为null以使条件成功。