此 S3 存储桶策略的第二个(效果:拒绝,条件:空)语句的目的是什么



阅读此文档,它给出了一个在存储桶上强制加密的示例:

{
  "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 甚至在这里做什么。

如果s3:x-amz-server-side-encryption key值为 null,则条件中的 Null 条件的计算结果为 true。此规则正在检查缺少的标头。

在此策略的第一个规则中,将比较加密值。为了进行此比较,标头必须存在。第二条规则检测到标头丢失,从而强制进行加密选择。

总结:

第一条规则检查加密标头的值。

第二条规则检查标头是否存在。

根据文档,

使用 Null 条件运算符检查条件键是否存在 在授权时。在策略语句中,使用 true (键不存在 - 它是空的(或假(键存在并且其 值不为空(。

因此,在您的示例中,如果密钥 s3:x-amz-服务器端加密不存在,则它应该为 null 以使条件成功。

我们的应用程序略有不同,因为我们的应用程序无法设置 SSE,我们也希望避免自定义 KMS 密钥。通过利用默认存储桶加密,此策略可确保使用默认存储桶加密或 AES256 进行静态加密。

{
        "Sid": "Ensure encryption at rest",
        "Effect": "Deny",
        "Principal": "*",
        "Action": "s3:PutObject",
        "Resource": "arn:aws:s3:::myBucket/*",
        "Condition": {
            "Null": {
                "s3:x-amz-server-side-encryption": "false"
            },
            "StringNotEquals": {
                "s3:x-amz-server-side-encryption": "AES256"
            }
        }
    }

相关内容

  • 没有找到相关文章

最新更新