您准备好提升您的云和 DevOps 技能了吗?
🐥《云原生devops》专门为您打造,我们精心打造的 30 篇文章库,这些文章涵盖了 Azure、AWS 和 DevOps 方法论的众多重要主题。无论您是希望精进专业知识的资深专业人士,还是渴望学习相关知识的新手,这套资源库都能满足您的需求。
如果文章能够给大家带来一定的帮助!欢迎关注、评论互动~
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:无缝监控:利用 AWS X-Ray 增强 S3 跨账户复制的可见性-CSDN博客
在当今的数字化环境中,数据是业务运营的基石。企业正在跨多个部门和应用程序生成海量数据,因此迫切需要高效、可靠且可扩展的数据管理解决方案。随着企业采用云技术,尤其是 Amazon Web Services (AWS),将数据存储在多个 AWS 账户中的灵活性越来越受到青睐。然而,这种灵活性也带来了挑战,尤其是在跨不同 AWS 账户的数据访问、同步和共享方面。AWS 提供了完整的解决方案:跨账户 S3 存储桶复制。
什么是跨账户 S3 存储桶复制(CRR)?

跨账户S3存储桶复制架构图
跨账户 S3 存储桶复制 (CRR) 是一项强大的功能,允许企业在位于不同 AWS 账户的 Amazon S3 存储桶之间无缝复制数据。但为什么这项功能至关重要呢?
- 增强的数据可访问性和协作性:随着业务的增长,企业通常会将工作负载划分到多个 AWS 账户,以提高管理和安全性。跨账户 S3 复制使团队能够轻松共享关键数据,在维护组织边界的同时促进协作。
- 增强数据保护和灾难恢复:在数据泄露和中断可能严重影响业务运营的时代,拥有强大的备份解决方案至关重要。跨账户复制可充当灾难恢复机制,确保数据不仅安全,而且可在另一个 AWS 账户中随时访问,从而提供额外的保护。
- 法规合规性和数据主权:许多行业都受到有关数据存储和处理的严格监管要求的约束。跨账户 S3 复制允许企业通过跨区域或司法管辖区复制数据来保持合规性,确保遵守当地法律,同时保持对数据的必要控制。
- 成本管理和优化:借助跨账户复制,组织可以根据成本和性能需求在各个账户之间进行策略性存储分配。此功能允许企业集中管理数据,并通过根据需要平衡不同账户之间的工作负载来优化成本。
- 简化多账户环境中的数据管理:许多组织将多个 AWS 账户作为其云战略的一部分,这通常是隔离工作负载、管理安全性或分配资源的最佳实践。跨账户 S3 复制通过跨账户自动执行复制过程,降低了数据管理的复杂性,从而节省了宝贵的时间并降低了人为错误的可能性。
CRR的关键技术组件
跨账户 S3 存储桶复制涉及多个技术组件和配置,旨在实现位于不同 AWS 账户的 S3 存储桶之间的无缝数据传输。以下是关键技术方面:
复制配置:
源存储桶和目标存储桶:识别并配置源存储桶(数据来源)和目标存储桶(数据复制的目标)。两个存储桶可以位于不同的 AWS 账户中。
复制规则:在源存储桶中设置复制规则,指定应复制的对象(例如,所有对象或带有特定标签或前缀的对象)。
IAM 角色和权限:
IAM 角色创建:在源账户中创建一个 IAM 角色,该角色授予 S3 服务将对象复制到目标存储桶所需的权限。此角色应包含授予目标存储桶访问权限的策略。
目标存储桶的存储桶策略:目标存储桶必须具有允许源账户中的 IAM 角色访问的存储桶策略。此策略指定源账户角色可以执行的操作(例如 s3:PutObject)。
版本控制:
存储桶版本控制:源存储桶和目标存储桶都必须启用版本控制。这允许存储一个对象的多个版本,这对于在复制期间跟踪更改和管理已删除的对象至关重要。
复制时间控制 (RTC):
指标和报告:Amazon S3 提供 RTC 指标,可深入了解复制过程,包括对象从源复制到目标所需的时间。此功能有助于合规性和性能监控。
事件通知:
S3 事件通知:使用事件通知在对象复制时触发操作或工作流(例如,调用 Lambda 函数或向 SQS 队列发送消息)。这允许与其他 AWS 服务集成以处理复制的数据。
复制状态监控:
监控复制状态:AWS 提供用于监控复制过程状态的工具。这可以通过 S3 控制台、AWS SDK 或 CloudTrail 日志来完成,允许用户跟踪成功或失败的复制事件。
数据一致性模型:
最终一致性:了解 S3 复制具有最终一致性。新增和更新的对象可能需要一些时间才能出现在目标存储桶中,并且在复制配置之后所做的更改可能要等到设置复制规则后才能复制。
处理删除操作:
删除标记和复制:默认情况下,删除标记不会跨账户复制。如果您想复制删除标记,可以在复制规则中进行配置,从而实现跨账户的一致性删除。
跨区域复制:
跨区域注意事项:跨账户复制也可能涉及跨区域设置。用户在跨不同 AWS 区域复制数据时,必须考虑延迟、数据传输成本和监管要求等因素。
实施工具和最佳实践:
AWS 管理控制台、CLI 和 SDK:利用 AWS 管理控制台、命令行界面 (CLI) 或 SDK 自动设置和管理跨账户 S3 复制。
最佳实践:采用最佳实践来配置 IAM 策略、监控成本,并定期审查和更新复制配置,以适应不断变化的数据格局。
CRR的配置
- 登录 AWS 管理控制台,并打开 Amazon S3 控制台 https://console.aws.amazon.com/s3/ 。
- 在"存储桶"列表中,选择所需的存储桶名称(在本例中,存储桶名称为"cute-doggos-0117")。

- 选择"管理"选项卡,向下滚动到"复制规则",然后选择"创建复制规则"。
- 在"复制规则名称"下,输入规则名称,以便稍后识别规则。该名称是必填项,并且在存储桶内必须是唯一的。
- 在"状态"下,确认已选择"已启用"。
- 在"源存储桶"部分,选择"应用于存储桶中的所有对象"选项作为规则范围。
- 在"目标"下,选择"指定另一个账户中的存储桶"选项,将源存储桶的内容复制到跨账户存储桶,并提供目标账户 ID 和存储桶名称 。选择"将对象所有权更改为目标存储桶所有者"选项,以确保副本归目标存储桶账户所有。

-
在"IAM 角色"部分的"从现有 IAM 角色中选择"下,选择"创建新角色",让 Amazon S3 为您创建新的 IAM 角色。在您的情况下,S3 创建的 IAM 复制角色的 ARN 是arn:aws:iam::654654314383:role/service-role/s3crr_role_for_cute-doggos-0117,并且它具有以下策略。
-
信任策略:
{
"Version": "2012--10--17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
权限策略s3crr_for_cute-doggos-0117_716c2d:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:ListBucket",
"s3:GetReplicationConfiguration",
"s3:GetObjectVersionForReplication",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging",
"s3:GetObjectRetention",
"s3:GetObjectLegalHold"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::cute-doggos-0117",
"arn:aws:s3:::cute-doggos-0117/*",
"arn:aws:s3:::cute-doggos-0415",
"arn:aws:s3:::cute-doggos-0415/*"
]
},
{
"Action": [
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags",
"s3:ObjectOwnerOverrideToBucketOwner"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::cute-doggos-0117/*",
"arn:aws:s3:::cute-doggos-0415/*"
]
}
]
}
-
您还可以根据用例需要选择其他选项,例如"复制使用 AWS KMS 加密的对象"、"更改复制对象的存储类别"、"删除标记复制"等。
-
完成后,选择"保存"。
目标存储桶"cute-doggos-0415"上的存储桶策略应包含以下语句以允许复制。
{
"Version": "2012--10--17",
"Id": "PolicyForDestinationBucket",
"Statement": [
{
"Sid": "Permissions on objects",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::654654314383:role/service-role/s3crr_role_for_cute-doggos-0117"
},
"Action": [
"s3:ReplicateDelete",
"s3:ReplicateObject",
"s3:ObjectOwnerOverrideToBucketOwner"
],
"Resource": "arn:aws:s3:::cute-doggos-0415/*"
},
{
"Sid": "Permissions on bucket",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::654654314383:role/service-role/s3crr_role_for_cute-doggos-0117"
},
"Action": [
"s3:List*",
"s3:GetBucketVersioning",
"s3:PutBucketVersioning"
],
"Resource": "arn:aws:s3:::cute-doggos-0415"
}
]
}
验证
在源存储桶cute-doggos-0117在上传一个图片sas-4.png
然后登录目标账号,找到目标存储桶cute-doggos-0415,看到图片已经被复制过来了。

S3 存储桶跨账户复制的最佳实践
- 启用版本控制:
确保源存储桶和目标存储桶都启用了版本控制。这是 S3 跨区域复制 (CRR) 和同区域复制 (SRR) 正常运行的必要条件。
- 使用 IAM 角色:
在目标账户中创建一个 IAM 角色,该角色授予源账户将对象复制到目标存储桶的权限。此角色应与源账户的 IAM 用户或角色建立信任关系。
- 设置正确的存储桶策略:
在源存储桶和目标存储桶上定义清晰的存储桶策略。该策略应允许用于复制的 IAM 角色执行必要的操作。
- 复制对象和删除操作:
如果您的用例需要,请确保为对象和删除操作配置复制 (s3:ReplicateDelete)。
- 使用 S3 事件通知:
考虑在源存储桶上设置事件通知以监控复制状态。这对于调试或运行监控非常有用。
- 监控复制状态:
实施一个系统来监控对象的复制状态。使用 Amazon CloudWatch 跟踪对象的复制状态,并在出现错误时采取措施。
- 测试您的配置:
定期测试您的复制设置,以确保其按预期工作。在源存储桶中创建测试文件,并验证它们是否已成功复制到目标存储桶。
- 使用标签进行组织:
在存储桶和对象上使用标签,以便有效地对资源进行分类和管理。这有助于报告和成本管理。
- 实施日志记录:
在源存储桶和目标存储桶上启用 S3 服务器访问日志记录。这提供了有助于故障排除和合规性的审计跟踪。
- 成本规划:
了解跨账户复制的成本影响,包括 AWS 账户之间的数据传输成本以及目标存储桶中的存储成本。使用 AWS Cost Explorer 监控和管理这些成本。
S3 存储桶跨账户复制的常见陷阱
- 缺少权限:
如果 IAM 角色或存储桶策略中未提供正确的权限,则复制将无法成功。请确保正确指定所有必需的操作。
- 存储桶策略不正确:
存储桶策略配置不正确可能会导致复制失败。请务必验证策略语法和参数是否正确。
- 未启用版本控制:
如果忘记在源存储桶或目标存储桶上启用版本控制,则复制过程将停止。必须启用版本控制才能使复制正常工作。
- 假设立即复制:
复制可能不会立即进行。请理解复制过程中可能会出现延迟,并在操作流程中对此进行了说明。
- 已删除对象的复制:
未配置 s3:ReplicateDelete 意味着删除操作将无法复制到目标存储桶,这可能会导致数据不一致。
- 复杂的 IAM 策略:
过于复杂的 IAM 策略可能会导致混乱,并可能由于策略评估而无意中拒绝访问。请遵循最小权限原则。
- 命名约定不一致:
为存储桶和对象使用一致的命名约定,以避免混淆,尤其是在处理多个账户和区域时。
- 错误处理失败:
缺乏处理复制错误或异常的机制可能会导致数据丢失或不一致。请实施复制状态监控。
- 安全意识淡薄:
未使用安全的身份验证和加密方法可能会导致复制过程中的数据泄露。请始终使用 SSL/TLS 进行数据传输。
- 未记录复制流程:
缺乏复制流程记录可能会导致知识流失,尤其是在管理设置的人员发生变更时。
结论
跨账户 S3 存储桶复制是 AWS 的一项强大功能,它使组织能够增强不同账户之间的数据持久性、可访问性和合规性。此复制功能允许将对象从一个 AWS 账户中的源 S3 存储桶自动异步复制到另一个账户中的目标存储桶。通过实施跨账户复制,企业可以支持数据治理策略、创建备份策略并促进灾难恢复计划。
为了有效地设置跨账户复制,应遵循一些最佳实践。首先,必须在源存储桶和目标存储桶上启用版本控制,因为这是复制的先决条件。正确配置的 IAM 角色和存储桶策略对于授予必要的权限以确保复制顺利进行至关重要。组织还应使用 Amazon CloudWatch 监控复制状态,并设置事件通知以便及时更新。此外,启用服务器访问日志记录有助于维护全面的审计跟踪,以实现合规性。
尽管跨账户复制有很多好处,但组织必须警惕常见的陷阱。缺少权限、存储桶策略不正确以及假设立即复制都可能导致数据不一致。此外,忽视错误处理机制和安全协议可能会使数据面临风险。为了确保跨账户复制设置稳健,详尽的文档记录和定期测试至关重要。
总而言之,如果管理得当,跨账户 S3 存储桶复制可以成为数据管理策略的重要组成部分,从而实现跨 AWS 账户安全、高效且合规的数据存储和访问。