

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

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

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

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

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


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

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

**注意**  
将中的 “区域”、“账户”、“” 和 “KCLApplication名称” 分别替换为您自己的 AWS 账户 号码 AWS 区域、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": "*"
        }
    ]
}
```

------

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