Enkripsi Disk dengan KMS CMK - Amazon EMR

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

Enkripsi Disk dengan KMS CMK

EMR Tanpa Server mengenkripsi semua disk yang dilampirkan ke pekerja secara default menggunakan kunci enkripsi milik layanan. Anda dapat memilih untuk mengenkripsi disk ini menggunakan kunci terkelola AWS KMS pelanggan Anda sendiri (). CMKs Ini memberi Anda kontrol lebih besar atas kunci enkripsi Anda, termasuk kemampuan untuk membuat dan memelihara kebijakan utama, dan mengaudit penggunaan kunci.

Anda dapat mengonfigurasi enkripsi disk baik saat membuat aplikasi atau saat mengirimkan pekerjaan individual. Ketika diaktifkan di tingkat aplikasi, semua pekerjaan pada aplikasi tersebut mewarisi pengaturan enkripsi. Anda juga dapat mengganti default aplikasi dengan menentukan konfigurasi enkripsi disk saat mengirimkan pekerjaan.

catatan

EMR Enkripsi disk tanpa server hanya mendukung kunci KMS simetris. Tombol KMS asimetris tidak didukung. Anda harus menggunakan kunci KMS enkripsi simetris yang dibuat di. AWS KMS Untuk informasi lebih lanjut tentang AWS KMS, lihat Apa itu AWS KMS?

Menggunakan Konteks Enkripsi

Secara opsional, EMR Serverless menggunakan konteks enkripsi untuk menyediakan data otentikasi tambahan untuk operasi enkripsi. Konteks enkripsi adalah sekumpulan pasangan kunci-nilai yang dapat berisi data otentikasi tambahan non-rahasia. Konteks enkripsi terikat secara kriptografis ke data terenkripsi, sehingga konteks enkripsi yang sama diperlukan untuk mendekripsi data.

Di EMR Tanpa Server, Anda dapat menentukan konteks enkripsi khusus saat mengonfigurasi enkripsi disk. Konteks enkripsi ini disertakan dalam AWS CloudTrail log untuk membantu Anda mengidentifikasi dan memahami operasi KMS Anda.

catatan

Jangan menyimpan informasi sensitif dalam konteks enkripsi seperti yang muncul di plaintext di AWS CloudTrail log.

Mengkonfigurasi Enkripsi Disk dengan Kunci yang Dikelola Pelanggan

CreateApplication

Untuk mengenkripsi disk dengan kunci KMS Anda sendiri, sertakan diskEncryptionConfiguration parameter saat membuat aplikasi EMR Tanpa Server.

aws emr-serverless create-application \ --type TYPE \ --name APPLICATION_ID \ --release-label RELEASE_LABEL \ --region AWS_REGION \ --disk-encryption-configuration '{ "encryptionKeyArn": "key-arn", "encryptionContext": { "key": "value" } }'

UpdateApplication

Untuk memperbarui konteks enkripsi and/or ARN kunci KMS, tentukan diskEncryptionConfiguration parameter dengan nilai baru saat memperbarui aplikasi.

aws emr-serverless update-application \ --name APPLICATION_ID \ --region AWS_REGION \ --disk-encryption-configuration '{ "encryptionKeyArn": "key-arn", "encryptionContext": { "key": "value" } }'
catatan

Untuk menghapus enkripsi disk yang dikonfigurasi pada aplikasi, berikan kosong diskEncryptionConfiguration selama pembaruan aplikasi.

StartJobRun

Untuk mengenkripsi disk dengan kunci KMS Anda sendiri, gunakan diskEncryptionConfiguration konfigurasi saat Anda mengirimkan pekerjaan.

--configuration-overrides '{ "diskEncryptionConfiguration": { "encryptionKeyArn": "key-arn", "encryptionContext": { "key": "value" } } }'

Titik akhir Public Livy

Untuk mengenkripsi disk dengan kunci KMS Anda sendiri saat membuat sesi Spark melalui titik akhir Livy publik, tentukan konfigurasi enkripsi di objek sesi. conf

data = { "kind": "pyspark", "heartbeatTimeoutInSecond": 60, "conf": { "emr-serverless.session.executionRoleArn": "role_arn", "spark.emr-serverless.disk.encryptionKeyArn": "key-arn", "spark.emr-serverless.disk.encryptionContext": "key1:value1,key2:value2" # Optional } } # Send request to create a session with the Livy API endpoint request = AWSRequest(method='POST', url=endpoint + "/sessions", data=json.dumps(data), headers=headers)

Izin yang diperlukan untuk enkripsi disk

Izin kunci enkripsi untuk EMR Tanpa Server

Ketika Anda mengenkripsi disk dengan kunci enkripsi Anda sendiri, Anda harus mengkonfigurasi izin kunci KMS berikut untuk prinsipal: emr-serverless.amazonaws.com

  • kms:GenerateDataKey: Untuk menghasilkan kunci data untuk mengenkripsi volume disk

  • kms:Decrypt: Untuk mendekripsi kunci data saat mengakses konten disk terenkripsi

{ "Effect": "Allow", "Principal":{ "Service": "emr-serverless.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:emr-serverless:region:aws-account-id:/applications/application-id" }, "StringEquals": { "kms:EncryptionContext:applicationId": "application-id", "aws:SourceAccount": "aws-account-id" } } }

Sebagai praktik keamanan terbaik, kami menyarankan Anda menambahkan kunci aws:SourceArn kondisi ke kebijakan kunci KMS. Kunci kondisi global IAM aws:SourceArn membantu memastikan bahwa EMR Tanpa Server menggunakan kunci KMS hanya untuk ARN aplikasi. Selain itu, termasuk kunci aws:SourceAccount kondisi menyediakan lapisan keamanan lain dengan membatasi penggunaan kunci KMS Anda untuk permintaan yang berasal dari ID AWS akun yang ditentukan dalam kondisi.

Peran runtime pekerjaan harus memiliki izin berikut dalam kebijakan IAM-nya:

{ "Sid": "Enable GDK and Decrypt", "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "key-arn" } }

Izin pengguna yang diperlukan

Pengguna yang mengirimkan pekerjaan harus memiliki izin untuk menggunakan kunci. Anda dapat menentukan izin dalam kebijakan kunci KMS atau kebijakan IAM untuk pengguna, grup, atau peran. Jika pengguna yang mengirimkan pekerjaan tidak memiliki izin kunci KMS, EMR Tanpa Server menolak pengiriman job run.

Contoh kebijakan kunci

Kebijakan utama berikut memberikan izin untukkms:DescribeKey, kms:GenerateDataKey dankms:Decrypt:

  • kms:DescribeKey: Untuk memverifikasi bahwa kunci KMS yang dikelola pelanggan diaktifkan dan SIMETRIS sebelum menggunakannya.

{ "Sid": "Enable DescribeKey", "Effect": "Allow", "Principal":{ "AWS": "arn:aws:iam::111122223333:user/user-name" }, "Action": [ "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Enable GDK and Decrypt", "Effect": "Allow", "Principal":{ "AWS": "arn:aws:iam::111122223333:user/user-name" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "emr-serverless.region.amazonaws.com", "kms:EncryptionContext:key": "value" } } }

Sebagai praktik keamanan terbaik, kami menyarankan Anda menambahkan kunci kms:viaService kondisi ke kebijakan kunci KMS. Ini membatasi penggunaan kunci KMS untuk permintaan validasi hanya dari emr-serverless.

Contoh kebijakan IAM

Kebijakan IAM berikut memberikan izin untukkms:DescribeKey, kms:GenerateDataKey dan. kms:Decrypt

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "key-arn" } }

Pemantauan Penggunaan Kunci

Anda dapat memantau penggunaan kunci terkelola pelanggan Anda di EMR Tanpa Server melalui. AWS CloudTrail AWS CloudTrail menangkap semua panggilan API ke AWS KMS sebagai peristiwa, termasuk panggilan dari konsol EMR Tanpa Server, EMR API Tanpa Server, CLI, atau SDK. AWS AWS

Informasi yang diambil mencakup konteks enkripsi yang Anda tentukan, yang dapat membantu Anda mengidentifikasi dan mengaudit sumber daya EMR Tanpa Server tertentu yang menggunakan kunci KMS Anda. Misalnya, Anda mungkin melihat peristiwa yang mirip dengan yang berikut ini di AWS CloudTrail. Untuk informasi selengkapnya tentang penggunaan AWS CloudTrail, lihat Panduan AWS CloudTrail Pengguna.

GenerateDataKey

Contoh peristiwa untuk GenerateDataKey operasi saat EMR Serverless membuat volume disk terenkripsi

{ "eventVersion": "1.11", "userIdentity": { "type": "AWSService", "principalId": "user", "invokedBy": "AWS Internal" }, "eventTime": "2025-07-28T21:43:51Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-west-2", "sourceIPAddress": "ipAddress", "userAgent": "userAgent", "requestParameters": { "encryptionContext": { "applicationId": "test" }, "keyId": "arn:aws:kms:region:accountId:key/ffffffff-fffff-aaaaa-eeee-sample", "keySpec": "AES_256" }, "responseElements": null, "additionalEventData": { "keyMaterialId": "145c963debe558dfb01848d2a4539da940f3478852f86cfe2f52d5df796a5a02" }, "requestID": "cc9d1c5e-97c4-4a4f-ae7a-e576sample", "eventID": "0b0fef09-f28d-4da8-a5a1-17b74sample", "readOnly": true, "resources": [ { "accountId": "account", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:region:accountId:key/ffffffff-fffff-aaaaa-eeee-sample" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "accountId", "eventCategory": "Management" }

Dekripsi

Contoh peristiwa untuk operasi Dekripsi saat EMR Tanpa Server mengakses data terenkripsi.

{ "eventVersion": "1.11", "userIdentity": { "type": "AWSService", "principalId": "user", "invokedBy": "AWS Internal" }, "eventTime": "2025-07-28T21:43:51Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-west-2", "sourceIPAddress": "ipAddress", "userAgent": "userAgent", "requestParameters": { "encryptionContext": { "applicationId": "test" }, "keyId": "arn:aws:kms:region:accountId:key/ffffffff-fffff-aaaaa-eeee-sample", "keySpec": "AES_256" }, "responseElements": null, "additionalEventData": { "keyMaterialId": "145c963debe558dfb01848d2a4539da940f3478852f86cfe2f52d5df796a5a02" }, "requestID": "cc9d1c5e-97c4-4a4f-ae7a-e576sample", "eventID": "0b0fef09-f28d-4da8-a5a1-17b74sample", "readOnly": true, "resources": [ { "accountId": "account", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:region:accountId:key/ffffffff-fffff-aaaaa-eeee-sample" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "accountId", "eventCategory": "Management" }

Pelajari Lebih Lanjut

Sumber daya berikut memberikan informasi lebih lanjut tentang enkripsi data saat istirahat.