本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 IAM 控制对 Amazon Kinesis Data Streams 资源的访问
AWS Identity and Access Management (IAM) 使您能够执行以下操作:
-
在您的 AWS 账户下创建用户和群组
-
为您 AWS 账户下的每位用户分配唯一的安全证书
-
控制每个用户使用 AWS 资源执行任务的权限
-
允许其他 AWS 账户中的用户共享您的 AWS 资源
-
为您的 AWS 账户创建角色并定义可以担任这些角色的用户或服务
-
使用企业的现有身份授予使用 AWS 资源执行任务的权限
通过将 IAM 与 Kinesis Data Streams 配合使用,您可以控制组织中的用户能否使用特定的 Kinesis Data Streams API 操作执行任务,以及他们能否使用特定的 AWS 资源。
如果您使用 Kinesis 客户端库 (KCL) 开发应用程序,则您的策略必须包括亚马逊 DynamoDB 和亚马逊的权限; CloudWatchKCL 使用 DynamoDB 来跟踪应用程序的状态信息,并代表您向发送 KCL 指标。 CloudWatch CloudWatch有关 KCL 的更多信息,请参阅开发 KCL 1.x 消费端。
有关 IAM 的更多信息,请参阅以下文档:
有关 IAM 和 AmazonDynamoDB 的更多信息,请参阅《Amazon DynamoDB 开发人员指南》中的使用 IAM 控制对 Amazon DynamoDB 资源的访问。
有关 IAM 和 Amazon 的更多信息 CloudWatch,请参阅亚马逊用户指南中的控制 CloudWatch 用户对您 AWS 账户的访问权限。
内容
策略语法
IAM policy 是包含一个或多个语句的 JSON 文档。每个语句的结构如下:
{
"Statement":[{
"Effect":"effect
",
"Action":"action
",
"Resource":"arn
",
"Condition":{
"condition
":{
"key
":"value
"
}
}
}
]
}
组成语句的各个元素如下:
-
Effect:此 effect 可以是
Allow
或Deny
。在默认情况下,IAM 用户没有使用资源和 API 操作的许可,因此,所有请求均会被拒绝。显式允许将覆盖默认规则。显式拒绝将覆盖任何允许。 -
Action:action 是对其授予或拒绝权限的特定 API 操作。
-
Resource:受操作影响的资源。要在语句中指定资源,您需要使用其 Amazon 资源名称(ARN)。
-
条件:条件是可选的。它们可以用于控制策略生效的时间。
在创建和管理 IAM policy 时,您可能希望使用 IAM Policy 生成器和 IAM Policy Simulator。
Kinesis Data Streams 的操作
在 IAM policy 语句中,您可以从支持 IAM 的任何服务中指定任何 API 操作。对于 Kinesis Data Streams,请使用以下前缀为 API 操作命名:kinesis:
。例如:kinesis:CreateStream
、kinesis:ListStreams
和 kinesis:DescribeStreamSummary
。
要在单个语句中指定多项操作,请使用逗号将它们隔开,如下所示:
"Action": ["kinesis:action1", "kinesis:action2"]
您也可以使用通配符指定多项操作。例如,您可以指定名称以单词“Get”开头的所有操作,如下所示:
"Action": "kinesis:Get*"
要指定所有 Kinesis Data Streams 操作,请使用 * 通配符,如下所示:
"Action": "kinesis:*"
有关 Kinesis Data Streams API 操作的完整列表,请参阅 Amazon Kinesis API Reference。
Kinesis Data Streams 的亚马逊资源名称 (ARNs)
每个 IAM 政策声明都适用于您使用其指定的资源 ARNs。
请对 Kinesis Data Streams 使用以下 ARN 资源格式:
arn:aws:kinesis:region
:account-id
:stream/stream-name
例如:
"Resource": arn:aws:kinesis:*:111122223333:stream/my-stream
Kinesis Data Streams 的示例策略
以下示例策略演示如何控制用户对您的 Kinesis Data Streams 的访问。
与其他账户共享您的数据流
注意
Kinesis Producer Library 目前不支持在写入数据流时指定流 ARN。如果您想写入跨账户数据流,请使用 AWS SDK。
将基于资源的策略附加到您的数据流,以向其他账户、IAM 用户或 IAM 角色授予访问权限。基于资源的策略是附加到资源(例如数据流)的 JSON 策略文档。这些策略将向指定的主体授予对该资源执行特定操作的权限,并定义这在哪些条件下适用。一个策略可以有多个语句。您必须在基于资源的策略中指定主体。委托人可以包括账户、用户、角色、联合用户或 AWS 服务。您可通过 Kinesis Data Streams 控制台、API 或 SDK 配置策略。
请注意,要与已注册的使用者(例如增强型扇出功能)共享访问权限,则数据流 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 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"]}
以编程方式管理数据流策略
除此之外 AWS Management Console,Kinesis Data Streams 还有三个 API 用于管理您的数据流策略:
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 policy 进行更改。有关更多信息,请参阅允许其他账户中的用户使用 KMS 密钥。
将 AWS Lambda 函数配置为使用另一个账户从 Kinesis Data Streams 读取
有关如何配置 Lambda 函数以在其他账户中读取 Kinesis Data Streams 中的数据的示例,请参阅 使用跨账户 AWS Lambda 功能共享访问权限。