Amazon web services 使用CLI的AWS S3服务器端加密
我正在尝试使用AWS KMS设置将对象上载到S3 文件上说上传的对象应该加密 服务器端加密是关于静态数据加密, AmazonS3在将数据写入时在对象级别加密数据 数据中心中的磁盘,并在您访问时为您解密 我已经设置了KMS主密钥,并尝试使用CLI以以下方式上载对象Amazon web services 使用CLI的AWS S3服务器端加密,amazon-web-services,encryption,amazon-s3,amazon-kms,Amazon Web Services,Encryption,Amazon S3,Amazon Kms,我正在尝试使用AWS KMS设置将对象上载到S3 文件上说上传的对象应该加密 服务器端加密是关于静态数据加密, AmazonS3在将数据写入时在对象级别加密数据 数据中心中的磁盘,并在您访问时为您解密 我已经设置了KMS主密钥,并尝试使用CLI以以下方式上载对象 aws s3api put-object --bucket test --key keys/test.txt --server-side-encryption aws:kms --ssekms-key-id <my_master_
aws s3api put-object --bucket test --key keys/test.txt --server-side-encryption aws:kms --ssekms-key-id <my_master_Key_id> --body test.txt
aws s3api放置对象--bucket test--key key key/test.txt--服务器端加密aws:kms--ssekms key id--body test.txt
上传成功,我看到以下响应
{
"SSEKMSKeyId": "arn:aws:kms:eu-central-1:<id>:key/<my_master_key>",
"ETag": "\"a4f4fdf078bdd5df758bf81b2d9bc94d\"",
"ServerSideEncryption": "aws:kms"
}
{
“SSEKMSKeyId”:“arn:aws:kms:eu-central-1::key/”,
“ETag”:“a4f4fdf078bdd5df758bf81b2d9bc94d”,
“服务器端加密”:“aws:kms”
}
此外,在S3中检查文件时,我详细地看到它已使用正确的主密钥在服务器端加密
问题是,当我在用户没有使用KMS主密钥权限的情况下下载文件时,我可以在应该加密的时候打开并读取文件,而不会出现问题
注意:我还有一个PutObject策略,在没有服务器端加密的情况下拒绝所有上传,这很好
我想知道我是否误解了服务器端加密,或者我是否做错了什么?非常感谢您的帮助。不幸的是,我认为您误解了S3中的服务器端加密。正如您自己指出的,从S3服务器端加密(SSE): 服务器端加密是关于保护静止数据的 当S3接收到您的对象时,它调用KMS来创建数据密钥,用该数据密钥(不是主密钥)加密您的数据,并将加密的数据密钥与加密的数据一起存储 当您尝试下载加密文件时,S3会发现该文件已加密,要求KMS解密数据密钥(使用主密钥),然后在返回给您之前使用解密的数据密钥解密数据。从文档以及SSE和KMS的工作方式来看,我的理解是,没有假设用户需要访问主密钥才能工作——S3有权访问它就足够了 您描述的用例更类似于: 客户端加密是指在将数据发送到服务器之前对其进行加密 亚马逊S3
在这种情况下,S3客户端(而不是后端的S3)将请求KMS数据密钥(从主密钥派生),在客户端加密数据并上传。无法在服务器上对其进行解密,当客户端下载(加密)文件时,需要在客户端进行解密(不过S3客户端会为您处理该问题)。如何检索该对象?如果不提供kms密钥,请求甚至会失败。如果bucket中的所有对象都已加密,则可以制定一个bucket策略,在不使用参数头的情况下拒绝GetObject,但对于标记为encrypted@FrédéricHenri我尝试使用CLI get对象,也尝试直接从AWS S3控制台下载这两种情况。我有PutObject策略,但不适用于get,这是一个好主意。我会尝试为get添加该策略。@FrédéricHenri您能给我看一下文档,其中需要密钥来下载对象吗?你说请求应该失败,但我认为那是不对的。我认为服务器端加密只会加密存储在S3服务中某个磁盘卷上的数据。S3在您下载对象时自动解除加密:如果对受AWS KMS保护的对象的所有GET和PUT请求不是通过SSL或使用SigV4发出的,那么它们都将失败。我很快读到,并认为它们也提到了KMS