如何在不同账户中使用 ‘aws s3 sync’ 同步两个存储桶

118次阅读
没有评论

问题描述

想要在两个不同的AWS账户中使用 ‘aws s3 sync’ 命令同步存储桶。账户A是用户自己的账户,账户B是第三方拥有的账户。账户B已经通过角色assumeDevOps的假设给了账户A的用户jon对一个存储桶的访问权限。Jon通过假设assumeDevOps来访问账户B上的存储桶。但是现在,用户需要将存储桶同步回账户A,但是遇到了访问被拒绝的问题。可能是因为Jon所假设的角色没有对用户账户上的存储桶的访问权限。

用户想知道如何解决这个问题,并且是否有相关的文档可以参考。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

步骤1:为源存储桶附加策略

  1. 获取目标账户的AWS账户ID。
  2. 在源账户中,为源存储桶附加一个策略,允许目标账户获取对象。策略示例如下:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DelegateS3Access",
            "Effect": "Allow",
            "Principal": {"AWS": "目标账户的AWS账户ID"},
            "Action": ["s3:ListBucket","s3:GetObject"],
            "Resource": [
                "arn:aws:s3:::源存储桶/*",
                "arn:aws:s3:::源存储桶"
            ]
        }
    ]
}

请将上述示例中的”目标账户的AWS账户ID”替换为实际的目标账户的AWS账户ID。

步骤2:为目标账户的用户或组附加策略

  1. 为目标账户的IAM用户或组附加一个策略,允许该用户将对象从源存储桶复制到目标存储桶。策略示例如下:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::源存储桶",
                "arn:aws:s3:::源存储桶/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::目标存储桶",
                "arn:aws:s3:::目标存储桶/*"
            ]
        }
    ]
}

请将上述示例中的”源存储桶”和”目标存储桶”替换为实际的源存储桶和目标存储桶的名称。

步骤3:将对象从源存储桶复制到目标存储桶

在设置了源存储桶的策略和目标账户的策略之后,目标账户就可以将对象从源存储桶复制到目标存储桶了。可以使用以下命令将源存储桶的所有内容同步到目标存储桶:

aws s3 sync s3://源存储桶 s3://目标存储桶

请将上述示例中的”源存储桶”和”目标存储桶”替换为实际的源存储桶和目标存储桶的名称。

更多详细信息,请参考这个链接这个链接

正文完