跨服务混淆代理问题防范 - Amazon Database Migration Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

跨服务混淆代理问题防范

混淆代理问题是一个安全性问题,即不具有操作执行权限的实体可能会迫使具有更高权限的实体执行该操作。在 Amazon 中,跨服务模拟可能会导致混淆代理问题。一个服务(呼叫服务) 调用另一项服务(所谓的服务)时,可能会发生跨服务模拟。可以操纵调用服务,使用其权限以在其他情况下该服务不应有访问权限的方式对另一个客户的资源进行操作。为防止这种情况,Amazon 提供可帮助您保护所有服务的数据的工具,而这些服务中的服务委托人有权限访问账户中的资源。

我们建议在资源策略中使用 aws:SourceArnaws:SourceAccount 全局条件上下文键,以限制 Amazon Database Migration Service 为其他服务提供的资源访问权限。如果 aws:SourceArn 值不包含账户 ID,例如 Amazon DMS 复制实例名称 (ARN),则您必须使用两个全局条件上下文键来限制权限。如果同时使用全局条件上下文密钥和包含账户 ID 的 aws:SourceArn 值,则 aws:SourceAccount 值和 aws:SourceArn 值中的账户在同一策略语句中使用时,必须使用相同的账户 ID。如果您只希望将一个资源与跨服务访问相关联,请使用 aws:SourceArn。如果您想允许该账户中的任何资源与跨服务使用操作相关联,请使用 aws:SourceAccount

Amazon DMS 从版本 3.4.7 及更高版本开始,支持混淆代理选项。有关更多信息,请参阅Amazon Database Migration Service 3.4.7 发行说明。如果您的复制实例使用 Amazon DMS 版本 3.4.6 或更低版本,请确保在设置混淆代理选项之前升级到最新版本。

防范混淆代理问题最有效的方法是使用 aws:SourceArn 全局条件上下文键和资源的完整 ARN。如果不知道资源的完整 ARN,或者正在指定多个资源,请针对 ARN 未知部分使用带有通配符字符 (*) 的 aws:SourceArn 全局上下文条件键。例如,arn:aws:dms:*:123456789012:rep:*

IAM 角色与 Amazon DMS API 配合使用,以防止跨服务混淆代理

要使用 Amazon CLI 或 Amazon DMS API 进行数据库迁移,您首先必须添加 dms-vpc-roledms-cloudwatch-logs-role IAM 角色到您的 Amazon 账户,然后才能使用 Amazon DMS 的功能。有关更多信息,请参阅创建 IAM 角色以用于 Amazon CLI 和 Amazon DMS API

以下示例显示了将 dms-vpc-role 角色用于 my-replication-instance 复制实例的策略。使用这些策略可防止混淆代理问题。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "dms.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "AWS:SourceAccount": "your_account_id" }, "ArnEqual": { "AWS:SourceArn": "arn:aws:dms:your_region:your_account_id:rep:my-replication-instance" } } } ] }

IAM policy 将预检评测存储在 Amazon S3 中,以防跨服务混淆代理

要将预评测结果存储在 S3 存储桶中,您需要创建一个允许 Amazon DMS 管理 Amazon S3 中的对象的 IAM policy。有关更多信息,请参阅在 S3 存储桶中存储迁移前评估运行

以下示例显示的信任策略带有在 IAM 角色上设置的混淆代理条件,以允许 Amazon DMS 访问指定用户账户下运行的所有任务和评测。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "dms.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "AWS:SourceAccount": "your_account_id" }, "ArnLike": { "AWS:SourceArn": [ "arn:aws:dms:your_region:your_account_id:assessment-run:*", "arn:aws:dms:region:your_account_id:task:*" ] } } } ] }

将 Amazon DynamoDB 用作 Amazon DMS 的目标端点,用于防范跨服务混淆代理

要使用 Amazon DynamoDB 作为数据库迁移的目标端点,您必须创建允许 Amazon DMS 代入和授予对 DynamoDB 表的访问权限的 IAM 角色。然后,当您在 Amazon DMS 中创建目标 DynamoDB 端点时使用此角色。有关更多信息,请参阅将 Amazon DynamoDB 作为目标

以下示例显示的信任策略带有在 IAM 角色上设置的混淆代理条件,以允许所有 Amazon DMS 端点访问 DynamoDB 表。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "dms.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "AWS:SourceAccount": "your_account_id" }, "ArnLike": { "AWS:SourceArn": "arn:aws:dms:your_region:your_account_id:endpoint:*" } } } ] }