

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

# KCL 消费端应用程序所必需的 IAM 权限
<a name="kcl-iam-permissions"></a>

 必须向与 KCL 消费端应用程序有关的 IAM 角色或用户添加以下权限。

 的安全最佳实践 Amazon 要求使用细粒度的权限来控制对不同资源的访问权限。 Amazon Identity and Access Management (IAM) 允许您在中管理用户和用户权限 Amazon。IAM policy 明确列出了允许的操作以及这些操作适用于的资源。

下表显示了 KCL 消费端应用程序通常需要的最低 IAM 权限：


**KCL 消费端应用程序的最低 IAM 权限**  

| 服务 | 操作 | 资源 (ARNs) | 用途 | 
| --- | --- | --- | --- | 
| Amazon Kinesis Data Streams |  `DescribeStream` `DescribeStreamSummary` `RegisterStreamConsumer`  |  KCL 应用程序从中处理数据的 Kinesis 数据流。`arn:aws:kinesis:region:account:stream/StreamName`  |  在尝试读取记录前，消费端会检查数据流是否存在，数据流是否处于活动状态，以及分片是否包含在数据流中。 将消费端注册到分片。  | 
| Amazon Kinesis Data Streams |  `GetRecords` `GetShardIterator` `ListShards`  | KCL 应用程序从中处理数据的 Kinesis 数据流。`arn:aws:kinesis:region:account:stream/StreamName` |  从分片读取记录。  | 
| Amazon Kinesis Data Streams |  `SubscribeToShard` `DescribeStreamConsumer` |  KCL 应用程序从中处理数据的 Kinesis 数据流。只有在使用增强扇出型（EFO）消费端时才添加此操作。 `arn:aws:kinesis:region:account:stream/StreamName/consumer/*`  |  为增强型扇出（EFO）消费端订阅分片。  | 
| Amazon DynamoDB |  `CreateTable` `DescribeTable` `UpdateTable` `Scan` `GetItem` `PutItem` `UpdateItem` `DeleteItem`  |  租约表（KCL 创建的 DynamoDB 中的元数据表）。 `arn:aws:dynamodb:region:account:table/KCLApplicationName`  |  KCL 需要执行这些操作才能管理 DynamoDB 中创建的租约表。  | 
| Amazon DynamoDB |  `CreateTable` `DescribeTable` `Scan` `GetItem` `PutItem` `UpdateItem` `DeleteItem`  |  KCL 创建的工作程序指标和协调器状态表（DynamoDB 中的元数据表）。 `arn:aws:dynamodb:region:account:table/KCLApplicationName-WorkerMetricStats` `arn:aws:dynamodb:region:account:table/KCLApplicationName-CoordinatorState`  |  KCL 需要这些操作才能管理 DynamoDB 中的工作程序指标和协调器状态元数据表。  | 
| Amazon DynamoDB | `Query` |  租约表上的全局二级索引。 `arn:aws:dynamodb:region:account:table/KCLApplicationName/index/*`  |  KCL 需要执行此操作才能读取 DynamoDB 中创建的租约表的全局二级索引。  | 
| Amazon CloudWatch | `PutMetricData` |  \$1  |  上传指标对于监控应用程序非常有用。 CloudWatch 之所以使用星号 (\$1)，是因为没有用于调用`PutMetricData`操作 CloudWatch 的特定资源。  | 

**注意**  
将中的 “区域”、“账户”、“” 和 “KCLApplication名称” 分别替换为您自己的 Amazon Web Services 账户 号码 Amazon Web Services 区域、Kinesis 数据流名称和 KCL 应用程序名称。StreamName ARNsKCL 3.x 在 DynamoDB 中又创建了两个元数据表。有关 KCL 创建的 DynamoDB 元数据表的详细信息，请参阅[KCL 中的 DynamoDB 元数据表和负载均衡](kcl-dynamoDB.md)。如果使用配置来自定义 KCL 创建的元数据表的名称，请使用这些指定的表名称而不是 KCL 应用程序名称。

下面是 KCL 消费端应用程序的策略文档示例。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:DescribeStream",
                "kinesis:DescribeStreamSummary",
                "kinesis:RegisterStreamConsumer",
                "kinesis:GetRecords",
                "kinesis:GetShardIterator",
                "kinesis:ListShards"
            ],
            "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/STREAM_NAME"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:SubscribeToShard",
                "kinesis:DescribeStreamConsumer"
            ],
            "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/STREAM_NAME/consumer/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:CreateTable",
                "dynamodb:DescribeTable",
                "dynamodb:UpdateTable",
                "dynamodb:GetItem",
                "dynamodb:UpdateItem",
                "dynamodb:PutItem",
                "dynamodb:DeleteItem",
                "dynamodb:Scan"
            ],
            "Resource": [
            "arn:aws:dynamodb:us-east-1:123456789012:table/KCL_APPLICATION_NAME"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:CreateTable",
                "dynamodb:DescribeTable",
                "dynamodb:GetItem",
                "dynamodb:UpdateItem",
                "dynamodb:PutItem",
                "dynamodb:DeleteItem",
                "dynamodb:Scan"
            ],
            "Resource": [
            "arn:aws:dynamodb:us-east-1:123456789012:table/KCL_APPLICATION_NAME-WorkerMetricStats",
    "arn:aws:dynamodb:us-east-1:123456789012:table/KCL_APPLICATION_NAME-CoordinatorState"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:Query"
            ],
            "Resource": [
            "arn:aws:dynamodb:us-east-1:123456789012:table/KCL_APPLICATION_NAME/index/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricData"
            ],
            "Resource": "*"
        }
    ]
}
```

------

在使用该策略示例之前，检查以下项：
+ 将区域替换为你的 Amazon Web Services 区域 （例如 us-east-1）。
+ 将账号\$1ID替换为你的 Amazon Web Services 账户 账号。
+ 将 STREAM\$1NAME 替换为 Kinesis 数据流的名称。
+ 使用 KCL 时，请将 CONSUMER\$1NAME 替换为消费端的名称，这通常是应用程序的名称。
+ 将 KCL\$1APPLICATION\$1NAME 替换为 KCL 应用程序的名称。