在某些实验场景下,可能需要将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 命令即可查询版本。
至此操作完成。