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

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

使用控制对 Amazon Kinesis Data Streams 资源的访问权限 IAM

Amazon Identity and Access Management (IAM) 允许您执行以下操作:

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

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

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

  • 允许其他 Amazon 账户中的用户共享您的 Amazon 资源

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

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

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

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

有关的更多信息IAM,请参阅以下内容:

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

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

策略语法

IAM策略是由一个或多个声明组成的JSON文档。每个语句的结构如下:

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

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

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

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

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

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

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

Kinesis Data Streams 的操作

在IAM策略声明中,您可以指定任何支持的服务中的任何API操作IAM。对于 Kinesis Data Streams,请使用以下前缀作为操作kinesis:名称:。API例如:kinesis:CreateStreamkinesis:ListStreamskinesis:DescribeStreamSummary

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

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

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

"Action": "kinesis:Get*"

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

"Action": "kinesis:*"

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

Kinesis Data Streams 的亚马逊资源名称 (ARNs)

每项IAM策略声明都适用于您使用其指定的资源ARNs。

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

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

例如:

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

Kinesis Data Streams 的示例策略

以下示例策略演示如何控制用户对您的 Kinesis Data Streams 的访问。

Example 1: Allow users to get data from a stream

此策略允许用户或组对特定流执行 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": [ "*" ] } ] }
Example 2: Allow users to add data to any stream in the account

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

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesis:PutRecord" ], "Resource": [ "arn:aws:kinesis:us-east-1:111122223333:stream/*" ] } ] }
Example 3: Allow any Kinesis Data Streams action on a specific stream

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

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kinesis:*", "Resource": [ "arn:aws:kinesis:us-east-1:111122223333:stream/stream1" ] } ] }
Example 4: Allow any Kinesis Data Streams action on any stream

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

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

与其他账户共享您的数据流

注意

Kinesis 制作器库目前不支持在写入数据流ARN时指定流。 Amazon SDK如果您想写入跨账户数据流,请使用。

基于资源的策略附加到您的数据流,以向其他账户、IAM用户或IAM角色授予访问权限。基于资源的JSON策略是您附加到资源(例如数据流)的策略文档。这些策略将向指定的主体授予对该资源执行特定操作的权限,并定义这在哪些条件下适用。一个策略可以有多个语句。您必须在基于资源的策略中指定主体。委托人可以包括账户、用户、角色、联合用户或 Amazon 服务。您可以在 Kinesis Data Streams 控制台中配置策略API,SDK或者。

请注意,要与注册使用者(例如 Enhance d Fan Out)共享访问权限,需要对数据流ARN和消费者制定政策ARN。

启用跨账户访问

要启用跨账户访问权限,您可以将整个账户或另一个账户中的IAM实体指定为基于资源的策略中的委托人。将跨账户主体添加到基于资源的策略只是建立信任关系工作的一半而已。当委托人和资源位于不同的 Amazon 账户中时,您还必须使用基于身份的策略来授予委托人访问资源的权限。但是,如果基于资源的策略向同一个账户中的主体授予访问权限,则不需要额外的基于身份的策略。

有关使用基于资源的策略进行跨账户访问的更多信息,请参阅中的跨账户资源访问。IAM

数据流管理员可以使用 Amazon Identity and Access Management 策略来指定谁有权访问什么。也就是说,哪个主体 可以对什么资源执行操作,以及在什么条件下执行。JSON策略Action元素描述了可用于在策略中允许或拒绝访问的操作。策略操作通常与关联的 Amazon API操作同名。

可以共享的 Kinesis Data Streams 操作:

操作 访问级别
DescribeStreamConsumer 消费端
DescribeStreamSummary 数据流
GetRecords 数据流
GetShardIterator 数据流
ListShards 数据流
PutRecord 数据流
PutRecords 数据流
SubscribeToShard 消费端

以下是使用基于资源的策略向您的数据流或注册使用者授予跨账户存取权限的示例。

要执行跨账户操作,您必须ARN为数据流访问指定流,ARN为注册使用者访问指定使用者。

Kinesis Data Streams 基于资源的策略示例

由于需要执行的操作,共享注册的使用者既涉及数据流策略,也涉及使用者策略。

注意

Principal 的示例有效值如下:

  • {"AWS": "123456789012"}

  • IAM用户 — {"AWS": "arn:aws:iam::123456789012:user/user-name"}

  • IAM角色 — {"AWS":["arn:aws:iam::123456789012:role/role-name"]}

  • 多个主体(可以是账户、用户、角色的组合)– {"AWS":["123456789012", "123456789013", "arn:aws:iam::123456789012:user/user-name"]}

Example 1: Write access to the data stream
{ "Version": "2012-10-17", "Id": "__default_write_policy_ID", "Statement": [ { "Sid": "writestatement", "Effect": "Allow", "Principal": { "AWS": "Account12345" }, "Action": [ "kinesis:DescribeStreamSummary", "kinesis:ListShards", "kinesis:PutRecord", "kinesis:PutRecords" ], "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC" } ] }
Example 2: Read access to the data stream
{ "Version": "2012-10-17", "Id": "__default_sharedthroughput_read_policy_ID", "Statement": [ { "Sid": "sharedthroughputreadstatement", "Effect": "Allow", "Principal": { "AWS": "Account12345" }, "Action": [ "kinesis:DescribeStreamSummary", "kinesis:ListShards", "kinesis:GetRecords", "kinesis:GetShardIterator" ], "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC" } ] }
Example 3: Share enhanced fan-out read access to a registered consumer

数据流策略语句:

{ "Version": "2012-10-17", "Id": "__default_sharedthroughput_read_policy_ID", "Statement": [ { "Sid": "consumerreadstatement", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::Account12345:role/role-name" }, "Action": [ "kinesis:DescribeStreamSummary", "kinesis:ListShards" ], "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC" } ] }

使用者策略语句:

{ "Version": "2012-10-17", "Id": "__default_efo_read_policy_ID", "Statement": [ { "Sid": "eforeadstatement", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::Account12345:role/role-name" }, "Action": [ "kinesis:DescribeStreamConsumer", "kinesis:SubscribeToShard" ], "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC/consumer/consumerDEF:1674696300" } ] }

为确保遵守最低权限原则,操作或主体字段不支持通配符(*)。

以编程方式管理数据流策略

除此之外 Amazon Web Services Management Console,Kinesis Data Streams 还有APIS三个用于管理您的数据流策略:

PutResourePolicy 用于附加或覆盖数据流或使用者策略。GetResourcePolicy 用于检查和查看指定数据流或使用者的策略。DeleteResourcePolicy 用于删除指定数据流或使用者的策略。

策略限制

Kinesis Data Streams 资源策略有以下限制:

  • 不支持通配符 (*),以防通过直接附加到数据流或注册消费端的资源策略授予广泛访问权限。此外,还要仔细检查以下策略,来确认它们不会授予广泛访问权限:

    • 附加到关联 Amazon 委托人(例如角色)的基于身份的策略 IAM

    • 附加到关联 Amazon 资源的基于资源的策略(例如, Amazon Key Management Service KMS密钥)

  • Amazon 校长不支持服务校长,以防止副校长可能感到困惑

  • 不支持联合身份验证主体。

  • 不支持规范IDs用户。

  • 策略大小不能超过 20KB。

共享对加密数据的访问权限

如果您已使用 Amazon 托管密KMS钥为数据流启用服务器端加密,并希望通过资源策略共享访问权限,则必须切换到使用客户管理的密钥 () CMK。有关更多信息,请参阅 什么是 Kinesis Data Streams 的服务器端加密?。此外,您必须允许您的共享主体使用KMS跨账户共享功能访问您CMK的。还要确保对共享主体实体的IAM政策进行更改。有关更多信息,请参阅允许其他账户中的用户使用密KMS钥

将 Amazon Lambda 函数配置为使用另一个账户从 Kinesis Data Streams 读取

有关如何配置 Lambda 函数以在其他账户中读取 Kinesis Data Streams 中的数据的示例,请参阅 使用跨账户 Amazon Lambda 功能共享访问权限