

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

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


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

有关 IAM 的更多信息，请参阅以下文档：
+ [Amazon Identity and Access Management (IAM)](https://www.amazonaws.cn/iam/)
+ [IAM 入门](https://docs.amazonaws.cn/IAM/latest/UserGuide/getting-started.html)
+ [IAM 用户指南](https://docs.amazonaws.cn/IAM/latest/UserGuide/)

**Topics**
+ [

## 策略语法
](#policy-syntax)
+ [

## Kinesis Video Streams 的操作
](#kinesis-using-iam-actions)
+ [

## Kinesis Video Streams 的亚马逊资源名称 (ARNs)
](#kinesis-using-iam-arn-format)
+ [

## 向其他 IAM 账户授予访问 Kinesis 视频流的权限
](#how-iam-crossaccount)
+ [

## Kinesis Video Streams 的策略示例
](#how-iam-policies)

## 策略语法


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

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

组成语句的各个元素如下：
+ **效果**-*效果*可以是`Allow`或`Deny`。默认情况下 用户没有使用资源和 API 操作的权限，因此，所有请求均会被拒绝。显式允许将覆盖默认规则。显式拒绝将覆盖任何允许。
+ **操作** — *操作*是您授予或拒绝权限的特定 API 操作。
+ **资源**-受操作影响的资源。要在语句中指定资源，必须使用其 Amazon 资源名称 (ARN)。
+ **条件**：条件是可选的。它们可以用于控制策略生效的时间。

在创建和管理 IAM 策略时，我们建议您使用 [IAM 策略生成器](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-generator)和 [IAM 策略模拟器](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_testing-policies.html)。

## Kinesis Video Streams 的操作


在 IAM 策略语句中，您可以从支持 IAM 的任何服务中指定任何 API 操作。对于 Kinesis Video Streams，请使用以下前缀和 API 操作`kinesisvideo:`的名称：。例如：`kinesisvideo:CreateStream`、`kinesisvideo:ListStreams` 和 `kinesisvideo:DescribeStream`。

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

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

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

```
"Action": "kinesisvideo:Get*"
```

若要指定所有 Kinesis Video Streams 操作，请使用 \$1 (星号) 通配符，如下所示：

```
"Action": "kinesisvideo:*"
```

有关 Kinesis Video Streams API 操作的完整列表，请参阅 [https://docs.amazonaws.cn/kinesisvideostreams/latest/dg/API_Reference.html](https://docs.amazonaws.cn/kinesisvideostreams/latest/dg/API_Reference.html)。

## 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](https://docs.amazonaws.cn/kinesisvideostreams/latest/dg/API_DescribeStream.html)

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


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

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

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

1. 在拥有直播的账户 (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 资源的其他示例政策，[示例策略](#how-iam-policies)请参阅下一节中的。

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

   **可信策略示例：**

------
#### [ JSON ]

****  

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

------

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

   现在，您已在账户 999999999999 中创建了一个角色，该角色有权在托管策略中对直播资源 ARN 执行诸如`DescribeStream``GetDataEndpoint`、和`PutMedia`之类的操作。这个新角色还信任另一个账户 111111111111 来担任这个角色。
**重要**  
记下角色 ARN，下一步你会用到它。

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

   **政策示例：**

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": {
           "Effect": "Allow",
           "Action": "sts:AssumeRole",
           "Resource": "arn:aws:iam::999999999999:role/CustomRoleName"
       }
   }
   ```

------

1. 将上一步中创建的策略附加到 IAM 实体，例如账户 111111111111 中的角色或用户。此用户现在有权在账户 999999999999 `CustomRoleName` 中扮演角色。

   该用户的凭据调用 Amazon 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": ""
       }
   }
   ```

1. 根据之前在环境中设置的访问密钥、私有密钥和会话凭证。

   ```
   set AWS_ACCESS_KEY_ID=
   set AWS_SECRET_ACCESS_KEY=
   set AWS_SESSION_TOKEN=
   ```

1. 运行 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说明，请参阅[Amazon Web Services 账户 使用 IAM 角色委派访问权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html)。

## Kinesis Video Streams 的策略示例
示例策略

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

**Example 1：允许用户从任何 Kinesis 视频流中获取数据**  
此策略允许用户或群组对任何 Kinesis 视频流执行`DescribeStream``GetDataEndpoint``GetMedia``ListStreams`、、、和`ListTagsForStream`操作。此策略适用于可从任何视频流获取数据的用户。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesisvideo:Describe*",
                "kinesisvideo:Get*",
                "kinesisvideo:List*"
            ],
            "Resource": "*"
        }
    ]
}
```

**Example 2：允许用户创建 Kinesis 视频流并向其写入数据**  
此策略允许用户或组执行 `CreateStream` 和 `PutMedia` 操作。此策略适用于可创建视频流并向该流发送数据的安保摄像头。  

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesisvideo:CreateStream",
                "kinesisvideo:PutMedia"            
            ],
            "Resource": "*"
        }
    ]
}
```

**Example 3：允许用户完全访问所有 Kinesis Video Streams 资源**  
此策略允许用户或组对任何资源执行任何 Kinesis Video Streams 操作。此策略适用于管理员。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "kinesisvideo:*",
            "Resource": "*"
        }
    ]
}
```

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

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