

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

# 使用基于资源的策略共享访问权限
<a name="resource-based-policy-examples"></a>

**注意**  
更新现有基于资源的策略意味着替换现有策略，因此新策略中务必要包含所有必要的信息。

## 使用跨账户 AWS Lambda 功能共享访问权限
<a name="Resource-based-policy-examples-lambda"></a>

**Lambda 运算符**

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

1. 在[AWS Lambda 控制台](https://console.aws.amazon.com/lambda/home)中，创建一个 AWS Lambda 函数[来处理 Kinesis Data Streams 数据流中的记录](https://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html)，并在设置执行角色的过程中，选择您在上一步中创建的角色。

1. 向 Kinesis Data Streams 资源所有者提供执行角色，以用来配置资源策略。

1. 完成 Lambda 函数设置。

**Kinesis Data Streams 资源所有者**

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

1. 在 Amazon Kinesis Data Streams 控制台上，选择该数据流。选择**数据流共享**选项卡，然后选择**创建共享策略**按钮以启动直观的策略编辑器。要共享数据流中的注册使用者，请选择该使用者，然后选择**创建共享策略**。您也可以直接编写 JSON 策略。

1. 将跨账户 Lambda 执行角色指定为主体，并指定您要共享访问权限的具体 Kinesis Data Streams 操作。务必要包括 `kinesis:DescribeStream` 操作。有关 Kinesis Data Streams 资源策略示例的更多信息，请参阅 [Kinesis Data Streams 基于资源的策略示例](controlling-access.md#kinesis-stream-sharing-iam-examples)。

1. 选择**创建策略**或使用将策略附加[PutResourcePolicy](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutResourcePolicy.html)到您的资源。

## 与跨账户 KCL 消费端共享访问权限
<a name="Resource-based-policy-examples-kcl-consumers"></a>
+ 如果您使用的是 KCL 1.x，请务必使用 KCL 1.15.0 或更高版本。
+ 如果您使用的是 KCL 2.x，请务必使用 KCL 2.5.3 或更高版本。

**KCL 运算符**

1. 向资源所有者提供将运行 KCL 应用程序的 IAM 用户或 IAM 角色。

1. 要求资源所有者提供数据流或使用者 ARN。

1. KCL 配置中务必要指定所提供的流 ARN。
   + 对于 KCL 1.x：使用[KinesisClientLibConfiguration](https://github.com/awslabs/amazon-kinesis-client/blob/v1.x/src/main/java/com/amazonaws/services/kinesis/clientlibrary/lib/worker/KinesisClientLibConfiguration.java#L738-L821)构造函数并提供流 ARN。
   + 对于 KCL 2.x：你可以只提供直播 ARN 或向 Kinesis 客户端库提供直播 [StreamTracker](https://github.com/awslabs/amazon-kinesis-client/blob/master/amazon-kinesis-client/src/main/java/software/amazon/kinesis/processor/StreamTracker.java)ARN。[ConfigsBuilder](https://github.com/awslabs/amazon-kinesis-client/blob/master/amazon-kinesis-client/src/main/java/software/amazon/kinesis/common/ConfigsBuilder.java#L155-L176)对于 StreamTracker，请提供库生成的 DynamoDB 租赁表中的流 ARN 和创建 Epoch。如果您想从共享注册消费者（如增强型扇出）那里读取数据，请使用 StreamTracker 并提供消费者 ARN。

**Kinesis Data Streams 资源所有者**

1. 获取将运行 KCL 应用程序的跨账户 IAM 用户或 IAM 角色。

1. 在 Amazon Kinesis Data Streams 控制台上，选择该数据流。选择**数据流共享**选项卡，然后选择**创建共享策略**按钮以启动直观的策略编辑器。要共享数据流中的注册使用者，请选择该使用者，然后选择**创建共享策略**。您也可以直接编写 JSON 策略。

1. 将跨账户 KCL 应用程序的 IAM 用户或 IAM 角色指定为主体，并指定您要共享访问权限的具体 Kinesis Data Streams 操作。有关 Kinesis Data Streams 资源策略示例的更多信息，请参阅 [Kinesis Data Streams 基于资源的策略示例](controlling-access.md#kinesis-stream-sharing-iam-examples)。

1. 选择**创建策略**或使用将策略附加[PutResourcePolicy](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutResourcePolicy.html)到您的资源。

## 共享对加密数据的访问权限
<a name="sharing-access-to-encrypted-data"></a>

如果您已使用 AWS 托管 KMS 密钥为数据流启用服务器端加密，并希望通过资源策略共享访问权限，则必须切换到使用客户托管密钥 (CMK)。有关更多信息，请参阅 [什么是 Kinesis Data Streams 的服务器端加密？](what-is-sse.md)。此外，您必须允许您的共享主体实体使用 KMS 跨账户共享功能来访问您的 CMK。此外还务必要对共享主体实体的 IAM policy 进行更改。有关更多信息，请参阅[允许其他账户中的用户使用 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html)。