AWS Datasync S3 -> S3 跨账户,对目的地感到困惑 role/account
AWS Datasync S3 -> S3 cross account, confused about destination role/account
我想使用 Datasync 将数据从一个账户的单个 S3 存储桶复制到另一个账户的单个 S3 存储桶。我正在关注此官方 AWS Datasync 博客:https://aws.amazon.com/blogs/storage/how-to-use-aws-datasync-to-migrate-data-between-amazon-s3-buckets/ 第二部分“跨账户复制对象”。
我已经设置了源和目标存储桶,并完成了“创建新的 IAM 角色并为源 S3 存储桶位置附加新的 IAM 策略”和“将以下信任关系添加到IAM 角色”(您可以通过在引号中搜索这些字符串来了解我在博客中的意思)但我现在对使用哪个帐户“打开源 S3 存储桶策略并应用以下策略来授予权限感到困惑IAM role to access the objects”和使用哪个账户 运行 AWS CLI 命令“aws sts get-caller-identity”,然后是“aws datasync create-location-s3”命令。我是在源账户还是目标账户上做这些?该博客在这些具体步骤上有点混乱和不清楚,我在任何地方都找不到更简单的指南。
源 S3 存储桶策略附加到源 S3 存储桶,因此您需要登录源帐户进行编辑。
接下来的步骤必须从 CLI 完成。措辞有点模棱两可,但关键短语是“确保您使用的是您在上一步创建的源 S3 存储桶策略中指定的相同 IAM 身份。”示例 S3 存储桶策略中引用的 IAM 身份是 arn:aws:iam::DEST-ACCOUNT-ID:role/DEST-ACCOUNT-USER
,因此您需要通过目标账户的身份验证才能执行 CLI 步骤。 aws sts get-caller-identity
命令只是 returns 用于执行命令的身份,因此它用于确认您使用的是预期的身份,而不是设置数据同步位置所严格要求的身份。
教程中没有明确提及,但目标账户中的用户当然需要适当的 IAM 权限才能创建数据同步位置和任务。
这样想可能会有所帮助:您需要允许目标账户中的角色访问源账户中的存储桶,然后在目标账户中设置 Datasync 位置和任务。因此,与 Datasync 配置相关的任何事情都需要在目标帐户中进行。
不起作用! - https://aws.amazon.com/blogs/storage/how-to-use-aws-datasync-to-migrate-data-between-amazon-s3-buckets/
1) 目标角色
- 在 目标 S3 存储桶所在的账户中创建必要的 IAM 角色
- 登录到目标账户并为AWS DataSync
创建一个IAM角色
DESTINATION-ROLE:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Action:
- sts:AssumeRole
Effect: Allow
Principal:
Service:
- datasync.amazonaws.com
Path: '/'
RoleName: DESTINATION-ROLE
DESTINATION-POLICY:
Type: AWS::IAM::Policy
Properties:
PolicyName: DESTINATION-POLICY
PolicyDocument:
Version: '2012-10-17'
Statement:
- Action:
- s3:GetBucketLocation
- s3:ListBucket
- s3:ListBucketMultipartUploads
Effect: Allow
Resource: arn:aws:s3:::SOURCEBUCKET
- Action:
- s3:AbortMultipartUpload
- s3:DeleteObject
- s3:GetObject
- s3:ListMultipartUploadParts
- s3:PutObjectTagging
- s3:GetObjectTagging
- s3:PutObject
Effect: Allow
Resource: arn:aws:s3:::SOURCEBUCKET/*
Roles:
- Ref: DESTINATION-ROLE
2) 源 S3 政策
- “复制您为源 S3 存储桶位置创建的 IAM 角色的 ARN。
- 现在,登录到 源 帐户。
- 打开源 S3 存储桶策略并应用以下策略为 IAM 角色授予权限
Version: '2012-10-17'
Statement:
- Sid: BucketPolicyForDataSync
Effect: Allow
Principal:
AWS:
- arn:aws:iam::DEST-ACCOUNT-ID:role/DESTINATION-ROLE
Action:
- s3:GetBucketLocation
- s3:ListBucket
- s3:ListBucketMultipartUploads
- s3:AbortMultipartUpload
- s3:DeleteObject
- s3:GetObject
- s3:ListMultipartUploadParts
- s3:PutObject
- s3:GetObjectTagging
- s3:PutObjectTagging
Resource:
- arn:aws:s3:::SOURCEBUCKET
- arn:aws:s3:::SOURCEBUCKET/*
3) CLI 调用
- 现在,启动 AWS CLI(从来源账户)...
aws datasync create-location-s3 \
--s3-bucket-arn 'arn:aws:s3:::SOURCEBUCKET' \
--region 'us-east-1' \
--s3-config '
{
"BucketAccessRoleArn":
"arn:aws:iam::DEST-ACCOUNT-ID:role/DESTINATION-ROLE"
}
'
3.1) 源帐户错误
An error occurred (AccessDeniedException) when calling the CreateLocationS3 operation: Cross-account pass role is not allowed.
3.2) 错误目标帐户
An error occurred (InvalidRequestException) when calling the CreateLocationS3 operation: Please provide a bucket in the us-east-1 region where DataSync is currently used.
我遇到了同样的问题并得到了修复,但我收到了同样的错误消息
"An error occurred (InvalidRequestException) when calling the CreateLocationS3 operation: Please provide a bucket in the us-east-2 region where DataSync is currently used".
您需要传递 --region 标志和
并放入源桶所在的区域。所以查看源桶视图并获取区域。
我看到的作品是:
- 运行 目标账户中的 CLI 命令
- 当您 运行 执行 CLI 命令时,您应该确保 user/botocore 与您 运行 执行 CLI 命令的会话的 ARN 可以访问正如@gph 所说,源存储桶至少 s3:ListBucket。我发现棘手的是:如果您没有 运行 用户的 CLI 命令,而是使用某些角色,您需要确保在承担源帐户中的角色后授予对 botocore 会话的权限。当然,该权限与 botocore 会话持续时间一样短暂,但如果您不想使用 IAM 用户登录,它至少可以帮助您创建位置。
我想使用 Datasync 将数据从一个账户的单个 S3 存储桶复制到另一个账户的单个 S3 存储桶。我正在关注此官方 AWS Datasync 博客:https://aws.amazon.com/blogs/storage/how-to-use-aws-datasync-to-migrate-data-between-amazon-s3-buckets/ 第二部分“跨账户复制对象”。
我已经设置了源和目标存储桶,并完成了“创建新的 IAM 角色并为源 S3 存储桶位置附加新的 IAM 策略”和“将以下信任关系添加到IAM 角色”(您可以通过在引号中搜索这些字符串来了解我在博客中的意思)但我现在对使用哪个帐户“打开源 S3 存储桶策略并应用以下策略来授予权限感到困惑IAM role to access the objects”和使用哪个账户 运行 AWS CLI 命令“aws sts get-caller-identity”,然后是“aws datasync create-location-s3”命令。我是在源账户还是目标账户上做这些?该博客在这些具体步骤上有点混乱和不清楚,我在任何地方都找不到更简单的指南。
源 S3 存储桶策略附加到源 S3 存储桶,因此您需要登录源帐户进行编辑。
接下来的步骤必须从 CLI 完成。措辞有点模棱两可,但关键短语是“确保您使用的是您在上一步创建的源 S3 存储桶策略中指定的相同 IAM 身份。”示例 S3 存储桶策略中引用的 IAM 身份是 arn:aws:iam::DEST-ACCOUNT-ID:role/DEST-ACCOUNT-USER
,因此您需要通过目标账户的身份验证才能执行 CLI 步骤。 aws sts get-caller-identity
命令只是 returns 用于执行命令的身份,因此它用于确认您使用的是预期的身份,而不是设置数据同步位置所严格要求的身份。
教程中没有明确提及,但目标账户中的用户当然需要适当的 IAM 权限才能创建数据同步位置和任务。
这样想可能会有所帮助:您需要允许目标账户中的角色访问源账户中的存储桶,然后在目标账户中设置 Datasync 位置和任务。因此,与 Datasync 配置相关的任何事情都需要在目标帐户中进行。
不起作用! - https://aws.amazon.com/blogs/storage/how-to-use-aws-datasync-to-migrate-data-between-amazon-s3-buckets/
1) 目标角色
- 在 目标 S3 存储桶所在的账户中创建必要的 IAM 角色
- 登录到目标账户并为AWS DataSync 创建一个IAM角色
DESTINATION-ROLE:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Action:
- sts:AssumeRole
Effect: Allow
Principal:
Service:
- datasync.amazonaws.com
Path: '/'
RoleName: DESTINATION-ROLE
DESTINATION-POLICY:
Type: AWS::IAM::Policy
Properties:
PolicyName: DESTINATION-POLICY
PolicyDocument:
Version: '2012-10-17'
Statement:
- Action:
- s3:GetBucketLocation
- s3:ListBucket
- s3:ListBucketMultipartUploads
Effect: Allow
Resource: arn:aws:s3:::SOURCEBUCKET
- Action:
- s3:AbortMultipartUpload
- s3:DeleteObject
- s3:GetObject
- s3:ListMultipartUploadParts
- s3:PutObjectTagging
- s3:GetObjectTagging
- s3:PutObject
Effect: Allow
Resource: arn:aws:s3:::SOURCEBUCKET/*
Roles:
- Ref: DESTINATION-ROLE
2) 源 S3 政策
- “复制您为源 S3 存储桶位置创建的 IAM 角色的 ARN。
- 现在,登录到 源 帐户。
- 打开源 S3 存储桶策略并应用以下策略为 IAM 角色授予权限
Version: '2012-10-17'
Statement:
- Sid: BucketPolicyForDataSync
Effect: Allow
Principal:
AWS:
- arn:aws:iam::DEST-ACCOUNT-ID:role/DESTINATION-ROLE
Action:
- s3:GetBucketLocation
- s3:ListBucket
- s3:ListBucketMultipartUploads
- s3:AbortMultipartUpload
- s3:DeleteObject
- s3:GetObject
- s3:ListMultipartUploadParts
- s3:PutObject
- s3:GetObjectTagging
- s3:PutObjectTagging
Resource:
- arn:aws:s3:::SOURCEBUCKET
- arn:aws:s3:::SOURCEBUCKET/*
3) CLI 调用
- 现在,启动 AWS CLI(从来源账户)...
aws datasync create-location-s3 \
--s3-bucket-arn 'arn:aws:s3:::SOURCEBUCKET' \
--region 'us-east-1' \
--s3-config '
{
"BucketAccessRoleArn":
"arn:aws:iam::DEST-ACCOUNT-ID:role/DESTINATION-ROLE"
}
'
3.1) 源帐户错误
An error occurred (AccessDeniedException) when calling the CreateLocationS3 operation: Cross-account pass role is not allowed.
3.2) 错误目标帐户
An error occurred (InvalidRequestException) when calling the CreateLocationS3 operation: Please provide a bucket in the us-east-1 region where DataSync is currently used.
我遇到了同样的问题并得到了修复,但我收到了同样的错误消息
"An error occurred (InvalidRequestException) when calling the CreateLocationS3 operation: Please provide a bucket in the us-east-2 region where DataSync is currently used".
您需要传递 --region 标志和 并放入源桶所在的区域。所以查看源桶视图并获取区域。
我看到的作品是:
- 运行 目标账户中的 CLI 命令
- 当您 运行 执行 CLI 命令时,您应该确保 user/botocore 与您 运行 执行 CLI 命令的会话的 ARN 可以访问正如@gph 所说,源存储桶至少 s3:ListBucket。我发现棘手的是:如果您没有 运行 用户的 CLI 命令,而是使用某些角色,您需要确保在承担源帐户中的角色后授予对 botocore 会话的权限。当然,该权限与 botocore 会话持续时间一样短暂,但如果您不想使用 IAM 用户登录,它至少可以帮助您创建位置。