本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 IAM 控制对 Amazon Kinesis Data Streams 资源的访问
Amazon Identity and Access Management 通过(IAM),您可以执行以下操作:
-
在您的 Amazon 账户下创建用户和组
-
为您的 Amazon 账户下的每个用户分配唯一的安全凭证
-
控制每个用户使用 Amazon 资源执行任务的权限
-
允许另一 Amazon 账户的用户共享您的 Amazon 资源
-
创建 Amazon 账户角色并定义可以担任这些角色的用户或服务
-
借助企业的现有身份,授予使用 Amazon 资源执行任务的权限
通过将 IAM 与 Kinesis Data Streams 配合使用,您可以控制组织中的用户能否使用特定的 Kinesis Data Streams API 操作执行任务,以及他们能否使用特定的 Amazon 资源。
如果您使用 Kinesis 客户端库(KCL)开发应用程序,客户机库中必须包含Amazon DynamoDB 和亚马逊的权限; CloudWatchKCL 使用 DynamoDB 跟踪应用程序的状态信息,并代表您发送 KCL 指标。 CloudWatch CloudWatch有关 KCL 的更多信息,请参阅开发 KCL 1.x 消费端。
有关 IAM 的更多信息,请参阅以下文档:
有关 IAM 和 AmazonDynamoDB 的更多信息,请参阅《Amazon DynamoDB 开发人员指南》中的使用 IAM 控制对 Amazon DynamoDB 资源的访问。
有关 IAM 和 Amazon 的更多信息 CloudWatch,请参阅亚马逊用户指南中的控制 CloudWatch 用户对您 Amazon 账户的访问权限。
内容
策略语法
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 的 Amazon 资源名称(ARNs)
每个 IAM policy 语句适用于您使用资源指定的资源 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。如果您想写入跨账户函数写入数据,请使用 Amazon SDK。
将基于资源的策略附加到您的数据流,以向其他账户、IAM 用户或 IAM 角色授予访问权限。基于资源的策略是附加到资源(例如数据流)的 JSON 策略文档。这些策略将向指定的主体授予对该资源执行特定操作的权限,并定义这在哪些条件下适用。一个策略可以有多个语句。您必须在基于资源的策略中指定主体。委托人可以包括账户、用户、角色、联合身份用户或 Amazon 服务。您可通过 Kinesis Data Streams 控制台、API 或 SDK 配置策略。
请注意,要与已注册的使用者(例如增强型扇出功能)共享访问权限,则数据流 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"]}
以编程方式管理数据流策略
除此之外 Amazon Web Services Management Console,Kinesis Data Streams 还可通过三个 API 来管理数据流策略:
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 policy 进行更改。有关更多信息,请参阅允许其他账户中的用户使用 KMS 密钥。
配置一个 Amazon Lambda 函数,从而在其他账户中读取 Kinesis Data Streams 中的数据
有关如何配置 Lambda 函数以在其他账户中读取 Kinesis Data Streams 中的数据的示例,请参阅 与跨账户 Amazon Lambda 函数共享访问权限访问权限访问权限。