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

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

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

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

有关 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 中扮演角色。

    该用户的凭据调用 AWS 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 说明,请参阅AWS 账户 使用 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" } ] }