S3 复制:拒绝访问:Amazon S3 无法检测目标存储桶是否启用了版本控制
S3 replication: Access denied: Amazon S3 can't detect whether versioning is enabled on the destination bucket
我正在配置两个 s3 存储桶之间的复制。但我收到错误
Access denied: Amazon S3 can't detect whether versioning is enabled on
the destination bucket.
目标存储桶位于不同区域的另一个账户中。
这是目标存储桶中的存储桶策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::destination",
"arn:aws:s3:::destination/*"
],
"Condition": {
"StringNotLike": {
"aws:userId": [
"AROAS3AHCETXXDF5Z5GVG:*",
"AROAS3AHCETXX2DMH4JPY:*",
"AROAS3AHCEXXX4SNCNTNV:*",
"AROAVJZZXXXXXZBBR7PN6L:*"
]
}
}
},
{
"Sid": "S3ReplicationPolicyStmt1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::XXXXXXXXXXX:root"
},
"Action": [
"s3:GetBucketVersioning",
"s3:GetObjectVersionForReplication",
"s3:PutBucketVersioning",
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:PutObjectAcl",
"s3:ObjectOwnerOverrideToBucketOwner"
],
"Resource": [
"arn:aws:s3:::destination",
"arn:aws:s3:::destination/*"
]
}
]
}
我的存储桶是高度机密的,所以我首先拒绝除了某些角色之外的所有访问:所以在这种情况下,我也排除了复制角色ID。
为什么复制角色仍然不允许复制?这个存储桶策略有什么问题?
在上面的策略中,我实际上授权了复制角色两次。在两个声明中。
这是复制 IAM 角色策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:Get*",
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::source",
"arn:aws:s3:::source/*"
]
},
{
"Action": [
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags",
"s3:GetBucketVersioning",
"s3:GetObjectVersionTagging",
"s3:ObjectOwnerOverrideToBucketOwner"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::destination/*"
}
]
}
我尝试删除显式拒绝语句并测试复制,源存储桶获得版本控制并且我没有访问被拒绝,但对象没有被复制。
根据我的经验,AWS S3 策略遵循白名单方法,这意味着您首先需要为您想要允许的操作添加声明,然后最后声明拒绝其他所有操作。
因此,对于您的情况,请尝试仅切换语句。
解决方案是将源存储桶中的复制角色也列入白名单。两个存储桶都有相似的策略,因此有必要允许复制角色访问源。
我正在配置两个 s3 存储桶之间的复制。但我收到错误
Access denied: Amazon S3 can't detect whether versioning is enabled on the destination bucket.
目标存储桶位于不同区域的另一个账户中。 这是目标存储桶中的存储桶策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::destination",
"arn:aws:s3:::destination/*"
],
"Condition": {
"StringNotLike": {
"aws:userId": [
"AROAS3AHCETXXDF5Z5GVG:*",
"AROAS3AHCETXX2DMH4JPY:*",
"AROAS3AHCEXXX4SNCNTNV:*",
"AROAVJZZXXXXXZBBR7PN6L:*"
]
}
}
},
{
"Sid": "S3ReplicationPolicyStmt1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::XXXXXXXXXXX:root"
},
"Action": [
"s3:GetBucketVersioning",
"s3:GetObjectVersionForReplication",
"s3:PutBucketVersioning",
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:PutObjectAcl",
"s3:ObjectOwnerOverrideToBucketOwner"
],
"Resource": [
"arn:aws:s3:::destination",
"arn:aws:s3:::destination/*"
]
}
]
}
我的存储桶是高度机密的,所以我首先拒绝除了某些角色之外的所有访问:所以在这种情况下,我也排除了复制角色ID。
为什么复制角色仍然不允许复制?这个存储桶策略有什么问题? 在上面的策略中,我实际上授权了复制角色两次。在两个声明中。
这是复制 IAM 角色策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:Get*",
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::source",
"arn:aws:s3:::source/*"
]
},
{
"Action": [
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags",
"s3:GetBucketVersioning",
"s3:GetObjectVersionTagging",
"s3:ObjectOwnerOverrideToBucketOwner"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::destination/*"
}
]
}
我尝试删除显式拒绝语句并测试复制,源存储桶获得版本控制并且我没有访问被拒绝,但对象没有被复制。
根据我的经验,AWS S3 策略遵循白名单方法,这意味着您首先需要为您想要允许的操作添加声明,然后最后声明拒绝其他所有操作。
因此,对于您的情况,请尝试仅切换语句。
解决方案是将源存储桶中的复制角色也列入白名单。两个存储桶都有相似的策略,因此有必要允许复制角色访问源。