

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

# Amazon Kinesis Video Streams 的安全性
<a name="security"></a>

的雲端安全性 AWS 是最高優先順序。身為 AWS 客戶，您將受益於資料中心和網路架構，該架構旨在滿足最安全敏感組織的需求。

安全性是 AWS 與您之間的共同責任。[‬共同責任模型‭](https://aws.amazon.com/compliance/shared-responsibility-model/)‬ 將此描述為雲端*‬的‭*‬安全和雲端*‬內*‬的安全：
+ **雲端的安全性** – AWS 負責保護在 Cloud AWS 中執行 AWS 服務的基礎設施。 AWS 也為您提供可安全使用的服務。第三方稽核人員定期檢測及驗證安全的效率也是我們 [AWS 合規計劃](https://aws.amazon.com/compliance/programs/)的一部分。如要了解適用於 Kinesis Video Streams 的合規計劃，請參閱 [合規計劃的AWS 服務範圍](https://aws.amazon.com/compliance/services-in-scope/)。
+ **雲端的安全性** – 您的責任取決於您使用 AWS 的服務。您也必須對資料敏感度、組織要求，以及適用法律和法規等其他因素負責。

本文件可協助您了解如何在使用 Kinesis Video Streams 時套用共同責任模型。下列主題說明如何設定 Kinesis Video Streams 以符合您的安全和合規目標。您也將了解如何使用其他 AWS 服務，協助您監控和保護 Kinesis Video Streams 資源。

**Topics**
+ [Kinesis Video Streams 中的資料保護](how-kms.md)
+ [使用 IAM 控制對 Kinesis Video Streams 資源的存取](how-iam.md)
+ [使用 控制對 Kinesis Video Streams 資源的存取 AWS IoT](how-iot.md)
+ [Amazon Kinesis Video Streams 的合規驗證](akda-java-compliance.md)
+ [Amazon Kinesis Video Streams 中的彈性](disaster-recovery-resiliency.md)
+ [Kinesis Video Streams 中的基礎設施安全性](infrastructure-security.md)
+ [Kinesis Video Streams 的安全最佳實務](security-best-practices.md)

# Kinesis Video Streams 中的資料保護
<a name="how-kms"></a>

您可以使用 AWS Key Management Service () 金鑰來使用伺服器端加密 (SSE AWS KMS)，透過在 Amazon Kinesis Video Streams 中加密靜態資料來滿足嚴格的資料管理需求。

**Topics**
+ [什麼是 Kinesis Video Streams 的伺服器端加密？](#what-is-sse-akvs)
+ [成本、區域和效能考量](#costs-performance-akvs)
+ [如何開始使用伺服器端加密？](#getting-started-with-sse-akvs)
+ [建立和使用客戶受管金鑰](#creating-using-sse-master-keys-akvs)
+ [使用客戶受管金鑰的許可](#permissions-user-key-KMS-akvs)

## 什麼是 Kinesis Video Streams 的伺服器端加密？
<a name="what-is-sse-akvs"></a>

伺服器端加密是 Kinesis Video Streams 中的一項功能，會在使用 AWS KMS 您指定的金鑰存放靜態資料之前自動加密資料。資料會在寫入 Kinesis Video Streams 串流儲存層之前加密，並在從儲存體擷取資料後解密。因此，您的資料一律於 Kinesis Video Streams 服務中靜態加密。

透過伺服器端加密，您的 Kinesis 影片串流生產者和消費者不需要管理 KMS 金鑰或密碼編譯操作。如果啟用資料保留，您的資料會在進入和離開 Kinesis Video Streams 時自動加密，因此靜態資料會加密。 AWS KMS 會提供伺服器端加密功能所使用的所有金鑰。 會 AWS KMS 簡化 KMS 金鑰的使用，用於由匯入 AWS KMS 服務 AWS的使用者指定 AWS KMS 金鑰所管理的 Kinesis Video Streams。

## 成本、區域和效能考量
<a name="costs-performance-akvs"></a>

當您套用伺服器端加密時，需支付 AWS KMS API 用量和金鑰成本。與自訂 AWS KMS 金鑰不同，預設 `aws/kinesisvideo` KMS 金鑰是免費提供。不過，您仍必須支付 Kinesis Video Streams 代您產生的 API 使用成本。

API 使用成本適用於每個 KMS 金鑰，包括自訂金鑰。 AWS KMS 成本會隨著您在資料生產者和消費者上使用的使用者登入資料數量而擴展，因為每個使用者登入資料都需要唯一的 API 呼叫 AWS KMS。

以下依據資源說明各項成本：

**金鑰**
+ 由 管理之 Kinesis Video Streams 的 KMS 金鑰 AWS （別名 = `aws/kinesisvideo`) 不收費。
+ 使用者產生的 KMS 金鑰需支付 AWS KMS key 費用。如需詳細資訊，請參閱[AWS Key Management Service 定價](https://aws.amazon.com/kms/pricing/#Keys)。

### AWS KMS API 用量
<a name="api-usage"></a>

產生新資料加密金鑰或擷取現有加密金鑰的 API 請求會隨著流量增加而增加，並需支付 AWS KMS 使用成本。如需詳細資訊，請參閱 [AWS Key Management Service 定價：用量](https://aws.amazon.com/kms/pricing/#Usage)。

即使保留設為 0 （無保留），Kinesis Video Streams 也會產生金鑰請求。

### 區域伺服器端加密的可用性
<a name="sse-regions-akvs"></a>

Kinesis 影片串流的伺服器端加密可在提供 AWS 區域 Kinesis 影片串流的所有 中使用。

## 如何開始使用伺服器端加密？
<a name="getting-started-with-sse-akvs"></a>

Kinesis Video Streams 一律啟用伺服器端加密。如果建立串流時未指定使用者提供的金鑰，則會使用 AWS 受管金鑰 （由 Kinesis Video Streams 提供）。

使用者提供的 KMS 金鑰必須在建立時指派給 Kinesis 影片串流。您稍後無法使用 [UpdateStream](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_UpdateStream.html) API 將不同的金鑰指派給串流。

您可以透過兩種方式將使用者提供的 KMS 金鑰指派給 Kinesis 影片串流：
+ 在 中建立 Kinesis 影片串流時 AWS 管理主控台，請在建立新影片串流頁面上的**加密**索引標籤中指定 KMS 金鑰。 ****
+ 使用 [CreateStream](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_CreateStream.html) API 建立 Kinesis 影片串流時，請在 `KmsKeyId` 參數中指定金鑰 ID。

## 建立和使用客戶受管金鑰
<a name="creating-using-sse-master-keys-akvs"></a>

本節說明如何建立和使用您自己的 KMS 金鑰，而不是使用 Amazon Kinesis Video Streams 管理的金鑰。

### 建立客戶受管金鑰
<a name="creating-sse-master-keys-akvs"></a>

如需有關如何建立自有金鑰的資訊，請參閱《 *AWS Key Management Service 開發人員指南*》中的[建立金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。為您的帳戶建立金鑰後，Kinesis Video Streams 服務會在**客戶受管金鑰清單中傳回這些金鑰**。

### 使用客戶受管金鑰
<a name="using-sse-master-keys-akvs"></a>

將正確的許可套用至您的消費者、生產者和管理員之後，您可以在自己的 AWS 帳戶 或其他 中使用自訂 KMS 金鑰 AWS 帳戶。您帳戶中的所有 KMS 金鑰都會出現在 主控台上的**客戶受管金鑰**清單中。

若要使用位於另一個帳戶中的自訂 KMS 金鑰，您必須具有使用這些金鑰的許可。您也必須使用 `CreateStream` API 建立串流。您無法在主控台中建立的串流中使用來自不同帳戶的 KMS 金鑰。

**注意**  
在執行 `PutMedia`或 `GetMedia`操作之前，不會存取 KMS 金鑰。如此會產生下列結果：  
如果您指定的金鑰不存在，`CreateStream`操作會成功，但串流上的 `PutMedia`和 `GetMedia`操作會失敗。
如果您使用提供的金鑰 (`aws/kinesisvideo`)，在執行第一個 `PutMedia`或 `GetMedia`操作之前， 金鑰不會出現在您的帳戶中。

## 使用客戶受管金鑰的許可
<a name="permissions-user-key-KMS-akvs"></a>

您必須先設定 KMS 金鑰政策以允許加密串流，以及加密和解密串流記錄，才能搭配客戶受管金鑰使用伺服器端加密。如需 AWS KMS 許可的範例和詳細資訊，請參閱 [AWS KMS API 許可：動作和資源參考](https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html)。

**注意**  
使用預設服務金鑰進行加密不需要套用自訂 IAM 許可。

在使用客戶受管金鑰之前，請確認您的 Kinesis 影片串流生產者和消費者 (IAM 主體） 是 AWS KMS 預設金鑰政策中的使用者。否則串流的寫入及讀取將會失敗，最終可能造成資料遺失、延遲處理或應用程式故障。您可使用 IAM 政策管理 KMS 金鑰的許可。如需詳細資訊，請參閱[搭配 使用 IAM 政策 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html)。

### 範例生產者許可
<a name="example-producer-permissions-akvs"></a>

您的 Kinesis 影片串流製作者必須擁有 `kms:GenerateDataKey`許可：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "kms:GenerateDataKey"
        ],
        "Resource": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    }, 
    {
        "Effect": "Allow",
        "Action": [
            "kinesisvideo:PutMedia"
        ],
        "Resource": "arn:aws:kinesisvideo:*:123456789012:stream/MyStream/*"
    }
  ]
}
```

------

### 範例取用者許可
<a name="example-consumer-permissions-akvs"></a>

您的 Kinesis 影片串流取用者必須擁有 `kms:Decrypt`許可：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "kms:Decrypt"
        ],
        "Resource": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    }, 
    {
        "Effect": "Allow",
        "Action": [
            "kinesisvideo:GetMedia"
        ],
        "Resource": "arn:aws:kinesisvideo:*:123456789012:stream/MyStream/*"
    }
  ]
}
```

------

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

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

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

本節說明如何讓裝置 （例如攝影機） 僅將音訊和視訊資料傳送至特定 Kinesis 視訊串流。您可以使用 AWS IoT 登入資料提供者和 AWS Identity and Access Management (IAM) 角色來執行此操作。

裝置可以使用 X.509 憑證， AWS IoT 透過 TLS 交互身分驗證通訊協定連線至 。其他 AWS 服務 （例如 Kinesis Video Streams) 不支援以憑證為基礎的身分驗證，但可以使用 AWS Signature 第 4 版格式的憑證進行 AWS 呼叫。Signature 第 4 版演算法通常要求發起人擁有存取金鑰 ID 和私密存取金鑰。 AWS IoT 具有登入資料提供者，可讓您使用內建的 X.509 憑證做為唯一裝置身分來驗證 AWS 請求 （例如，對 Kinesis Video Streams 的請求）。這不需要在您的裝置上存放存取金鑰 ID 和私密存取金鑰。

登入資料提供者會使用 X.509 憑證來驗證用戶端 （在此案例中為 Kinesis Video Streams 開發套件，該開發套件正在您要將資料傳送至影片串流的攝影機上執行），並發出暫時、有限權限的安全字符。您可以使用權杖來簽署和驗證任何 AWS 請求 （在此情況下是對 Kinesis Video Streams 的呼叫）。如需詳細資訊，請參閱[授權直接呼叫 AWS 服務](https://docs.aws.amazon.com//iot/latest/developerguide/authorizing-direct-aws.html)。

以這種方式驗證攝影機對 Kinesis Video Streams 的請求，需要您建立和設定 IAM 角色，並將適當的 IAM 政策連接到角色，以便 AWS IoT 登入資料提供者可以代表您擔任該角色。

如需 的詳細資訊 AWS IoT，請參閱 [AWS IoT Core 文件](https://docs.aws.amazon.com/iot/?id=docs_gateway)。如需 IAM 的詳細資訊，請參閱 [AWS Identity and Access Management (IAM)](https://aws.amazon.com/iam/)。

**Topics**
+ [串流名稱為AWS IoT ThingName](#how-iot-thingnamestreamname)
+ [AWS IoT CertificateId 做為串流名稱](#how-iot-iotcertstreamname)
+ [使用 AWS IoT 登入資料串流到硬式編碼的串流名稱](#how-iot-hard-coded-stream)

## 串流名稱為AWS IoT ThingName
<a name="how-iot-thingnamestreamname"></a>

**Topics**
+ [步驟 1：建立 AWS IoT 物件類型和 AWS IoT 物件](#how-iot-create-thing-type)
+ [步驟 2：建立要由 擔任的 IAM 角色 AWS IoT](#how-iot-add-iot-policy)
+ [步驟 3：建立和設定 X.509 憑證](#how-iot-create-cert-keys)
+ [步驟 4：使用 Kinesis 影片串流測試 AWS IoT 登入資料](#how-iot-test-it)
+ [步驟 5：在相機的檔案系統上部署 AWS IoT 憑證和登入資料，並將資料串流到您的影片串流](#how-iot-deploy)

### 步驟 1：建立 AWS IoT 物件類型和 AWS IoT 物件
<a name="how-iot-create-thing-type"></a>

在 中 AWS IoT，物件是特定裝置或邏輯實體的表示法。在這種情況下， AWS IoT 物件代表您要設定資源層級存取控制的 Kinesis 影片串流。若要建立物件，您必須先建立 AWS IoT 物件類型。您可以使用 AWS IoT 物件類型來存放與相同物件類型相關聯之所有物件常見的描述和組態資訊。

1. 下列範例命令會建立物件類型 `kvs_example_camera`：

   ```
   aws --profile default iot create-thing-type --thing-type-name kvs_example_camera > iot-thing-type.json
   ```

1. 此範例命令會建立`kvs_example_camera_stream`物件類型的`kvs_example_camera`物件：

   ```
   aws --profile default  iot create-thing --thing-name kvs_example_camera_stream --thing-type-name kvs_example_camera > iot-thing.json
   ```

### 步驟 2：建立要由 擔任的 IAM 角色 AWS IoT
<a name="how-iot-add-iot-policy"></a>

IAM 角色與使用者類似，因為角色是具有許可政策的 AWS 身分，可決定身分可以和不可以執行的操作 AWS。需要角色的任何人都可以擔任該角色。當您擔任角色時，其會為您的角色工作階段提供臨時安全性登入資料。

您在此步驟中建立的角色可由 擔任 AWS IoT ，以便在從用戶端執行登入資料授權請求時，從安全字符服務 (STS) 取得臨時登入資料。在這種情況下，用戶端是在相機上執行的 Kinesis Video Streams 開發套件。

請執行下列步驟，來建立並設定此 IAM 角色：

1. 建立 IAM 角色。

   以下範例命令會建立名為 `KVSCameraCertificateBasedIAMRole` 的 IAM 角色：

   ```
   aws --profile default iam create-role --role-name KVSCameraCertificateBasedIAMRole --assume-role-policy-document 'file://iam-policy-document.json' > iam-role.json
   ```

   您可以針對 `iam-policy-document.json` 使用下列信任政策 JSON：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "credentials.iot.amazonaws.com"
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

1. 接著，將許可政策連接至您先前建立的 IAM 角色。此許可政策允許 AWS 資源的選擇性存取控制 （支援操作的子集）。在這種情況下， AWS 資源是您希望相機傳送資料的影片串流。換言之，一旦所有設定步驟完成，此相機將就只能將資料傳送至此視訊串流。

   ```
   aws --profile default iam put-role-policy --role-name KVSCameraCertificateBasedIAMRole --policy-name KVSCameraIAMPolicy --policy-document 'file://iam-permission-document.json' 
   ```

   您可以針對 使用下列 IAM 政策 JSON`iam-permission-document.json`：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "kinesisvideo:DescribeStream",
                   "kinesisvideo:PutMedia",
                   "kinesisvideo:TagStream",
                   "kinesisvideo:GetDataEndpoint"
               ],
               "Resource": "arn:aws:kinesisvideo:*:*:stream/${credentials-iot:ThingName}/*"
           }
       ]
   }
   ```

------

   請注意，此政策僅在預留位置 指定的視訊串流 (AWS 資源） 上授權指定的動作`(${credentials-iot:ThingName})`。當登入資料提供者在請求中傳送視訊串流名稱`ThingName`時，此 AWS IoT 預留位置會接受 AWS IoT 物件屬性的值。

1. 接著，為您的 IAM 角色建立角色別名。角色別名是指向 IAM 角色的替代資料模型。 AWS IoT 登入資料提供者請求必須包含角色別名，以指出要擔任哪個 IAM 角色，才能從 STS 取得臨時登入資料。

   以下範例命令會建立名為 `KvsCameraIoTRoleAlias`,的角色別名。

   ```
   aws --profile default iot create-role-alias --role-alias KvsCameraIoTRoleAlias --role-arn $(jq --raw-output '.Role.Arn' iam-role.json) --credential-duration-seconds 3600 > iot-role-alias.json
   ```

1. 現在，您可以建立 政策， AWS IoT 讓 使用角色別名擔任具有憑證的角色 （連接後）。

   下列範例命令會建立 AWS IoT 名為 的政策`KvsCameraIoTPolicy`。

   ```
   aws --profile default iot create-policy --policy-name KvsCameraIoTPolicy --policy-document 'file://iot-policy-document.json'
   ```

   您可以使用下列命令來建立`iot-policy-document.json`文件 JSON：

   ```
   cat > iot-policy-document.json <<EOF
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "iot:AssumeRoleWithCertificate"
               ],
               "Resource": "$(jq --raw-output '.roleAliasArn' iot-role-alias.json)"
           }
       ]
   }
   EOF
   ```

### 步驟 3：建立和設定 X.509 憑證
<a name="how-iot-create-cert-keys"></a>

裝置 （您的影片串流） 與 之間的通訊 AWS IoT 會受到使用 X.509 憑證的保護。

1. 建立憑證，您必須為 AWS IoT 先前建立的政策附加憑證。

   ```
   aws --profile default iot create-keys-and-certificate --set-as-active --certificate-pem-outfile certificate.pem --public-key-outfile public.pem.key --private-key-outfile private.pem.key > certificate
   ```

1. 將 AWS IoT (`KvsCameraIoTPolicy`先前建立） 的政策連接至此憑證。

   ```
   aws --profile default iot attach-policy --policy-name KvsCameraIoTPolicy --target $(jq --raw-output '.certificateArn' certificate)
   ```

1. 將 AWS IoT 物件 (`kvs_example_camera_stream`) 連接至您剛建立的憑證：

   ```
   aws --profile default iot attach-thing-principal --thing-name kvs_example_camera_stream --principal $(jq --raw-output '.certificateArn' certificate)
   ```

1. 若要透過 AWS IoT 登入資料提供者授權請求，您需要 AWS IoT 登入資料端點，這對於您的 AWS 帳戶 ID 是唯一的。您可以使用下列命令來取得 AWS IoT 登入資料端點。

   ```
   aws --profile default iot describe-endpoint --endpoint-type iot:CredentialProvider --output text > iot-credential-provider.txt
   ```

1. 除了先前建立的 X.509 憑證之外，您還必須擁有 CA 憑證，才能透過 TLS 與後端服務建立信任。您可以使用下列命令來取得 CA 憑證：

   ```
   curl --silent 'https://www.amazontrust.com/repository/SFSRootCAG2.pem' --output cacert.pem
   ```

### 步驟 4：使用 Kinesis 影片串流測試 AWS IoT 登入資料
<a name="how-iot-test-it"></a>

現在，您可以測試到目前為止設定的 AWS IoT 登入資料。

1. 首先，建立您要用來測試此組態的 Kinesis 視訊串流。
**重要**  
使用與您在上一個步驟中建立的 AWS IoT 物件名稱相同的名稱來建立影片串流 (`kvs_example_camera_stream`)。

   ```
   aws kinesisvideo create-stream --data-retention-in-hours 24 --stream-name kvs_example_camera_stream
   ```

1. 接著，呼叫 AWS IoT 登入資料提供者以取得臨時登入資料：

   ```
   curl --silent -H "x-amzn-iot-thingname:kvs_example_camera_stream" --cert certificate.pem --key private.pem.key https://IOT_GET_CREDENTIAL_ENDPOINT/role-aliases/KvsCameraIoTRoleAlias/credentials --cacert ./cacert.pem > token.json
   ```
**注意**  
您可以使用下列命令來取得 `IOT_GET_CREDENTIAL_ENDPOINT`：  

   ```
   IOT_GET_CREDENTIAL_ENDPOINT=`cat iot-credential-provider.txt`
   ```

   輸出 JSON 包含 `accessKey`、 `secretKey`和 `sessionToken`，您可以用來存取 Kinesis Video Streams。

1. 針對您的測試，您可以使用這些登入資料來叫用範例影片串流的 Kinesis `kvs_example_camera_stream` Video Streams `DescribeStream` API。

   ```
   AWS_ACCESS_KEY_ID=$(jq --raw-output '.credentials.accessKeyId' token.json) AWS_SECRET_ACCESS_KEY=$(jq --raw-output '.credentials.secretAccessKey' token.json) AWS_SESSION_TOKEN=$(jq --raw-output '.credentials.sessionToken' token.json) aws kinesisvideo describe-stream --stream-name kvs_example_camera_stream
   ```

### 步驟 5：在相機的檔案系統上部署 AWS IoT 憑證和登入資料，並將資料串流到您的影片串流
<a name="how-iot-deploy"></a>

**注意**  
本節中的步驟說明從使用 的攝影機傳送媒體到 Kinesis 影片串流[使用 C\$1\$1 生產者程式庫](producer-sdk-cpp.md)。

1. 將先前步驟中產生的 X.509 憑證、私有金鑰和 CA 憑證複製到相機的檔案系統。指定存放這些檔案的路徑、角色別名名稱，以及執行 `gst-launch-1.0`命令或範例應用程式的 AWS IoT 登入資料端點。

1. 下列範例命令使用 AWS IoT 憑證授權將影片傳送至 Kinesis Video Streams：

   ```
   gst-launch-1.0 rtspsrc location=rtsp://YourCameraRtspUrl short-header=TRUE ! rtph264depay ! video/x-h264,format=avc,alignment=au ! h264parse ! kvssink stream-name="kvs_example_camera_stream" aws-region="YourAWSRegion" iot-certificate="iot-certificate,endpoint=credential-account-specific-prefix.credentials.iot.aws-region.amazonaws.com,cert-path=/path/to/certificate.pem,key-path=/path/to/private.pem.key,ca-path=/path/to/cacert.pem,role-aliases=KvsCameraIoTRoleAlias"
   ```

## AWS IoT CertificateId 做為串流名稱
<a name="how-iot-iotcertstreamname"></a>

若要透過 AWS IoT 物件代表您的裝置 （例如，您的攝影機），但授權不同的串流名稱，您可以使用 屬性做為串流名稱， AWS IoT `certificateId`並在串流上使用 提供 Kinesis Video Streams 許可 AWS IoT。完成此操作的步驟與先前概述的步驟類似，但有一些變更。
+ 將許可政策修改為您的 IAM 角色 (`iam-permission-document.json`)，如下所示：

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "kinesisvideo:DescribeStream",
                  "kinesisvideo:PutMedia",
                  "kinesisvideo:TagStream",
                  "kinesisvideo:GetDataEndpoint"
              ],
              "Resource": "arn:aws:kinesisvideo:*:*:stream/${credentials-iot:AwsCertificateId}/*" 
          }
      ]
  }
  ```

------
**注意**  
資源 ARN 會將憑證 ID 做為串流名稱的預留位置使用。當您使用憑證 ID 做為串流名稱時，IAM 許可即可運作。從憑證取得憑證 ID，以便您可以在以下描述串流 API 呼叫中使用該憑證 ID 做為串流名稱。  

  ```
  export CERTIFICATE_ID=`cat certificate | jq --raw-output '.certificateId'`
  ```
+ 使用 Kinesis Video Streams describe-stream CLI 命令驗證此變更。

  ```
  AWS_ACCESS_KEY_ID=$(jq --raw-output '.credentials.accessKeyId' token.json) AWS_SECRET_ACCESS_KEY=$(jq --raw-output '.credentials.secretAccessKey' token.json) AWS_SESSION_TOKEN=$(jq --raw-output '.credentials.sessionToken' token.json) aws kinesisvideo describe-stream --stream-name ${CERTIFICATE_ID}
  ```
+ 在 Kinesis Video Streams C\$1\$1 SDK 中，將 certificateId 傳遞給[範例應用程式中](https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/blob/master/samples/kvs_gstreamer_sample.cpp)的 AWS IoT 憑證提供者：

  ```
  credential_provider = make_unique<IotCertCredentialProvider>(iot_get_credential_endpoint,
          cert_path,
          private_key_path,
          role_alias,
          ca_cert_path,
          certificateId);
  ```
**注意**  
請注意，您要將 AWS IoT 傳遞`thingname`給登入資料提供者。您可以使用 將 物件名稱`getenv`傳遞至示範應用程式，類似於傳遞其他 AWS IoT 屬性。當您在執行範例應用程式時，請在命令列參數中將憑證 ID 做為串流名稱使用。

## 使用 AWS IoT 登入資料串流到硬式編碼的串流名稱
<a name="how-iot-hard-coded-stream"></a>

若要透過 AWS IoT 物件代表您的裝置 （例如，您的攝影機），但授權串流到特定的 Amazon Kinesis 影片串流，請在串流上使用 提供 Amazon Kinesis Video Streams 許可 AWS IoT。程序與前面的章節類似，但有一些變更。

將許可政策修改為您的 IAM 角色 (`iam-permission-document.json`)，如下所示：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesisvideo:DescribeStream",
                "kinesisvideo:PutMedia",
                "kinesisvideo:TagStream",
                "kinesisvideo:GetDataEndpoint"
            ],
            "Resource": "arn:aws:kinesisvideo:*:*:stream/YourStreamName/*" 
        }
    ]
}
```

------

將先前步驟中產生的 X.509 憑證、私有金鑰和 CA 憑證複製到相機的檔案系統。

指定存放這些檔案的路徑、角色別名名稱、 AWS IoT 物件名稱，以及執行`gst-launch-1.0`命令或範例應用程式的 AWS IoT 登入資料端點。

下列範例命令使用 AWS IoT 憑證授權將影片傳送至 Amazon Kinesis Video Streams：

```
gst-launch-1.0 rtspsrc location=rtsp://YourCameraRtspUrl short-header=TRUE ! rtph264depay ! video/x-h264,format=avc,alignment=au ! h264parse ! kvssink stream-name="YourStreamName" aws-region="YourAWSRegion" iot-certificate="iot-certificate,endpoint=credential-account-specific-prefix.credentials.iot.aws-region.amazonaws.com,cert-path=/path/to/certificate.pem,key-path=/path/to/private.pem.key,ca-path=/path/to/cacert.pem,role-aliases=KvsCameraIoTRoleAlias,iot-thing-name=YourThingName"
```

# Amazon Kinesis Video Streams 的合規驗證
<a name="akda-java-compliance"></a>

若要了解 是否 AWS 服務 在特定合規計劃的範圍內，請參閱[AWS 服務 合規計劃範圍內](https://aws.amazon.com/compliance/services-in-scope/)然後選擇您感興趣的合規計劃。如需一般資訊，請參閱[AWS 合規計劃](https://aws.amazon.com/compliance/programs/)。

您可以使用 下載第三方稽核報告 AWS Artifact。如需詳細資訊，請參閱[下載報告 in AWS Artifact](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html)

您使用 時的合規責任 AWS 服務 取決於資料的機密性、您公司的合規目標，以及適用的法律和法規。如需使用 時合規責任的詳細資訊 AWS 服務，請參閱 [AWS 安全文件](https://docs.aws.amazon.com/security/)。

# Amazon Kinesis Video Streams 中的彈性
<a name="disaster-recovery-resiliency"></a>

 AWS 全球基礎設施是以 AWS 區域和可用區域為基礎建置的。 AWS 區域提供多個實體隔離和隔離的可用區域，這些區域以低延遲、高輸送量和高度備援的網路連接。透過可用區域，您所設計與操作的應用程式和資料庫，就能夠在可用區域之間自動容錯移轉，而不會發生中斷。可用區域的可用性、容錯能力和擴充能力，均較單一或多個資料中心的傳統基礎設施還高。

如需 AWS 區域和可用區域的詳細資訊，請參閱 [AWS 全球基礎設施](https://aws.amazon.com/about-aws/global-infrastructure/)。

# Kinesis Video Streams 中的基礎設施安全性
<a name="infrastructure-security"></a>

Amazon Kinesis Video Streams 是受管服務，受到 [Amazon Web Services：安全程序概觀](https://d0.awsstatic.com/whitepapers/Security/AWS_Security_Whitepaper.pdf)白皮書中所述的 AWS 全球網路安全程序的保護。

您可以使用 AWS 發佈的 API 呼叫，透過網路存取 Kinesis Video Streams。用戶端必須支援 Transport Layer Security (TLS) 1.2 或更新版本。用戶端也必須支援具備完美轉送私密 (PFS) 的密碼套件，例如臨時 Diffie-Hellman (DHE) 或橢圓曲線臨時 Diffie-Hellman (ECDHE)。現代系統 (如 Java 7 和更新版本) 大多會支援這些模式。

此外，必須使用存取金鑰 ID 和與 IAM 主體相關聯的私密存取金鑰來簽署請求。或者，您可以使用 [AWS Security Token Service](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html) (AWS STS) 來產生暫時安全憑證來簽署請求。

# Kinesis Video Streams 的安全最佳實務
<a name="security-best-practices"></a>

Amazon Kinesis Video Streams 提供多種安全功能，供您在開發和實作自己的安全政策時考慮。以下最佳實務為一般準則，並不代表完整的安全解決方案。這些最佳實務可能不適用或無法滿足您的環境需求，因此請將其視為實用建議就好，而不要當作是指示。

如需您遠端裝置的安全最佳實務，請參閱[裝置代理程式的安全最佳實務](https://docs.aws.amazon.com/iot/latest/developerguide/device-defender-DetectMetricsMessagesBestPract.html)。

## 實作最低權限存取
<a name="security-best-practices-privileges"></a>

授予許可時，您可以決定誰要取得哪些 Kinesis Video Streams 資源的許可。您還需針對這些資源啟用允許執行的動作，因此，您只應授與執行任務所需的許可。對降低錯誤或惡意意圖所引起的安全風險和影響而言，實作最低權限存取是相當重要的一環。

例如，將資料傳送至 Kinesis Video Streams 的生產者只需要 `PutMedia`、 `GetStreamingEndpoint`和 `DescribeStream`。請勿授予生產者應用程式所有動作 (`*`) 或其他動作 (例如 `GetMedia`) 的許可。

如需詳細資訊，請參閱[什麼是最低權限以及為什麼需要它？](https://www.beyondtrust.com/blog/entry/what-is-least-privilege)

## 使用 IAM 角色
<a name="security-best-practices-roles"></a>

製作者和用戶端應用程式必須具有有效的登入資料，才能存取 Kinesis Video Streams。您不應該將 AWS 憑證直接存放在用戶端應用程式或 Amazon S3 儲存貯體中。這些是不會自動輪換的長期登入資料，如果遭到入侵，可能會對業務產生重大影響。

反之，您應該使用 IAM 角色來管理生產者和用戶端應用程式的臨時登入資料，以存取 Kinesis Video Streams。當您使用角色時，您不需要使用長期登入資料 （例如使用者名稱和密碼或存取金鑰） 來存取其他資源。

如需詳細資訊，請參閱*《IAM 使用者指南》*中的以下主題：
+ [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)
+ [常見的角色方案：使用者、應用程式和服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios.html)

## 使用 CloudTrail 監控 API 呼叫
<a name="security-best-practices-cloudtrail"></a>

Kinesis Video Streams 可與 搭配使用 AWS CloudTrail，此服務提供由使用者、角色或 Kinesis Video Streams AWS 服務 中 所採取之動作的記錄。

您可以使用 CloudTrail 收集的資訊來判斷對 Kinesis Video Streams 提出的請求、提出請求的 IP 地址、提出請求的人員、提出請求的時間，以及其他詳細資訊。

如需詳細資訊，請參閱[使用 記錄 Amazon Kinesis Video Streams API 呼叫 AWS CloudTrail](monitoring-cloudtrail.md)。