KCL 消费端应用程序所必需的 IAM 权限 - Amazon Kinesis Data Streams
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

KCL 消费端应用程序所必需的 IAM 权限

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

Amazon 的安全最佳实践描述了如何使用精细权限来控制对各种资源的访问。Amazon Identity and Access Management通过 IAM,您可以管理 Amazon 中的用户和用户权限。IAM policy 明确列出了允许的操作以及这些操作适用于的资源。

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

KCL 消费端应用程序的最低 IAM 权限
服务 操作 资源 (ARN) 用途
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

*

将有益于监控应用程序的指标上传到 CloudWatch。之所以使用星号 (*),是因为 CloudWatch 中没有调用 PutMetricData 操作的特定资源。

注意

将 ARN 中的“region”、“account”、“StreamName” 和 “kclApplicationName”分别替换为您自己的 Amazon Web Services 区域、Amazon Web Services 账户 编号、Kinesis 数据流名称和 KCL 应用程序的名称。KCL 3.x 在 DynamoDB 中又创建了两个元数据表。有关 KCL 创建的 DynamoDB 元数据表的详细信息,请参阅KCL 中的 DynamoDB 元数据表和负载平衡。如果使用配置来自定义 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": "*" } ] }

在使用该策略示例之前,检查以下项:

  • 将 REGION 替换为您的 Amazon Web Services 区域(例如,us-east-1)。

  • 将 ACCOUNT_ID 替换为您的 Amazon Web Services 账户 ID。

  • 将 STREAM_NAME 替换为 Kinesis 数据流的名称。

  • 使用 KCL 时,请将 CONSUMER_NAME 替换为消费端的名称,这通常是应用程序的名称。

  • 将 KCL_APPLICATION_NAME 替换为 KCL 应用程序的名称。