翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon でデータ暗号化用のキーと証明書を作成する EMR
セキュリティ設定を使用して暗号化オプションを指定する場合は、その前に、キーや暗号化アーティファクトの提供元として使用したいプロバイダーを決定します。例えば、 AWS KMS または作成したカスタムプロバイダーを使用できます。次に、このセクションで説明する方法に沿ってキーまたはキープロバイダーを作成します。
保管中のデータを暗号化するためのキーの提供
Amazon の保管中のデータ暗号化には、 AWS Key Management Service (AWS KMS) またはカスタムキープロバイダーを使用できますEMR。を使用する場合 AWS KMS、暗号化キーのストレージと使用には料金が適用されます。詳細については、AWS KMS の料金
このトピックでは、Amazon で使用するKMSキーのキーポリシーの詳細とEMR、Amazon S3 暗号化用のカスタムキープロバイダークラスを記述するためのガイドラインとコード例について説明します。キーの作成の詳細については、「AWS Key Management Service デベロッパーガイド」の「キーの作成」を参照してください。
暗号化 AWS KMS keys に を使用する
AWS KMS 暗号化キーは、Amazon EMRクラスターインスタンスおよび で使用される Amazon S3 バケットと同じリージョンで作成する必要がありますEMRFS。指定したキーがクラスターの設定に使用するアカウントとは異なるアカウントにある場合は、 を使用してキーを指定する必要がありますARN。
Amazon EC2インスタンスプロファイルのロールには、指定したKMSキーを使用するアクセス許可が必要です。Amazon のインスタンスプロファイルのデフォルトロールは EMRですEMR_EC2_DefaultRole
。インスタンスプロファイルに別のロールを使用する場合、または Amazon S3 へのEMRFSリクエストにIAMロールを使用する場合は、必要に応じて各ロールがキーユーザーとして追加されていることを確認してください。これにより、 KMS キーを使用するアクセス許可がロールに付与されます。詳細については、AWS Key Management Service 「 デベロッパーガイド」の「キーポリシーの使用」とAmazon S3へのEMRFSリクエストのIAMロールの設定」を参照してください。
を使用して AWS Management Console 、指定したKMSキーのキーユーザーのリストにインスタンスプロファイルまたはEC2インスタンスプロファイルを追加するか、 AWS CLI または AWS SDKを使用して適切なキーポリシーをアタッチできます。
Amazon は対称KMSキー のみEMRをサポートしていることに注意してください。非対称KMSキーを使用して、Amazon EMRクラスター内の保管中のデータを暗号化することはできません。KMS キーが対称か非対称かを判断する方法については、「対称キーと非対称KMSキーの特定」を参照してください。
次の手順では、 を使用して、デフォルトの Amazon EMRインスタンスプロファイルをキーユーザーEMR_EC2_DefaultRole
として追加する方法について説明します AWS Management Console。KMS キーを既に作成していることを前提としています。新しいKMSキーを作成するには、「 AWS Key Management Service デベロッパーガイド」の「キーの作成」を参照してください。
Amazon のEC2インスタンスプロファイルEMRを暗号化キーユーザーのリストに追加するには
-
にサインイン AWS Management Console し、 AWS Key Management Service (AWS KMS) コンソールを https://console.aws.amazon.com/kms
で開きます。 -
を変更するには AWS リージョン、ページの右上隅にあるリージョンセレクタを使用します。
-
変更するKMSキーのエイリアスを選択します。
-
[Key Users] のキーの詳細ページで、[Add] を選択します。
-
[Add key users] ダイアログボックスで、適切なロールを選択します。デフォルトロールの名前は
EMR_EC2_DefaultRole
です。 -
[追加] を選択します。
KMS キーに追加のアクセス許可を付与してEBS暗号化を有効にする
Amazon EMRバージョン 5.24.0 以降では、セキュリティ設定オプションを使用してEBSルートデバイスとストレージボリュームを暗号化できます。このようなオプションを有効にするには、 をキープロバイダー AWS KMS として指定する必要があります。さらに、 AWS KMS key 指定した を使用するアクセス許可EMR_DefaultRole
をサービスロールに付与する必要があります。
を使用して、指定されたKMSキーのキーユーザーのリストにサービスロール AWS Management Console を追加するか、 AWS CLI または AWS SDKを使用して適切なキーポリシーをアタッチできます。
次の手順では、 AWS Management Console を使用して、デフォルトの Amazon EMRサービスロールをキーユーザー EMR_DefaultRole
として追加する方法について説明します。KMS キーを既に作成していることを前提としています。新しいKMSキーを作成するには、「 デベロッパーガイド」の「キーの作成」を参照してください。 AWS Key Management Service
暗号化キーユーザーのリストに Amazon EMRサービスロールを追加するには
-
にサインイン AWS Management Console し、 AWS Key Management Service (AWS KMS) コンソールを https://console.aws.amazon.com/kms
で開きます。 -
を変更するには AWS リージョン、ページの右上隅にあるリージョンセレクタを使用します。
-
左サイドバーで [Customer managed keys] (カスタマー管理型のキー) を選択します。
-
変更するKMSキーのエイリアスを選択します。
-
[Key Users] のキーの詳細ページで、[Add] を選択します。
-
キーユーザーの追加 セクションで、適切なロールを選択します。Amazon のデフォルトのサービスロールの名前は EMRです
EMR_DefaultRole
。 -
[追加] を選択します。
カスタムキープロバイダーの作成
セキュリティ設定を使用する場合は、ローカルディスク暗号化と Amazon S3 暗号化用に異なるプロバイダークラス名を指定する必要があります。カスタムキープロバイダーの要件は、ローカルディスク暗号化と Amazon S3 暗号化のどちらを使用するか、および Amazon EMRリリースバージョンによって異なります。
カスタムキープロバイダーの作成時に使用する暗号化のタイプに応じて、アプリケーションは異なる EncryptionMaterialsProvider インターフェイスを実装する必要があります。どちらのインターフェイスも、 AWS SDK for Java バージョン 1.11.0 以降で使用できます。
-
Amazon S3 暗号化を実装するには、com.amazonaws.services.s3.model.EncryptionMaterialsProvider interface を使用します。
-
ローカルディスク暗号化を実装するには、com.amazonaws.services.elasticmapreduce.spi.security.EncryptionMaterialsProvider interface を使用します。
任意の戦略を使用して、実装用の暗号化マテリアルを提供できます。例えば、静的暗号化マテリアルを提供するか、より複雑なキー管理システムと統合するかを選択できます。
Amazon S3 暗号化を使用している場合は、カスタム暗号化マテリアルAES/GCM/NoPaddingに暗号化アルゴリズムを使用する必要があります。
ローカルディスク暗号化を使用している場合、カスタム暗号化マテリアルに使用する暗号化アルゴリズムはEMRリリースによって異なります。Amazon 7.0.0 EMR 以前では、 を使用する必要がありますAES/GCM/NoPadding。Amazon 7.1.0 EMR 以降では、 を使用する必要がありますAES。
EncryptionMaterialsProvider クラスは、暗号化コンテキストによって暗号化マテリアルを取得します。Amazon EMR は、呼び出し元が返す正しい暗号化マテリアルを決定するのに役立つように、実行時に暗号化コンテキスト情報を入力します。
例: で Amazon S3 暗号化にカスタムキープロバイダーを使用する EMRFS
Amazon がEncryptionMaterialsProvider クラスから暗号化マテリアルEMRを取得して暗号化を実行すると、 はEMRFS必要に応じて、オブジェクトURIの Amazon S3 とクラスター JobFlowId の という 2 つのフィールドで materialsDescription 引数を入力します。これは、EncryptionMaterialsProvider クラスが暗号化マテリアルを選択的に返すために使用できます。
例えば、プロバイダーは、異なる Amazon S3 URIプレフィックスに対して異なるキーを返す場合があります。これは、プロバイダーによって生成EMRFSされ渡される materialsDescription 値ではなく、最終的に Amazon S3 オブジェクトに格納される、返される暗号化マテリアルの説明です。Amazon S3 オブジェクトの復号中に、暗号化マテリアルの説明がEncryptionMaterialsProvider クラスに渡されるため、再度、一致するキーを選択的に返してオブジェクトを復号できます。
EncryptionMaterialsProvider リファレンス実装を以下に示します。別のカスタムプロバイダーである はEMRFSRSAEncryptionMaterialsProvider
import com.amazonaws.services.s3.model.EncryptionMaterials; import com.amazonaws.services.s3.model.EncryptionMaterialsProvider; import com.amazonaws.services.s3.model.KMSEncryptionMaterials; import org.apache.hadoop.conf.Configurable; import org.apache.hadoop.conf.Configuration; import java.util.Map; /** * Provides KMSEncryptionMaterials according to Configuration */ public class MyEncryptionMaterialsProviders implements EncryptionMaterialsProvider, Configurable{ private Configuration conf; private String kmsKeyId; private EncryptionMaterials encryptionMaterials; private void init() { this.kmsKeyId = conf.get("my.kms.key.id"); this.encryptionMaterials = new KMSEncryptionMaterials(kmsKeyId); } @Override public void setConf(Configuration conf) { this.conf = conf; init(); } @Override public Configuration getConf() { return this.conf; } @Override public void refresh() { } @Override public EncryptionMaterials getEncryptionMaterials(Map<String, String> materialsDescription) { return this.encryptionMaterials; } @Override public EncryptionMaterials getEncryptionMaterials() { return this.encryptionMaterials; } }
Amazon 暗号化を使用して転送中のデータをEMR暗号化するための証明書を提供する
Amazon EMRリリースバージョン 4.8.0 以降では、セキュリティ設定を使用して転送中のデータを暗号化するためのアーティファクトを指定する 2 つのオプションがあります。
-
PEM 証明書を手動で作成し、.zip ファイルに含めてから、Amazon S3 で .zip ファイルを参照できます。
-
Java クラスとしてカスタム証明書プロバイダーを実装できます。Amazon S3 でアプリケーションのJARファイルを指定し、アプリケーションで宣言されたプロバイダーのフルクラス名を指定します。クラスは、 AWS SDK for Java バージョン 1.11.0 以降で利用可能なTLSArtifactsProviderインターフェイスを実装する必要があります。
Amazon は、クラスター内の各ノードにアーティファクトEMRを自動的にダウンロードし、後でそれらを使用して、オープンソースの転送中の暗号化機能を実装します。使用できるオプションの詳細については、転送中の暗号化を参照してください。
PEM 証明書の使用
転送中の暗号化に .zip ファイルを指定すると、セキュリティ設定では、.zip ファイル内のPEMファイルの名前が次のように正確に指定されることが期待されます。
伝送中の暗号化証明書 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ファイル名 | 必須/オプション | 詳細 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
privateKey.pem | 必須 | プライベートキー | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
certificateChain.pem | 必須 | 証明書チェーン | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
trustedCertificates.pem | オプションです。 | 提供された証明書が、Java のデフォルトの信頼されたルート証明機関 (CA) によって証明されていない場合、または Java のデフォルトの信頼されたルート CA にリンクできる中間 CA によって署名されていない場合は必須です。Java のデフォルトの信頼されたルートCAsは、 にありますjre/lib/security/cacerts 。 |
プライベートキーPEMファイルを、クラスターインスタンスが存在する Amazon VPCドメインへのアクセスを可能にするワイルドカード証明書として設定したい場合があります。たとえば、クラスターが us-east-1 (N. Virginia) に存在する場合、証明書件名定義で CN=*.ec2.internal
を指定して、クラスターへのアクセスが可能になるよう、証明書設定で共通の名前を指定することができます。クラスターが us-west-2 (オレゴン) に存在する場合、CN=*.us-west-2.compute.internal
を指定できます。
暗号化アーティファクトで指定されたPEMファイルにドメインの CN にワイルドカード文字がない場合は、 の値を hadoop.ssl.hostname.verifier
に変更する必要がありますALLOW_ALL
。これを行うには、クラスターに設定を送信するときに core-site
分類を使用するか、core-site.xml
ファイルでこの値を追加します。デフォルトのホスト名検証でワイルドカードなしのホスト名が受け入れられず、エラーになるため、この変更が必要です。Amazon 内のEMRクラスター設定の詳細についてはVPC、「」を参照してくださいVPC for Amazon でネットワークを設定する EMR。
次の例は、OpenSSL
ドメイン名で共通名として指定された *.us-west-2.compute.internal
us-west-2
(オレゴン) リージョン内の発行者の Amazon EMRクラスターインスタンスへのアクセスを許可します。
国 (C)、州 (S) およびロケール (L) といった他のオプション項目も指定されます。自己署名証明書が生成されるため、例の 2 番目のコマンドでは、certificateChain.pem
ファイルを trustedCertificates.pem
ファイルにコピーします。3 番目のコマンドでは、zip
を使って証明書を含む my-certs.zip
ファイルを作成します。
重要
この例はデモンストレーション proof-of-conceptのみです。自己署名証明書の使用は推奨されておらず、セキュリティリスクが生じる可能性があります。本番システムでは、証明書の発行で信頼できる認証機関 (CA) を使用してください。
$ openssl req -x509 -newkey rsa:1024 -keyout privateKey.pem -out certificateChain.pem -days 365 -nodes -subj '/C=US/ST=Washington/L=Seattle/O=MyOrg/OU=MyDept/CN=*.us-west-2.compute.internal' $ cp certificateChain.pem trustedCertificates.pem $ zip -r -X my-certs.zip certificateChain.pem privateKey.pem trustedCertificates.pem