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

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

使用 IAM 控制对 Kinesis Video Streams 资源的访问权限

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

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

策略语法

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

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

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

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

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

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

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

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

Kinesis Video Streams 的操作

在 IAM policy 语句中,您可以从支持 IAM 的任何服务中指定任何 API 操作。对于 Kinesis Video Streams,请使用以下前缀和 API 操作kinesisvideo:的名称:。例如:kinesisvideo:CreateStreamkinesisvideo:ListStreamskinesisvideo: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 policy 语句适用于您使用资源的 ARN 指定的资源。

请对 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 中对直播执行操作。下面概述了向各个账户授予对视频流的访问权的常规步骤:

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

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

  2. 在拥有直播的账户 (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 资源的其他示例政策,示例策略请参阅下一节中的。

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

    可信策略示例:

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

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

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

    重要

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

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

    政策示例:

    { "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,在账户 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 说明,请参阅Amazon Web Services 账户 使用 IAM 角色委派访问权限

Kinesis Video Streams 的策略示例

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

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

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

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesisvideo:Describe*", "kinesisvideo:Get*", "kinesisvideo:List*" ], "Resource": "*" } ] }
例 2:允许用户创建 Kinesis 视频流并向其写入数据

此策略允许用户或组执行 CreateStreamPutMedia 操作。此策略适用于可创建视频流并向该流发送数据的安保摄像头。

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