使用 IAM 控制对亚马逊 Kinesis 数据流资源的访问权限 - Amazon Kinesis Data Streams
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 IAM 控制对亚马逊 Kinesis 数据流资源的访问权限

Amazon Identity and Access Management(IAM) 使您能够执行以下操作:

  • 在您的 Amazon 账户下创建用户和组

  • 为您的 Amazon 账户下的每个用户分配唯一的安全凭证

  • 控制每个用户使用 Amazon 资源执行任务的权限

  • 允许另一 Amazon 账户的用户共享您的 Amazon 资源

  • 创建 Amazon 账户角色并定义可以担任这些角色的用户或服务

  • 借助企业的现有身份,授予使用 Amazon 资源执行任务的权限

通过将 IAM 与 Kinesis Data Streams 配合使用,您可以控制组织中的用户是否可以使用特定的 Kinesis Data Streams API 操作来执行任务,以及他们是否可以使用特定 Kinesis Data Streams API 操作Amazon资源。

如果您使用 Kinesis 客户端库 (KCL) 开发应用程序,则您的策略必须包括亚马逊 DynamoDB 和亚马逊的权限CloudWatch;KCL 使用 DynamoDB 来跟踪应用程序的状态信息,以及CloudWatch将 KCL 指标发送到CloudWatch代表你。有关 KCL 的更多信息,请参阅开发 KCL 1.x 使用者

有关 IAM 的更多信息,请参阅以下文档:

有关 IAM 和亚马逊 DynamoDB 的更多信息,请参阅使用 IAM 控制对亚马逊 DynamoDB 资源的访问权限亚马逊 DynamoDB 开发者指南

有关 IAM 和亚马逊的更多信息CloudWatch,参见控制用户对您的访问权限Amazon账户亚马逊CloudWatch用户指南

策略语法

IAM policy 是包含一个或多个语句的 JSON 文档。每个语句的结构如下:

{ "Statement":[{ "Effect":"effect", "Action":"action", "Resource":"arn", "Condition":{ "condition":{ "key":"value" } } } ] }

组成语句的各个元素如下:

  • Effect:effect 可以是 AllowDeny。在默认情况下,IAM 用户没有使用资源和 API 操作的许可,因此,所有请求均会被拒绝。显式允许将覆盖默认规则。显式拒绝将覆盖任何允许。

  • Actionaction 是对其授予或拒绝权限的特定 API 操作。

  • Resource:受操作影响的资源。要在语句中指定资源,您需要使用其Amazon 资源名称 (ARN)。

  • Condition:条件是可选的。它们可以用于控制策略生效的时间。

在创建和管理 IAM 策略时,您可能需要使用IAM 策略生成器还有IAM 策略模拟器

针对 Kinesis 数据流的操作

在 IAM policy 语句中,您可以从支持 IAM 的任何服务中指定任何 API 操作。对于 Kinesis 数据流,请使用以下前缀作为 API 操作的名称:kinesis:。例如:kinesis:CreateStreamkinesis:ListStreamskinesis:DescribeStreamSummary

要在单个语句中指定多项操作,请使用逗号将它们隔开,如下所示:

"Action": ["kinesis:action1", "kinesis:action2"]

您也可以使用通配符指定多项操作。例如,您可以指定名称以单词“Get”开头的所有操作,如下所示:

"Action": "kinesis:Get*"

要指定所有 Kinesis 数据流操作,请使用* 通配符,如下所示:

"Action": "kinesis:*"

有关 Kinesis Data Streams API 操作的完整列表,请参见亚马逊 Kinesis API 参考

Kinesis 数据流的亚马逊资源名称 (ARN)

每个 IAM policy 语句适用于您使用资源的 ARN 指定的资源。

对于 Kinesis 数据流,使用以下 ARN 资源格式:

arn:aws:kinesis:region:account-id:stream/stream-name

例如:

"Resource": arn:aws:kinesis:*:111122223333:stream/my-stream

Kinesis 数据流的策略示例

以下示例策略演示了如何控制用户对 Kinesis 数据流的访问权限。

例 1:允许用户从流中获取数据

此策略允许用户或组对特定流执行 DescribeStreamSummaryGetShardIteratorGetRecords 操作,对任何流执行 ListStreams 操作。此策略可应用于应该能够从特定流获取数据的用户。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesis:Get*", "kinesis:DescribeStreamSummary" ], "Resource": [ "arn:aws:kinesis:us-east-1:111122223333:stream/stream1" ] }, { "Effect": "Allow", "Action": [ "kinesis:ListStreams" ], "Resource": [ "*" ] } ] }
例 2:允许用户将数据添加到账户中的流

此策略允许用户或组对账户的任一流使用 PutRecord 操作。此策略可应用于应该能够向账户中的所有流添加数据记录的用户。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesis:PutRecord" ], "Resource": [ "arn:aws:kinesis:us-east-1:111122223333:stream/*" ] } ] }
例 3:允许对特定数据流执行任何 Kinesis 数据流操作

此策略允许用户或群组对指定流使用任何 Kinesis 数据流操作。此策略可应用于应该对特定流有管理控制权限的用户。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kinesis:*", "Resource": [ "arn:aws:kinesis:us-east-1:111122223333:stream/stream1" ] } ] }
例 4:允许对任何数据流执行任何 Kinesis 数据流操作

此策略允许用户或群组对账户中的任何数据流使用任何 Kinesis 数据流操作。由于此策略会授予对您的所有流的完全访问权限,您应该将其限制为仅对管理员可用。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kinesis:*", "Resource": [ "arn:aws:kinesis:*:111122223333:stream/*" ] } ] }