Enkripsi di sisi klien Amazon S3 - Amazon EMR

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Enkripsi di sisi klien Amazon S3

Dengan enkripsi sisi klien Amazon S3, enkripsi dan dekripsi Amazon S3 berlangsung di klien di cluster Anda. EMRFS Objek dienkripsi sebelum diunggah ke Amazon S3 dan didekripsi setelah diunduh. Penyedia yang Anda tentukan menyediakan kunci enkripsi yang digunakan klien. Klien dapat menggunakan kunci yang disediakan oleh AWS KMS (CSE-KMS) atau kelas Java kustom yang menyediakan kunci root sisi klien (CSE-C). Spesifikasi enkripsi sedikit berbeda antara CSE - KMS dan CSE -C, tergantung pada penyedia yang ditentukan dan metadata objek yang didekripsi atau dienkripsi. Untuk informasi selengkapnya tentang perbedaan ini, lihat Melindungi data menggunakan enkripsi sisi klien di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon.

catatan

Amazon S3 CSE hanya memastikan bahwa EMRFS data yang dipertukarkan dengan Amazon S3 dienkripsi; tidak semua data pada volume instans cluster dienkripsi. Selain itu, karena Hue tidak menggunakanEMRFS, objek yang ditulis oleh Browser File Hue S3 ke Amazon S3 tidak dienkripsi.

Untuk menentukan CSE - KMS untuk EMRFS data di Amazon S3 menggunakan AWS CLI
  • Ketik perintah berikut dan ganti MyKMSKeyID dengan ID Kunci atau ARN KMS kunci yang akan digunakan:

    aws emr create-cluster --release-label emr-4.7.2 or earlier --emrfs Encryption=ClientSide,ProviderType=KMS,KMSKeyId=MyKMSKeyId

Membuat penyedia kunci khusus

Bergantung pada jenis enkripsi yang Anda gunakan saat membuat penyedia kunci khusus, aplikasi juga harus menerapkan EncryptionMaterialsProvider antarmuka yang berbeda. Kedua antarmuka tersedia dalam versi AWS SDK untuk Java 1.11.0 dan yang lebih baru.

Anda dapat menggunakan strategi apa pun untuk menyediakan materi enkripsi untuk implementasi. Misalnya, Anda dapat memilih untuk menyediakan materi enkripsi statis atau mengintegrasikan dengan sistem manajemen kunci yang lebih kompleks.

Jika Anda menggunakan enkripsi Amazon S3, Anda harus menggunakan algoritme enkripsi AES/GCM/NoPaddinguntuk materi enkripsi khusus.

Jika Anda menggunakan enkripsi disk lokal, algoritme enkripsi yang digunakan untuk materi enkripsi kustom bervariasi menurut EMR rilis. Untuk Amazon EMR 7.0.0 dan yang lebih rendah, Anda harus menggunakan. AES/GCM/NoPadding Untuk Amazon EMR 7.1.0 dan yang lebih tinggi, Anda harus menggunakan AES.

EncryptionMaterialsProvider Kelas mendapatkan materi enkripsi dengan konteks enkripsi. Amazon EMR mengisi informasi konteks enkripsi saat runtime untuk membantu penelepon menentukan materi enkripsi yang benar untuk dikembalikan.

contoh Contoh: Menggunakan penyedia kunci khusus untuk enkripsi Amazon S3 dengan EMRFS

Saat Amazon EMR mengambil materi enkripsi dari EncryptionMaterialsProvider kelas untuk melakukan enkripsi, EMRFS secara opsional mengisi materialsDescription argumen dengan dua bidang: Amazon S3 URI untuk objek dan cluster, yang dapat digunakan oleh EncryptionMaterialsProvider kelas untuk mengembalikan materi enkripsi secara selektif. JobFlowId

Misalnya, penyedia dapat mengembalikan kunci yang berbeda untuk awalan Amazon S3 URI yang berbeda. Ini adalah deskripsi materi enkripsi yang dikembalikan yang akhirnya disimpan dengan objek Amazon S3 daripada materialsDescription nilai yang dihasilkan oleh EMRFS dan diteruskan ke penyedia. Saat mendekripsi objek Amazon S3, deskripsi bahan enkripsi diteruskan ke EncryptionMaterialsProvider kelas, sehingga dapat, sekali lagi, secara selektif mengembalikan kunci yang cocok untuk mendekripsi objek.

Implementasi EncryptionMaterialsProvider referensi disediakan di bawah ini. Penyedia kustom lain EMRFSRSAEncryptionMaterialsProvider,, tersedia dari GitHub.

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; } }

Menentukan penyedia bahan khusus menggunakan AWS CLI

Untuk menggunakan AWS CLI, teruskan argumen Encryption, ProviderType, CustomProviderClass, dan CustomProviderLocation ke opsi 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

Pengaturan Encryption untuk ClientSide mengaktifkan enkripsi sisi klien, CustomProviderClass adalah nama EncryptionMaterialsProvider objek Anda, dan CustomProviderLocation merupakan lokasi lokal atau Amazon S3 dari mana EMR Amazon CustomProviderClass menyalin ke setiap node di cluster dan menempatkannya di classpath.

Menentukan penyedia bahan kustom menggunakan SDK

Untuk menggunakanSDK, Anda dapat mengatur properti fs.s3.cse.encryptionMaterialsProvider.uri untuk mengunduh EncryptionMaterialsProvider kelas khusus yang Anda simpan di Amazon S3 ke setiap node di cluster Anda. Anda mengonfigurasi ini dalam emrfs-site.xml file bersama dengan CSE diaktifkan dan lokasi yang tepat dari penyedia kustom.

Misalnya, dalam AWS SDK for Java penggunaan RunJobFlowRequest, kode Anda mungkin terlihat seperti berikut:

<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.3.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>

Kustom EncryptionMaterialsProvider dengan argumen

Anda mungkin perlu menyampaikan argumen langsung ke penyedia. Untuk melakukannya, Anda dapat menggunakan klasifikasi konfigurasi emrfs-site dengan argumen khusus yang didefinisikan sebagai properti. Contoh konfigurasi ditunjukkan di bawah ini, yang mana disimpan sebagai file, myConfig.json:

[ { "Classification": "emrfs-site", "Properties": { "myProvider.arg1":"value1", "myProvider.arg2":"value2" } } ]

Menggunakan create-cluster perintah dari AWS CLI, Anda dapat menggunakan --configurations opsi untuk menentukan file seperti yang ditunjukkan di bawah ini:

aws emr create-cluster --release-label emr-7.3.0 --instance-type m5.xlarge --instance-count 2 --configurations file://myConfig.json --emrfs Encryption=ClientSide,CustomProviderLocation=s3://amzn-s3-demo-bucket/myfolder/myprovider.jar,CustomProviderClass=classname

Mengkonfigurasi dukungan EMRFS S3EC V2

SDKRilis S3 Java (1.11.837 dan yang lebih baru) mendukung klien enkripsi Versi 2 (S3EC V2) dengan berbagai peningkatan keamanan. Untuk informasi selengkapnya, lihat postingan blog S3 Pembaruan untuk klien enkripsi Amazon S3. Juga, lihat migrasi klien enkripsi Amazon S3 di Panduan AWS SDK for Java Pengembang.

Klien enkripsi V1 masih tersedia di SDK untuk kompatibilitas mundur. Secara default EMRFS akan menggunakan S3EC V1 untuk mengenkripsi dan mendekripsi objek S3 jika diaktifkan. CSE

Objek S3 yang dienkripsi dengan S3EC V2 tidak dapat didekripsi oleh EMRFS pada EMR cluster yang versi rilisnya lebih awal dari emr-5.31.0 (emr-5.30.1 dan sebelumnya, emr-6.1.0 dan sebelumnya).

contoh Konfigurasikan EMRFS untuk menggunakan S3EC V2

Untuk mengkonfigurasi EMRFS untuk menggunakan S3EC V2, tambahkan konfigurasi berikut:

{ "Classification": "emrfs-site", "Properties": { "fs.s3.cse.encryptionV2.enabled": "true" } }

emrfs-site.xml Properti untuk enkripsi di sisi klien Amazon S3

Properti Nilai default Deskripsi
fs.s3.cse.enabled false

Saat disetel ketrue, EMRFS objek yang disimpan di Amazon S3 dienkripsi menggunakan enkripsi sisi klien.

fs.s3.cse.encryptionV2.enabled false

Ketika diatur ketrue, EMRFS menggunakan klien enkripsi S3 Versi 2 untuk mengenkripsi dan mendekripsi objek pada S3. Tersedia untuk EMR versi 5.31.0 dan yang lebih baru.

fs.s3.cse.encryptionMaterialsProvider.uri N/A Berlaku saat menggunakan materi enkripsi khusus. Amazon S3 URI tempat JAR dengan EncryptionMaterialsProvider berada. Saat Anda menyediakan iniURI, Amazon EMR secara otomatis mengunduh JAR ke semua node di cluster.
fs.s3.cse.encryptionMaterialsProvider N/A

Jalur kelas EncryptionMaterialsProvider yang digunakan dengan enkripsi di sisi klien. Saat menggunakan CSE -KMS, tentukancom.amazon.ws.emr.hadoop.fs.cse.KMSEncryptionMaterialsProvider.

fs.s3.cse.materialsDescription.enabled false

Ketika diatur ketrue, mengisi objek materialsDescription terenkripsi dengan Amazon S3 URI untuk objek dan file. JobFlowId Setel ke true saat menggunakan materi enkripsi khusus.

fs.s3.cse.kms.keyId N/A

Berlaku saat menggunakan CSE -KMS. Nilai KeyId,ARN, atau alias KMS kunci yang digunakan untuk enkripsi.

fs.s3.cse.cryptoStorageMode ObjectMetadata

Mode penyimpanan Amazon S3. Secara default, deskripsi informasi enkripsi akan disimpan dalam metadata objek. Anda juga dapat menyimpan deskripsi dalam file instruksi. Nilai yang valid adalah ObjectMetadata danInstructionFile. Untuk informasi selengkapnya, lihat Enkripsi data sisi klien dengan Amazon S3 AWS SDK for Java dan Amazon.