除非选中 AES256 加密,否则拒绝 S3 中的 CreateBucket

Deny CreateBucket in S3 unless AES256 Encryption Checked

一天中的大部分时间我都在努力。作为管理员,我试图要求用户在创建 S3 存储桶时检查 "Automatically encrypt objects when they are stored in S3" 按钮 (AES256)。我已经尝试了所有能想到的。到目前为止,我只得到了 2 个独立的结果。

作为测试用户,我要么被允许创建存储桶(有或没有检查加密),要么我被拒绝(有或没有检查加密)。

最后的努力导致将以下策略应用于测试用户,在这种情况下,无论我是否选中加密框,我都无法创建存储桶

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Deny",
            "Action": [
                "s3:CreateBucket"
            ],
            "Resource": "*",
            "Condition": {
                "StringNotEquals": {
                    "s3:x-amz-content-sha256": "AES256"
                },
                "Null": {
                    "s3:x-amz-content-sha256": true
                }
            }
     ]

}

我已将上述策略与 S3AllowFullAccess 以及其他允许访问的自定义策略相结合,但我就是无法让它发挥作用。

感谢任何帮助

CreateBucket() 命令不接受存储桶加密设置。

例如,从 AWS CLI 创建存储桶时,选项为:

aws s3api  create-bucket
[--acl <value>]
--bucket <value>
[--create-bucket-configuration <value>]
[--grant-full-control <value>]
[--grant-read <value>]
[--grant-read-acp <value>]
[--grant-write <value>]
[--grant-write-acp <value>]
[--object-lock-enabled-for-bucket | --no-object-lock-enabled-for-bucket]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]

无法指定存储桶加密。

而是使用 put-bucket-encryption 命令指定存储桶加密:

aws s3api put-bucket-encryption
--bucket <value>
[--content-md5 <value>]
--server-side-encryption-configuration <value>
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]

这意味着 不可能CreateBucket() 上创建强制使用 server-side 加密值的策略。需要在创建存储桶后设置它。

您可以创建在 CreateBucket() 上激活并触发 AWS Lambda 函数的 Amazon CloudWatch Events 规则。然后,您可以编写函数代码以在存储桶上调用 PutBucketEncryption()

更新: 您可以使用要求对对象本身进行加密的策略,而不是在存储桶级别设置加密。

这是来自 AWS Organizations 的 Example Service Control Policies,它要求每个人只上传加密的对象:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyIncorrectEncryptionHeader",
      "Effect": "Deny",
      "Action": "s3:PutObject",
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "s3:x-amz-server-side-encryption": "AES256"
        }
      }
    },
    {
      "Sid": "DenyUnEncryptedObjectUploads",
      "Effect": "Deny",
      "Action": "s3:PutObject",
      "Resource": "*",
      "Condition": {
        "Null": {
          "s3:x-amz-server-side-encryption": true
        }
      }
    }
  ]
}