KCL 消费端应用程序所必需的 IAM 权限 - Amazon Kinesis Data Streams

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

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

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

的安全最佳实践AWS要求使用细粒度的权限来控制对不同资源的访问权限。 AWS Identity and Access Management(IAM) 允许您在中管理用户和用户权限AWS。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

*

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

注意

将中的 “区域”、“账户”、“” 和 “KCLApplication名称” 分别替换为您自己的AWS 账户号码AWS 区域、Kinesis 数据流名称和 KCL 应用程序名称。StreamName ARNsKCL 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": "*" } ] }

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

  • 将区域替换为你的AWS 区域(例如 us-east-1)。

  • 将账号_ID替换为你的AWS 账户账号。

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

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

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