

# 在 DynamoDB 中使用基于资源的策略进行跨账户访问
<a name="rbac-cross-account-access"></a>

使用基于资源的策略，您可以提供跨账户访问不同 AWS 账户中可用资源的权限。如果您在与资源相同的 AWS 区域中有分析器，则将通过 IAM Access Analyzer 外部访问调查发现报告基于资源的策略允许的所有跨账户访问权限。IAM Access Analyzer 将根据 IAM [策略语法](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html)和[最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)运行策略检查，以验证您的策略。这些检查项生成结果并提供可操作的建议，可帮助您编写可操作且符合安全最佳实践的策略。您可以在 [DynamoDB 控制台](https://console.aws.amazon.com/dynamodb/)的**权限**选项卡中查看 IAM Access Analyzer 的活动调查发现。

要了解通过使用 IAM Access Analyzer 验证策略的信息，请参阅 **《IAM 用户指南》中的 [IAM Access Analyzer 策略验证](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)。要查看 IAM Access Analyzer 返回的警告、错误和建议的列表，请参阅 [IAM Access Analyzer 策略检查引用](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-reference-policy-checks.html)。

要向账户 A 中的用户 A 授予访问账户 B 中表 B 的 [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html) 权限，请执行以下步骤：

1. 将基于资源的策略附加到表 B，该策略向用户 A 授予执行 `GetItem` 操作的权限。

1. 向用户 A 附加基于身份的策略，授予其对表 B 执行 `GetItem` 操作的权限。

使用 [DynamoDB 控制台](https://console.aws.amazon.com/dynamodb/)中提供的**预览外部访问**选项，您可以预览新策略对资源的公有访问和跨账户访问的影响。在保存策略之前，您可以检查策略是引入了新的 IAM Access Analyzer 发现结果还是解析了现有的发现结果。如果您没有看到活动的分析器，请在 IAM Access Analyzer 中选择**转至 Access Analyzer** 以[创建账户分析器](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-getting-started.html#access-analyzer-enabling)。有关更多信息，请参阅[预览访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-access-preview.html)。

DynamoDB 数据面板和控制面板 API 中的表名参数接受表的完整 Amazon 资源名称（ARN），以支持跨账户操作。如果您只提供表名参数而不是完整的 ARN，则将对请求者所属账户中的表执行 API 操作。有关使用跨账户访问的策略的示例，请参阅[用于跨账户访问的基于资源的策略](rbac-examples.md#rbac-examples-cross-account)。

即使其它账户的主体正在所有者账户的 DynamoDB 表中执行读取或写入，也会向该资源所有者的账户收费。如果该表具有预调配吞吐量，则来自所有者账户和其它账户中的请求者的所有请求的总和，将决定请求是受限制（如果自动扩缩已禁用），还是纵向/横向扩展（如果已启用自动扩缩）。

这些请求将记录在所有者和请求者账户的 CloudTrail 日志中，这样两个账户中的每一个账户都可以跟踪哪个账户访问了哪些数据。

## 与跨账户 AWS Lambda 函数共享访问权限
<a name="rbac-analyze-cross-account-lambda-access"></a>

**账户 A 中的 Lambda 函数**

1. 转至 [IAM 控制台](https://console.aws.amazon.com/iam/)以创建一个 IAM 角色，该角色将用作账户 A 中 AWS Lambda 函数的 [Lambda 执行角色](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)。添加具有所需 DynamoDB Streams 和 Lambda 调用权限的托管式 IAM 策略 `AWSLambdaDynamoDBExecutionRole`。此策略还将授予对您在账户 A 中可能有权访问的所有潜在 DynamoDB Streams 资源的访问权限。

1. 在 [Lambda 控制台](https://console.aws.amazon.com/lambda/)中，创建一个 AWS Lambda 函数以处理 DynamoDB 流中的记录，并在设置执行角色的过程中，选择您在上一步中创建的角色。

1. 向 DynamoDB Streams 的账户 B 的所有者提供 Lambda 函数执行角色，以配置基于资源的策略来实现跨账户读取访问。

1. 完成 Lambda 函数设置。

**账户 B 中的 DynamoDB 流**

1. 从账户 A 中获取将调用 Lambda 函数的跨账户 Lambda 执行角色。

1. 在账户 B 中的 Amazon DynamoDB 控制台上，选择 Lambda 跨账户触发器的表。在**导出和流**选项卡下，找到 DynamoDB 流 ARN。确保 DynamoDB 流状态为“开启”，并记下完整的流 ARN，因为您将需要它来设置资源策略。

1. 在**权限**选项卡下，单击**创建流策略**按钮以启动可视化策略编辑器。单击**添加新语句**按钮或编辑策略（如果策略已存在）。

1. 创建一个策略，该策略将账户 A 中的 Lambda 执行角色指定为主体，并授予所需的 DynamoDB 流操作。确保包括操作 `dynamodb:DescribeStream`、`dynamodb:GetRecords`、`dynamodb:GetShardIterator` 和 `dynamodb:ListShards`。有关 DynamoDB Streams 的资源策略示例的更多信息，请参阅 [DynamoDB 基于资源的策略示例](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-examples.html)。

**注意**  
[控制面板 API](HowItWorks.API.md#HowItWorks.API.ControlPlane) 的跨账户访问的每秒事务数（TPS）限制较低，为 500 个请求。