是否可以使用AWS CLI在AWS账户之间复制?

时间:2014-03-08 00:37:15

标签: amazon-web-services amazon-s3 aws-cli

是否可以使用AWS CLI在AWS账户之间复制S3存储桶的内容?我知道可以在同一个帐户中的存储桶之间复制/同步,但我需要将旧AWS账户的内容转换为新账户。我在AWS CLI上配置了两个配置文件,但我没有看到如何在单个copy / sync命令中使用这两个配置文件。

4 个答案:

答案 0 :(得分:20)

非常简单。让我们说:

旧AWS账户= old@aws.com

新AWS账户= new@aws.com

old@aws.com

的身份登录AWS控制台

转到您选择的存储分区并应用存储分区策略

{
  "Statement": [
    {
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::bucket_name",
      "Principal": {
        "AWS": [
          "account-id-of-new@aws.com-account"
        ]
      }
    },
    {
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::bucket_name/*",
      "Principal": {
        "AWS": [
          "account-id-of-new@aws.com-account"
        ]
      }
    }
  ]
}

我认为bucket_nameaccount-id-of-new@aws.com-account1在上述政策

中显而易见

现在,请确保您使用AWS-CLI

的凭据运行new@aws.com

运行以下命令,副本将像魅力一样发生:

aws s3 cp s3://bucket_name/some_folder/some_file.txt  s3://bucket_in_new@aws.com_acount/fromold_account.txt

当然,请确保new@aws.com对自己的存储桶bucket_in_new@aws.com_acount具有写权限,该存储桶在上述命令中用于保存从old@aws.com存储桶复制的内容。

希望这有帮助。

答案 1 :(得分:6)

好的,我现在有这个工作!谢谢你的回答。最后,我使用了@slayedbylucifer和@Sony Kadavan之间的组合。对我有用的是新的存储桶策略和新的用户策略。

我添加了以下存储桶策略(帐户A):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::myfoldername",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111111111111:user/myusername"
                ]
            }
        },
        {
            "Action": [
                "s3:*"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::myfoldername",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111111111111:user/myusername"
                ]
            }
        }
    ]
}

以下用户政策(帐户B):

    {
       "Version": "2012-10-17",
       "Statement":{
          "Effect":"Allow",
          "Action":"s3:*",
          "Resource":"arn:aws:s3:::myfoldername/*"
       }

}

并使用以下aws cli命令(区域选项是必需的,因为帐户位于不同的区域):

aws --region us-east-1 s3 sync s3://myfoldername s3://myfoldername-accountb

答案 2 :(得分:1)

是的,你可以。 您需要首先在第二个帐户中创建一个IAM用户并将权限委派给它 - 在特定的S3存储桶上读/写/列表。完成此操作后,将此IAM用户的凭据提供给CLI,它将起作用。

如何委派权限: 向IAM用户委派跨账户权限 - AWS身份和访问管理:http://docs.aws.amazon.com/IAM/latest/UserGuide/DelegatingAccess.html#example-delegate-xaccount-roles

Sample S3 policy for delegation:

{
   "Version": "2012-10-17",
   "Statement" : {
      "Effect":"Allow",
      "Sid":"AccountBAccess1",
      "Principal" : {
          "AWS":"111122223333"
      },
      "Action":"s3:*",
      "Resource":"arn:aws:s3:::mybucket/*"
   }
}

在生产设置中执行此操作时,对权限的限制更多。如果您需要从一个桶复制到另一个桶。然后在一方面,你只需要给出List和Get(not Put)

答案 3 :(得分:1)

在我的情况下,下面提到的命令会起作用,希望这也适合你。我在不同的地区有两个不同的AWS账户,我想将旧的存储桶内容复制到新的存储桶中。我在AWS CLI中配置了两个配置文件。

使用以下aws cli命令:

aws s3 cp --profile <profile1> s3://source_bucket_path/ --profile <profile2> s3://destination_bucket_path/ --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --recursive