本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 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 可以是
Allow
或Deny
。在默认情况下,IAM 用户没有使用资源和 API 操作的许可,因此,所有请求均会被拒绝。显式允许将覆盖默认规则。显式拒绝将覆盖任何允许。 -
Action:action 是对其授予或拒绝权限的特定 API 操作。
-
Resource:受操作影响的资源。要在语句中指定资源,您需要使用其Amazon 资源名称 (ARN)。
-
Condition:条件是可选的。它们可以用于控制策略生效的时间。
在创建和管理 IAM 策略时,您可能需要使用IAM 策略生成器还有IAM 策略模拟器。
针对 Kinesis 数据流的操作
在 IAM policy 语句中,您可以从支持 IAM 的任何服务中指定任何 API 操作。对于 Kinesis 数据流,请使用以下前缀作为 API 操作的名称:kinesis:
。例如:kinesis:CreateStream
、kinesis:ListStreams
和 kinesis: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:允许用户从流中获取数据
此策略允许用户或组对特定流执行 DescribeStreamSummary
、GetShardIterator
和 GetRecords
操作,对任何流执行 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/*" ] } ] }