

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

# Amazon Kinesis Data Streams 中的資料保護
<a name="server-side-encryption"></a>

使用 AWS Key Management Service (AWS KMS) 金鑰的伺服器端加密可讓您在 Amazon Kinesis Data Streams 中加密靜態資料，輕鬆滿足嚴格的資料管理需求。

**注意**  
如果您在 AWS 透過命令列界面或 API 存取 時需要 FIPS 140-2 驗證的密碼編譯模組，請使用 FIPS 端點。如需有關 FIPS 和 FIPS 端點的更多相關資訊，請參閱[聯邦資訊處理標準 (FIPS) 140-2 概觀](https://aws.amazon.com/compliance/fips/)。

**Topics**
+ [什麼是 Kinesis Data Streams 的伺服器端加密？](what-is-sse.md)
+ [成本、區域和效能考量](costs-performance.md)
+ [如何開始使用伺服器端加密？](getting-started-with-sse.md)
+ [建立和使用使用者產生的 KMS 金鑰](creating-using-sse-master-keys.md)
+ [使用使用者產生之 KMS 金鑰的許可](permissions-user-key-KMS.md)
+ [驗證 KMS 金鑰許可並進行疑難排解](sse-troubleshooting.md)
+ [搭配介面 VPC 端點使用 Amazon Kinesis Data Streams](vpc.md)

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

伺服器端加密是 Amazon Kinesis Data Streams 的一項功能，會使用您指定的 AWS KMS 客戶主金鑰 (CMK)，在資料處於靜態狀態之前自動加密資料。資料會在寫入 Kinesis 串流儲存層之前加密，並在從儲存體擷取後解密。因此，您的資料將於 Kinesis Data Streams 服務中呈靜態狀態下進行加密。這樣您就能夠符合嚴格的法規要求並增強資料的安全性。

有了伺服器端加密，您的 Kinesis 串流生產者及取用者就不需要管理主金鑰或密碼編譯操作。您的資料會在進入和離開 Kinesis Data Streams 服務時自動加密，因此您的靜態資料會加密。 AWS KMS 提供伺服器端加密功能所使用的所有主金鑰。 AWS KMS 可讓您輕鬆地使用由 管理的 Kinesis CMK AWS、使用者指定的 AWS KMS CMK 或匯入 AWS KMS 服務的主金鑰。

**注意**  
伺服器端加密僅在啟用加密後對傳入資料加密。啟用伺服器端加密後，未加密的串流中既有的資料並不會加密。

加密資料串流並共用存取權給其他主體時，您必須在金鑰政策中授予外部帳戶中 AWS KMS 金鑰和 IAM 政策的許可。如需詳細資訊，請參閱[允許其他帳戶中的使用者使用 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html)。

如果您已為具有 AWS 受管 KMS 金鑰的資料串流啟用伺服器端加密，並想要透過資源政策共用存取權，則必須切換到使用客戶受管金鑰 (CMK)，如下所示：

![\[Encryption settings interface with options for server-side encryption and customer-managed CMK.\]](http://docs.aws.amazon.com/zh_tw/streams/latest/dev/images/cmk2.png)


此外，您必須允許共用主體實體以使用 KMS 跨帳戶共用功能來存取您的 CMK。請務必同時在共用主體實體的 IAM 政策中進行變更。如需詳細資訊，請參閱[允許其他帳戶中的使用者使用 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html)。

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

當您套用伺服器端加密時，您需要支付 AWS KMS API 用量和金鑰成本。有別於自訂 KMS 主金鑰，`(Default) aws/kinesis` 客戶主金鑰 (CMK) 為免費提供。不過您仍然必須支付 Amazon Kinesis Data Streams 代表您產生的 API 使用成本。

API 使用成本適用於每個 CMK (包括自訂)。Kinesis Data Streams 在輪換資料金鑰時，大約每五分鐘呼叫一次 AWS KMS 。在 30 天月中，由 Kinesis 串流啟動的 AWS KMS API 呼叫總成本應少於幾美元。此成本會隨著您在資料生產者和消費者上使用的使用者登入資料數量而擴展，因為每個使用者登入資料都需要唯一的 API 呼叫 AWS KMS。當您使用 IAM 角色進行身分驗證時，每次擔任角色呼叫都將產生獨一無二的使用者憑證。為節省 KMS 成本，您可能要快取由擔任角色呼叫傳回的使用者登入資料。

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

**金鑰**
+ 由 ( AWS 別名 = `aws/kinesis`) 管理的 Kinesis CMK 是免費的。
+ 使用者產生的 KMS 金鑰需支付 KMS 金鑰成本。如需更多資訊，請參閱 [AWS Key Management Service 定價](https://aws.amazon.com/kms/pricing/#Keys)。

API 使用成本適用於每個 CMK (包括自訂)。Kinesis Data Streams 在輪換資料金鑰時，大約每五分鐘呼叫一次 KMS。以一個月 30 天計算，由 Kinesis 資料串流初始化的 KMS API 呼叫總成本應該不到幾美元。請注意，此成本會隨著您在資料生產者和消費者上使用的使用者登入資料數量而擴展，因為每個使用者登入資料都需要對 AWS KMS 進行唯一的 API 呼叫。當您使用 IAM 角色進行身份驗證時，每個假設角色呼叫都會產生唯一的使用者憑證，而且您可能想要快取假角色呼叫傳回的使用者憑證，以節省 KMS 成本。

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

對於每個加密的串流，從 TIP 讀取，並使用跨讀取器和寫入器的單一 IAM 帳戶/使用者存取金鑰時，Kinesis 服務每 5 分鐘會呼叫 AWS KMS 服務大約 12 次。未從 TIP 讀取可能會導致對 AWS KMS 服務的呼叫次數增加。產生新資料加密金鑰的 API 請求需支付 AWS KMS 使用成本。更多詳細資訊請參閱 [AWS Key Management Service 定價：使用](https://aws.amazon.com/kms/pricing/#Usage)。

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

目前，Kinesis 串流的伺服器端加密可在 Kinesis Data Streams 支援的所有區域中使用，包括 AWS GovCloud （美國西部） 和中國區域。如需 Kinesis Data Streams 支援區域的詳細資訊，請參閱 https：//[https://docs.aws.amazon.com/general/latest/gr/ak.html](https://docs.aws.amazon.com/general/latest/gr/ak.html)。

## 效能考量
<a name="performance-considerations"></a>

由於套用伺服器端加密造成服務負荷，套用伺服器端加密會增加 `PutRecord`，`PutRecords` 和 `GetRecords` 的延遲，一般不到 100 微秒。

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

開始使用伺服器端加密的最簡單方法是使用 AWS 管理主控台 和 Amazon Kinesis KMS 服務金鑰 `aws/kinesis`。

以下程序說明如何為 Kinesis 串流啟用伺服器端加密。

**為 Kinesis 串流啟用伺服器端加密**

1. 登入 AWS 管理主控台 並開啟 [Amazon Kinesis Data Streams 主控台](https://console.aws.amazon.com/kinesis/home?region=us-east-1#/streams/list)。

1. 在 AWS 管理主控台建立或選取 Kinesis 串流。

1. 選擇 **details (詳細資訊)** 標籤。

1. 在 **Server-side encryption (伺服器端加密)** 中，選擇 **edit (編輯)**。

1. 除非您要使用由使用者產生的 KMS 主金鑰，否則請確定已選取 **(Default) aws/kinesis (預設)** KMS 主金鑰。這是 Kinesis 服務所產生的 KMS 主金鑰。選擇**Enabled (已啟用)**，然後選擇**Save (儲存)**。
**注意**  
預設 Kinesis 服務主金鑰是免費的，但 Kinesis 對 AWS KMS 服務的 API 呼叫需支付 KMS 使用成本。

1. 串流會轉換到**待定**狀態。串流在啟用加密時恢復為**作用中**狀態後，所有寫入該串流的傳入資料都將使用您所選取的 KMS 主金鑰進行加密。

1. 若要停用伺服器端加密，請在 的**伺服器端加密**中選擇**已停用** AWS 管理主控台，然後選擇**儲存**。

# 建立和使用使用者產生的 KMS 金鑰
<a name="creating-using-sse-master-keys"></a>

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

## 建立使用者產生的 KMS 金鑰
<a name="creating-sse-master-keys"></a>

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

## 使用使用者產生的 KMS 金鑰
<a name="using-sse-master-keys"></a>

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

若要使用另一帳戶中的自訂 KMS 主金鑰，您必須具備使用前述金鑰的許可。您還必須在 AWS 管理主控台的 ARN 輸入方塊內指定 KMS 主金鑰的 ARN。

# 使用使用者產生之 KMS 金鑰的許可
<a name="permissions-user-key-KMS"></a>

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

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

欲使用由使用者產生的 KMS 主金鑰之前，請確保您的 Kinesis 串流生產者及取用者 (IAM 委託人) 為 KMS 主金鑰政策中的使用者。否則串流的寫入及讀取將會失敗，最終可能造成資料遺失、延遲處理或應用程式故障。您可使用 IAM 政策管理 KMS 金鑰的許可。如需詳細資訊，請參閱[搭配 AWS KMS 使用 IAM 政策](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html)。

## Kinesis Data Streams 加密內容
<a name="sse-kms-encryption-context"></a>

當 Amazon Kinesis Data Streams 代表您呼叫 AWS KMS 時，它會將加密內容傳遞至 AWS KMS ，以做為金鑰政策和授權中的授權條件。Kinesis Data Streams 會在所有 AWS KMS 呼叫中使用串流 ARN 做為加密內容。

```
"encryptionContext": {
    "aws:kinesis:arn": "arn:aws:kinesis:region:account-id:stream/stream-name"
}
```

您可以使用加密內容來識別 KMS 金鑰在稽核記錄和日誌中的使用情況。它也會以純文字顯示在日誌中，例如 AWS CloudTrail。

若要將 KMS 金鑰的使用限制在特定串流的 Kinesis Data Streams 請求，請使用 KMS 金鑰政策或 IAM 政策中的 `kms:EncryptionContext:aws:kinesis:arn`條件金鑰。

## 範例生產者許可
<a name="example-producer-permissions"></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": [
            "kinesis:PutRecord",
            "kinesis:PutRecords"
        ],
        "Resource": "arn:aws:kinesis:*:123456789012:MyStream"
    }
  ]
}
```

------

## 範例取用者許可
<a name="example-consumer-permissions"></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": [
            "kinesis:GetRecords",
            "kinesis:DescribeStream"
        ],
        "Resource": "arn:aws:kinesis:*:123456789012:MyStream"
    }
  ]
}
```

------

Amazon Managed Service for Apache Flink 和 AWS Lambda 使用角色來取用 Kinesis 串流。請務必為這些消費者所使用的角色新增 `kms:Decrypt` 許可。

## 串流管理員許可
<a name="stream-administrator-permissions"></a>

Kinesis 串流管理員必須已獲授權呼叫 `kms:List*` 和 ```kms:DescribeKey*`。

# 驗證 KMS 金鑰許可並進行疑難排解
<a name="sse-troubleshooting"></a>

Kinesis 串流一經啟用加密後，建議您使用以下 Amazon CloudWatch 指標監控 `putRecord`、`putRecords` 和 `getRecords` 呼叫是否成功：
+  `PutRecord.Success` 
+  `PutRecords.Success` 
+  `GetRecords.Success` 

如需詳細資訊，請參閱[監控 Kinesis 資料串流](monitoring.md)

# 搭配介面 VPC 端點使用 Amazon Kinesis Data Streams
<a name="vpc"></a>

您可以使用介面 VPC 端點來防止 Amazon VPC 和 Kinesis Data Streams 之間的流量離開 Amazon 網路。介面 VPC 端點不需要網際網路閘道、NAT 裝置、VPN 連線或 Direct Connect 連線。介面 VPC 端點採用 AWS PrivateLink 技術，這項 AWS 技術可讓您在 Amazon VPC 中使用具有私有 IPs彈性網路介面，在 AWS 服務之間進行私有通訊。如需詳細資訊，請參閱 [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Introduction.html) 和[界面 VPC 端點 (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#create-interface-endpoint)。

**Topics**
+ [使用 Kinesis Data Streams 的介面 VPC 端點](#using-interface-vpc-endpoints)
+ [控制對 Kinesis Data Streams VPC 端點的存取](#interface-vpc-endpoints-policies)
+ [Kinesis Data Streams 的 VPC 端點政策可用性](#availability)

## 使用 Kinesis Data Streams 的介面 VPC 端點
<a name="using-interface-vpc-endpoints"></a>

若要開始使用，您不需要變更串流、生產者或消費者的設定。為您的 Kinesis Data Streams 建立介面 VPC 端點，以啟動透過介面 VPC 端點往返 Amazon VPC 資源的流量。啟用 FIPS 的界面 VPC 端點適用於美國區域。如需詳細資訊，請參閱[建立界面端點](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#create-interface-endpoint)。

Amazon Kinesis Producer Library (KPL) 和 Kinesis Consumer Library (KCL) 呼叫 AWS 服務，例如使用公有端點或私有介面 VPC 端點的 Amazon CloudWatch 和 Amazon DynamoDB，以使用中者為準。例如，如果您的 KCL 應用程式在已啟用 VPC 端點的 DynamoDB 介面的 VPC 中執行，則 DynamoDB 與 KCL 應用程式之間的呼叫會流經介面 VPC 端點。

## 控制對 Kinesis Data Streams VPC 端點的存取
<a name="interface-vpc-endpoints-policies"></a>

VPC 端點政策可讓您透過將政策連接至 VPC 端點，或使用連接至 IAM 使用者、群組或角色的政策中的其他欄位來控制存取，以限制只能透過指定的 VPC 端點進行存取。將這些政策與 IAM 政策搭配使用時，將特定串流的存取權限制在指定的 VPC 端點，以僅透過指定的 VPC 端點授予對 Kinesis 資料串流動作的存取權。

以下是存取 Kinesis 資料串流的範例端點政策。
+ **VPC 政策範例：唯讀存取** – 此範例政策可連接到 VPC 端點。(如需詳細資訊，請參閱 [控制 Amazon VPC 資源的存取](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_IAM.html))。它會將動作限制為僅能透過其連接的 VPC 端點列出和描述 Kinesis 資料串流。

  ```
  {
    "Statement": [
      {
        "Sid": "ReadOnly",
        "Principal": "*",
        "Action": [
          "kinesis:List*",
          "kinesis:Describe*"
        ],
        "Effect": "Allow",
        "Resource": "*"
      }
    ]
  }
  ```
+ **VPC 政策範例：限制對特定 Kinesis 資料串流的存取** – 此範例政策可連接到 VPC 端點。它會限制僅能透過其所連接的 VPC 端點存取特定資料串流。

  ```
  {
    "Statement": [
      {
        "Sid": "AccessToSpecificDataStream",
        "Principal": "*",
        "Action": "kinesis:*",
        "Effect": "Allow",
        "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/MyStream"
      }
    ]
  }
  ```
+ **IAM 政策範例：限制只能從特定 VPC 端點存取特定串流** - 此範例政策可以連接到 IAM 使用者、角色或群組。它會限制僅從指定的 VPC 端點對指定的 Kinesis 資料串流進行存取。

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

****  

  ```
  {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
        {
           "Sid": "AccessFromSpecificEndpoint",
           "Action": "kinesis:*",
           "Effect": "Deny",
           "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/MyStream",
           "Condition": { "StringNotEquals" : { "aws:sourceVpce": "vpce-11aa22bb" } }
        }
     ]
  }
  ```

------

## Kinesis Data Streams 的 VPC 端點政策可用性
<a name="availability"></a>

下列 區域支援 Kinesis Data Streams 介面 VPC 端點與 政策：
+ Europe (Paris)
+ 歐洲 (愛爾蘭)
+ 美國東部 (維吉尼亞北部)
+ 歐洲 (斯德哥爾摩)
+ 美國東部 (俄亥俄)
+ 歐洲 (法蘭克福)
+ 南美洲 (聖保羅)
+ 歐洲 (倫敦)
+ 亞太地區 (東京)
+ 美國西部 (加利佛尼亞北部)
+ 亞太地區 (新加坡)
+ 亞太地區 (雪梨)
+ 中國 (北京)
+ 中國 (寧夏)
+ 亞太地區 (香港)
+ Middle East (Bahrain)
+ 中東 (阿拉伯聯合大公國)
+ 歐洲 (米蘭)
+ 非洲 (開普敦)
+ 亞太地區 (孟買)
+ 亞太地區 (首爾)
+ 加拿大 (中部)
+ 美國西部 (奧勒岡)，usw2-az4 除外
+ AWS GovCloud （美國東部）
+ AWS GovCloud （美國西部）
+ 亞太地區 (大阪)
+ 歐洲 (蘇黎世)
+ 亞太地區 (海德拉巴)