

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

# Amazon Kinesis Data Streams 中的安全性
<a name="security"></a>

云安全 Amazon 是重中之重。作为 Amazon 客户，您可以受益于专为满足大多数安全敏感型组织的要求而构建的数据中心和网络架构。

安全是双方 Amazon 的共同责任。[责任共担模式](https://www.amazonaws.cn/compliance/shared-responsibility-model/)将其描述为云*的* 安全性和云*中* 的安全性：
+ **云安全** — Amazon 负责保护在 Amazon 云中运行 Amazon 服务的基础架构。 Amazon 还为您提供可以安全使用的服务。作为 [Amazon 合规性计划](https://www.amazonaws.cn/compliance/programs/)的一部分，第三方审核人员将定期测试和验证安全性的有效性。要了解适用于 Kinesis Data Streams 的合规性计划，请参阅[按合规性计划提供的范围内Amazon 服务](https://www.amazonaws.cn/compliance/services-in-scope/)。
+ **云端安全**-您的责任由您使用的 Amazon 服务决定。您还需要对其他因素负责，包括您的数据的敏感性、您组织的要求以及适用的法律法规。

此文档将帮助您了解如何在使用 Kinesis Data Streams 时应用责任共担模式。以下主题说明如何配置 Kinesis Data Streams 以实现您的安全性和合规性目标。您还将学习如何使用其他 Amazon 服务来帮助您监控和保护您的 Kinesis Data Streams 资源。

**Topics**
+ [Amazon Kinesis Data Streams 中的数据保护](server-side-encryption.md)
+ [使用 IAM 控制对 Amazon Kinesis Data Streams 资源的访问](controlling-access.md)
+ [Amazon Kinesis Data Streams 的合规性验证](compliance-validation.md)
+ [Amazon Kinesis Data Streams 中的故障恢复能力](disaster-recovery-resiliency.md)
+ [亚马逊 Kinesis Data Streams 中的基础设施安全](infrastructure-security.md)
+ [Kinesis Data Streams 的安全最佳实践](security-best-practices.md)

# Amazon Kinesis Data Streams 中的数据保护
<a name="server-side-encryption"></a>

使用 Amazon Key Management Service (Amazon KMS) 密钥进行服务器端加密，可以对 Amazon Kinesis Data Streams 中的静态数据进行加密，从而轻松满足严格的数据管理要求。

**注意**  
如果您在 Amazon 通过命令行界面或 API 进行访问时需要经过 FIPS 140-2 验证的加密模块，请使用 FIPS 端点。有关可用的 FIPS 端点的更多信息，请参阅[《美国联邦信息处理标准（FIPS）第 140-2 版》](https://www.amazonaws.cn/compliance/fips/)。

**Topics**
+ [什么是 Kinesis Data Streams 的服务器端加密？](what-is-sse.md)
+ [费用、区域和性能注意事项](costs-performance.md)
+ [如何开始使用服务器端加密？](getting-started-with-sse.md)
+ [创建和使用用户生成的 KMS 密钥](creating-using-sse-master-keys.md)
+ [使用用户生成的 KMS 密钥的权限](permissions-user-key-KMS.md)
+ [验证 KMS 密钥权限并排查相关问题](sse-troubleshooting.md)
+ [将 Amazon Kinesis Data Streams 与接口 VPC 端点搭配使用](vpc.md)

# 什么是 Kinesis Data Streams 的服务器端加密？
<a name="what-is-sse"></a>

服务器端加密是 Amazon Kinesis Data Streams 中的一项功能，它使用 Amazon KMS 您指定的客户主密钥 (CMK) 在数据处于静止状态之前自动对其进行加密。数据在写入 Kinesis 流存储层之前加密，并在从存储检索到之后进行解密。因此，在 Kinesis Data Streams 服务中对数据进行静态加密。这样，您就可以满足严格的监管要求并增强您数据的安全性。

采用服务器端加密时，您的 Kinesis 流创建器和消费端不需要管理主密钥或加密操作。您的数据在进入和离开 Kinesis Data Streams 服务时会自动加密，因此您的静态数据会被加密。 Amazon KMS 提供了服务器端加密功能使用的所有主密钥。 Amazon KMS 便于使用 Amazon由管理的 Kinesis 的 CMK、 Amazon KMS 用户指定的 CMK 或导入到服务中的主密钥。 Amazon KMS 

**注意**  
服务器端加密仅在启用加密后加密传入数据。启用服务器端加密后，未加密流中预先存在的数据不会加密。

在加密您的数据流并与其他委托人共享访问权限时，您必须在密钥策略和外部账户的 IAM 策略中授予权限。 Amazon KMS 有关更多信息，请参阅[允许其他账户中的用户使用 KMS 密钥](https://docs.amazonaws.cn/kms/latest/developerguide/key-policy-modifying-external-accounts.html)。

如果您已使用 Amazon 托管 KMS 密钥为数据流启用服务器端加密，并希望通过资源策略共享访问权限，则必须切换到使用客户托管密钥 (CMK)，如下所示：

![\[Encryption settings interface with options for server-side encryption and customer-managed CMK.\]](http://docs.amazonaws.cn/streams/latest/dev/images/cmk2.png)


此外，您必须允许您的共享主体实体使用 KMS 跨账户共享功能来访问您的 CMK。此外还务必要对共享主体实体的 IAM policy 进行更改。有关更多信息，请参阅[允许其他账户中的用户使用 KMS 密钥](https://docs.amazonaws.cn/kms/latest/developerguide/key-policy-modifying-external-accounts.html)。

# 费用、区域和性能注意事项
<a name="costs-performance"></a>

应用服务器端加密时，您需要支付 Amazon KMS API 使用量和密钥费用。与自定义 KMS 主密钥不同，`(Default) aws/kinesis` 客户主密钥 (CMK) 是免费提供的。但是，您仍必须支付因您产生的 Amazon Kinesis Data Streams API 使用费。

API 使用费适用于所有 CMK，包括自定义的 CMK。在 Kinesis Data Streams 轮换数据密钥时，大约每五分钟调用一次 Amazon KMS 。在 30 天内，由 Kinesis 直播发起的 Amazon KMS API 调用的总费用应少于几美元。此费用会随着您在数据创建者和使用者身上使用的用户凭证数量而变化，因为每个用户凭证都需要唯一的 API 调用。 Amazon KMS当您使用 IAM 角色进行身份验证时，每个代入角色调用都会产生唯一的用户凭据。为了节约 KMS 成本，您可能想要缓存代入角色调用返回的用户凭据。

下面按资源介绍各项费用：

**键**
+  Amazon 由（别名 `aws/kinesis` =）管理的 Kinesis 用户主密钥是免费的。
+ 用户生成的 KMS 密钥需要收取 KMS 密钥费用。有关更多信息，请参阅 [Amazon Key Management Service Pricing](https://www.amazonaws.cn/kms/pricing/#Keys)。

API 使用费适用于所有 CMK，包括自定义的 CMK。在 Kinesis Data Streams 轮换数据密钥时，大约每 5 分钟调用一次 KMS。以 30 天为一个月，由 Kinesis 数据流启动的 KMS API 调用的总费用应该不到几美元。请注意，此费用会随着您在数据创建者和使用者上使用的用户凭证数量而变化，因为每个用户凭证都需要对 Amazon KMS 进行唯一的 API 调用。当您使用 IAM 角色进行身份验证时，每个角色都 assume-role-call将生成唯一的用户证书，您可能需要缓存返回的用户证书 assume-role-call以节省 KMS 成本。

## KMS API 使用量
<a name="api-usage"></a>

对于每个加密流，当从 TIP 读取数据并在读取者和写入者之间使用单个 IAM account/user 访问密钥时，Kinesis Amazon KMS 服务大约每 5 分钟调用该服务 12 次。不从 TIP 读取数据可能会导致更多的 Amazon KMS 服务呼叫。生成新数据加密密钥的 API 请求需支付 Amazon KMS 使用费用。有关更多信息，请参阅 [Amazon Key Management Service Pricing: Usage](https://www.amazonaws.cn/kms/pricing/#Usage)。

## 按区域的服务器端加密的可用性
<a name="sse-regions"></a>

目前，Kinesis 数据流 Amazon GovCloud 的服务器端加密功能已在 Kinesis Data Streams 支持的所有区域（包括（美国西部）和中国区域）中提供。有关 Kinesis Data Streams 支持的区域的更多信息，[https://docs.aws.amazon.com/general/latest/gr/ak请参阅](https://docs.amazonaws.cn/general/latest/gr/ak.html) .html。

## 性能注意事项
<a name="performance-considerations"></a>

由于应用加密存在服务开销，应用服务器端加密的开销会将 `PutRecord`、`PutRecords` 和 `GetRecords` 的典型延迟增加不到 100 微秒。

# 如何开始使用服务器端加密？
<a name="getting-started-with-sse"></a>

开始使用服务器端加密的最简单方法是使用 Amazon Web Services 管理控制台 和 Amazon Kinesis KMS 服务密钥。`aws/kinesis`

下面的过程演示了如何为 Kinesis 流启用服务器端加密。

**为 Kinesis 流启用服务器端加密**

1. 登录 Amazon Web Services 管理控制台 并打开 [Amazon Kinesis Data Streams](https://console.amazonaws.cn/kinesis/home?region=us-east-1#/streams/list) 控制台。

1. 在 Amazon Web Services 管理控制台中创建或选择 Kinesis 流。

1. 选择 **Details (详细信息)** 选项卡。

1. 在 **Server-side encryption (服务器端加密)** 中，选择 **edit (编辑)**。

1. 除非您希望使用用户生成的 KMS 主密钥，否则应确保选中 **(Default) aws/kinesis ((默认) aws/kinesis)** KMS 主密钥。这是 Kinesis 服务生成的 KMS 主密钥。选择**启用**，然后选择**保存**。
**注意**  
默认的 Kinesis 服务主密钥是免费的，但是，Kinesis 对该 Amazon KMS 服务进行的 API 调用需要支付 KMS 使用成本。

1. 流结束**挂起**状态。一旦该流恢复到**活动**状态并启用加密，对于所有写入该流的传入数据，都将使用您选择的 KMS 主密钥进行加密。

1. **要禁用服务器端加密，请在中的**服务器端加密**中选择**禁用** Amazon Web Services 管理控制台，然后选择保存。**

# 创建和使用用户生成的 KMS 密钥
<a name="creating-using-sse-master-keys"></a>

本部分介绍如何创建和使用您自己的 KMS 密钥，而不是使用 Amazon Kinesis 管理的主密钥。

## 创建用户生成的 KMS 密钥
<a name="creating-sse-master-keys"></a>

有关创建您自己的密钥的说明，请参阅《Amazon Key Management Service Developer Guide》**中的 [Creating Keys](https://docs.amazonaws.cn/kms/latest/developerguide/create-keys.html)。在您为自己的账户创建密钥后，Kinesis Data Streams 服务会在 **KMS 主密钥**列表中返回这些密钥。

## 使用用户生成的 KMS 密钥
<a name="using-sse-master-keys"></a>

向您的消费者、生产者和管理员应用正确的权限后，您可以在自己的 Amazon 账户或其他 Amazon 账户中使用自定义 KMS 密钥。在 **中的 **KMS Master Key Amazon Web Services 管理控制台列表内显示您账户中的所有 KMS 主密钥。

要使用位于另一个账户中的自定义 KMS 主密钥，您需要有使用这些密钥的权限。您还必须在 Amazon Web Services 管理控制台的 ARN 输入框中指定 KMS 主密钥的 ARN。

# 使用用户生成的 KMS 密钥的权限
<a name="permissions-user-key-KMS"></a>

在将服务器端加密与用户生成的 KMS 密钥配合使用之前，必须配置 Amazon KMS 密钥策略以允许对流进行加密以及对流记录进行加密和解密。有关 Amazon KMS 权限的示例和更多信息，请参阅 [Amazon KMS API 权限：操作和资源参考](https://docs.amazonaws.cn/kms/latest/developerguide/kms-api-permissions-reference.html)。

**注意**  
使用默认服务密钥进行加密不需要应用自定义 IAM 权限。

在您使用用户生成的 KMS 主密钥之前，请确保您的 Kinesis 流创建器和消费端（IAM 主体）是 KMS 主密钥政策中的用户。否则，与流相关的读写操作会失败，这可能最终导致数据丢失、处理延迟或应用程序挂起。您可以使用 IAM policy 来管理 KMS 密钥的权限。有关更多信息，请参阅在 [Amazon KMS 中使用 IAM 策略](https://docs.amazonaws.cn/kms/latest/developerguide/iam-policies.html)。

## Kinesis Data Streams 加密上下文
<a name="sse-kms-encryption-context"></a>

当 Amazon Kinesis Data Streams 代表您 Amazon KMS 调用时，它会将加密上下文传递 Amazon KMS 给该上下文，该上下文可用作密钥策略和授权中的授权条件。Kinesis Data Streams 在所有调用中都使用流 ARN 作为加密上下文。 Amazon KMS 

```
"encryptionContext": {
    "aws:kinesis:arn": "arn:aws:kinesis:region:account-id:stream/stream-name"
}
```

您可以使用加密上下文来识别审核记录和日志中您的 KMS 密钥的使用情况。它还以纯文本形式出现在日志中，例如。 Amazon CloudTrail

要将您的 KMS 密钥的使用限制为从 Kinesis Data Streams 发出的针对特定流的请求，请使用 `kms:EncryptionContext:aws:kinesis:arn` KMS 密钥策略或 IAM 策略中的条件密钥。

## 产生器权限示例
<a name="example-producer-permissions"></a>

您的 Kinesis 流创建器必须拥有 `kms:GenerateDataKey` 权限。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "kms:GenerateDataKey"
        ],
        "Resource": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    }, 
    {
        "Effect": "Allow",
        "Action": [
            "kinesis:PutRecord",
            "kinesis:PutRecords"
        ],
        "Resource": "arn:aws:kinesis:*:123456789012:MyStream"
    }
  ]
}
```

------

## 消费端权限示例
<a name="example-consumer-permissions"></a>

您的 Kinesis 流消费端必须拥有 `kms:Decrypt` 权限。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "kms:Decrypt"
        ],
        "Resource": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    }, 
    {
        "Effect": "Allow",
        "Action": [
            "kinesis:GetRecords",
            "kinesis:DescribeStream"
        ],
        "Resource": "arn:aws:kinesis:*:123456789012:MyStream"
    }
  ]
}
```

------

适用于 Apache Flink 的亚马逊托管服务，并 Amazon Lambda 使用角色来消费 Kinesis 直播。确保将 `kms:Decrypt` 权限添加到这些消费端使用的角色。

## 流管理员权限
<a name="stream-administrator-permissions"></a>

Kinesis 流管理员必须有权调用 `kms:List*` 和 ```kms:DescribeKey*`。

# 验证 KMS 密钥权限并排查相关问题
<a name="sse-troubleshooting"></a>

在 Kinesis 直播上启用加密后，我们建议您使用以下亚马逊 CloudWatch 指标监控`putRecord``putRecords`、和`getRecords`调用的成功情况：
+  `PutRecord.Success` 
+  `PutRecords.Success` 
+  `GetRecords.Success` 

有关更多信息，请参阅 [监控 Kinesis Data Streams](monitoring.md)。

# 将 Amazon Kinesis Data Streams 与接口 VPC 端点搭配使用
<a name="vpc"></a>

您可以使用接口 VPC 端点，以防止 Amazon VPC 和 Kinesis Data Streams 之间的流量离开亚马逊网络。接口 VPC 终端节点不需要互联网网关、NAT 设备、VPN 连接或 Amazon Direct Connect 连接。接口 VPC 终端节点由一项 Amazon 技术提供支持 Amazon PrivateLink，该技术允许使用弹性网络接口在 Amazon 服务之间进行私密通信，并使用您的 Amazon VPC IPs 中的私有接口。有关更多信息，请参阅[亚马逊 Virtual Private Cloud](https://docs.amazonaws.cn/AmazonVPC/latest/UserGuide/VPC_Introduction.html) 和[接口 VPC 终端节点 (Amazon PrivateLink)](https://docs.amazonaws.cn/vpc/latest/userguide/vpce-interface.html#create-interface-endpoint)。

**Topics**
+ [使用 Kinesis Data Streams 的接口 VPC 端点](#using-interface-vpc-endpoints)
+ [控制对 Kinesis Data Streams 的 VPC 端点的访问](#interface-vpc-endpoints-policies)
+ [Kinesis Data Streams 的 VPC 端点策略的可用性](#availability)

## 使用 Kinesis Data Streams 的接口 VPC 端点
<a name="using-interface-vpc-endpoints"></a>

要开始使用，您不需要更改流、产生器或用户的设置。为 Kinesis Data Streams 创建一个接口 VPC 端点，以便进出您的 Amazon VPC 资源的流量流过接口 VPC 端点。启用 FIPS 的接口 VPC 端点适用于美国区域。有关更多信息，请参阅[创建接口端点](https://docs.amazonaws.cn/vpc/latest/userguide/vpce-interface.html#create-interface-endpoint)。

亚马逊 Kinesis 生产者库 (KPL) 和 Kinesis 消费者库 (KCL) 使用公共终端节点或私有接口 VPC 终端节点（以使用者为准）调用 Amazon 亚马逊和亚马逊 CloudWatch DynamoDB 等服务。例如，如果您的 KCL 应用程序在带有启用了 VPC 端点的 DynamoDB 接口的 VPC 中运行，则 DynamoDB 和您的 KCL 应用程序之间的调用会流经接口 VPC 端点。

## 控制对 Kinesis Data Streams 的 VPC 端点的访问
<a name="interface-vpc-endpoints-policies"></a>

借助 VPC 端点策略，您可以控制访问，方式是：将策略附加到 VPC 端点或使用附加到 IAM 用户、组或角色的策略中的额外字段，从而限制只能通过特定 VPC 端点进行访问。当与 IAM 策略共同使用以便仅授予通过指定 VPC 端点访问 Kinesis 数据流操作的权限时，这些策略可用于将对特定流的访问限制到指定 VPC 端点。

以下是用于访问 Kinesis 数据流的示例端点策略。
+ **VPC 策略示例：只读访问** – 此示例策略可以附加到 VPC 端点。（有关更多信息，请参阅[控制对 Amazon VPC 资源的访问](https://docs.amazonaws.cn/vpc/latest/userguide/VPC_IAM.html)）。它限制仅能通过其附加的 VPC 端点列出或描述 Kinesis 数据流。

  ```
  {
    "Statement": [
      {
        "Sid": "ReadOnly",
        "Principal": "*",
        "Action": [
          "kinesis:List*",
          "kinesis:Describe*"
        ],
        "Effect": "Allow",
        "Resource": "*"
      }
    ]
  }
  ```
+ **VPC 策略示例：限制对特定 Kinesis 数据流的访问** – 此示例策略可以附加到 VPC 端点。它限制通过其附加的 VPC 端点访问特定的数据流。

  ```
  {
    "Statement": [
      {
        "Sid": "AccessToSpecificDataStream",
        "Principal": "*",
        "Action": "kinesis:*",
        "Effect": "Allow",
        "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/MyStream"
      }
    ]
  }
  ```
+ **IAM 策略示例：限制只能通过特定的 VPC 端点访问特定流** – 此示例策略可以附加到 IAM 用户、角色或组。它限制只能通过特定的 VPC 端点访问特定的 Kinesis 数据流。

------
#### [ JSON ]

****  

  ```
  {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
        {
           "Sid": "AccessFromSpecificEndpoint",
           "Action": "kinesis:*",
           "Effect": "Deny",
           "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/MyStream",
           "Condition": { "StringNotEquals" : { "aws:sourceVpce": "vpce-11aa22bb" } }
        }
     ]
  }
  ```

------

## Kinesis Data Streams 的 VPC 端点策略的可用性
<a name="availability"></a>

以下区域支持带有策略的 Kinesis Data Streams 接口 VPC 端点：
+ 欧洲地区（巴黎）
+ 欧洲地区（爱尔兰）
+ 美国东部（弗吉尼亚州北部）
+ 欧洲地区（斯德哥尔摩）
+ 美国东部（俄亥俄州）
+ 欧洲地区（法兰克福）
+ 南美洲（圣保罗）
+ 欧洲地区（伦敦）
+ 亚太地区（东京）
+ 美国西部（北加利福尼亚）
+ 亚太地区（新加坡）
+ 亚太地区（悉尼）
+ 中国（北京）
+ 中国（宁夏）
+ 亚太地区（香港）
+ 中东（巴林）
+ 中东（阿联酋）：
+ 欧洲地区（米兰）
+ 非洲（开普敦）
+ 亚太地区（孟买）
+ 亚太地区（首尔）
+ 加拿大（中部）
+ 美国西部（俄勒冈州）（usw2-az4 除外）
+ Amazon GovCloud （美国东部）
+ Amazon GovCloud （美国西部）
+ 亚太地区（大阪）
+ 欧洲（苏黎世）
+ 亚太地区（海得拉巴）

# 使用 IAM 控制对 Amazon Kinesis Data Streams 资源的访问
<a name="controlling-access"></a>

Amazon Identity and Access Management (IAM) 允许您执行以下操作：
+ 在您的 Amazon 账户下创建用户和群组
+ 为您 Amazon 账户下的每位用户分配唯一的安全证书
+ 控制每个用户使用 Amazon 资源执行任务的权限
+ 允许其他 Amazon 账户中的用户共享您的 Amazon 资源
+ 为您的 Amazon 账户创建角色并定义可以担任这些角色的用户或服务
+ 使用企业的现有身份授予使用 Amazon 资源执行任务的权限

通过将 IAM 与 Kinesis Data Streams 配合使用，您可以控制组织中的用户能否使用特定的 Kinesis Data Streams API 操作执行任务，以及他们能否使用特定的 Amazon 资源。

如果您使用 Kinesis 客户端库 (KCL) 开发应用程序，则您的策略必须包括亚马逊 DynamoDB 和亚马逊的权限； CloudWatchKCL 使用 DynamoDB 来跟踪应用程序的状态信息，并代表您向发送 KCL 指标。 CloudWatch CloudWatch有关 KCL 的更多信息，请参阅[开发 KCL 1.x 消费端](developing-consumers-with-kcl.md)。

有关 IAM 的更多信息，请参阅以下文档：
+ [Amazon Identity and Access Management (IAM)](https://www.amazonaws.cn/iam/)
+ [IAM 入门](https://docs.amazonaws.cn/IAM/latest/UserGuide/getting-started.html)
+ [IAM 用户指南](https://docs.amazonaws.cn/IAM/latest/UserGuide/)

有关 IAM 和 AmazonDynamoDB 的更多信息，请参阅《Amazon DynamoDB 开发人员指南》**中的[使用 IAM 控制对 Amazon DynamoDB 资源的访问](https://docs.amazonaws.cn/amazondynamodb/latest/developerguide/UsingIAMWithDDB.html)。

有关 IAM 和 Amazon 的更多信息 CloudWatch，请参阅*亚马逊用户指南中的控制 CloudWatch 用户*[对您 Amazon 账户的访问权限](https://docs.amazonaws.cn/AmazonCloudWatch/latest/DeveloperGuide/UsingIAM.html)。

**Topics**
+ [策略语法](#policy-syntax)
+ [Kinesis Data Streams 的操作](#kinesis-using-iam-actions)
+ [Kinesis Data Streams 的亚马逊资源名称 (ARNs)](#kinesis-using-iam-arn-format)
+ [Kinesis Data Streams 的示例策略](#kinesis-using-iam-examples)
+ [与其他账户共享您的数据流](#sharing-data-streams)
+ [将 Amazon Lambda 函数配置为使用另一个账户从 Kinesis Data Streams 读取](#sharing-data-streams-example)
+ [使用基于资源的策略共享访问权限](resource-based-policy-examples.md)

## 策略语法
<a name="policy-syntax"></a>

IAM 策略是包含一个或多个语句的 JSON 文档。每个语句的结构如下：

```
{
  "Statement":[{
    "Effect":"effect",
    "Action":"action",
    "Resource":"arn",
    "Condition":{
      "condition":{
        "key":"value"
        }
      }
    }
  ]
}
```

组成语句的各个元素如下：
+ **Effect：**此 *effect* 可以是 `Allow` 或 `Deny`。在默认情况下，IAM 用户没有使用资源和 API 操作的许可，因此，所有请求均会被拒绝。显式允许将覆盖默认规则。显式拒绝将覆盖任何允许。
+ **Action**：*action* 是对其授予或拒绝权限的特定 API 操作。
+ **Resource**：受操作影响的资源。要在语句中指定资源，您需要使用其 Amazon 资源名称（ARN）。
+ **条件**：条件是可选的。它们可以用于控制策略生效的时间。

在创建和管理 IAM policy 时，您可能希望使用 [IAM Policy 生成器](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-generator)和 [IAM Policy Simulator](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_testing-policies.html)。

## Kinesis Data Streams 的操作
<a name="kinesis-using-iam-actions"></a>

在 IAM 策略语句中，您可以从支持 IAM 的任何服务中指定任何 API 操作。对于 Kinesis Data Streams，请使用以下前缀为 API 操作命名：`kinesis:`。例如：`kinesis:CreateStream`、`kinesis:ListStreams` 和 `kinesis:DescribeStreamSummary`。

要在单个语句中指定多项操作，请使用逗号将它们隔开，如下所示：

```
"Action": ["kinesis:action1", "kinesis:action2"]
```

您也可以使用通配符指定多项操作。例如，您可以指定名称以单词“Get”开头的所有操作，如下所示：

```
"Action": "kinesis:Get*"
```

要指定所有 Kinesis Data Streams 操作，请使用 \$1 通配符，如下所示：

```
"Action": "kinesis:*"
```

有关 Kinesis Data Streams API 操作的完整列表，请参阅 [Amazon Kinesis API Reference](https://docs.amazonaws.cn/kinesis/latest/APIReference/)。

## Kinesis Data Streams 的亚马逊资源名称 (ARNs)
<a name="kinesis-using-iam-arn-format"></a>

每个 IAM 政策声明都适用于您使用其指定的资源 ARNs。

请对 Kinesis Data Streams 使用以下 ARN 资源格式：

```
arn:aws:kinesis:region:account-id:stream/stream-name
```

例如：

```
"Resource": arn:aws:kinesis:*:111122223333:stream/my-stream
```

## Kinesis Data Streams 的示例策略
<a name="kinesis-using-iam-examples"></a>

以下示例策略演示如何控制用户对您的 Kinesis Data Streams 的访问。

------
#### [ Example 1: Allow users to get data from a stream ]

**Example**  
 此策略允许用户或组对特定流执行 `DescribeStreamSummary`、`GetShardIterator` 和 `GetRecords` 操作，对任何流执行 `ListStreams` 操作。此策略可应用于应该能够从特定流获取数据的用户。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:Get*",
                "kinesis:DescribeStreamSummary"
            ],
            "Resource": [
            "arn:aws:kinesis:us-east-1:111122223333:stream/stream1"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:ListStreams"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------
#### [ Example 2: Allow users to add data to any stream in the account ]

**Example**  
此策略允许用户或组对账户的任一流使用 `PutRecord` 操作。此策略可应用于应该能够向账户中的所有流添加数据记录的用户。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:PutRecord"
            ],
            "Resource": [
                "arn:aws:kinesis:us-east-1:111122223333:stream/*"
            ]
        }
    ]
}
```

------
#### [ Example 3: Allow any Kinesis Data Streams action on a specific stream ]

**Example**  
此策略允许用户或组对指定流使用任何 Kinesis Data Streams 操作。此策略可应用于应该对特定流有管理控制权限的用户。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "kinesis:*",
            "Resource": [
            "arn:aws:kinesis:us-east-1:111122223333:stream/stream1"
            ]
        }
    ]
}
```

------
#### [ Example 4: Allow any Kinesis Data Streams action on any stream ]

**Example**  
此策略允许用户或组对账户中的任何流使用任何 Kinesis Data Streams 操作。由于此策略会授予对您的所有流的完全访问权限，您应该将其限制为仅对管理员可用。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "kinesis:*",
            "Resource": [
                "arn:aws:kinesis:*:111122223333:stream/*"
            ]
        }
    ]
}
```

------

## 与其他账户共享您的数据流
<a name="sharing-data-streams"></a>

**注意**  
 Kinesis Producer Library 目前不支持在写入数据流时指定流 ARN。如果您想写入跨账户数据流，请使用 Amazon SDK。

将[基于资源的策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies.html#policies_resource-based)附加到您的数据流，以向其他账户、IAM 用户或 IAM 角色授予访问权限。基于资源的策略是附加到资源（例如数据流）的 JSON 策略文档。这些策略将向[指定的主体](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements_principal.html)授予对该资源执行特定操作的权限，并定义这在哪些条件下适用。一个策略可以有多个语句。您必须在基于资源的策略中指定主体。委托人可以包括账户、用户、角色、联合用户或 Amazon 服务。您可通过 Kinesis Data Streams 控制台、API 或 SDK 配置策略。

请注意，要与已注册的使用者（例如[增强型扇出功能](https://docs.amazonaws.cn/streams/latest/dev/enhanced-consumers.html)）共享访问权限，则数据流 ARN 和使用者 ARN 都需要配置策略。

### 启用跨账户访问
<a name="sharing-data-streams-enabling"></a>

要启用跨账户访问，您可以将整个账户或其他账户中的 IAM 实体指定为基于资源的策略中的主体。将跨账户主体添加到基于资源的策略只是建立信任关系工作的一半而已。当委托人和资源位于不同的 Amazon 账户中时，您还必须使用基于身份的策略来授予委托人访问资源的权限。但是，如果基于资源的策略向同一个账户中的主体授予访问权限，则不需要额外的基于身份的策略。

有关将基于资源的策略用于跨账户存取的更多信息，请参阅 [IAM 中的跨账户资源访问](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

数据流管理员可以使用 Amazon Identity and Access Management 策略来指定谁有权访问什么。也就是说，哪个*主体*可以对什么*资源*执行*操作*，以及在什么*条件*下执行。JSON 策略的 `Action` 元素描述可用于在策略中允许或拒绝访问的操作。策略操作通常与关联的 Amazon API 操作同名。

可以共享的 Kinesis Data Streams 操作：


| Action | 访问级别 | 
| --- | --- | 
| [DescribeStreamConsumer](https://docs.amazonaws.cn/kinesis/latest/APIReference/API_DescribeStreamConsumer.html) | 使用者 | 
| [DescribeStreamSummary](https://docs.amazonaws.cn/kinesis/latest/APIReference/API_DescribeStreamSummary.html) | 数据流 | 
| [GetRecords](https://docs.amazonaws.cn/kinesis/latest/APIReference/API_GetRecords.html) | 数据流 | 
| [GetShardIterator](https://docs.amazonaws.cn/kinesis/latest/APIReference/API_GetShardIterator.html) | 数据流 | 
| [ListShards](https://docs.amazonaws.cn/kinesis/latest/APIReference/API_ListShards.html) | 数据流 | 
| [PutRecord](https://docs.amazonaws.cn/kinesis/latest/APIReference/API_PutRecord.html) | 数据流 | 
| [PutRecords](https://docs.amazonaws.cn/kinesis/latest/APIReference/API_PutRecords.html) | 数据流 | 
| [SubscribeToShard](https://docs.amazonaws.cn/kinesis/latest/APIReference/API_SubscribeToShard.html) | 使用者 | 

以下是使用基于资源的策略向您的数据流或注册使用者授予跨账户存取权限的示例。

要执行跨账户操作，您必须指定用于数据流访问的流 ARN，以及用于注册使用者访问的使用者 ARN。

### Kinesis Data Streams 基于资源的策略示例
<a name="kinesis-stream-sharing-iam-examples"></a>

由于需要执行的操作，共享注册的使用者既涉及数据流策略，也涉及使用者策略。

**注意**  
`Principal` 的示例有效值如下：  
`{"AWS": "123456789012"}`
IAM 用户 - `{"AWS": "arn:aws:iam::123456789012:user/user-name"}`
IAM 角色 - `{"AWS":["arn:aws:iam::123456789012:role/role-name"]}`
多个主体（可以是账户、用户、角色的组合）– `{"AWS":["123456789012", "123456789013", "arn:aws:iam::123456789012:user/user-name"]}`

------
#### [ Example 1: Write access to the data stream ]

**Example**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "__default_write_policy_ID",
    "Statement": [
        {
            "Sid": "writestatement",
            "Effect": "Allow",
            "Principal": {
                "AWS": "Account12345"
            },
            "Action": [
                "kinesis:DescribeStreamSummary",
                "kinesis:ListShards",
                "kinesis:PutRecord",
                "kinesis:PutRecords"
            ],
            "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC"
        }
    ]
}
```

------
#### [ Example 2: Read access to the data stream ]

**Example**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "__default_sharedthroughput_read_policy_ID",
    "Statement": [
        {
            "Sid": "sharedthroughputreadstatement",
            "Effect": "Allow",
            "Principal": {
                "AWS": "Account12345"
            },
            "Action": [                
                "kinesis:DescribeStreamSummary",
                "kinesis:ListShards",
                "kinesis:GetRecords",
                "kinesis:GetShardIterator"
            ],
            "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC"
        }
    ]
}
```

------
#### [ Example 3: Share enhanced fan-out read access to a registered consumer ]

**Example**  
数据流策略语句：    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "__default_sharedthroughput_read_policy_ID",
    "Statement": [
        {
            "Sid": "consumerreadstatement",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/role-name"
            },
            "Action": [
                "kinesis:DescribeStreamSummary",
                "kinesis:ListShards"
            ],
            "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC"
        }
    ]
}
```
使用者策略语句：    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "__default_efo_read_policy_ID",
    "Statement": [
        {
            "Sid": "eforeadstatement",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/role-name"
            },
            "Action": [
                "kinesis:DescribeStreamConsumer",
                "kinesis:SubscribeToShard"
            ],
            "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC/consumer/consumerDEF:1674696300"
        }
    ]
}
```
为确保遵守最低权限原则，操作或主体字段不支持通配符（\$1）。

------

### 以编程方式管理数据流策略
<a name="sharing-data-streams-managing-policy"></a>

除此之外 Amazon Web Services 管理控制台，Kinesis Data Streams 还有三个 API 用于管理您的数据流策略：
+ [PutResourcePolicy](https://docs.amazonaws.cn/kinesis/latest/APIReference/API_PutResourcePolicy.html)
+ [GetResourcePolicy](https://docs.amazonaws.cn/kinesis/latest/APIReference/API_GetResourcePolicy.html)
+ [DeleteResourcePolicy](https://docs.amazonaws.cn/kinesis/latest/APIReference/API_DeleteResourcePolicy.html)

`PutResourePolicy` 用于附加或覆盖数据流或使用者策略。`GetResourcePolicy` 用于检查和查看指定数据流或使用者的策略。`DeleteResourcePolicy` 用于删除指定数据流或使用者的策略。

### 策略限制
<a name="sharing-data-streams-validating"></a>

Kinesis Data Streams 资源策略有以下限制：
+ 不支持通配符 (\$1)，以防通过直接附加到数据流或注册消费端的资源策略授予广泛访问权限。此外，还要仔细检查以下策略，来确认它们不会授予广泛访问权限：
  + 附加到关联 Amazon 委托人（例如，IAM 角色）的基于身份的策略
  + 附加到关联资源的基于 Amazon 资源的策略（例如 Amazon Key Management Service KMS 密钥）
+ Amazon 校长不支持服务校长，以防止副校长可能[感到困惑](https://docs.amazonaws.cn/IAM/latest/UserGuide/confused-deputy.html)。
+ 不支持联合身份验证主体。
+ 不支持规范 IDs 用户。
+ 策略大小不能超过 20KB。

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

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

## 将 Amazon Lambda 函数配置为使用另一个账户从 Kinesis Data Streams 读取
<a name="sharing-data-streams-example"></a>

有关如何配置 Lambda 函数以在其他账户中读取 Kinesis Data Streams 中的数据的示例，请参阅 [使用跨账户 Amazon Lambda 功能共享访问权限](resource-based-policy-examples.md#Resource-based-policy-examples-lambda)。

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

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

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

**Lambda 运算符**

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

1. 在[Amazon Lambda 控制台](https://console.amazonaws.cn/lambda/home)中，创建一个 Amazon Lambda 函数[来处理 Kinesis Data Streams 数据流中的记录](https://docs.amazonaws.cn/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.amazonaws.cn/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.amazonaws.cn/kinesis/latest/APIReference/API_PutResourcePolicy.html)到您的资源。

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

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

# Amazon Kinesis Data Streams 的合规性验证
<a name="compliance-validation"></a>

要了解是否属于特定合规计划的范围，请参阅Amazon Web Services 服务 “” [Amazon Web Services 服务 中的 “按合规计划划分的范围](https://www.amazonaws.cn/compliance/services-in-scope/)”，然后选择您感兴趣的合规计划。 Amazon Web Services 服务 有关一般信息，请参阅[合规计划](https://www.amazonaws.cn/compliance/programs/)。

您可以使用下载第三方审计报告 Amazon Artifact。有关更多信息，请参阅中的 “[下载报告” Amazon Artifact](https://docs.amazonaws.cn/artifact/latest/ug/downloading-documents.html)。

您在使用 Amazon Web Services 服务 时的合规责任取决于您的数据的敏感性、贵公司的合规目标以及适用的法律和法规。有关您在使用时的合规责任的更多信息 Amazon Web Services 服务，请参阅[Amazon 安全文档](https://docs.amazonaws.cn/security/)。

# Amazon Kinesis Data Streams 中的故障恢复能力
<a name="disaster-recovery-resiliency"></a>

 Amazon 全球基础设施是围绕 Amazon 区域和可用区构建的。 Amazon 区域提供多个物理隔离和隔离的可用区，这些可用区通过低延迟、高吞吐量和高度冗余的网络相连。利用可用区，您可以设计和操作在可用区之间无中断地自动实现失效转移的应用程序和数据库。与传统的单个或多个数据中心基础架构相比，可用区具有更高的可用性、容错性和可扩展性。

有关 Amazon 区域和可用区的更多信息，请参阅[Amazon 全球基础设施](https://www.amazonaws.cn/about-aws/global-infrastructure/)。

除了 Amazon 全球基础架构外，Kinesis Data Streams 还提供多项功能来帮助支持您的数据弹性和备份需求。

## Amazon Kinesis Data Streams 中的灾难恢复
<a name="disaster-recovery"></a>

故障可能在您使用 Amazon Kinesis Data Streams 应用程序处理流中的数据时在以下级别发生：
+ 记录处理器可能失败
+ 工作程序可能失败，或者已实例化工作程序的应用程序的实例可能失败 
+ 托管该应用程序的一个或多个实例的 EC2 实例可能失败

### 记录处理器失败
<a name="kinesis-record-processor-failure-processor"></a>

工作人员使用 Java [ExecutorService](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html)任务调用记录处理器方法。如果任务失败，工作程序将保留对记录处理器之前在处理的分片的控制。工作程序启动一项新的记录处理器任务来处理该分片。有关更多信息，请参阅 [读取节流](kinesis-record-processor-additional-considerations.md#kinesis-record-processor-read-throttling)。

### 工作线程或应用程序失败
<a name="kinesis-record-processor-failure-worker"></a>

如果工作程序或 Amazon Kinesis Data Streams 应用程序的实例出现故障，您应该检测并处理这类情况。例如，如果 `Worker.run` 方法引发了一项异常，则您应捕获并处理它。

如果应用程序本身失败，您应检测此应用程序并重新启动它。该应用程序启动时，它会实例化一个新工作程序，这会反过来实例化自动获得要处理的分片的新记录处理器。这些分配可能是记录处理器在失败前正在处理的相同分片或这些处理器新接触的分片。

在工作程序或应用程序失败、未检测到失败且应用程序有其他实例正在其他 EC2 实例上运行的情况下，这些实例上的工作程序会处理该失败。它们将创建额外的记录处理器来处理不再由失败的工作程序处理的分片。这些其他 EC2 实例上的负载也会相应地增加。

此处描述的情形假定，尽管工作程序或应用程序已失败，但托管 EC2 实例仍在运行并因此不由自动扩缩组重新启动。

### Amazon EC2 实例故障
<a name="kinesis-record-processor-failure-instance"></a>

我们建议您在自动扩缩组中为您的应用程序运行 EC2 实例。由此一来，如果其中一个 EC2 实例失败，自动扩缩组会自动启动新的实例进行代替。您应该将实例配置为在启动时启动您的 Amazon Kinesis Data Streams 应用程序。

# 亚马逊 Kinesis Data Streams 中的基础设施安全
<a name="infrastructure-security"></a>

作为一项托管服务，受 Amazon 全球网络安全的保护。有关 Amazon 安全服务以及如何 Amazon 保护基础设施的信息，请参阅[Amazon 云安全](https://www.amazonaws.cn/security/)。要使用基础设施安全的最佳实践来设计您的 Amazon 环境，请参阅 S * Amazon ecurity Pillar Well-Architected Fram* ework 中的[基础设施保护](https://docs.amazonaws.cn/wellarchitected/latest/security-pillar/infrastructure-protection.html)。

您可以使用 Amazon 已发布的 API 调用通过网络进行访问。客户端必须支持以下内容：
+ 传输层安全性协议（TLS）。我们要求使用 TLS 1.2，建议使用 TLS 1.3。
+ 具有完全向前保密（PFS）的密码套件，例如 DHE（临时 Diffie-Hellman）或 ECDHE（临时椭圆曲线 Diffie-Hellman）。大多数现代系统（如 Java 7 及更高版本）都支持这些模式。

# Kinesis Data Streams 的安全最佳实践
<a name="security-best-practices"></a>

Amazon Kinesis Data Streams 提供了在您开发和实施自己的安全策略时需要考虑的大量安全功能。以下最佳实践是一般指导原则，并不代表完整安全解决方案。由于这些最佳实践可能不适合您的环境或不满足您的环境要求，因此将其视为有用的考虑因素而不是惯例。

## 实施最低权限访问
<a name="security-best-practices-privileges"></a>

在授予权限时，您可以决定谁获得哪些 Kinesis Data Streams 资源的哪些权限。您可以对这些资源启用希望允许的特定操作。因此，您应仅授予执行任务所需的权限。实施最低权限访问对于减小安全风险以及可能由错误或恶意意图造成的影响至关重要。

## 使用 IAM 角色
<a name="security-best-practices-roles"></a>

创建器和客户端应用程序必须具有有效的凭证来访问 Kinesis Data Streams。您不应将 Amazon 证书直接存储在客户端应用程序或 Amazon S3 存储桶中。这些是不会自动轮换的长期凭证，如果它们受到损害，可能会对业务产生重大影响。

相反，您应该使用 IAM 角色来管理创建器和客户端应用程序的临时凭证以访问 Kinesis 数据流。在使用角色时，您不必使用长期凭证（如用户名和密码或访问密钥）来访问其他资源。

有关更多信息，请参阅 *IAM 用户指南*中的以下主题：
+ [IAM 角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles.html)
+ [针对角色的常见情形：用户、应用程序和服务](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_common-scenarios.html)

## 实现从属资源中的服务器端加密
<a name="security-best-practices-sse"></a>

可以在 Kinesis Data Streams 中加密静态数据和传输中数据。有关更多信息，请参阅 [Amazon Kinesis Data Streams 中的数据保护](server-side-encryption.md)。

## CloudTrail 用于监控 API 调用
<a name="security-best-practices-cloudtrail"></a>

Kinesis Data Streams Amazon CloudTrail与一项服务集成，该服务提供用户、角色或 Amazon 服务在 Kinesis Data Streams 中采取的操作的记录。

使用收集的信息 CloudTrail，您可以确定向 Kinesis Data Streams 发出的请求、发出请求的 IP 地址、谁发出了请求、何时发出请求以及其他详细信息。

有关更多信息，请参阅 [使用记录亚马逊 Kinesis Data Streams API 调用 Amazon CloudTrail](logging-using-cloudtrail.md)。