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.
-
Untuk mengimplementasikan enkripsi disk lokal, gunakan com.amazonaws.services.elasticmapreduce.spi.security. EncryptionMaterialsProvider antarmuka.
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
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
--instance-type
emr-7.6.0
m5.xlarge
--instance-count2
--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
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 |
fs.s3.cse.encryptionV2.enabled |
false |
Jika disetel ke |
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 |
fs.s3.cse.materialsDescription.enabled |
false |
Saat disetel ke |
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 |