问题描述
想要在两个不同的AWS账户中使用 ‘aws s3 sync’ 命令同步存储桶。账户A是用户自己的账户,账户B是第三方拥有的账户。账户B已经通过角色assumeDevOps的假设给了账户A的用户jon对一个存储桶的访问权限。Jon通过假设assumeDevOps来访问账户B上的存储桶。但是现在,用户需要将存储桶同步回账户A,但是遇到了访问被拒绝的问题。可能是因为Jon所假设的角色没有对用户账户上的存储桶的访问权限。
用户想知道如何解决这个问题,并且是否有相关的文档可以参考。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
步骤1:为源存储桶附加策略
- 获取目标账户的AWS账户ID。
- 在源账户中,为源存储桶附加一个策略,允许目标账户获取对象。策略示例如下:
{
"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:为目标账户的用户或组附加策略
- 为目标账户的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://目标存储桶
请将上述示例中的”源存储桶”和”目标存储桶”替换为实际的源存储桶和目标存储桶的名称。
正文完