Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services Can';t使两个帐户之间的Amazon S3跨区域复制正常工作_Amazon Web Services_Amazon S3 - Fatal编程技术网

Amazon web services Can';t使两个帐户之间的Amazon S3跨区域复制正常工作

Amazon web services Can';t使两个帐户之间的Amazon S3跨区域复制正常工作,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,我希望有人能帮助我进行AmazonS3跨区域复制查询。我有两个Amazon AWS帐户,每个帐户在不同的地区有一个存储桶。我想将数据从一个bucket复制到另一个bucket,据我所知,这应该是一个简单的创建过程。然而,我真的很挣扎,我不知道我做错了什么。我在网上遵循了很多说明,包括阅读了各种AWS教程,看到了很多示例,但我无法获得要复制的数据 我在这两个bucket上都启用了版本控制,并且没有一个数据是加密的。但是,我的源bucket中有一个策略,允许通过引用条件访问源数据,因此数据(本例中的

我希望有人能帮助我进行AmazonS3跨区域复制查询。我有两个Amazon AWS帐户,每个帐户在不同的地区有一个存储桶。我想将数据从一个bucket复制到另一个bucket,据我所知,这应该是一个简单的创建过程。然而,我真的很挣扎,我不知道我做错了什么。我在网上遵循了很多说明,包括阅读了各种AWS教程,看到了很多示例,但我无法获得要复制的数据

我在这两个bucket上都启用了版本控制,并且没有一个数据是加密的。但是,我的源bucket中有一个策略,允许通过引用条件访问源数据,因此数据(本例中的图像)只能通过特定域访问。这一切都很好,我怀疑这可能是限制从目标桶访问的原因

我已按照联机说明设置复制规则和IAM策略

因此,我的源桶策略是:-

{
"Version": "2012-10-17",
"Id": "http referrer policy",
"Statement": [
    {
        "Sid": "Allow get requests originated from list",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::SOURCEBUCKET/*",
        "Condition": {
            "StringLike": {
                "aws:Referer": [
                    "http://www.domain1.com/*",
                    "https://www.domain2.com/*",
                    "http://domain3.com/*"
                ]
            }
        }
    }
]
{
"Version": "2008-10-17",
"Id": "S3-Console-Replication-Policy",
"Statement": [
    {
        "Sid": "S3ReplicationPolicyStmt1",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::MYSOURCEACCIDNUMBER:root"
        },
        "Action": [
            "s3:List*",
            "s3:GetBucketVersioning",
            "s3:PutBucketVersioning",
            "s3:ReplicateObject",
            "s3:ReplicateDelete"
        ],
        "Resource": [
            "arn:aws:s3:::DESTINATIONBUCKET",
            "arn:aws:s3:::DESTINATIONBUCKET/*"
        ]
    }
]
}

我的目标桶策略是:-

{
"Version": "2012-10-17",
"Id": "http referrer policy",
"Statement": [
    {
        "Sid": "Allow get requests originated from list",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::SOURCEBUCKET/*",
        "Condition": {
            "StringLike": {
                "aws:Referer": [
                    "http://www.domain1.com/*",
                    "https://www.domain2.com/*",
                    "http://domain3.com/*"
                ]
            }
        }
    }
]
{
"Version": "2008-10-17",
"Id": "S3-Console-Replication-Policy",
"Statement": [
    {
        "Sid": "S3ReplicationPolicyStmt1",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::MYSOURCEACCIDNUMBER:root"
        },
        "Action": [
            "s3:List*",
            "s3:GetBucketVersioning",
            "s3:PutBucketVersioning",
            "s3:ReplicateObject",
            "s3:ReplicateDelete"
        ],
        "Resource": [
            "arn:aws:s3:::DESTINATIONBUCKET",
            "arn:aws:s3:::DESTINATIONBUCKET/*"
        ]
    }
]
}

是否有人可以建议我如何(如果需要)添加到源bucket策略中,以启用从目标bucket的访问?我很有信心问题就在这里


提前感谢。

为了测试这种情况,我做了以下操作:

  • 使用版本控制在
    Account-A
    中创建
    Bucket-A
  • 使用版本控制在
    Account-B
    中创建
    Bucket-B
  • 已在
    Bucket-A
    上配置跨区域复制,选择“创建新角色”(见下文)
  • 将UI中提供的目标桶策略(与您的匹配,如上)添加到
    bucket-B
流程为_bucket-a_到_bucket-b创建了一个名为
s3crr_role_的角色,该角色包含:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:Get*",
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::bucket-a",
                "arn:aws:s3:::bucket-a/*"
            ]
        },
        {
            "Action": [
                "s3:ReplicateObject",
                "s3:ReplicateDelete",
                "s3:ReplicateTags",
                "s3:GetObjectVersionTagging"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::bucket-b/*"
        }
    ]
}
然后我上传了一个文件到
Bucket-a
,它成功地复制到
Bucket-B

因此,这个过程似乎运作良好。如果您遇到困难,请考虑以下几点:

  • 确保没有可能对bucket应用
    DENY
    的策略
  • 检查分配给CRR的IAM角色,并确保其正在如上所示授予权限
  • 检查
  • 另见

当相同的手动创建的策略失败时,让复制规则设置创建新的IAM角色也对我有效。当比较自动创建的角色和我手动创建的角色时,区别在于自动创建的工作角色是服务角色,而我的非工作角色是实例角色


再次检查用于复制的源存储桶上使用的IAM角色是服务角色或常规角色,但不是实例配置文件角色。

谢谢John。我删除了源bucket中的规则并重新创建了它。唯一的区别是我让流程创建了角色,而这实际上起了作用!谢谢有没有办法将现有文件同步到目标存储桶?即,复制过程有效,但仅适用于新文件。那么源存储桶中已经存在的所有内容呢?不,它不会复制任何历史。您可以与
aws s3同步s3://源存储桶/s3://目标存储桶
一起使用来复制现有内容。