Membuat kunci dan sertifikat untuk enkripsi data - Amazon EMR

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

Membuat kunci dan sertifikat untuk enkripsi data

Sebelum Anda menentukan opsi enkripsi menggunakan konfigurasi keamanan, putuskan penyedia yang ingin Anda gunakan untuk kunci dan artefak enkripsi. Misalnya, Anda dapat menggunakan AWS KMS atau penyedia kustom yang Anda buat. Selanjutnya, membuat kunci atau penyedia kunci seperti yang dijelaskan di bagian ini.

Menyediakan kunci untuk mengenkripsi data saat istirahat dengan Amazon EMR

Anda dapat menggunakan AWS Key Management Service (AWS KMS) atau penyedia kunci khusus untuk enkripsi data saat istirahat di AmazonEMR. Saat Anda menggunakan AWS KMS, biaya berlaku untuk penyimpanan dan penggunaan kunci enkripsi. Untuk informasi selengkapnya, lihat harga AWS KMS.

Topik ini memberikan detail kebijakan KMS utama untuk kunci yang akan digunakan dengan AmazonEMR, serta pedoman dan contoh kode untuk menulis kelas penyedia kunci khusus untuk enkripsi Amazon S3. Untuk informasi selengkapnya tentang pembuatan kunci, lihat Membuat Kunci di AWS Key Management Service Panduan Developer.

Menggunakan AWS KMS keys untuk enkripsi

Kunci AWS KMS enkripsi harus dibuat di Wilayah yang sama dengan instans EMR cluster Amazon Anda dan bucket Amazon S3 yang digunakan. EMRFS Jika kunci yang Anda tentukan berada di akun yang berbeda dari yang Anda gunakan untuk mengkonfigurasi cluster, Anda harus menentukan kunci yang menggunakannyaARN.

Peran untuk profil EC2 instans Amazon harus memiliki izin untuk menggunakan KMS kunci yang Anda tentukan. Peran default untuk profil instans di Amazon EMR adalahEMR_EC2_DefaultRole. Jika Anda menggunakan peran berbeda untuk profil instans, atau Anda menggunakan IAM peran untuk EMRFS permintaan ke Amazon S3, pastikan setiap peran ditambahkan sebagai pengguna kunci yang sesuai. Ini memberikan izin peran untuk menggunakan KMS kunci. Untuk informasi selengkapnya, lihat Menggunakan Kebijakan Utama di Panduan AWS Key Management Service Pengembang dan Mengonfigurasi IAM peran untuk EMRFS permintaan ke Amazon S3.

Anda dapat menggunakan AWS Management Console untuk menambahkan profil instans atau profil EC2 instans ke daftar pengguna kunci untuk KMS kunci yang ditentukan, atau Anda dapat menggunakan AWS CLI atau AWS SDK untuk melampirkan kebijakan kunci yang sesuai.

Perhatikan bahwa Amazon hanya EMR mendukung KMSkunci simetris. Anda tidak dapat menggunakan KMSkunci asimetris untuk mengenkripsi data saat istirahat di klaster AmazonEMR. Untuk bantuan menentukan apakah KMS kunci simetris atau asimetris, lihat Mengidentifikasi kunci simetris dan asimetris. KMS

Prosedur di bawah ini menjelaskan cara menambahkan profil EMR instans Amazon default, EMR_EC2_DefaultRole sebagai pengguna utama yang menggunakan AWS Management Console. Ini mengasumsikan bahwa Anda telah membuat KMS kunci. Untuk membuat KMS kunci baru, lihat Membuat Kunci di Panduan AWS Key Management Service Pengembang.

Untuk menambahkan profil EC2 instance untuk Amazon EMR ke daftar pengguna kunci enkripsi
  1. Masuk ke AWS Management Console dan buka konsol AWS Key Management Service (AWS KMS) di https://console.aws.amazon.com/kms.

  2. Untuk mengubah Wilayah AWS, gunakan pemilih Wilayah di sudut kanan atas halaman.

  3. Pilih alias KMS tombol untuk memodifikasi.

  4. Pada halaman detail kunci di bawah Pengguna Kunci, pilih Tambahkan.

  5. Di kotak dialog Tambah pengguna kunci, pilih peran yang sesuai. Nama peran default adalah EMR_EC2_DefaultRole.

  6. Pilih Tambahkan.

Mengaktifkan EBS enkripsi dengan memberikan izin tambahan untuk kunci KMS

Dimulai dengan Amazon EMR versi 5.24.0, Anda dapat mengenkripsi perangkat EBS root dan volume penyimpanan dengan menggunakan opsi konfigurasi keamanan. Untuk mengaktifkan opsi tersebut, Anda harus menentukan AWS KMS sebagai penyedia kunci Anda. Selain itu, Anda harus memberikan peran layanan EMR_DefaultRole dengan izin untuk menggunakan AWS KMS key yang Anda tentukan.

Anda dapat menggunakan AWS Management Console untuk menambahkan peran layanan ke daftar pengguna kunci untuk KMS kunci yang ditentukan, atau Anda dapat menggunakan AWS CLI atau AWS SDK untuk melampirkan kebijakan kunci yang sesuai.

Prosedur berikut menjelaskan cara menggunakan AWS Management Console untuk menambahkan peran EMR layanan Amazon default EMR_DefaultRole sebagai pengguna kunci. Ini mengasumsikan bahwa Anda telah membuat KMS kunci. Untuk membuat KMS kunci baru, lihat Membuat kunci di Panduan AWS Key Management Service Pengembang.

Untuk menambahkan peran EMR layanan Amazon ke daftar pengguna kunci enkripsi
  1. Masuk ke AWS Management Console dan buka konsol AWS Key Management Service (AWS KMS) di https://console.aws.amazon.com/kms.

  2. Untuk mengubah Wilayah AWS, gunakan pemilih Wilayah di sudut kanan atas halaman.

  3. Pilih Kunci terkelola pelanggan di bilah sisi kiri.

  4. Pilih alias KMS tombol untuk memodifikasi.

  5. Pada halaman detail kunci di bawah Pengguna Kunci, pilih Tambahkan.

  6. Di bagian Tambah pengguna kunci, pilih peran yang sesuai. Nama peran layanan default untuk Amazon EMR adalahEMR_DefaultRole.

  7. Memilih Tambahkan.

Membuat penyedia kunci kustom

Bila menggunakan konfigurasi keamanan, Anda harus menentukan nama kelas penyedia yang berbeda untuk enkripsi disk lokal dan enkripsi Amazon S3. Persyaratan untuk penyedia kunci khusus bergantung pada apakah Anda menggunakan enkripsi disk lokal dan enkripsi Amazon S3, serta versi EMR rilis Amazon.

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

Menyediakan sertifikat untuk mengenkripsi data dalam perjalanan dengan enkripsi Amazon EMR

Dengan versi EMR rilis Amazon 4.8.0 atau yang lebih baru, Anda memiliki dua opsi untuk menentukan artefak untuk mengenkripsi data dalam perjalanan menggunakan konfigurasi keamanan:

  • Anda dapat membuat PEM sertifikat secara manual, memasukkannya ke dalam file.zip, dan kemudian mereferensikan file.zip di Amazon S3.

  • Anda dapat menerapkan penyedia sertifikat kustom sebagai kelas Java. Anda menentukan JAR file aplikasi di Amazon S3, dan kemudian memberikan nama kelas lengkap penyedia seperti yang dinyatakan dalam aplikasi. Kelas harus mengimplementasikan TLSArtifactsProviderantarmuka yang tersedia dimulai dengan AWS SDK for Java versi 1.11.0.

Amazon EMR secara otomatis mengunduh artefak ke setiap node di cluster dan kemudian menggunakannya untuk mengimplementasikan fitur enkripsi open-source dan in-transit. Untuk informasi lebih lanjut tentang menambahkan opsi, lihat Enkripsi bergerak.

Menggunakan PEM sertifikat

Saat Anda menentukan file.zip untuk enkripsi dalam transit, konfigurasi keamanan mengharapkan PEM file dalam file.zip diberi nama persis seperti yang muncul di bawah ini:

Sertifikat enkripsi dalam transit
Nama file Diperlukan/opsional Detail
privateKey.pem Diperlukan Kunci privat
certificateChain.pem Diperlukan Rantai sertifikat
trustedCertificates.pem Opsional Diperlukan jika sertifikat yang disediakan tidak ditandatangani oleh salah satu otoritas sertifikasi (CA) root yang dipercaya default Java atau CA menengah yang dapat menautkan ke CA root yang dipercaya default Java. Root tepercaya default Java CAs dapat ditemukan dijre/lib/security/cacerts.

Anda mungkin ingin mengonfigurasi PEM file kunci pribadi menjadi sertifikat wildcard yang memungkinkan akses ke VPC domain Amazon tempat instance cluster Anda berada. Misalnya, jika klaster Anda berada di us-east-1 (N. Virginia), Anda bisa menentukan nama umum di konfigurasi sertifikat yang mengizinkan akses ke klaster dengan menentukan CN=*.ec2.internal di definisi subjek sertifikat. Jika klaster Anda berada di us-west-2 (Oregon), Anda dapat menentukan CN=*.us-west-2.compute.internal.

Jika PEM file yang disediakan dalam artefak enkripsi tidak memiliki karakter wildcard di CN untuk domain, Anda harus mengubah nilai to. hadoop.ssl.hostname.verifier ALLOW_ALL Hal ini dilakukan dengan klasifikasi core-site ketika mengirimkan konfigurasi ke klaster atau dengan menambahkan nilai ini di file core-site.xml. Perubahan ini diperlukan karena verifier nama host default tidak akan menerima nama host tanpa wildcard, yang akan mengakibatkan kesalahan. Untuk informasi selengkapnya tentang konfigurasi EMR klaster dalam AmazonVPC, lihatKonfigurasikan jaringan di a VPC untuk Amazon EMR.

Contoh berikut menunjukkan cara menggunakan Open SSL untuk menghasilkan sertifikat X.509 yang ditandatangani sendiri dengan kunci pribadi 1024-bit. RSA Kunci ini memungkinkan akses ke instance EMR klaster Amazon penerbit di Wilayah us-west-2 (Oregon) sebagaimana ditentukan oleh nama *.us-west-2.compute.internal domain sebagai nama umum.

Item subjek opsional lainnya, seperti negara (C), negara bagian (S), dan Lokal (L), ditentukan. Karena sertifikat yang bertandatangan sendiri dibuat, perintah kedua di contoh salinan certificateChain.pem file ke trustedCertificates.pem file. Perintah ketiga menggunakan zip untuk membuat file my-certs.zip yang berisi sertifikat.

penting

Contoh ini hanya proof-of-concept demonstrasi. Menggunakan sertifikat yang bertandatangan sendiri tidak direkomendasikan dan menimbulkan risiko keamanan potensial. Untuk sistem produksi, gunakan otoritas sertifikasi (CA) untuk menerbitkan sertifikat.

$ 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