翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon S3 クライアント側の暗号化
Amazon S3 のクライアント側の暗号化を使用すると、Amazon S3 の暗号化と復号はクラスターの EMRFS クライアントで行われます。オブジェクトは Amazon S3 にアップロードされる前に暗号化され、ダウンロード後に復号化されます。指定するプロバイダーが、クライアントが使用する暗号化キーを提供します。クライアントは、 AWS KMS によって提供されるキー (CSE-KMS) か、クライアント側のルートキーを提供するカスタム Java クラス (CSE-C) を使用できます。CSE-KMS と CSE-C では、指定するプロバイダーと、復号化または暗号化されるオブジェクトのメタデータに応じて、暗号化の仕様が少し異なります。これらの差異に関する詳細は、「Amazon Simple Storage Service ユーザーガイド」の「クライアント側の暗号化を使用したデータの保護」を参照してください。
注記
Amazon S3 CSE では、Amazon S3 と交換される EMRFS データのみが暗号化されます。クラスターインスタンスボリュームのすべてのデータが暗号化されるわけではありません。さらに、Hue は EMRFS を使用しないため、Hue S3 ファイルブラウザが Amazon S3 に書き込むオブジェクトは暗号化されません。
を使用して Amazon S3 の EMRFS データの CSE-KMS を指定するには AWS CLI
-
次のコマンドを入力して、
MyKMSKeyID
を、使用する KMS キーのキー ID または ARN に置き換えます。aws emr create-cluster --release-label
emr-4.7.2 or earlier
--emrfs Encryption=ClientSide,ProviderType=KMS,KMSKeyId=MyKMSKeyId
カスタムキープロバイダーの作成
カスタムキープロバイダーの作成時に使用する暗号化のタイプに応じて、アプリケーションは異なる EncryptionMaterialsProvider インターフェイスを実装する必要があります。どちらのインターフェイスも AWS SDK for Java バージョン 1.11.0 以降で使用できます。
-
Amazon S3 暗号化を実装するには、com.amazonaws.services.s3.model.EncryptionMaterialsProvider インターフェイスを使用します。
-
ローカルディスク暗号化を実装するには、com.amazonaws.services.elasticmapreduce.spi.security.EncryptionMaterialsProvider インターフェイスを使用します。
任意の戦略を使用して実装に暗号化マテリアルを提供できます。例えば、静的暗号化マテリアルを提供することも、より複雑な鍵管理システムと統合することも選択できます。
Amazon S3 暗号化を使用している場合は、カスタム暗号化マテリアルに暗号化アルゴリズム AES/GCM/NoPadding を使用する必要があります。
ローカルディスク暗号化を使用している場合、カスタム暗号化マテリアルに使用する暗号化アルゴリズムは EMR リリースによって異なります。Amazon EMR 7.0.0 以前では、AES/GCM/NoPadding を使用する必要があります。Amazon EMR 7.1.0 以降では、AES を使用する必要があります。
EncryptionMaterialsProvider クラスは、暗号化コンテキストによって暗号化マテリアルを取得します。Amazon EMR は、呼び出し元が返す正しい暗号化マテリアルを判別しやすいように、実行時に暗号化コンテキスト情報を設定します。
例: EMRFS での Amazon S3 の暗号化にカスタムキープロバイダを使用する
Amazon EMR が EncryptionMaterialsProvider クラスから暗号化マテリアルをフェッチして暗号化を実行するとき、EMRFS はオプションで materialsDescription 引数に 2 つのフィールド (オブジェクトの Amazon S3 URI とクラスターの JobFlowId) を設定します。これらを EncryptionMaterialsProvider クラスで使用して、暗号化マテリアルを選択的に返すことができます。
たとえば、プロバイダは Amazon S3 URI プレフィックスごとに異なるキーを返すことができます。最終的に Amazon S3 オブジェクトに保存されるのは、EMRFS によって生成され、プロバイダに渡される materialsDescription 値ではなく、返された暗号化マテリアルの記述です。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; } }
を使用したカスタムマテリアルプロバイダーの指定 AWS CLI
AWS CLIを使用するには、Encryption
、ProviderType
、CustomProviderClass
、および CustomProviderLocation
の各引数を emrfs
オプションに渡します。
aws emr create-cluster --instance-type m5.xlarge --release-label
emr-4.7.2 or earlier
--emrfs Encryption=ClientSide,ProviderType=Custom,CustomProviderLocation=s3://amzn-s3-demo-bucket/myfolder/provider.jar,CustomProviderClass=classname
Encryption
を ClientSide
に設定すると、クライアント側の暗号化が有効になります。CustomProviderClass
は EncryptionMaterialsProvider
オブジェクトの名前を表します。また、CustomProviderLocation
は、ローカルまたは Amazon S3 のロケーションを示しています。この場所から Amazon EMR が CustomProviderClass
をクラスター内の各ノードにコピーし、クラスパスに配置します。
SDK を使用してカスタムマテリアルプロバイダーを指定する
SDK を使用するには、プロパティ fs.s3.cse.encryptionMaterialsProvider.uri
を設定し、Amazon S3 に保存するカスタム EncryptionMaterialsProvider
クラスをクラスター内の各ノードにダウンロードします。これは、emrfs-site.xml
ファイルで設定します。このとき、CSE を有効にして、カスタムプロバイダーの適切な場所も指定します。
例えば、RunJobFlowRequest AWS SDK for Java を使用する では、コードは次のようになります。
<snip> Map<String,String> emrfsProperties = new HashMap<String,String>(); emrfsProperties.put("fs.s3.cse.encryptionMaterialsProvider.uri","s3://amzn-s3-demo-bucket/MyCustomEncryptionMaterialsProvider.jar"); emrfsProperties.put("fs.s3.cse.enabled","true"); emrfsProperties.put("fs.s3.consistent","true"); emrfsProperties.put("fs.s3.cse.encryptionMaterialsProvider","full.class.name.of.EncryptionMaterialsProvider"); Configuration myEmrfsConfig = new Configuration() .withClassification("emrfs-site") .withProperties(emrfsProperties); RunJobFlowRequest request = new RunJobFlowRequest() .withName("Custom EncryptionMaterialsProvider") .withReleaseLabel("
emr-7.9.0
") .withApplications(myApp) .withConfigurations(myEmrfsConfig) .withServiceRole("EMR_DefaultRole_V2") .withJobFlowRole("EMR_EC2_DefaultRole") .withLogUri("s3://myLogUri
/") .withInstances(new JobFlowInstancesConfig() .withEc2KeyName("myEc2Key
") .withInstanceCount(2) .withKeepJobFlowAliveWhenNoSteps(true) .withMasterInstanceType("m5.xlarge") .withSlaveInstanceType("m5.xlarge") ); RunJobFlowResult result = emr.runJobFlow(request); </snip>
引数を使用するカスタム EncryptionMaterialsProvider
プロバイダーに直接引数を渡す必要がある場合があります。これを行うには、プロパティとして定義されたカスタム引数を持つ emrfs-site
設定分類を使用できます。設定例を次に示します。これは、ファイル myConfig.json
として保存されます。
[ { "Classification": "emrfs-site", "Properties": { "myProvider.arg1":"value1", "myProvider.arg2":"value2" } } ]
から create-cluster
コマンドを使用すると AWS CLI、次に示すように --configurations
オプションを使用して ファイルを指定できます。
aws emr create-cluster --release-label
--instance-type
emr-7.9.0
m5.xlarge
--instance-count2
--configurations file://myConfig.json --emrfs Encryption=ClientSide,CustomProviderLocation=s3://amzn-s3-demo-bucket/myfolder/myprovider.jar
,CustomProviderClass=classname
EMRFS S3EC V2 サポートを設定する
S3 Java SDK リリース (1.11.837 以降) では、さまざまなセキュリティ機能拡張がある暗号化クライアントバージョン 2 (S3EC V2) がサポートされます。詳細については、S3 のブログ投稿「Updates to the Amazon S3 encryption client
下位互換性を保つため、暗号化クライアント V1 は SDK で引き続き使用できます。デフォルトでは、CSE が有効になっている場合、EMRFS は S3EC V1 を使用して S3 オブジェクトを暗号化および復号します。
S3EC V2 で暗号化された S3 オブジェクトは、リリースバージョンが emr-5.31.0 より前 (emr-5.30.1 以前、emr-6.1.0 以前) の EMR クラスターでは、EMRFS によって復号化できません。
例 S3EC V2 を使用するように EMRFS を設定する
S3EC V2 を使用するように EMRFS を設定するには、次の設定を追加します。
{ "Classification": "emrfs-site", "Properties": { "fs.s3.cse.encryptionV2.enabled": "true" } }
Amazon S3 クライアント側暗号化の emrfs-site.xml
プロパティ
プロパティ | デフォルト値 | 説明 |
---|---|---|
fs.s3.cse.enabled |
false |
|
fs.s3.cse.encryptionV2.enabled |
false |
|
fs.s3.cse.encryptionMaterialsProvider.uri |
N/A |
カスタム暗号化マテリアルを使用するときに適用されます。EncryptionMaterialsProvider を指定する JAR が保存されている Amazon S3 URI を意味します。この URI を指定すると、Amazon EMR により JAR がクラスター内のすべてのノードに自動的にダウンロードされます。 |
fs.s3.cse.encryptionMaterialsProvider |
N/A |
クライアント側の暗号化で使用される |
fs.s3.cse.materialsDescription.enabled |
false |
|
fs.s3.cse.kms.keyId |
N/A |
CSE-KMS を使用するときに適用されます。暗号化に使用する KMS キーの KeyId、ARN、またはエイリアスの値を示しています。 |
fs.s3.cse.cryptoStorageMode |
ObjectMetadata |
Amazon S3 ストレージモード。デフォルトでは、暗号化情報の説明はオブジェクトメタデータに保存されます。インストラクションファイルに説明を保存することもできます。有効な値は、ObjectMetadata と InstructionFile です。詳細については、「 によるクライアント側のデータ暗号化 AWS SDK for Java 」およびAmazon S3 |