

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

# 使用用户生成的 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*`。