Encryption S3与boto,静止时加密
我们试图在AWS中有一个完全加密的bucket 我们有一个密钥,Encryption S3与boto,静止时加密,encryption,amazon-s3,boto,Encryption,Amazon S3,Boto,我们试图在AWS中有一个完全加密的bucket 我们有一个密钥,key=“arn:aws:kms:****”,一个bucketName,bucketName=“MyUniqueBucket”和一些我想在静止时上传和加密的json:有效载荷={“foo”:“bar”} 加密部队政策: policy = { "Version": "2012-10-17", "Id": "PutObjPolicy", "Statement": [{ "Sid": "DenyUnEncryptedO
key=“arn:aws:kms:****”
,一个bucketName,bucketName=“MyUniqueBucket”
和一些我想在静止时上传和加密的json:有效载荷={“foo”:“bar”}
加密部队政策:
policy = {
"Version": "2012-10-17",
"Id": "PutObjPolicy",
"Statement": [{
"Sid": "DenyUnEncryptedObjectUploads",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": ("arn:aws:s3:::%s/*") % bucketName,
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption":"aws:kms"
}
}
}
]
}
现在通过boto
我们连接到eu-west-1
:
def get_bucket():
conn = s3.connect_to_region("eu-west-1")
try:
return conn.get_bucket(bucketName)
except S3ResponseError:
return conn.create_bucket(bucketName, location=Location.EU)
对于bucket,我们现在要设置该策略:
bucket = get_bucket()
bucket.set_policy(json.dumps(policy))
现在接下来我想上传一个文件,并用我的安全密钥对其进行加密(以启用轮换,因为默认主密钥不允许轮换)
但是,它会引发一个错误:
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。
我查到的是:
我有权使用钥匙
我与v4签名连接
我可以上传到一个桶没有加密
我可以上传设置为加密的标题,而无需使用自己的自定义密钥(即使用默认密钥)(注意,这会导致MD5与ETAG之间的问题)
但我一定是在传递密钥时出错了,因为不管它是否被禁用。它仍然会给出签名错误
我遗漏了什么 回答晚了,但我碰到了同样的问题,发现了以下问题: boto中的SSE-KMS支持实际上存在两个问题。 引用github的: Boto为包含类似内容的请求计算了不正确的签名 标题,因为它不是按标题名称而是按 完成标题 一个例子是带有范围api的多部分上载部分副本。博托 使用此顺序计算其签名,因为-排序早于: x-amz-copy-source-range:字节=5-15
x-amz-copy-source:多部分-1426209034/源 顺序不正确,应该相反 由于md5签名不匹配,即使在修补boto代码之后,仍然无法工作。 同样是qoute,这次来自用户hoppinghol(链接可以在上面提到的pull请求下的讨论线程中找到): 既然v4签名已修复,那么当KMS加密头也已设置时 在S3上传时,md5校验和将不匹配,就像sse-c上传一样。这 添加标头检查以跳过md5检查,方法与sse-c上载相同 这两项更改都尚未合并到boto主分支中。我不得不对boto库进行修补(我知道这不是最好的主意,但这只是检查更改是否有帮助),它对我起了作用
s3.Bucket(event['bucket']).put_object(
Key=event['key'],
Body=event['body'],
ServerSideEncryption='AES256'
)
使用默认的AWS S3键。如果S3遭到黑客攻击,您的文件将被加密,但任何有权访问该文件或存储桶的人都可以读取它 这方面有更新吗?
s3.Bucket(event['bucket']).put_object(
Key=event['key'],
Body=event['body'],
ServerSideEncryption='AES256'
)