

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

# Amazon EMR が を使用する方法 AWS KMS
<a name="services-emr"></a>

[Amazon EMR](https://aws.amazon.com/emr/) クラスターを使用する場合、永続的ストレージの場所に保存する前に、*保管中の*データを暗号化するようにクラスターを設定できます。保存データは、EMR ファイルシステム (EMRFS) かクラスターノードのストレージボリューム、またはその両方で暗号化できます。保管中のデータを暗号化するには、 AWS KMS keyを使用します。以下のトピックでは、Amazon EMR クラスターが KMS キーを使用して保管中のデータを暗号化する方法について説明します。

**重要**  
Amazon EMR は、[対称 KMS キー](symm-asymm-choose-key-spec.md#symmetric-cmks)のみをサポートします。[非対称 KMS キー](symmetric-asymmetric.md)を使用して、Amazon EMR クラスター内の保管中のデータを暗号化することはできません。KMS キーが対称か非対称かを判断する方法については、「[さまざまなキータイプの特定](identify-key-types.md)」を参照してください。

Amazon EMR クラスターは、 *転送中の*データも暗号化します。つまり、クラスターはネットワーク経由でデータを送信する前にデータを暗号化します。KMS キーを使用して送信中のデータを暗号化することはできません。詳細については、*Amazon EMR 管理ガイド*の[転送時のデータ暗号化](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-data-encryption-options.html#emr-encryption-intransit)を参照してください。

Amazon EMR で使用できるすべての暗号化オプションの詳細については、*Amazon EMR 管理ガイド*の[暗号化オプション](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-data-encryption-options.html)を参照してください。

**Topics**
+ [EMR ファイルシステム (EMRFS) のデータを暗号化する](#emrfs-encryption)
+ [クラスターノードのストレージボリュームのデータを暗号化する](#emr-local-disk-encryption)
+ [暗号化コンテキスト](#emr-encryption-context)

## EMR ファイルシステム (EMRFS) のデータを暗号化する
<a name="emrfs-encryption"></a>

Amazon EMR クラスターは、次の 2 つの分散ファイルシステムを使用します。
+ Hadoop Distributed File System (HDFS) HDFS 暗号化は、 AWS KMSで KMS キーを使用しません。
+ EMR ファイルシステム (EMRFS) EMRFS は HDFS の実装で、Amazon EMR クラスターが Amazon Simple Storage Service (Amazon S3) にデータを格納できるようにします。EMRFS は、4 種類の暗号化オプションをサポートしており、そのうち 2 種類は AWS KMSで KMS キーを使用します。EMRFS 暗号化オプションの 4 種類すべての詳細については、*Amazon EMR 管理ガイド*の[暗号化オプション](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-data-encryption-options.html)を参照してください。

KMS キーを使用する 2 種類の EMRFS 暗号化オプションは、Amazon S3 が提供する次の暗号化機能を使用します。
+ [AWS Key Management Service (SSE-KMS) によるサーバー側の暗号化を使用したデータの保護](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)。Amazon EMR クラスターは、Simple Storage Service (Amazon S3) にデータを送信します。Amazon S3 は、KMS キーを使用してデータを暗号化してから、そのデータを S3 バケットに保存します。この仕組みについては、「[SSE-KMS を使用して EMRFS のデータを暗号化するプロセス](#emrfs-encryption-sse-kms)」を参照してください。
+ [クライアント側の暗号化を使用したデータの保護](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html) (CSE-KMS)。Amazon EMR のデータは、 AWS KMS key で暗号化されてから、ストレージのために Amazon S3 に送信されます。この仕組みについては、「[CSE-KMS を使用して EMRFS のデータを暗号化するプロセス](#emrfs-encryption-cse-kms)」を参照してください。

KMS を使用して EMRFS 上のデータを暗号化するように Amazon EMR クラスターを設定するときは、Amazon S3 または Amazon EMR クラスターで使用する KMS キーを選択します。SSE-KMS を使用して、エイリアス **aws/s3** を持つ Amazon S3 の AWS マネージドキー 、または作成する対称カスタマーマネージドキーを選択できます。クライアント側の暗号化では、作成する対称カスタマーマネージドキーを選択する必要があります。カスタマーマネージドキーを選択する際に、Amazon EMR クラスターに KMS キーの使用許可があることを確認する必要があります。詳細については、*「Amazon EMR 管理ガイド*」の[「暗号化 AWS KMS keys に を使用する](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-encryption-enable.html#emr-awskms-keys)」を参照してください。

サーバー側の暗号化とクライアント側の暗号化のどちらの場合でも、選択する KMS キーが[エンベロープ暗号化](kms-cryptography.md#enveloping)ワークフローのルートキーになります。データは、KMS [キーで暗号化された一意のデータ](data-keys.md)キーで暗号化されます AWS KMS。暗号化されたデータとその暗号化されたデータキーのコピーは、1 つの暗号化オブジェクトとして S3 バケットに一緒に保存されます。この仕組みについては、次のトピックを参照してください。

**Topics**
+ [SSE-KMS を使用して EMRFS のデータを暗号化するプロセス](#emrfs-encryption-sse-kms)
+ [CSE-KMS を使用して EMRFS のデータを暗号化するプロセス](#emrfs-encryption-cse-kms)

### SSE-KMS を使用して EMRFS のデータを暗号化するプロセス
<a name="emrfs-encryption-sse-kms"></a>

SSE-KMS を使用するように Amazon EMR クラスターを設定すると、暗号化プロセスは次のように動作します。

1. クラスターは、S3 バケットに格納するために Amazon S3 にデータを送信します。

1. Amazon S3 は [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) リクエストを に送信し AWS KMS、SSE-KMS を使用するようにクラスターを設定したときに選択した KMS キーのキー ID を指定します。リクエストには暗号化コンテキストが含まれます。詳細については、「[暗号化コンテキスト](#emr-encryption-context)」を参照してください。

1. AWS KMS は一意のデータ暗号化キー (データキー) を生成し、このデータキーの 2 つのコピーを Amazon S3 に送信します。コピーのうち一方は暗号化されない形式 (プレーンテキスト) で、もう一方は KMS キーで暗号化されます。

1. Amazon S3 は、プレーンテキストデータキーを使用してステップ 1 で受信したデータを暗号化し、使用後できるだけ早くプレーンテキストデータキーをメモリから削除します。

1. Amazon S3 は、暗号化されたデータとデータキーの暗号化されたコピーを、1 つの暗号化されたオブジェクトとして S3 バケットに格納します。

この復号プロセスは、次のように行われます。

1. クラスターは、暗号化されたデータオブジェクトを S3 バケットへ要求します。

1. Amazon S3 は、暗号化されたデータキーを S3 オブジェクトから抽出し、暗号化されたデータキーを [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) リクエスト AWS KMS で に送信します。リクエストには[暗号化コンテキスト](encrypt_context.md)が含まれます。

1. AWS KMS は、暗号化に使用したのと同じ KMS キーを使用して暗号化されたデータキーを復号し、復号された (プレーンテキスト) データキーを Amazon S3 に送信します。

1. Amazon S3 は、プレーンテキストデータキーを使用して暗号化されたデータを復号化し、使用後できるだけ早くプレーンテキストデータキーをメモリから削除します。

1. Amazon S3 は、復号化されたデータをクラスターに送信します。

### CSE-KMS を使用して EMRFS のデータを暗号化するプロセス
<a name="emrfs-encryption-cse-kms"></a>

CSE-KMS を使用するように Amazon EMR クラスターを設定すると、暗号化プロセスは次のように動作します。

1. Amazon S3 にデータを保存する準備ができたら、クラスターは [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) リクエストを に送信し AWS KMS、CSE-KMS を使用するようにクラスターを設定したときに選択した KMS キーのキー ID を指定します。リクエストには暗号化コンテキストが含まれます。詳細については、「[暗号化コンテキスト](#emr-encryption-context)」を参照してください。

1. AWS KMS は一意のデータ暗号化キー (データキー) を生成し、このデータキーの 2 つのコピーをクラスターに送信します。コピーのうち一方は暗号化されない形式 (プレーンテキスト) で、もう一方は KMS キーで暗号化されます。

1. クラスターは、プレーンテキストデータキーを使用してデータを暗号化し、使用後できるだけ早くそのプレーンテキストデータキーをメモリから削除します。

1. クラスターは、暗号化データと暗号化されたデータキーのコピーを 1 つの暗号化オブジェクトにまとめます。

1. クラスターは、暗号化されたオブジェクトを Amazon S3 に送信してストレージします。

この復号プロセスは、次のように行われます。

1. クラスターは、暗号化されたデータオブジェクトを S3 バケットへ要求します。

1. Amazon S3 は、暗号化されたオブジェクトをクラスターに送信します。

1. クラスターは、暗号化されたオブジェクトから暗号化されたデータキーを抽出し、暗号化されたデータキーを [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) リクエスト AWS KMS で に送信します。リクエストには[暗号化コンテキスト](encrypt_context.md)が含まれます。

1. AWS KMS は、暗号化に使用したのと同じ KMS キーを使用して暗号化されたデータキーを復号し、復号された (プレーンテキスト) データキーをクラスターに送信します。

1. クラスターは、そのプレーンテキストデータキーを使用して、暗号化されたデータを復号し、使用後できるだけ早くプレーンテキストデータキーをメモリから削除します。

## クラスターノードのストレージボリュームのデータを暗号化する
<a name="emr-local-disk-encryption"></a>

Amazon EMR クラスターは、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの集合です。クラスター内のインスタンスはそれぞれ、*クラスターノード*または*ノード*と呼ばれます。各ノードには、インスタンスストアボリュームと Amazon Elastic Block Store（Amazon EBS）ボリュームの 2 種類のストレージボリュームがあります。これらのノードでストレージボリュームをいずれも暗号化するには、クラスターを構成して、[Linux Unified Key Setup (LUKS)](https://gitlab.com/cryptsetup/cryptsetup/blob/master/README.md) を使用できます (各ノードの起動ボリュームは不可)。これは、*ローカルディスクの暗号化*と呼ばれます。

クラスター向けにローカルディスクの暗号化を有効にすると、 AWS KMSの KMS キーを使用して LUKS キーを暗号化できます。作成した[カスタマーマネージドキー](concepts.md#customer-mgn-key)を選択する必要があります。[AWS マネージドキー](concepts.md#aws-managed-key) を使用することはできません。カスタマーマネージドキーを選択する場合は、Amazon EMR クラスターに KMS キーを使用するアクセス許可があることを確認する必要があります。詳細については、*「Amazon EMR 管理ガイド*」の[「暗号化 AWS KMS keys に を使用する](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-encryption-enable.html#emr-awskms-keys)」を参照してください。

KMS キーを使用してローカルディスクの暗号化を有効にする際、暗号化プロセスは次のようになります。

1. 各クラスターノードが起動すると、クラスターのローカルディスク暗号化を有効にしたときに選択した KMS キーのキー ID を指定して AWS KMS、[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) リクエストが に送信されます。

1. AWS KMS は一意のデータ暗号化キー (データキー) を生成し、このデータキーの 2 つのコピーをノードに送信します。コピーのうち一方は暗号化されない形式 (プレーンテキスト) で、もう一方は KMS キーで暗号化されます。

1. ノードでは、LUKS キーを保護するパスワードとして、base64 エンコードバージョンのプレーンテキストデータキーを使用します。ノードは、暗号化されたデータキーのコピーを起動ボリュームに保存します。

1. ノードが再起動すると、再起動されたノードは暗号化されたデータキーを [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) リクエスト AWS KMS とともに に送信します。

1. AWS KMS は、暗号化に使用したのと同じ KMS キーを使用して暗号化されたデータキーを復号し、復号された (プレーンテキスト) データキーをノードに送信します。

1. ノードでは、LUKS キーのロックを解除するパスワードとして、base64 エンコードバージョンのプレーンテキストデータキーを使用します。

## 暗号化コンテキスト
<a name="emr-encryption-context"></a>

と統合された各 AWS サービス AWS KMS では、 AWS KMS を使用してデータキーを生成したり、データを暗号化または復号したりするときに、暗号化[コンテキスト](encrypt_context.md)を指定できます。暗号化コンテキストは、 AWS KMS がデータの整合性をチェックするために使用する追加の認証済み情報です。サービスにおいて、暗号化オペレーションのために暗号化コンテキストを指定する際、復号オペレーションと同じ暗号コンテキストを指定する必要があります。指定しない場合は復号できません。暗号化コンテキストも AWS CloudTrail ログファイルに書き込まれるため、特定の KMS キーが使用された理由を理解するのに役立ちます。

以下のセクションでは、KMS キーを使用する Amazon EMR 暗号化の各シナリオで使用される暗号化コンテキストについて説明します。

### SSE-KMS による EMRFS 暗号化の暗号化コンテキスト
<a name="emr-encryption-context-sse-kms"></a>

SSE-KMS を使用すると、Amazon EMR クラスターは Amazon S3 にデータを送信し、次に Amazon S3 が KMS キーを使用してデータを暗号化してから S3 バケットに保存します。この場合、Amazon S3 は、送信先の各 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) および [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) リクエストで、S3 オブジェクトの Amazon リソースネーム (ARN) を暗号化コンテキストとして使用します AWS KMS。次の例は、Amazon S3 が使用する暗号化コンテキストの JSON 表現を示しています。

```
{ "aws:s3:arn" : "arn:aws:s3:::S3_bucket_name/S3_object_key" }
```

### CSE-KMS による EMRFS 暗号化の暗号化コンテキスト
<a name="emr-encryption-context-cse-kms"></a>

CSE-KMS では、Amazon EMR クラスターは KMS キーを使用してデータを暗号化してから Amazon S3 に送信して保存します。この場合、クラスターは、送信する各 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) および [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) リクエストの暗号化コンテキストとして KMS キーの Amazon リソースネーム (ARN) を使用します AWS KMS。次の例では、クラスターが使用する暗号化コンテキストの JSON 表現を示します。

```
{ "kms_cmk_id" : "arn:aws:kms:us-east-2:111122223333:key/0987ab65-43cd-21ef-09ab-87654321cdef" }
```

### LUKS によるローカルディスク暗号化の暗号化コンテキスト
<a name="emr-encryption-context-luks"></a>

Amazon EMR クラスターが LUKS でローカルディスク暗号化を使用するとき、クラスターノードは AWS KMSに送信する [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) および [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) リクエストで暗号化コンテキストを指定しません。