在 DynamoDB 中使用基于资源的策略进行跨账户访问
使用基于资源的策略,您可以提供跨账户访问不同 Amazon Web Services 账户中可用资源的权限。如果您在与资源相同的 Amazon Web Services 区域中有分析器,则将通过 IAM Access Analyzer 外部访问调查发现报告基于资源的策略允许的所有跨账户访问权限。IAM Access Analyzer 将根据 IAM 策略语法和最佳实践运行策略检查,以验证您的策略。这些检查项生成结果并提供可操作的建议,可帮助您编写可操作且符合安全最佳实践的策略。您可以在 DynamoDB 控制台
要了解通过使用 IAM Access Analyzer 验证策略的信息,请参阅 《IAM 用户指南》中的 IAM Access Analyzer 策略验证。要查看 IAM Access Analyzer 返回的警告、错误和建议的列表,请参阅 IAM Access Analyzer 策略检查引用。
要向账户 A 中的用户 A 授予访问账户 B 中表 B 的 GetItem 权限,请执行以下步骤:
-
将基于资源的策略附加到表 B,该策略向用户 A 授予执行
GetItem操作的权限。 -
向用户 A 附加基于身份的策略,授予其对表 B 执行
GetItem操作的权限。
使用 DynamoDB 控制台
DynamoDB 数据面板和控制面板 API 中的表名参数接受表的完整 Amazon 资源名称(ARN),以支持跨账户操作。如果您只提供表名参数而不是完整的 ARN,则将对请求者所属账户中的表执行 API 操作。有关使用跨账户访问的策略的示例,请参阅用于跨账户访问的基于资源的策略。
即使其它账户的主体正在所有者账户的 DynamoDB 表中执行读取或写入,也会向该资源所有者的账户收费。如果该表具有预调配吞吐量,则来自所有者账户和其它账户中的请求者的所有请求的总和,将决定请求是受限制(如果自动扩缩已禁用),还是纵向/横向扩展(如果已启用自动扩缩)。
这些请求将记录在所有者和请求者账户的 CloudTrail 日志中,这样两个账户中的每一个账户都可以跟踪哪个账户访问了哪些数据。
与跨账户 Amazon Lambda 函数共享访问权限
账户 A 中的 Lambda 函数
-
转至 IAM 控制台
以创建一个 IAM 角色,该角色将用作账户 A 中 Amazon Lambda 函数的 Lambda 执行角色。添加具有所需 DynamoDB Streams 和 Lambda 调用权限的托管式 IAM 策略 AWSLambdaDynamoDBExecutionRole。此策略还将授予对您在账户 A 中可能有权访问的所有潜在 DynamoDB Streams 资源的访问权限。 -
在 Lambda 控制台
中,创建一个 Amazon Lambda 函数以处理 DynamoDB 流中的记录,并在设置执行角色的过程中,选择您在上一步中创建的角色。 -
向 DynamoDB Streams 的账户 B 的所有者提供 Lambda 函数执行角色,以配置基于资源的策略来实现跨账户读取访问。
-
完成 Lambda 函数设置。
账户 B 中的 DynamoDB 流
-
从账户 A 中获取将调用 Lambda 函数的跨账户 Lambda 执行角色。
-
在账户 B 中的 Amazon DynamoDB 控制台上,选择 Lambda 跨账户触发器的表。在导出和流选项卡下,找到 DynamoDB 流 ARN。确保 DynamoDB 流状态为“开启”,并记下完整的流 ARN,因为您将需要它来设置资源策略。
-
在权限选项卡下,单击创建流策略按钮以启动可视化策略编辑器。单击添加新语句按钮或编辑策略(如果策略已存在)。
-
创建一个策略,该策略将账户 A 中的 Lambda 执行角色指定为主体,并授予所需的 DynamoDB 流操作。确保包括操作
dynamodb:DescribeStream、dynamodb:GetRecords、dynamodb:GetShardIterator和dynamodb:ListShards。有关 DynamoDB Streams 的资源策略示例的更多信息,请参阅 DynamoDB 基于资源的策略示例。
注意
控制面板 API 的跨账户访问的每秒事务数(TPS)限制较低,为 500 个请求。