Enkripsi data log di CloudWatch Log menggunakan AWS Key Management Service - CloudWatch Log Amazon

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

Enkripsi data log di CloudWatch Log menggunakan AWS Key Management Service

Data grup log selalu dienkripsi di CloudWatch Log. Secara default, CloudWatch Log menggunakan enkripsi sisi server dengan 256-bit Advanced Encryption Standard Galois/Counter Mode (AES-) untuk mengenkripsi data log saat istirahat. GCM Sebagai alternatif, Anda dapat menggunakan AWS Key Management Service enkripsi ini. Jika Anda melakukannya, enkripsi dilakukan dengan menggunakan AWS KMS kunci. Penggunaan enkripsi AWS KMS diaktifkan pada tingkat grup log, dengan mengaitkan KMS kunci dengan grup log, baik saat Anda membuat grup log atau setelah ada.

penting

CloudWatch Log sekarang mendukung konteks enkripsi, menggunakan kms:EncryptionContext:aws:logs:arn sebagai kunci dan grup log sebagai nilai untuk kunci itu. ARN Jika Anda memiliki grup log yang telah dienkripsi dengan KMS kunci, dan Anda ingin membatasi kunci yang akan digunakan dengan satu akun dan grup log, Anda harus menetapkan KMS kunci baru yang menyertakan kondisi dalam kebijakan. IAM Untuk informasi selengkapnya, lihat AWS KMS kunci dan konteks enkripsi.

penting

CloudWatch Log sekarang mendukung kms:ViaService yang memungkinkan log untuk melakukan AWS KMS panggilan atas nama Anda. Anda harus menambahkan ini ke peran Anda yang memanggil CloudWatch Log baik dalam Kebijakan Kunci Anda atau diIAM. Untuk informasi lebih lanjut, lihat kms: ViaService.

Setelah Anda mengaitkan KMS kunci dengan grup log, semua data yang baru dicerna untuk grup log dienkripsi menggunakan kunci ini. Data ini disimpan dalam format terenkripsi selama periode retensi. CloudWatch Log mendekripsi data ini setiap kali diminta. CloudWatch Log harus memiliki izin untuk KMS kunci setiap kali data terenkripsi diminta.

Jika Anda kemudian memisahkan KMS kunci dari grup CloudWatch log, Log mengenkripsi data yang baru dicerna menggunakan metode enkripsi default CloudWatch Log. Semua data yang dicerna sebelumnya yang dienkripsi dengan KMS kunci tetap dienkripsi dengan kunci. KMS CloudWatch Log masih dapat mengembalikan data tersebut setelah KMS kunci dipisahkan, karena CloudWatch Log masih dapat terus mereferensikan kunci. Namun, jika kunci kemudian dinonaktifkan, maka CloudWatch Log tidak dapat membaca log yang dienkripsi dengan kunci itu.

penting

CloudWatch Log hanya mendukung KMS kunci simetris. Jangan gunakan kunci asimetris untuk mengenkripsi data dalam grup log Anda. Untuk informasi selengkapnya, lihat Menggunakan Kunci Simetris dan Asimetris.

Batas

  • Untuk melakukan langkah-langkah berikut, Anda harus memiliki izin berikut: kms:CreateKey, kms:GetKeyPolicy, dan kms:PutKeyPolicy.

  • Setelah Anda mengaitkan atau memisahkan kunci dari grup log, diperlukan waktu hingga lima menit agar operasi diterapkan.

  • Jika Anda mencabut akses CloudWatch Log ke kunci terkait atau menghapus KMS kunci terkait, data terenkripsi Anda di CloudWatch Log tidak dapat diambil lagi.

  • Anda tidak dapat mengaitkan KMS kunci dengan grup log menggunakan CloudWatch konsol.

Langkah 1: Buat AWS KMS kunci

Untuk membuat KMS kunci, gunakan perintah create-key berikut:

aws kms create-key

Output berisi ID kunci dan Amazon Resource Name (ARN) dari kunci. Berikut ini adalah output contoh:

{ "KeyMetadata": { "Origin": "AWS_KMS", "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Description": "", "KeyManager": "CUSTOMER", "Enabled": true, "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "CreationDate": 1478910250.94, "Arn": "arn:aws:kms:us-west-2:123456789012:key/6f815f63-e628-448c-8251-e40cb0d29f59", "AWSAccountId": "123456789012", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] } }

Langkah 2: Tetapkan izin pada kunci KMS

Secara default, semua AWS KMS kunci bersifat pribadi. Hanya pemilik sumber daya yang dapat menggunakannya untuk mengenkripsi dan mendekripsi data. Namun, pemilik sumber daya dapat memberikan izin untuk mengakses KMS kunci ke pengguna dan sumber daya lain. Dengan langkah ini, Anda memberikan izin utama layanan CloudWatch Log dan peran pemanggil untuk menggunakan kunci. Prinsipal layanan ini harus berada di AWS Wilayah yang sama di mana KMS kunci disimpan.

Sebagai praktik terbaik, kami menyarankan Anda membatasi penggunaan KMS kunci hanya untuk AWS akun atau grup log yang Anda tentukan.

Pertama, simpan kebijakan default untuk KMS kunci Anda seperti policy.json menggunakan get-key-policyperintah berikut:

aws kms get-key-policy --key-id key-id --policy-name default --output text > ./policy.json

Buka file policy.json di editor teks dan tambahkan bagian dalam huruf tebal dari salah satu pernyataan berikut. Pisahkan pernyataan yang ada dari pernyataan baru dengan koma. Pernyataan ini menggunakan Condition bagian untuk meningkatkan keamanan AWS KMS kunci. Untuk informasi selengkapnya, lihat AWS KMS kunci dan konteks enkripsi.

ConditionBagian dalam contoh ini membatasi kunci ke grup ARN log tunggal.

{ "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::Your_account_ID:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": [ "kms:Encrypt*", "kms:Decrypt*", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnEquals": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:region:account-id:log-group:log-group-name" } } } ] }

Bagian Condition dalam contoh ini membatasi penggunaan kunci AWS KMS pada akun tertentu, tetapi dapat digunakan untuk grup log apa pun.

{ "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::Your_account_ID:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": [ "kms:Encrypt*", "kms:Decrypt*", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:region:account-id:*" } } } ] }

Selanjutnya, tambahkan izin ke peran yang akan memanggil CloudWatch Log. Anda dapat melakukan ini dengan menambahkan pernyataan tambahan ke Kebijakan AWS KMS Utama atau melalui peran itu IAM sendiri. CloudWatch Log digunakan kms:ViaService untuk melakukan panggilan ke AWS KMS atas nama pelanggan. Untuk informasi lebih lanjut, lihat kms: ViaService.

Untuk menambahkan izin dalam Kebijakan AWS KMS Utama, tambahkan pernyataan tambahan berikut ke kebijakan utama Anda. Jika Anda menggunakan metode ini, sebagai praktik terbaik, cakupkan kebijakan hanya ke peran yang akan berinteraksi dengan grup log AWS KMS terenkripsi.

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account_id:role/role_name" }, "Action": [ "kms:Encrypt*", "kms:ReEncrypt*", "kms:Decrypt*", "kms:GenerateDataKey*" "kms:Describe*" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "logs.region.amazonaws.com" ] } } }

Atau jika Anda ingin mengelola izin peranIAM, Anda dapat menambahkan izin yang setara melalui kebijakan berikut. Ini dapat ditambahkan ke kebijakan peran yang ada atau dilampirkan ke peran sebagai kebijakan terpisah tambahan. Jika Anda menggunakan metode ini, sebagai praktik terbaik, lingkup kebijakan hanya untuk AWS KMS kunci yang akan digunakan untuk enkripsi log. Untuk informasi selengkapnya, lihat Mengedit IAM kebijakan.

{ "Version": "2012-10-17", "Statement" : [ { "Effect": "Allow", "Action": [ "kms:Encrypt*", "kms:ReEncrypt*", "kms:Decrypt*", "kms:GenerateDataKey* ", "kms:Describe*" ], "Condition":{ "StringEquals":{ "kms:ViaService": [ "logs.region.amazonaws.com" ] } }, "Resource": "arn:aws:kms:region:account_id:key/key_id" } ] }

Terakhir, tambahkan kebijakan yang diperbarui menggunakan put-key-policyperintah berikut:

aws kms put-key-policy --key-id key-id --policy-name default --policy file://policy.json

Langkah 3: Kaitkan KMS kunci dengan grup log

Anda dapat mengaitkan KMS kunci dengan grup log saat Anda membuatnya atau setelah itu ada.

Untuk mengetahui apakah grup log sudah memiliki KMS kunci yang terkait, gunakan describe-log-groupsperintah berikut:

aws logs describe-log-groups --log-group-name-prefix "log-group-name-prefix"

Jika outputnya mencakup bidang kmsKeyId, grup log terkait dengan kunci yang ditampilkan untuk nilai bidang tersebut.

Untuk mengaitkan KMS kunci dengan grup log saat Anda membuatnya

Gunakan create-log-groupperintah sebagai berikut:

aws logs create-log-group --log-group-name my-log-group --kms-key-id "key-arn"
Untuk mengaitkan KMS kunci dengan grup log yang ada

Gunakan associate-kms-keyperintah sebagai berikut:

aws logs associate-kms-key --log-group-name my-log-group --kms-key-id "key-arn"

Langkah 4: Pisahkan kunci dari grup log

Untuk memisahkan KMS kunci yang terkait dengan grup log, gunakan disassociate-kms-keyperintah berikut:

aws logs disassociate-kms-key --log-group-name my-log-group

AWS KMS kunci dan konteks enkripsi

Untuk meningkatkan keamanan AWS Key Management Service kunci Anda dan grup log terenkripsi Anda, CloudWatch Log sekarang menempatkan grup log ARNs sebagai bagian dari konteks enkripsi yang digunakan untuk mengenkripsi data log Anda. Konteks enkripsi adalah seperangkat pasangan nilai-kunci yang digunakan sebagai data terautentikasi tambahan. Konteks enkripsi memungkinkan Anda menggunakan kondisi IAM kebijakan untuk membatasi akses ke AWS KMS kunci berdasarkan AWS akun dan grup log. Untuk informasi selengkapnya, lihat Konteks enkripsi dan Elemen IAM JSON Kebijakan: Kondisi.

Kami menyarankan Anda menggunakan KMS kunci yang berbeda untuk setiap grup log terenkripsi Anda.

Jika Anda memiliki grup log yang Anda enkripsi sebelumnya dan sekarang ingin mengubah grup log untuk menggunakan KMS kunci baru yang hanya berfungsi untuk grup log itu, ikuti langkah-langkah ini.

Untuk mengonversi grup log terenkripsi untuk menggunakan KMS kunci dengan kebijakan yang membatasi grup log tersebut
  1. Masukkan perintah berikut untuk menemukan kunci grup log saat ini: ARN

    aws logs describe-log-groups

    Outputnya mencakup baris berikut. Buat catatan dariARN. Anda perlu menggunakannya di langkah 7.

    ... "kmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/01234567-89ab-cdef-0123-456789abcdef" ...
  2. Masukkan perintah berikut untuk membuat KMS kunci baru:

    aws kms create-key
  3. Masukkan perintah berikut untuk menyimpan kebijakan kunci baru ke file policy.json:

    aws kms get-key-policy --key-id new-key-id --policy-name default --output text > ./policy.json
  4. Gunakan editor teks untuk membuka policy.json dan menambahkan ekspresi Condition ke kebijakan:

    { "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT-ID:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": [ "kms:Encrypt*", "kms:Decrypt*", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:REGION:ACCOUNT-ID:log- group:LOG-GROUP-NAME" } } } ] }
  5. Masukkan perintah berikut untuk menambahkan kebijakan yang diperbarui ke KMS kunci baru:

    aws kms put-key-policy --key-id new-key-ARN --policy-name default --policy file://policy.json
  6. Masukkan perintah berikut untuk mengaitkan kebijakan dengan grup log Anda:

    aws logs associate-kms-key --log-group-name my-log-group --kms-key-id new-key-ARN

    CloudWatch Log sekarang mengenkripsi semua data baru menggunakan kunci baru.

  7. Selanjutnya, cabut semua izin kecuali Decrypt dari kunci lama. Pertama, masukkan perintah berikut untuk mengambil kebijakan lama:

    aws kms get-key-policy --key-id old-key-ARN --policy-name default --output text > ./policy.json
  8. Gunakan editor teks untuk membuka policy.json dan hapus semua nilai dari daftar Action, kecuali untuk kms:Decrypt*

    { "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::Your_account_ID:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": [ "kms:Decrypt*" ], "Resource": "*" } ] }
  9. Masukkan perintah berikut untuk menambahkan kebijakan yang diperbarui ke kunci lama:

    aws kms put-key-policy --key-id old-key-ARN --policy-name default --policy file://policy.json