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

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

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

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

  • 在您的下方创建用户和群组 AWS account

  • 为你旗下的每位用户分配唯一的安全证书 AWS account

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

  • 允许用户进入另一个 AWS 账户来分享你的 AWS 资源

  • 为你创建角色 AWS 帐户并定义可以代入他们的用户或服务

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

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

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

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

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

有关IAM和 Amazon 的更多信息 CloudWatch,请参阅控制用户对您的访问权限 AWS亚马逊 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时指定流。使用 AWS SDK如果你想写入跨账户数据流。

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

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

启用跨账户访问权限

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

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

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

可以共享的 Kinesis Data Streams 操作:

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

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

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

Kinesis 数据流基于资源的策略示例

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

注意

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" } ] }

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

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

在外面 AWS Management Console,Kinesis Data Streams 有APIS三个用于管理你的数据流策略:

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

策略限制

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

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

    • 关联的基于身份的策略 AWS 负责人(例如,IAM角色)

    • 关联的基于资源的策略 AWS 资源(例如, AWS Key Management Service KMS钥匙)

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

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

  • 不支持规范IDs用户。

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

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

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

配置一个 AWS Lambda 使用另一个账户从 Kinesis Data Streams 读取的函数

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