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 at rest dengan Amazon EMR

Anda dapat menggunakan AWS Key Management Service (AWS KMS) atau penyedia kunci khusus untuk enkripsi data saat istirahat di Amazon EMR. 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 utama untuk kunci KMS yang akan digunakan dengan Amazon EMR, 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 cluster EMR Amazon Anda dan bucket Amazon S3 yang digunakan dengan EMRFS. Jika kunci yang Anda tentukan berada di akun yang berbeda dari yang Anda gunakan untuk mengkonfigurasi klaster, Anda harus menentukan kunci menggunakan ARN-nya.

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

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

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

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

Untuk menambahkan profil instans EC2 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 tombol KMS 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 enkripsi EBS dengan memberikan izin tambahan untuk kunci KMS

Dimulai dengan Amazon EMR versi 5.24.0, Anda dapat mengenkripsi perangkat root EBS 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 kunci KMS yang ditentukan, atau Anda dapat menggunakan atau AWS SDK untuk melampirkan kebijakan kunci yang sesuai. AWS CLI

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

Untuk menambahkan peran layanan EMR 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 tombol KMS 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 adalah. EMR_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 rilis Amazon EMR.

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 NoPaddingAES/GCM/ untuk 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; } }

Memberikan sertifikat untuk mengenkripsi data dalam transit dengan enkripsi Amazon EMR

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

  • Anda dapat secara manual membuat sertifikat PEM, termasuk mereka di file .zip, dan kemudian referensi file .zip di Amazon S3.

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

Amazon EMR secara otomatis mengunduh artefak ke setiap simpul di klaster dan versi terbaru menggunakannya untuk menerapkan fitur enkripsi dalam transit sumber daya terbuka. Untuk informasi lebih lanjut tentang menambahkan opsi, lihat Enkripsi dalam transit.

Menggunakan sertifikat PEM

Ketika Anda menetapkan file .zip untuk enkripsi dalam transit, konfigurasi keamanan mengharapkan file PEM di file .zip harus 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. CA root yang dipercaya default Java dapat ditemukan di jre/lib/security/cacerts.

Anda mungkin ingin mengonfigurasi file PEM kunci privat menjadi sertifikat wildcard yang mengizinkan akses ke domain Amazon VPC di mana instans klaster 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 file PEM disediakan di artefak enkripsi tidak memiliki karakter wildcard di CN untuk domain, Anda harus mengubah nilai hadoop.ssl.hostname.verifier ke 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 klaster EMR dalam VPC Amazon, lihat. Mengkonfigurasi jaringan

Contoh berikut menunjukkan cara menggunakan OpenSSL untuk membuat sertifikat X.509 yang bertandatangan sendiri dengan kunci privat RSA 1024-bit. Kunci ini memungkinkan akses ke instance cluster Amazon EMR penerbit di us-west-2 Wilayah (Oregon) sebagaimana ditentukan oleh nama domain sebagai *.us-west-2.compute.internal 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