本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用控制对 Kinesis Video Streams 资源的访问权限 IAM
您可以将 AWS Identity and Access Management (IAM) 与 Amazon Kinesis Video Streams 配合使用,以控制组织中的用户是否可以使用特定的 Kinesis Video API Streams 操作执行任务,以及他们是否可以使用特定资源。 AWS
有关的更多信息IAM,请参阅以下内容:
内容
策略语法
IAM策略是由一个或多个声明组成的JSON文档。每个语句的结构如下:
{
"Statement":[{
"Effect":"effect
",
"Action":"action
",
"Resource":"arn
",
"Condition":{
"condition
":{
"key
":"value
"
}
}
}
]
}
组成语句的各个元素如下:
-
效果-效果可以是
Allow
或Deny
。默认情况下,用户无权使用资源和API操作,因此所有请求都将被拒绝。显式允许将覆盖默认规则。显式拒绝将覆盖任何允许。 -
操作-操作是您授予或拒绝权限的特定API操作。
-
资源-受操作影响的资源。要在语句中指定资源,必须使用其 Amazon 资源名称 (ARN)。
-
条件:条件是可选的。它们可以用于控制策略生效的时间。
在创建和管理IAM策略时,我们建议您使用IAM策略生成器和IAM策略模拟器。
Kinesis Video Streams 的操作
在IAM策略声明中,您可以指定任何支持的服务中的任何API操作IAM。对于 Kinesis Video Streams,请使用以下前缀作为动kinesisvideo:
作API名称:。例如:kinesisvideo:CreateStream
、kinesisvideo:ListStreams
和 kinesisvideo:DescribeStream
。
要在单个语句中指定多项操作,请使用逗号将它们隔开,如下所示:
"Action": ["kinesisvideo:action1", "kinesisvideo:action2"]
您也可以使用通配符指定多项操作。例如,您可以指定名称以单词“Get”开头的所有操作,如下所示:
"Action": "kinesisvideo:Get*"
若要指定所有 Kinesis Video Streams 操作,请使用 * (星号) 通配符,如下所示:
"Action": "kinesisvideo:*"
有关 Kinesis Video Streams 操作的完整列表,请参阅 K inesis Video API Streams 参考资料。API
Kinesis Video Streams 的亚马逊资源名称 (ARNs)
每项IAM策略声明都适用于您使用其指定的资源ARNs。
对 Kinesis Video Streams 使用以下ARN资源格式:
arn:aws:kinesisvideo:region
:account-id
:stream/stream-name
/code
例如:
"Resource": arn:aws:kinesisvideo:*:111122223333:stream/my-stream/0123456789012
你可以使用获取直播ARN的内容DescribeStream。
向其他IAM账户授予访问 Kinesis 视频流的权限
你可能需要向其他IAM账户授予权限才能在 Kinesis Video Streams 中对直播进行操作。下面概述了向各个账户授予对视频流的访问权的常规步骤:
获取您想要授予对账户中创建的直播资源执行操作权限的账户的 12 位账号 ID。
示例:在以下步骤中,我们将使用 111111111111 作为你想要向其授予权限的账户的账户 ID,并使用 99999999999999 作为你的 Kinesis Video Streams 的 ID
在拥有直播的账户 (999999999999) 中创建IAM托管策略,该策略允许您要授予的访问级别。
政策示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesisvideo:GetDataEndpoint", "kinesisvideo:DescribeStream", "kinesisvideo:PutMedia" ], "Resource": "arn:aws:kinesisvideo:us-west-2:
999999999999
:stream/custom-stream-name/1613732218179" } ] }有关 Kinesis Video Streams 资源的其他示例政策,示例策略请参阅下一节中的。
在拥有直播的账户 (999999999999) 中创建一个角色,然后指定要授予权限的账户 (111111111111)。这将为角色添加可信实体。
可信策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
111111111111
:root" }, "Action": "sts:AssumeRole" } ] }将您在上一步中创建的策略附加到此角色。
现在,您已在账户 999999999999 中创建了一个角色,该角色有权对托管策略中的直播资源ARN执行诸如
DescribeStream
GetDataEndpoint
、和PutMedia
之类的操作。这个新角色还信任另一个账户 111111111111 来担任这个角色。重要
记下这个角色ARN,你将在下一步中需要它。
在另一个账户 111111111111 中创建托管策略,允许对您在上一步中在账户 9999999999 中创建的角色
AssumeRole
执行操作。你需要提及上一步ARN中的角色。政策示例:
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::
999999999999
:role/CustomRoleName" } }将上一步中创建的策略附加到IAM实体,例如账户 111111111111 中的角色或用户。此用户现在有权在账户 999999999999
CustomRoleName
中扮演角色。该用户的凭据调用 AWS STS
AssumeRole
API以获取会话凭证,这些凭据随后用于在账户 999999999999 中创建的直播中调用 Kinesis Video APIs Streams。aws sts assume-role --role-arn "arn:aws:iam::
999999999999
:role/CustomRoleName" --role-session-name "kvs-cross-account-assume-role" { "Credentials": { "AccessKeyId": "", "SecretAccessKey": "", "SessionToken": "", "Expiration": "" }, "AssumedRoleUser": { "AssumedRoleId": "", "Arn": "" } }根据之前在环境中设置的访问密钥、私有密钥和会话凭证。
set AWS_ACCESS_KEY_ID= set AWS_SECRET_ACCESS_KEY= set AWS_SESSION_TOKEN=
运行 Kinesis Video APIs Streams 来描述并获取账户 999999999999 中直播的数据端点。
aws kinesisvideo describe-stream --stream-arn "arn:aws:kinesisvideo:us-west-2:
999999999999
:stream/custom-stream-name/1613732218179" { "StreamInfo": { "StreamName": "custom-stream-name", "StreamARN": "arn:aws:kinesisvideo:us-west-2:999999999999
:stream/custom-stream-name/1613732218179", "KmsKeyId": "arn:aws:kms:us-west-2:999999999999
:alias/aws/kinesisvideo", "Version": "abcd", "Status": "ACTIVE", "CreationTime": "2018-02-19T10:56:58.179000+00:00", "DataRetentionInHours": 24 } } aws kinesisvideo get-data-endpoint --stream-arn "arn:aws:kinesisvideo:us-west-2:999999999999
:stream/custom-stream-name/1613732218179" --api-name "PUT_MEDIA" { "DataEndpoint": "https://s-b12345.kinesisvideo.us-west-2.amazonaws.com" }
有关授予跨账户访问权限的一般 step-by-step 说明,请参阅AWS 账户 使用IAM角色委派访问权限。
Kinesis Video Streams 的策略示例
以下示例策略演示了如何控制用户对 Kinesis Video Streams 的访问权限
例 1:允许用户从任何 Kinesis 视频流中获取数据
此策略允许用户或群组对任何 Kinesis 视频流执行DescribeStream
GetDataEndpoint
GetMedia
ListStreams
、、、和ListTagsForStream
操作。此策略适用于可从任何视频流获取数据的用户。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesisvideo:Describe*", "kinesisvideo:Get*", "kinesisvideo:List*" ], "Resource": "*" } ] }
例 2:允许用户创建 Kinesis 视频流并向其写入数据
此策略允许用户或组执行 CreateStream
和 PutMedia
操作。此策略适用于可创建视频流并向该流发送数据的安保摄像头。
{ "Statement": [ { "Effect": "Allow", "Action": [ "kinesisvideo:CreateStream", "kinesisvideo:PutMedia" ], "Resource": "*" } ] }
例 3:允许用户完全访问所有 Kinesis Video Streams 资源
此策略允许用户或组对任何资源执行任何 Kinesis Video Streams 操作。此策略适用于管理员。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kinesisvideo:*", "Resource": "*" } ] }
例 4:允许用户向特定的 Kinesis 视频流写入数据
此策略允许用户或组将数据写入特定的视频流。此策略适用于可将数据发送到单个流的设备。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kinesisvideo:PutMedia", "Resource": "arn:aws:kinesisvideo:us-west-2:123456789012:stream/your_stream/0123456789012" } ] }