配置S3桶允许跨账户复制数据

在某些实验场景下,可能需要将1个S3桶内的实验素材分发给多个AWS账户。此时,打开Public访问允许互联网公开是不安全的。通过设置S3桶的ACL可以定向授权给特定用户允许访问。

进入原始数据保存的S3桶,进入桶内,在标签页中点击第三个标签页Permission权限界面,在下方的Bucket Policy位置输入如下的配置。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DelegateS3Access",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws-cn:iam::123456781111:root",
                    "arn:aws-cn:iam::987654321111:root"
                ]
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws-cn:s3:::demo-data-abc/*",
                "arn:aws-cn:s3:::demo-data-abc"
            ]
        }
    ]
}

请替换上文中的AWS账号为要分发给的用户的账号,如果有多个账号,请分别填写,并将Resource部分的S3桶名字替换为实际要分发数据的桶的名字。在这个AWS账户下的IAM用户隶属的Access Key都将具有权限。此外,如果希望复制整个目录,使用 –recursive 命令,那么就需要提供ListBucket权限,否则将只能逐条复制单个文件而不能复制自动的整个目录。

注:虽然AWS中国区没有root账号,但是实际操作中本策略可以成功地为中国区的一个AWS账户内的所有IAM用户赋予访问权限。

现在可以切换到要复制数据的用户账户内,创建IAM用户,创建Access Key,安装AWS CLI客户端,配置Access Key,然后开始数据复制。

执行如下命令复制整个桶。

aws s3 cp --recursive s3://demo-data-abc/demo1/ s3://my-demo-bucket/demo1/ --copy-props none

注意对于AWS CLI V2版本,需要增加 –copy-props none 方可复制成功。检查AWS CLI版本的方法是运行 aws –version 命令即可查询版本。

至此操作完成。