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 dilakukan di klien EMRFS pada klaster Anda. 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 data EMRFS yang dipertukarkan dengan Amazon S3 dienkripsi; tidak semua data pada volume instans klaster dienkripsi. Lebih lanjut, karena Hue tidak menggunakan EMRFS, objek yang ditulis oleh Peramban Berkas Hue S3 ke Amazon S3 tidak dienkripsi.

Untuk menentukan CSE-KMS untuk data EMRFS di Amazon S3 menggunakan AWS CLI
  • Ketik perintah berikut dan ganti MyKMSKeyID dengan ID Kunci atau ARN dari kunci KMS 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 di AWS SDK for Java versi 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 bahan enkripsi khusus bervariasi menurut rilis EMR. 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 pada waktu aktif untuk membantu pemanggil dalam 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 argumen MaterialsDescription dengan dua bidang: URI Amazon S3 untuk objek dan cluster, yang dapat digunakan oleh kelas untuk mengembalikan materi enkripsi secara JobFlowId selektif. EncryptionMaterialsProvider

Misalnya, penyedia dapat mengembalikan kunci yang berbeda untuk prefiks URI Amazon S3 yang berbeda. Ini adalah deskripsi materi enkripsi yang dikembalikan yang pada akhirnya disimpan dengan objek Amazon S3 bukan nilai materialsDescription 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 Amazon EMR CustomProviderClass menyalin ke setiap node di cluster dan menempatkannya di classpath.

Menentukan penyedia materi khusus menggunakan SDK

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

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

Rilis S3 Java SDK (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 CSE diaktifkan.

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

contoh Konfigurasikan EMRFS untuk menggunakan S3EC V2

Untuk mengonfigurasi EMRFS agar S3EC V2 dapat digunakan, 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

Jika disetel ke true, objek EMRFS yang disimpan di Amazon S3 dienkripsi menggunakan enkripsi di sisi klien.

fs.s3.cse.encryptionV2.enabled false

Jika disetel ke true, EMRFS menggunakan klien enkripsi S3 Versi 2 untuk mengenkripsi dan mendekripsi objek di 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. URI Amazon S3 tempat JAR dengan EncryptionMaterialsProvider berada. Saat Anda menyediakan URI ini, Amazon EMR secara otomatis mengunduh JAR ke semua simpul dalam klaster.
fs.s3.cse.encryptionMaterialsProvider N/A

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

fs.s3.cse.materialsDescription.enabled false

Saat disetel ketrue, isi MaterialsDescription objek terenkripsi dengan URI Amazon S3 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 kunci KMS 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.