

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 IAM 控制對 Kinesis Video Streams 資源的存取
<a name="how-iam"></a>

您可以搭配 Amazon Kinesis Video Streams 使用 AWS Identity and Access Management (IAM)，以控制組織中的使用者是否可以使用特定 Kinesis Video Streams API 操作來執行任務，以及是否可以使用特定 AWS 資源。

如需 IAM 的詳細資訊，請參閱下列各項：
+ [AWS Identity and Access Management (IAM)](https://aws.amazon.com/iam/)
+ [IAM 入門](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started.html)
+ [IAM 使用者指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/)

**Topics**
+ [政策語法](#policy-syntax)
+ [Kinesis Video Streams 的動作](#kinesis-using-iam-actions)
+ [Kinesis Video Streams 的 Amazon Resource Name (ARNs)](#kinesis-using-iam-arn-format)
+ [授予其他 IAM 帳戶對 Kinesis 影片串流的存取權](#how-iam-crossaccount)
+ [Kinesis Video Streams 的範例政策](#how-iam-policies)

## 政策語法
<a name="policy-syntax"></a>

IAM 政策為包含一或多個陳述式的 JSON 文件。每個陳述式的結構如下所示：

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

陳述式由各種元素組成：
+ **效果** – *效果*可以是 `Allow`或 `Deny`。根據預設， 使用者沒有使用資源和 API 動作的許可，因此所有請求均會遭到拒絕。明確允許覆寫預設值。明確拒絕覆寫任何允許。
+ **動作** – *動作*是您授予或拒絕許可的特定 API 動作。
+ **資源** – 受 動作影響的資源。若要在陳述式中指定資源，您必須使用它的 Amazon Resource Name (ARN)。
+ **條件** – 條件為選用。您可以使用它們來控制何時政策開始生效。

當您建立和管理 IAM 政策時，建議您使用 [IAM 政策產生器](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-generator)和 [IAM 政策模擬器](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_testing-policies.html)。

## Kinesis Video Streams 的動作
<a name="kinesis-using-iam-actions"></a>

在 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 操作，請使用星號 (\*) 萬用字元，如下所示：

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

如需 Kinesis Video Streams API 動作的完整清單，請參閱 [https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_Reference.html](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_Reference.html)。

## Kinesis Video Streams 的 Amazon Resource Name (ARNs)
<a name="kinesis-using-iam-arn-format"></a>

每個 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](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_DescribeStream.html) 取得串流的 ARN。

## 授予其他 IAM 帳戶對 Kinesis 影片串流的存取權
<a name="how-iam-crossaccount"></a>

您可能需要將許可授予其他 IAM 帳戶，才能對 Kinesis Video Streams 中的串流執行操作。以下概述說明將視訊串流存取權跨帳戶授與的一般步驟：

1. 取得您要授予許可，以對帳戶中建立的串流資源執行操作之帳戶的 12 位數帳戶 ID。

   **範例：**在下列步驟中，我們將使用 111111111111 做為您要授予許可的帳戶的帳戶 ID，並使用 999999999999 做為 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 `PutMedia`上具有 `DescribeStream`、 `GetDataEndpoint`和 等操作的許可。此新角色也會信任其他帳戶 111111111111 擔任此角色。
**重要**  
請記下角色 ARN，您將在下一個步驟中使用該角色。

1. 在另一個帳戶中建立受管政策 111111111111，允許對您在上一個步驟中在帳戶 999999999999 中建立的角色執行 `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`中擔任角色的許可。

   此使用者的登入資料會呼叫 AWS STS `AssumeRole` API 以取得工作階段登入資料，之後會用來在帳戶 999999999999 中建立的串流上呼叫 Kinesis Video Streams APIs。

   ```
   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 Streams APIs 來描述和取得帳戶 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 角色委派存取權](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html)。

## Kinesis Video Streams 的範例政策
<a name="how-iam-policies"></a>

下列範例政策示範如何控制使用者存取 Kinesis Video Streams

**Example 1：允許使用者從任何 Kinesis 影片串流取得資料**  
此政策允許使用者或群組在任何 Kinesis 影片串流上執行 `DescribeStream`、`ListStreams`、、 `GetDataEndpoint` `GetMedia`和 `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"
        }
    ]
}
```