Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 AWS S3桶加密-桶属性设置与桶策略设置_Amazon S3 - Fatal编程技术网

Amazon s3 AWS S3桶加密-桶属性设置与桶策略设置

Amazon s3 AWS S3桶加密-桶属性设置与桶策略设置,amazon-s3,Amazon S3,我已经创建了一个AWS S3 bucket,并且在属性中启用了“默认加密”。那么我还需要创建一个类似于下面的桶策略吗 注:我只是想让s3以一种通用的方式进行加密,没有非常特殊的要求 "Statement": [ { "Sid": "DenyIncorrectEncryptionHeader", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject",

我已经创建了一个AWS S3 bucket,并且在属性中启用了“默认加密”。那么我还需要创建一个类似于下面的桶策略吗

注:我只是想让s3以一种通用的方式进行加密,没有非常特殊的要求

  "Statement": [
    {
        "Sid": "DenyIncorrectEncryptionHeader",
        "Effect": "Deny",
        "Principal": "*",
        "Action": "s3:PutObject",
        "Resource": "arn:aws:s3:::s3_bucket_name/*",
        "Condition": {
            "StringNotEquals": {
                "s3:x-amz-server-side-encryption": "AES256"
            }
        }
    },
    {
        "Sid": "DenyUnEncryptedObjectUploads",
        "Effect": "Deny",
        "Principal": "*",
        "Action": "s3:PutObject",
        "Resource": "arn:aws:s3:::s3_bucket_name/*",
        "Condition": {
            "Null": {
                "s3:x-amz-server-side-encryption": "true"
            }
        }
    }
  ]

为了测试这一点,我创建了一个bucket并激活了默认加密

然后,当我试图通过管理控制台上传文件时,它说:

如果此bucket设置为默认加密,S3将根据bucket设置加密对象

我上传的文件确实被加密了

然后,我通过AWS CLI上传了一个文件:

aws s3 cp foo s3://my-bucket/
上载的文件已加密

但是,请注意,该设置称为默认加密。这意味着,除非另有规定,否则对象将被加密。但是,它不强制加密,因此,如果用户特别选择了不同类型的加密(例如MKS而不是AES256),则允许用户进行加密。(我看不到他们可以明确要求“不加密”的方法。)

这就是你的政策(上面)的用武之地。它们可以强制执行特定形式的加密。如果不满足这些要求,则拒绝
PutObject

然后,我从中获取加密策略(似乎与您使用的策略相匹配),并将它们放入桶策略中

然后我尝试从管理控制台上传,但失败了只有当我特别选择“AmazonS3主密钥”作为加密选项时,它才起作用。因此,“默认加密”选项与策略不兼容

我还尝试使用“AWS KMS主密钥”作为加密选项上载,但再次失败,因为这与策略不匹配(专门检查AES256,而不是KMS加密)


底线:使用默认加密将导致以某种方式对对象进行加密。这些策略可以强制执行特定类型的加密。

为了测试这一点,我创建了一个bucket并激活了默认加密

然后,当我试图通过管理控制台上传文件时,它说:

如果此bucket设置为默认加密,S3将根据bucket设置加密对象

我上传的文件确实被加密了

然后,我通过AWS CLI上传了一个文件:

aws s3 cp foo s3://my-bucket/
上载的文件已加密

但是,请注意,该设置称为默认加密。这意味着,除非另有规定,否则对象将被加密。但是,它不强制加密,因此,如果用户特别选择了不同类型的加密(例如MKS而不是AES256),则允许用户进行加密。(我看不到他们可以明确要求“不加密”的方法。)

这就是你的政策(上面)的用武之地。它们可以强制执行特定形式的加密。如果不满足这些要求,则拒绝
PutObject

然后,我从中获取加密策略(似乎与您使用的策略相匹配),并将它们放入桶策略中

然后我尝试从管理控制台上传,但失败了只有当我特别选择“AmazonS3主密钥”作为加密选项时,它才起作用。因此,“默认加密”选项与策略不兼容

我还尝试使用“AWS KMS主密钥”作为加密选项上载,但再次失败,因为这与策略不匹配(专门检查AES256,而不是KMS加密)


底线:使用默认加密将导致以某种方式对对象进行加密。这些策略可以强制执行特定类型的加密。

另一个注意事项:S3条件密钥
S3:x-amz-server-side-encryption
早在bucket的“默认加密”选项引入之前就已可用。以前,这是确保存储对象被加密的唯一方法——要求在上传对象时指定它。感谢John Rotenstein的测试和解释。我的观察结果是:如果我只设置了“默认加密”,那么使用AWS CLI我可以:AWS s3 cp hello.txt s3://bucketname(或从bucket name下载到本地),而不设置--sse AES256,而如果我设置bucket policy,那么我需要使用:AWS s3 cp hello.txt s3://bucketname--sse AES256。所以我很困惑,文件真的只使用默认加密加密吗?如果文件已经加密,那么为什么我需要一个bucket策略呢?约翰·罗滕斯坦:我不明白你的结论是什么。通过启用默认加密并设置为S3主密钥,S3将使用S3主密钥方式(我猜是AES256)为您加密文件。如果在bucket策略中设置AES256,S3仍将使用AES256为您加密。对我来说唯一的区别是,当我键入AWS CLI时,我需要设置--sse AES256(如果设置了bucket策略)。若bucket并没有bucket策略,那个么我不需要指出--sse AES256Thanks Michael-sqlbot。从您所说的,看起来bucket策略和默认加密设置是一种重复。也许我只需要启用默认加密。另一个注意事项:S3条件密钥
S3:x-amz-server-side-encryption
早在bucket的“默认加密”选项引入之前就已经可用了。以前,这是确保存储对象被加密的唯一方法——要求在上传对象时指定它。感谢John Rotenstein的测试和解释。我的观察结果是:如果我只设置了“默认加密”,那么使用AWS CLI我可以:AWS s3 cp hello.txt s3://bucketname(或从bucket name下载到local),而无需设置--sse A