View a markdown version of this page

使用 IAM 控制对 Kinesis 视频流资源的访问权限 - Amazon Kinesis Video Streams
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

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

使用 IAM 控制对 Kinesis 视频流资源的访问权限

您可以将 Amazon Identity and Access Management (IAM) 与 Amazon Kinesis Video Streams 配合使用,控制您组织中的用户是否可以使用特定的 Kinesis Video Streams API 操作执行任务,以及他们是否可以使用特定 Amazon 资源。

有关 IAM 的更多信息,请参阅以下文档:

策略语法

IAM 策略是包含一个或多个语句的 JSON 文档。每个语句的结构如下:

{ "Statement":[{ "Effect":"effect", "Action":"action", "Resource":"arn", "Condition":{ "condition":{ "key":"value" } } } ] }

组成语句的各个元素如下:

  • 效果 — 效果可以是Allow或Deny。默认情况下 用户没有使用资源和 API 操作的权限,因此,所有请求均会被拒绝。显式允许将覆盖默认规则。显式拒绝将覆盖任何允许。

  • 操作 -该操作是您授予或拒绝权限的特定 API 操作。

  • 资源 -受操作影响的资源。要在语句中指定资源,必须使用其 Amazon 资源名称 (ARN)。

  • 条件:条件是可选的。它们可以用于控制策略生效的时间。

在创建和管理 IAM 策略时,我们建议您使用 IAM 策略生成器和 IAM 策略模拟器。

Kinesis 视频直播的操作

在 IAM 策略语句中,您可以从支持 IAM 的任何服务中指定任何 API 操作。对于 Kinesis 视频流,使用以下前缀作为 API 操作的名称:kinesisvideo:。例如:kinesisvideo:CreateStream、kinesisvideo:ListStreams 和 kinesisvideo:DescribeStream。

要在单个语句中指定多项操作,请使用逗号将它们隔开,如下所示:

"Action": ["kinesisvideo:action1", "kinesisvideo:action2"]

您也可以使用通配符指定多项操作。例如,您可以指定名称以单词“Get”开头的所有操作,如下所示:

"Action": "kinesisvideo:Get*"

若要指定所有 Kinesis Video Streams 操作,请使用 * (星号) 通配符,如下所示:

"Action": "kinesisvideo:*"

有关 Kinesis Video Streams API 操作的完整列表,请参阅 Kinesis Video Streams API 参考。

Kinesis Video Streams 的 Amazon 资源名称(ARN)

每个 IAM 策略语句适用于您使用资源的 ARN 指定的资源。

请对 Kinesis Video Streams 使用以下 ARN 资源格式:

arn:aws:kinesisvideo:region:account-id:stream/stream-name/code

例如:

"Resource": arn:aws:kinesisvideo:*:111122223333:stream/my-stream/0123456789012

你可以使用DescribeStream获取直播的 ARN。

向其他 IAM 账户授予访问 Kinesis 视频流的权限

您可能需要向其他 IAM 账户授予权限,才能对 Kinesis Video Streams 中的直播执行操作。下面概述了向各个账户授予对视频流的访问权的常规步骤:

  1. 获取您想要授予权限的账户的 12 位数账户 ID,以便对在您的账户中创建的直播资源执行操作。

    示例:在以下步骤中,我们将使用 111111111111 作为您想要授予权限的账户的账户 ID,并使用 999999999999 作为您的 Kinesis Video Streams 的 ID

  2. 在拥有直播的账户 (999999999999) 中创建 IAM 管理策略,以允许您想要授予的访问级别。

    政策示例:

    JSON
    { "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 资源的其他示例策略,请参阅下一节示例策略中的内容。

  3. 在拥有直播的账户中创建一个角色 (999999999999),并指定要为其授予权限的账户 (111111111111)。这将为角色添加一个可信实体。

    可信策略示例:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111111111111:root" }, "Action": "sts:AssumeRole" } ] }

    将您在上一步中创建的策略附加到此角色。

    现在,您已经在账户 999999999999 中创建了一个角色,该角色有权在托管策略中对流资源 ARN PutMedia 进行诸如DescribeStreamGetDataEndpoint、和之类的操作。这个新角色还信任另一个账户 111111111111 来代入这个角色。

    重要

    记下角色 ARN,下一步需要它。

  4. 在另一个账户 111111111111 中创建托管策略,允许对您在上一步中在账户 999999999999 中创建的角色进行AssumeRole操作。您需要提及上一步中的角色 ARN。

    政策示例:

    JSON
    { "Version":"2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::999999999999:role/CustomRoleName" } }
  5. 将上一步中创建的策略附加到 IAM 实体,例如账户 111111111111 中的角色或用户。此用户现在有权在账户 999999999999 CustomRoleName 中扮演角色。

    该用户的凭证调用 Amazon STS AssumeRole API 来获取会话凭证,随后使用这些凭证在账户 999999999999 中创建的直播上调用 Kinesis Video Streams API。

    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": "" } }
  6. 根据先前在环境中设置的访问密钥、私有密钥和会话凭证来设置访问密钥、密钥和会话凭证。

    set AWS_ACCESS_KEY_ID= set AWS_SECRET_ACCESS_KEY= set AWS_SESSION_TOKEN=
  7. 运行 Kinesis Video Streams API 来描述和获取账户 9999999999 中直播的数据端点。

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

有关授予跨账户访问权限的通用分步说明,请参阅 Amazon Web Services 账户 使用 IAM 角色https://docs.amazonaws.cn/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html委托访问权限。

Kinesis 视频流策略示例

以下示例策略演示了如何控制用户对 Kinesis 视频流的访问权限

例 1:允许用户从任何 Kinesis 视频流中获取数据

此策略允许用户或群组对任何 Kinesis 视频流执行DescribeStreamGetDataEndpointGetMediaListStreams、、、和ListTagsForStream操作。此策略适用于可从任何视频流获取数据的用户。

JSON
{ "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 操作。此策略适用于管理员。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kinesisvideo:*", "Resource": "*" } ] }
例 4:允许用户向特定的 Kinesis 视频流写入数据

此策略允许用户或组将数据写入特定的视频流。此策略适用于可将数据发送到单个流的设备。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kinesisvideo:PutMedia", "Resource": "arn:aws:kinesisvideo:us-west-2:123456789012:stream/your_stream/0123456789012" } ] }