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 Advanced Encryption Standard Galois/Counter Mode (AES-GCM) 256-bit untuk mengenkripsi data log saat istirahat. 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 kunci KMS 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 ARN dari grup log sebagai nilai untuk kunci itu. Jika Anda memiliki grup log yang telah dienkripsi dengan kunci KMS, dan Anda ingin membatasi kunci yang akan digunakan dengan satu akun dan grup log, Anda harus menetapkan kunci KMS 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 di IAM. Untuk informasi lebih lanjut, lihat kms: ViaService.

Setelah Anda mengaitkan kunci KMS 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 kunci KMS setiap kali data terenkripsi diminta.

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

penting

CloudWatch Log hanya mendukung kunci KMS 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 kunci KMS terkait, data terenkripsi Anda di CloudWatch Log tidak dapat diambil lagi.

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

Langkah 1: Buat AWS KMS kunci

Untuk membuat kunci KMS, 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 tombol 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 kunci KMS 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 kunci KMS disimpan.

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

Pertama, simpan kebijakan default untuk kunci KMS 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.

Bagian Condition dalam contoh ini membatasi kunci pada satu ARN grup log.

JSON
{ "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": "kms:*", "Resource": "*" }, { "Effect": "Allow", "Principal": { "Service": "logs.us-east-1.amazonaws.com" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnEquals": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:us-east-1:111122223333: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.

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

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 IAM pada peran itu 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 peran di IAM, 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 kebijakan IAM.

JSON
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt", "kms:GenerateDataKey*", "kms:Describe*" ], "Condition": { "StringEquals": { "kms:ViaService": [ "logs.us-east-1.amazonaws.com" ] } }, "Resource": "arn:aws:kms:us-east-1:444455556666: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 kunci KMS dengan grup log

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

Untuk mengetahui apakah grup log sudah memiliki kunci KMS 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 kunci KMS 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 kunci KMS 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: Putuskan kunci dari grup log

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

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 kebijakan IAM untuk membatasi akses ke AWS KMS kunci Anda berdasarkan AWS akun dan grup log. Untuk informasi selengkapnya, lihat Konteks enkripsi and Elemen Kebijakan JSON IAM: Syarat.

Kami menyarankan Anda menggunakan kunci KMS 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 kunci KMS baru yang hanya berfungsi untuk grup log itu, ikuti langkah-langkah ini.

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

    aws logs describe-log-groups

    Outputnya mencakup baris berikut. Perhatikan ARN. 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 kunci KMS 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:

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

    JSON
    { "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333: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