【问题标题】:S3 replication: Access denied: Amazon S3 can't detect whether versioning is enabled on the destination bucketS3 复制:访问被拒绝:Amazon S3 无法检测是否在目标存储桶上启用了版本控制
【发布时间】:2020-04-06 18:25:04
【问题描述】:

我正在配置两个 s3 存储桶之间的复制。但我得到了错误

访问被拒绝:Amazon S3 无法检测是否启用了版本控制 目标存储桶。

目标存储桶位于另一个账户,不同区域。 这是目标存储桶中的存储桶策略:

{
    "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/*"
        }
    ]
}

我尝试删除显式拒绝语句并测试复制,源存储桶获得了版本控制,我没有拒绝访问,但没有复制对象。

【问题讨论】:

    标签: amazon-web-services security amazon-s3 bucket


    【解决方案1】:

    根据我的经验,AWS S3 策略遵循白名单方法,这意味着您首先需要为要允许的操作添加语句,然后再添加最终语句以拒绝其他所有操作。

    因此,在您的情况下,请尝试切换语句。

    【讨论】:

    • 在我的策略中,我实际上两次授权复制角色。在这两个陈述中。
    • @Souad 等等,重新阅读您的问题。您说这是目标存储桶中的策略,但是您在源中使用的用户/角色的策略是什么?您需要授予该用户/角色权限(在 IAM 中)才能使用 GetBucketVersioning
    • 请检查我的问题更新中的 iam 角色。我的角色确实允许 GetBucketVersioning。
    • @Souad 请注意,在您的 IAM 策略中,资源是 "arn:aws:s3:::destination/*",但是,s3:GetBucketVersioning 在存储桶级别工作,而不是在对象级别工作。也就是说,资源必须是"arn:aws:s3:::destination"。但是,Replicate* 在对象级别工作,因此您需要有不同的语句。看看docs.aws.amazon.com/IAM/latest/UserGuide/…,您需要为每个操作使用哪种资源类型。
    【解决方案2】:

    解决方案是将源存储桶中的复制角色也列入白名单。两个存储桶具有相似的策略,因此有必要允许复制角色访问源。

    【讨论】:

      猜你喜欢
      • 2017-02-12
      • 2011-12-04
      • 2012-06-24
      • 2019-04-20
      • 2019-02-03
      • 2020-05-05
      • 1970-01-01
      • 2018-01-10
      • 1970-01-01
      相关资源
      最近更新 更多