当对象是服务器端加密时,我无法设置跨区域复制。我正在使用awscli进行设置。这就是我所做的。
跨区域复制角色IAM策略如下所示:
<xp:checkBox text="Agree" value="#{proposalBean.proposal.mailNotify}" checkedValue="YES"/>
这是我的复制配置文件的样子:
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:GetReplicationConfiguration",
"s3:ListBucket"
],
"Resource":[
"arn:aws:s3:::source-bucket"
]
},
{
"Effect":"Allow",
"Action":[
"s3:GetObjectVersion",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging"
],
"Resource":[
"arn:aws:s3:::source-bucket/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags"
],
"Resource":"arn:aws:s3:::destination-bucket/*"
}
]
}
这就是我的cli命令的样子:
{
"Role": "arn:aws:iam::1234567890:role/replication-role",
"Rules": [
{
"ID": "abcd",
"Prefix": "",
"Status": "Enabled",
"SourceSelectionCriteria": {
"SseKmsEncryptedObjects": {
"Status": "Enabled"
}
},
"Destination": {
"Bucket": "arn:aws:s3:::destinationbucket",
"EncryptionConfiguration": {
"ReplicaKmsKeyID": "arn:aws:kms:us-west-2:1234567890:key/849b779d-bdc3-4190-b285-6006657a578c"
}
}
}
]
}
当我在运行cli命令后转到S3存储桶时,我可以看到使用aws s3api put-bucket-replication --bucket "sourcebucket" --replication-configuration file://./replicationconfigfile.json
创建的复制规则为KMS-Encrypted Object
但是当我点击replicate
查看详细信息时,它没有选择任何KMS密钥。
------ -------更新
如果我删除cli创建的规则并使用控制台进行设置,它会选择向导中的所有kms键。所以问题是当我使用cli时为什么不在源区域中选择kms键? 我在这里错过了什么?
答案 0 :(得分:0)
CLI中缺少向导中显示的KMS列表字段,我有同样的问题,因为我使用KMS来加密我的源和我的目标存储桶,我无法选择密钥来解密我的对象我正在使用Terraform来创建复制规则。
正如您在此处所见,唯一存在的参数是“复制条件”,值可以是 true 或 false ,列表字段“选择一个或多个用于解密源对象的密钥”在AWS CLI中不存在。
我已将此问题发送给他们。
我做了什么? 我替换了由我管理的生成的KMS密钥以使用AWS管理的密钥,我只启用了服务器端加密,并且我在桶,源和目标中都选择了AES256加密类型,它对我来说很好。
答案 1 :(得分:0)
以防万一其他人遇到此问题,我与AWS支持进行了漫长的交谈,他们确认没有办法设置以编程方式(或在CloudFormation中)解密源对象的密钥。就我而言,我必须使用SDK设置配置,然后在控制台中手动设置解密密钥。令人十分恼火的是,他们尚未在2020年7月8日前解决此问题。
环顾他们讨论相同问题的Terraform线程,我相信他们可以通过直接为CRR设置IAM策略来解决此问题,但是我不确定您将如何做到这一点。 https://github.com/terraform-providers/terraform-provider-aws/issues/6046#issuecomment-427960842