

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Kinesis Data Streams のデータ保護
<a name="server-side-encryption"></a>

 AWS Key Management Service (AWS KMS) キーを使用したサーバー側の暗号化により、Amazon Kinesis Data Streams 内の保管中のデータを暗号化することで、厳格なデータ管理要件を簡単に満たすことができます。

**注記**  
コマンドラインインターフェイスまたは API AWS を介して にアクセスするときに FIPS 140-2 検証済みの暗号化モジュールが必要な場合は、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 を使用すると AWS、 によって管理される Kinesis 用の CMK、ユーザーが指定した 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/ja_jp/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 は、データキーを回転させている場合、約 5 分ごとに AWS KMS を呼び出します。30 日間の月では、Kinesis ストリームによって開始される AWS KMS API コールの合計コストは、数ドル未満である必要があります。このコストは、データプロデューサーとコンシューマーで使用するユーザー認証情報の数に応じてスケールされます。各ユーザー認証情報には一意の API コールが必要なためです AWS KMS。認証に IAM ロールを使用すると、各ロールの継承コールは、一意のユーザー認証情報になります。KMS コストを節約するには、assume role コールによって返されるユーザー認証情報をキャッシュしておくとよい場合があります。

以下は、リソース別の料金の説明です。

**キー**
+ ( AWS エイリアス = `aws/kinesis`) によって管理される Kinesis の CMK は無料です。
+ ユーザー生成の KMS キーは、KMS キー料金の対象となります。詳細については、[AWS Key Management Service の料金](https://aws.amazon.com/kms/pricing/#Keys)を参照してください。

API の使用料金は、カスタムキーを含めたすべての CMK に適用されます。Kinesis Data Streams は、データキーを回転させている場合、約 5 分ごとに KMS を呼び出します。1 か月 (30 日) では、Kinesis Data Streams によって開始された KMS API コールの合計コストは、数ドル未満になるはずです。各ユーザー認証情報には KMS への一意の API AWS コールが必要であるため、このコストは、データプロデューサーとコンシューマーで使用するユーザー認証情報の数に応じてスケーリングされることに注意してください。IAM ロールを認証に使用すると、各 assume-role-call によって一意のユーザー認証情報が生成され、assume-role-call によって返されたユーザー認証情報をキャッシュして KMS のコストを節約できます。

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

暗号化されたストリームごとに、TIP から読み取り、リーダーとライター間で単一の IAM アカウント/ユーザーアクセスキーを使用する場合、Kinesis サービスは 5分ごとに約 12 回 AWS KMS を呼び出します。TIP から読み取らないと、 AWS KMS サービスへの呼び出しが増える可能性があります。新しいデータ暗号化キーを生成する API リクエストには、 AWS KMS 使用コストがかかります。詳細については、[AWS Key Management Service の料金: 使用量](https://aws.amazon.com/kms/pricing/#Usage)を参照してください。

## リージョン別のサーバー側暗号化の利用可能性
<a name="sse-regions"></a>

現在、Kinesis ストリームのサーバー側の暗号化は、 AWS GovCloud (米国西部) や中国リージョンなど、Kinesis Data Streams でサポートされているすべてのリージョンで利用できます。Kinesis Data Streams がサポートされているるリージョンについては、[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μs 未満)。

# サーバー側の暗号化の使用開始方法
<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. **[詳細]** タブを選択します。

1. **[サーバー側の暗号化]** で **[編集]** を選択します。

1. ユーザー生成の KMS マスターキーを使用する場合を除き、KMS マスターキーとして **[aws/kinesis]** (デフォルト) が選択されていることを確認します。これは、Kinesis サービスによって生成される KMS マスターキーです。**[有効]** を選択してから、**[保存]** を選択します。
**注記**  
デフォルトの Kinesis サービスマスターキーは無料ですが、Kinesis が AWS KMS サービスに対して行う API コールには KMS 使用コストが適用されます。

1. ストリームはしばらく **[保留中]** 状態になります。ストリームの状態が暗号化を有効にして**アクティブ**状態に戻った後、そのストリームに書き込まれるすべての着信データは、ユーザーが選択した KMS マスターキーを使用して暗号化されます。

1. サーバー側の暗号化を無効にするには、 の**サーバー側の暗号化**で**無効**を選択し AWS マネジメントコンソール、**保存**を選択します。

# ユーザー生成の KMS キーを作成して使用する
<a name="creating-using-sse-master-keys"></a>

このセクションでは、Amazon Kinesis によって管理されるマスターキーを使用する代わりに、ユーザー独自の KMS キーを作成して使用する方法について説明します。

## ユーザー生成の KMS キーを作成する
<a name="creating-sse-master-keys"></a>

ユーザー独自のキーを作成する手順については、「AWS Key Management Service デベロッパーガイド」の「[キーの作成](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)」を参照してください。**アカウントのキーを作成すると、inesis Data Streams サービスは **KMS マスターキー**リストにそれらのキーを返します。

## ユーザー生成の KMS キーを使用する
<a name="using-sse-master-keys"></a>

コンシューマー、プロデューサー、管理者に正しいアクセス許可が適用されたら、自分の AWS アカウントまたは別の AWS アカウントでカスタム KMS キーを使用できます。アカウント内のすべての KMS マスターキーは、 AWS マネジメントコンソールにある **[KMS マスターキー]** リストに表示されます。

別のアカウントにあるカスタム 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 キーの許可を管理できます。詳細については、[「KMS での IAM AWS ポリシーの使用](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 エンドポイントは、Amazon VPC 内のプライベート IPs を持つ Elastic Network Interface を使用して AWS サービス間のプライベート通信を可能にする AWS テクノロジーである PrivateLink を利用 AWS しています。詳細については、[Amazon Virtual Private Cloud](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Introduction.html) and [Interface VPC Endpoints (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 の VPCE エンドポイントへのアクセスを制御する](#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 リソースから、または Amazon VPC リソースへ流れるトラフィックを開始します。FIPS 対応のインターフェイス VPC エンドポイントは、米国リージョンで使用できます。詳細については、[インターフェイスエンドポイントの作成](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#create-interface-endpoint)を参照してください。

Amazon Kinesis プロデューサーライブラリ (KPL) と Kinesis コンシューマーライブラリ (KCL) は、パブリックエンドポイントまたはプライベートインターフェイス VPC エンドポイントのいずれかを使用してAmazon CloudWatch や Amazon DynamoDB などの AWS サービスを呼び出します。例えば、KCL アプリケーションが実行されている VPC で DynamoDB インターフェイス VPC エンドポイントが有効になっている場合、DynamoDB と KCL アプリケーション間の呼び出しは、そのインターフェイス VPC エンドポイントを経由して流れます。

## Kinesis Data Streams の VPCE エンドポイントへのアクセスを制御する
<a name="interface-vpc-endpoints-policies"></a>

VPC エンドポイントポリシーは、VPC エンドポイントにポリシーをアタッチするか、IAM ユーザー、グループ、またはロールにアタッチされたポリシーの追加フィールドを使用して、アクセスが指定された VPC エンドポイント経由のみで行われるように制限することで、アクセスを制御することを可能にします。これらのポリシーは、指定された VPC エンドポイントを介した Kinesis データストリームのアクションへのアクセスのみを許可する IAM ポリシーと組み合わせて使用するときに、指定された VPC エンドポイントへの特定のストリームへのアクセスを制限するために使用します。

以下は、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 ユーザー、ロール、またはグループにアタッチできます。このポリシーは、指定された Kensis データストリームへのアクセスが、指定された VPC エンドポイント以外からは行われないように制限します。

------
#### [ 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 エンドポイントは、次のリージョンでサポートされています。
+ 欧州 (パリ)
+ 欧州 (アイルランド)
+ 米国東部 (バージニア北部)
+ 欧州 (ストックホルム)
+ 米国東部 (オハイオ)
+ 欧州 (フランクフルト)
+ 南米 (サンパウロ)
+ 欧州 (ロンドン)
+ アジアパシフィック (東京)
+ 米国西部 (北カリフォルニア)
+ アジアパシフィック (シンガポール)
+ アジアパシフィック (シドニー)
+ 中国 (北京)
+ 中国 (寧夏)
+ アジアパシフィック (香港)
+ 中東 (バーレーン)
+ 中東 (アラブ首長国連邦)
+ 欧州 (ミラノ)
+ アフリカ (ケープタウン)
+ アジアパシフィック (ムンバイ)
+ アジアパシフィック (ソウル)
+ カナダ (中部)
+ usw2-az4 を除く米国西部 (オレゴン)
+ AWS GovCloud (米国東部)
+ AWS GovCloud (米国西部)
+ アジアパシフィック (大阪)
+ 欧州 (チューリッヒ)
+ アジアパシフィック (ハイデラバード)