

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

# Amazon Managed Streaming for Apache Kafka におけるデータ保護
<a name="data-protection"></a>

責任 AWS [共有モデル](https://aws.amazon.com/compliance/shared-responsibility-model/)、Amazon Managed Streaming for Apache Kafka のデータ保護に適用されます。このモデルで説明されているように、 AWS はすべての を実行するグローバルインフラストラクチャを保護する責任があります AWS クラウド。ユーザーは、このインフラストラクチャでホストされるコンテンツに対する管理を維持する責任があります。また、使用する「 AWS のサービス 」のセキュリティ設定と管理タスクもユーザーの責任となります。データプライバシーの詳細については、[データプライバシーに関するよくある質問](https://aws.amazon.com/compliance/data-privacy-faq/)を参照してください。欧州でのデータ保護の詳細については、*AWS セキュリティブログ*に投稿された「[AWS 責任共有モデルおよび GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/)」のブログ記事を参照してください。

データ保護の目的で、認証情報を保護し AWS アカウント 、 AWS IAM アイデンティティセンター または AWS Identity and Access Management (IAM) を使用して個々のユーザーを設定することをお勧めします。この方法により、それぞれのジョブを遂行するために必要な権限のみが各ユーザーに付与されます。また、次の方法でデータを保護することもお勧めします:
+ 各アカウントで多要素認証 (MFA) を使用します。
+ SSL/TLS を使用して AWS リソースと通信します。TLS 1.2 は必須ですが、TLS 1.3 を推奨します。
+ で API とユーザーアクティビティのログ記録を設定します AWS CloudTrail。CloudTrail 証跡を使用して AWS アクティビティをキャプチャする方法については、「 *AWS CloudTrail ユーザーガイド*」の[CloudTrail 証跡の使用](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)」を参照してください。
+  AWS 暗号化ソリューションと、その中のすべてのデフォルトのセキュリティコントロールを使用します AWS のサービス。
+ Amazon Macie などの高度な管理されたセキュリティサービスを使用します。これらは、Amazon S3 に保存されている機密データの検出と保護を支援します。
+ コマンドラインインターフェイスまたは API AWS を介して にアクセスするときに FIPS 140-3 検証済み暗号化モジュールが必要な場合は、FIPS エンドポイントを使用します。利用可能な FIPS エンドポイントの詳細については、「[連邦情報処理規格 (FIPS) 140-3](https://aws.amazon.com/compliance/fips/)」を参照してください。

お客様の E メールアドレスなどの極秘または機密情報を、タグ、または **[名前]** フィールドなどの自由形式のテキストフィールドに含めないことを強くお勧めします。これは、コンソール、API、または SDK を使用して Amazon MSK AWS CLIまたは他の AWS のサービス を使用する場合も同様です。 AWS SDKs タグ、または名前に使用される自由記述のテキストフィールドに入力したデータは、請求または診断ログに使用される場合があります。外部サーバーに URL を提供する場合、そのサーバーへのリクエストを検証できるように、認証情報を URL に含めないことを強くお勧めします。

**Topics**
+ [Amazon MSK 暗号化](msk-encryption.md)
+ [Amazon MSK 暗号化の使用を開始する](msk-working-with-encryption.md)
+ [インターフェイス VPC エンドポイントで Amazon MSK API を使用する](privatelink-vpc-endpoints.md)

# Amazon MSK 暗号化
<a name="msk-encryption"></a>

Amazon MSK には、厳格なデータ管理要件を満たすために使用できるデータ暗号化オプションが用意されています。Amazon MSK が暗号化に使用する証明書は、13 か月ごとに更新する必要があります。Amazon MSK は、すべてのクラスターに対してこれらの証明書を自動的に更新します。Amazon MSK が証明書の更新操作を開始した際、Express ブローカークラスターは `ACTIVE` の状態のままになります。標準 ブローカー クラスター の場合、 Amazon MSK は、証明書の更新操作を開始する際に、 クラスター の状態を `MAINTENANCE` に設定します。更新が完了すると、 MSK は `ACTIVE` に戻ります。クラスター が証明書の更新操作中の間は、引き続きデータを生成して使用できますが、それに対して更新操作を一切実行できません。

## 保管中の Amazon MSK 暗号化
<a name="msk-encryption-at-rest"></a>

Amazon MSK は[AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/) (KMS) と統合して、透過的なサーバー側暗号化を提供します。Amazon MSK は、保管中のデータを常に暗号化します。MSK クラスターを作成するときに、Amazon MSK が保管中のデータの暗号化に使用する AWS KMS key を指定できます。KMS キーを指定しない場合、Amazon MSK がユーザーの代わりに [AWS マネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk)を作成し、それを使用します。KMS キーの詳細については、「AWS Key Management Service デベロッパーガイド**」の「[AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys)」を参照してください。

## 転送中の Amazon MSK 暗号化
<a name="msk-encryption-in-transit"></a>

Amazon MSKは TLS 1.2 を使用します。デフォルトでは、MSK クラスターのブローカー間で転送中のデータを暗号化します。このデフォルトは、クラスターの作成時に上書きできます。

クライアントとブローカー間の通信では、次の 3 つの設定のいずれかを指定する必要があります。
+ TLS 暗号化データのみを許可します。これはデフォルトの設定です。
+ プレーンテキストと TLS 暗号化データの両方を許可します。
+ プレーンテキストのデータのみを許可します。

Amazon MSK ブローカーはパブリック AWS Certificate Manager 証明書を使用します。したがって、Amazon Trust Services を信頼するトラストストアは、Amazon MSK ブローカーの証明書も信頼します。

転送中の暗号化を有効にすることを強くお勧めしますが、CPU オーバーヘッドが増加し、数ミリ秒のレイテンシーが発生する可能性があります。ただし、ほとんどのユースケースはこれらの違いに敏感ではなく、影響の大きさは、クラスター、クライアント、および使用プロファイルの構成によって異なります。

# Amazon MSK 暗号化の使用を開始する
<a name="msk-working-with-encryption"></a>

MSK クラスターを作成するときに、JSON 形式で暗号化設定を指定できます。以下に例を示します。

```
{
   "EncryptionAtRest": {
       "DataVolumeKMSKeyId": "arn:aws:kms:us-east-1:123456789012:key/abcdabcd-1234-abcd-1234-abcd123e8e8e"
    },
   "EncryptionInTransit": {
        "InCluster": true,
        "ClientBroker": "TLS"
    }
}
```

`DataVolumeKMSKeyId` では、[カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)か、またはアカウント内の MSK 用の AWS マネージドキー (`alias/aws/kafka`) を指定できます。を指定しない場合`EncryptionAtRest`でも、Amazon MSK は で保管中のデータを暗号化します AWS マネージドキー。クラスターが使用しているキーを判別するには、`GET` リクエストを送信するか `DescribeCluster` API オペレーションを呼び出します。

`EncryptionInTransit` の場合、`InCluster` のデフォルト値は true ですが、Amazon MSK がブローカー間を通過するときにデータを暗号化しないようにする場合は、false に設定できます。

クライアントとブローカー間で転送されるデータの暗号化モードを指定するには、`ClientBroker` を `TLS`、`TLS_PLAINTEXT`、または `PLAINTEXT` のいずれかに設定します。

**Topics**
+ [Amazon MSK クラスターの作成時に暗号化設定を指定する](msk-working-with-encryption-cluster-create.md)
+ [Amazon MSK TLS 暗号化をテストする](msk-working-with-encryption-test-tls.md)

# Amazon MSK クラスターの作成時に暗号化設定を指定する
<a name="msk-working-with-encryption-cluster-create"></a>

このプロセスでは、Amazon MSK クラスターの作成時に暗号化設定を指定する方法について説明します。

**クラスターの作成時に暗号化設定を指定する**

1. 前述の例の内容をファイルに保存し、任意の名前を付けます。たとえば、`encryption-settings.json` と呼びます。

1. `create-cluster` コマンドを実行し、`encryption-info` オプションを使用して、設定 JSON ファイルを保存したファイルを指定します。以下に例を示します。*\$1YOUR MSK VERSION\$1* は、Apache Kafka クライアントバージョンと一致するバージョンに置き換えてください。MSK クラスターバージョンの確認方法については、「[MSK クラスターバージョンの確認](create-topic.md#find-msk-cluster-version)」を参照してください。MSK クラスターバージョンと異なる Apache Kafka クライアントバージョンを使用すると、Apache Kafka データの破損、損失、ダウンタイムが発生する可能性があることに注意してください。

   ```
   aws kafka create-cluster --cluster-name "ExampleClusterName" --broker-node-group-info file://brokernodegroupinfo.json --encryption-info file://encryptioninfo.json --kafka-version "{YOUR MSK VERSION}" --number-of-broker-nodes 3
   ```

   次に、このコマンドを実行した後の正常な応答の例を示します。

   ```
   {
       "ClusterArn": "arn:aws:kafka:us-east-1:123456789012:cluster/SecondTLSTest/abcdabcd-1234-abcd-1234-abcd123e8e8e",
       "ClusterName": "ExampleClusterName",
       "State": "CREATING"
   }
   ```

# Amazon MSK TLS 暗号化をテストする
<a name="msk-working-with-encryption-test-tls"></a>

このプロセスでは、Amazon MSK で TLS 暗号化をテストする方法について説明します。

**TLS 暗号化をテストするには**

1. [ステップ 3: クライアントマシンを作成する](create-client-machine.md) のガイダンスに従って、クライアントマシンを作成します。

1. クライアントマシンに Apache Kafka をインストールします。

1. この例では、JVM トラストストアを使用して MSK クラスターと通信します。これを行うには、まずクライアントマシンに `/tmp` という名前のフォルダを作成します。次に、Apache Kafka インストールの `bin` フォルダに移動し、次のコマンドを実行します。 (JVM パスは異なる場合があります)。

   ```
   cp /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-0.amzn2.x86_64/jre/lib/security/cacerts /tmp/kafka.client.truststore.jks
   ```

1. クライアントマシン上の Apache Kafka インストールの `bin` フォルダに、次の内容の `client.properties` というテキストファイルを作成します。

   ```
   security.protocol=SSL
   ssl.truststore.location=/tmp/kafka.client.truststore.jks
   ```

1.  AWS CLI がインストールされているマシンで次のコマンドを実行し、*clusterARN* をクラスターの ARN に置き換えます。

   ```
   aws kafka get-bootstrap-brokers --cluster-arn clusterARN
   ```

   正常に実行された場合の結果は次のようになります。次のステップで必要になるため、この結果を保存します。

   ```
   {
       "BootstrapBrokerStringTls": "a-1.example.g7oein.c2.kafka.us-east-1.amazonaws.com:0123,a-3.example.g7oein.c2.kafka.us-east-1.amazonaws.com:0123,a-2.example.g7oein.c2.kafka.us-east-1.amazonaws.com:0123"
   }
   ```

1. 次のコマンドを実行します。その際、*BootstrapBrokerStringTls* は、前のステップで取得したブローカーエンドポイントの 1 つに置き換えてください。

   ```
   <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --broker-list BootstrapBrokerStringTls --producer.config client.properties --topic TLSTestTopic
   ```

1. 新しいコマンドウィンドウを開き、同じクライアントマシンに接続します。その後、次のコマンドを実行して、コンソールコンシューマーを作成します。

   ```
   <path-to-your-kafka-installation>/bin/kafka-console-consumer.sh --bootstrap-server BootstrapBrokerStringTls --consumer.config client.properties --topic TLSTestTopic
   ```

1. プロデューサーウィンドウで、テキストメッセージに続けてリターンを入力し、コンシューマーウィンドウで同じメッセージを探します。Amazon MSK は、このメッセージを転送中に暗号化しました。

暗号化されたデータを操作するように Apache Kafka クライアントを設定する方法の詳細については、「[Kafka クライアントの設定](https://kafka.apache.org/documentation/#security_configclients)」を参照してください。

# インターフェイス VPC エンドポイントで Amazon MSK API を使用する
<a name="privatelink-vpc-endpoints"></a>

 AWS PrivateLink を搭載したインターフェイス VPC エンドポイントを使用すると、Amazon VPC と Amazon MSK APIs 間のトラフィックが Amazon ネットワークから出るのを防ぐことができます。インターフェイス VPC エンドポイントには、インターネットゲートウェイ、NAT デバイス、VPN 接続、または AWS Direct Connect 接続は必要ありません。[AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html) は、Amazon VPC 内のプライベート IPs を持つ Elastic Network Interface を使用して、 AWS サービス間のプライベート通信を可能にする AWS テクノロジーです。詳細については、[Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) and [Interface VPC Endpoints (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint)」を参照してください。

アプリケーションは、 AWS PrivateLink を使用して Amazon MSK プロビジョンド API と MSK Connect APIs に接続できます。開始するには、 Amazon MSK API の インターフェース VPC エンドポイント を作成して、インターフェース VPC エンドポイント を介して Amazon VPC リソース との間で流れる トラフィック を開始します。FIPS 対応の インターフェイス VPC エンドポイント は、米国 リージョン で使用可能です。詳細については、「[ インターフェイス エンドポイント の作成](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint)」を参照してください。

この機能を使用することで、Apache Kafka クライアントは、接続文字列を取得するためにインターネットを経由することなく、Amazon MSK Provisioned または MSK Connect リソースに接続するための接続文字列を動的に取得できます。

インターフェース VPC エンドポイントを作成する際は、以下のサービス名エンドポイントのいずれかを選択してください。

**MSK Provisioned の場合:**
+ 次のサービス名エンドポイントは、新しい接続ではサポートされなくなりました。
  + com.amazonaws.region.kafka
  + com.amazonaws.region.kafka-fips (FIPS 対応)
+ IPv4 トラフィックと IPv6 トラフィックの両方をサポートするデュアルスタックエンドポイントサービスは次のとおりです。
  + aws.api.region.kafka-api
  + aws.api.region.kafka-api-fips (FIPS 対応)

デュアルスタックエンドポイントを設定するには、[デュアルスタックと FIPS エンドポイント](https://docs.aws.amazon.com/sdkref/latest/guide/feature-endpoints.html)のガイドラインに従う必要があります。

region は、リージョンコードです。MSK プロビジョンド 互換 API を使用するには、このサービス名を選択します。詳細については、*https://docs.aws.amazon.com/msk/1.0/apireference/* の「[オペレーション](https://docs.aws.amazon.com/msk/1.0/apireference/operations.html)」をご参照ください。

**MSK Connect の場合:**
+ com.amazonaws.region.kafkaconnect

region は、リージョンコードです。MSK Connect 互換 API を連携するには、このサービス名を選択します。詳細については、*Amazon MSK Connect API リファレンス*の[「アクション」](https://docs.aws.amazon.com/MSKC/latest/mskc/API_Operations.html)を参照してください。

インターフェイス VPC エンドポイント の作成手順を含む詳細については、*AWS PrivateLink 「ガイド」*の「[インターフェイス エンドポイント の作成](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint)」を参照してください。

## Amazon MSK Provisioned または MSK Connect の API の VPC エンドポイントへのアクセスを制御する
<a name="vpc-endpoints-control-access"></a>

VPC エンドポイントポリシーは、VPC エンドポイントにポリシーをアタッチするか、IAM ユーザー、グループ、またはロールにアタッチされたポリシーの追加フィールドを使用して、アクセスが指定された VPC エンドポイント経由のみで行われるようにアクセスを制限することにより、アクセスを制御します。MSK Provisioned または MSK Connect サービスのいずれかに対するアクセス権限を定義するには、適切なポリシー例を使用してください。

エンドポイントの作成時にポリシーをアタッチしない場合、サービスへのフルアクセスを許可するデフォルトのポリシーが Amazon VPC によって自動的にアタッチされます。エンドポイントポリシーは、IAM アイデンティティベースのポリシーやサービス固有のポリシーを上書きしたり置き換えたりするものではありません。これは、評価項目から指定されたサービスへのアクセスを制御するための別のポリシーです。

詳細については、「*AWS PrivateLink ガイド*」の「[VPC エンドポイントによるサービスのアクセス コントロール](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)」を参照してください。

------
#### [ MSK Provisioned — VPC policy example ]

**読み取り専用アクセス**  
このサンプルポリシーは、VPC エンドポイントにアタッチできます。詳細については、Amazon VPC のリソースに対するアクセスの制御を参照してください。これにより、 アクション は、それが アタッチ されている VPC エンドポイント を介した オペレーション の一覧表示と説明のみに制限されます。

```
{
  "Statement": [
    {
      "Sid": "MSKReadOnly",
      "Principal": "*",
      "Action": [
        "kafka:List*",
        "kafka:Describe*"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
```

**MSK Provisioned — VPC エンドポイントポリシーの例**  
特定の MSK クラスターへのアクセスを制限する

このサンプルポリシーは、VPC エンドポイントにアタッチできます。これにより、アタッチされている VPC エンドポイントを介して特定の Kafka クラスターへのアクセスを制限されます。

```
{
  "Statement": [
    {
      "Sid": "AccessToSpecificCluster",
      "Principal": "*",
      "Action": "kafka:*",
      "Effect": "Allow",
      "Resource": "arn:aws:kafka:us-east-1:123456789012:cluster/MyCluster"
    }
  ]
}
```

------
#### [ MSK Connect — VPC endpoint policy example ]

**コネクタを一覧表示し、新しいコネクタを作成する**  
以下は、MSK Connect のエンドポイント ポリシーの例です。このポリシーにより、指定されたロールはコネクタを一覧表示し、新規コネクタを作成できます。

```
{
    "Version": "2012-10-17", 		 	 	 		 	 	 
    "Statement": [
        {
            "Sid": "MSKConnectPermissions",
            "Effect": "Allow",
            "Action": [
                "kafkaconnect:ListConnectors",
                "kafkaconnect:CreateConnector"
            ],
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:role/MyMSKConnectExecutionRole"
                ]
            }
        }
    ]
}
```

**MSK Connect — VPC エンドポイント ポリシーの例**  
指定された VPC 内の特定の IP アドレスからのリクエストのみを許可する

次の例は、指定した VPC 内の指定した IP アドレスから送信されたリクエストのみが成功するように許可するポリシーを示しています。他の IP アドレスからのリクエストは失敗します。

```
{
    "Statement": [
        {
            "Action": "kafkaconnect:*",
            "Effect": "Allow",
            "Principal": "*",
            "Resource": "*",
            "Condition": {
                "IpAddress": {
                    "aws:VpcSourceIp": "192.0.2.123"
                },
        "StringEquals": {
                    "aws:SourceVpc": "vpc-555555555555"
                }
            }
        }
    ]
}
```

------