Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Contoh dariAWSEnkripsi CLI
Gunakan contoh berikut untuk mencobaAWSEnkripsi CLI pada platform yang Anda inginkan. Untuk bantuan dengan tombol master dan parameter lainnya, lihatCara menggunakan AWS Enkripsi CLI. Untuk referensi cepat, lihatAWS Encryption SDKSintaks CLI dan referensi parameter.
catatan
Contoh berikut menggunakan sintaks untukAWSEnkripsi CLI versi 2.1.x.
Fitur keamanan baru awalnya dirilis diAWSEnkripsi CLI versi 1.7.xdan 2.0.x. Namun,AWSEnkripsi CLI versi 1.8.xmenggantikan versi 1.7.xdanAWSEnkripsi CLI 2.1.xmenggantikan 2.0.x. Untuk detailnya, lihat yang relevanpenasihat keamanan
Untuk contoh yang menunjukkan cara menggunakan fitur keamanan yang membatasi kunci data terenkripsi, lihatMembatasi kunci data terenkripsi.
Misalnya menunjukkan cara menggunakanAWS KMSkunci multi-Wilayah, lihatMenggunakan Multi-region AWS KMS keys.
Topik
Mengenkripsi file
Contoh ini menggunakanAWSEnkripsi CLI untuk mengenkripsi isihello.txt
file, yang berisi string “Hello World”.
Ketika Anda menjalankan perintah enkripsi pada file,AWSEnkripsi CLI mendapatkan kandungan file, menghasilkan unikkunci data, mengenkripsi isi file di bawah kunci data, dan kemudian menulispesan terenkripsike file baru.
Perintah pertama menyimpan ARN kunci dariAWS KMS keydi$keyArn
variabel. Saat mengenkripsi denganAWS KMS key, Anda dapat mengidentifikasi dengan menggunakan ID kunci, ARN kunci, nama alias, atau ARN alias. Untuk rincian tentang pengenal kunci untukAWS KMS key, lihatPengenal KuncidiAWS Key Management ServicePanduan Pengembang.
Perintah kedua mengenkripsi isi file. Perintah menggunakan--encrypt
parameter untuk menentukan operasi dan--input
parameter untuk menunjukkan file untuk mengenkripsi. Parameter--wrapping-keysparameter, dan yang diperlukankunciatribut, memberitahu perintah untuk menggunakanAWS KMS keydiwakili oleh ARN kunci.
Perintah menggunakan--metadata-output
parameter untuk menentukan file teks untuk metadata tentang operasi enkripsi. Sebagai praktik terbaik, perintah menggunakan--encryption-context
parameter untuk menentukankonteks enkripsi.
Perintah ini juga menggunakan--commitment-policyparameteruntuk menetapkan kebijakan komitmen secara eksplisit. Dalam versi 1.8.x, parameter ini diperlukan saat Anda menggunakan--wrapping-keys
parameter. Dimulai pada versi 2.1.x, yang--commitment-policy
parameter opsional, tetapi direkomendasikan.
Nilai dari--output
parameter, titik (.), memberitahu perintah untuk menulis file output ke direktori saat ini.
Ketika perintah enkripsi berhasil, maka tidak mengembalikan output apa pun. Untuk menentukan apakah perintah berhasil, periksa nilai Boolean di$?
variabel. Ketika perintah berhasil, nilai$?
adalah0
(Bash) atauTrue
(PowerShell). Ketika perintah gagal, nilai$?
adalah non-nol (Bash) atauFalse
(PowerShell).
Anda juga dapat menggunakan perintah daftar direktori untuk melihat bahwa perintah enkripsi membuat file baru,hello.txt.encrypted
. Karena perintah enkripsi tidak menentukan nama file untuk output,AWSCLI enkripsi menulis output ke file dengan nama yang sama sebagai file input ditambah.encrypted
sufiks. Untuk menggunakan akhiran yang berbeda, atau menekan akhiran, gunakan--suffix
parameter.
Parameterhello.txt.encrypted
file berisipesan terenkripsiyang mencakup ciphertext darihello.txt
file, salinan terenkripsi kunci data, dan metadata tambahan, termasuk konteks enkripsi.
Mendekripsi file
Contoh ini menggunakanAWSCLI enkripsi untuk mendekripsi isiHello.txt.encrypted
file yang dienkripsi pada contoh sebelumnya.
Perintah dekripsi menggunakan--decrypt
parameter untuk menunjukkan operasi dan--input
parameter untuk mengidentifikasi file untuk mendekripsi. Nilai dari--output
parameter adalah titik yang mewakili direktori saat ini.
Parameter--wrapping-keys
parameter dengankunciatribut menentukan kunci pembungkus yang digunakan untuk mendekripsi pesan terenkripsi. Dalam mendekripsi perintah denganAWS KMS keys, nilai atribut kunci harusARN kunci. Parameter--wrapping-keys
parameter diperlukan dalam perintah dekripsi. Jika Anda menggunakanAWS KMS keys, Anda dapat menggunakankunciatribut untuk menentukanAWS KMS keysuntuk mendekripsi ataupenemuanatribut dengan nilaitrue
(tapi tidak keduanya). Jika Anda menggunakan penyedia kunci master kustom,kuncidanpenyediaatribut diperlukan.
Parameter--commitment-policyparameteradalah awal opsional pada versi 2.1.x, tetapi direkomendasikan. Menggunakannya secara eksplisit membuat maksud Anda jelas, bahkan jika Anda menentukan nilai default,require-encrypt-require-decrypt
.
Parameter--encryption-context
parameter adalah opsional dalam perintah decrypt, bahkan ketikakonteks enkripsidisediakan dalam perintah enkripsi. Dalam hal ini, perintah dekripsi menggunakan konteks enkripsi yang sama yang disediakan dalam perintah enkripsi. Sebelum mendekripsi,AWSEnkripsi CLI memverifikasi bahwa konteks enkripsi dalam pesan terenkripsi termasukpurpose=test
pasangan. Jika tidak, perintah dekripsi gagal.
Parameter--metadata-output
parameter menentukan file untuk metadata tentang operasi dekripsi. Nilai dari--output
parameter, titik (.), menulis file output ke direktori saat ini.
Sebagai praktik terbaik, gunakan--max-encrypted-data-keys
parameter untuk menghindari mendekripsi pesan cacat dengan jumlah yang berlebihan kunci data terenkripsi. Tentukan jumlah kunci data terenkripsi yang diharapkan (satu untuk setiap kunci pembungkus yang digunakan dalam enkripsi) atau maksimum yang wajar (seperti 5). Untuk detailnya, lihat Membatasi kunci data terenkripsi.
Parameter--buffer
mengembalikan plaintext hanya setelah semua masukan diproses, termasuk memverifikasi tanda tangan digital jika ada.
Ketika perintah dekripsi berhasil, maka tidak mengembalikan output apa pun. Untuk menentukan apakah perintah berhasil, dapatkan nilai$?
variabel. Anda juga dapat menggunakan perintah direktori daftar untuk melihat bahwa perintah membuat file baru dengan.decrypted
sufiks. Untuk melihat konten plaintext, gunakan perintah untuk mendapatkan konten file, seperticat
atauDapatkan-Content
Mengenkripsi semua file dalam direktori
Contoh ini menggunakanAWSCLI enkripsi untuk mengenkripsi kandungan semua file di direktori.
Ketika perintah mempengaruhi beberapa file,AWSEnkripsi CLI memproses setiap file secara individual. Ia mendapat isi file, mendapat unikkunci datauntuk file dari master key, mengenkripsi isi file di bawah kunci data, dan menulis hasilnya ke file baru di direktori output. Akibatnya, Anda dapat mendekripsi file output secara independen.
Daftar ini dariTestDir
direktori menunjukkan file plaintext yang ingin kita enkripsi.
Perintah pertama menyimpanAmazon Resource Name (ARN) AmazondariAWS KMS keydi$keyArn
variabel.
Perintah kedua mengenkripsi isi file diTestDir
direktori dan menulis file konten terenkripsi keTestEnc
direktori. JikaTestEnc
direktori tidak ada, perintah gagal. Karena lokasi input adalah direktori,--recursive
parameter diperlukan.
Parameter--wrapping-keysparameter, dan yang diperlukankunciatribut, tentukan kunci pembungkus yang akan digunakan. Perintah enkripsi termasukkonteks enkripsi,dept=IT
. Bila Anda menentukan konteks enkripsi dalam perintah yang mengenkripsi beberapa file, konteks enkripsi yang sama digunakan untuk semua file.
Perintah ini juga memiliki--metadata-output
parameter untuk memberitahuAWSEnkripsi CLI di mana untuk menulis metadata tentang operasi enkripsi. ParameterAWSEnkripsi CLI menulis satu catatan metadata untuk setiap file yang dienkripsi.
Parameter--commitment-policy parameteradalah awal opsional pada versi 2.1.x, tetapi direkomendasikan. Jika perintah atau skrip gagal karena tidak dapat mendekripsi ciphertext, pengaturan kebijakan komitmen eksplisit mungkin membantu Anda mendeteksi masalah dengan cepat.
Ketika perintah selesai,AWSEnkripsi CLI menulis file terenkripsi keTestEnc
direktori, tetapi tidak mengembalikan output apa pun.
Perintah akhir mencantumkan file diTestEnc
direktori. Ada satu file output dari konten terenkripsi untuk setiap file input konten plaintext. Karena perintah tidak menentukan akhiran alternatif, perintah enkripsi ditambahkan.encrypted
untuk masing-masing nama file input.
Mendekripsi semua file dalam direktori
Contoh ini mendekripsi semua file dalam sebuah direktori. Dimulai dengan file diTestEnc
direktori yang dienkripsi pada contoh sebelumnya.
Perintah dekripsi ini mendekripsi semua file dalamTestEncdirektori dan menulis file plaintext keTestDecdirektori. Parameter--wrapping-keys
parameter dengankunciatribut danARN kuncinilai memberitahuAWSEnkripsi CLI yangAWS KMS keysuntuk digunakan untuk mendekripsi file. Perintah menggunakan--interactive
parameter untuk memberitahuAWSEnkripsi CLI untuk meminta Anda sebelum Timpa file dengan nama yang sama.
Perintah ini juga menggunakan konteks enkripsi yang disediakan saat file dienkripsi. Saat mendekripsi beberapa file,AWSEnkripsi CLI memeriksa konteks enkripsi setiap file. Jika pemeriksaan konteks enkripsi pada file apa pun gagal,AWSEnkripsi CLI menolak file, menulis peringatan, mencatat kegagalan dalam metadata, dan kemudian terus memeriksa file yang tersisa. JikaAWSEnkripsi CLI gagal mendekripsi file untuk alasan lain, seluruh perintah mendekripsi gagal segera.
Dalam contoh ini, pesan terenkripsi di semua file input berisidept=IT
elemen konteks enkripsi. Namun, jika Anda mendekripsi pesan dengan konteks enkripsi yang berbeda, Anda mungkin masih dapat memverifikasi bagian dari konteks enkripsi. Misalnya, jika beberapa pesan memiliki konteks enkripsidept=finance
dan yang laindept=IT
, Anda dapat memverifikasi bahwa konteks enkripsi selalu berisidept
nama tanpa menentukan nilai. Jika Anda ingin lebih spesifik, Anda bisa mendekripsi file dalam perintah terpisah.
Perintah dekripsi tidak mengembalikan output apa pun, tetapi Anda dapat menggunakan perintah daftar direktori untuk melihat file baru dengan.decrypted
sufiks. Untuk melihat konten plaintext, gunakan perintah untuk mendapatkan konten file.
Mengenkripsi dan mendekripsi pada baris perintah
Contoh-contoh ini menunjukkan kepada Anda bagaimana untuk pipa input ke perintah (stdin) dan menulis output ke baris perintah (stdout). Mereka menjelaskan bagaimana untuk mewakili stdin dan stdout dalam perintah dan bagaimana menggunakan built-in Base64 encoding alat untuk mencegah shell dari salah menafsirkan karakter non-ASCII.
Contoh ini pipa string plaintext ke perintah enkripsi dan menyimpan pesan terenkripsi dalam variabel. Kemudian, pipa pesan terenkripsi dalam variabel untuk perintah dekripsi, yang menulis output ke pipa (stdout).
Contoh terdiri dari tiga perintah:
-
Perintah pertama menyimpanARN kuncidariAWS KMS keydi
$keyArn
variabel. -
Perintah kedua pipa
Hello World
string ke perintah enkripsi dan menyimpan hasilnya di$encrypted
variabel.Parameter
--input
dan--output
parameter diperlukan dalam semuaAWSPerintah enkripsi CLI. Untuk menunjukkan bahwa input sedang disalurkan ke perintah (stdin), gunakan tanda hubung (-
) untuk nilai--input
parameter. Untuk mengirim output ke baris perintah (stdout), gunakan tanda hubung untuk nilai--output
parameter.Parameter
--encode
parameter Base64-encodes output sebelum mengembalikannya. Hal ini mencegah shell dari salah menafsirkan karakter non-ASCII dalam pesan terenkripsi.Karena perintah ini hanyalah bukti konsep, kita menghilangkan konteks enkripsi dan menekan metadata (
-S
). -
Perintah ketiga pipa pesan terenkripsi di
$encrypted
variabel untuk perintah dekripsi.Perintah dekripsi ini menggunakan
--input -
untuk menunjukkan bahwa masukan berasal dari pipa (stdin) dan--output -
untuk mengirim output ke pipa (stdout). (Parameter input mengambil lokasi input, bukan byte input yang sebenarnya, sehingga Anda tidak dapat menggunakan$encrypted
variabel sebagai nilai--input
parameter.)Contoh ini menggunakanpenemuanatribut
--wrapping-keys
parameter untuk memungkinkanAWSEnkripsi CLI untuk menggunakanAWS KMS keyuntuk mendekripsi data. Ini tidak menentukanKebijakan Komitmen, sehingga menggunakan nilai default untuk versi 2.1.xdan setelahnya,require-encrypt-require-decrypt
.Karena output dienkripsi dan kemudian dikodekan, perintah dekripsi menggunakan
--decode
parameter untuk memecahkan kode input Base64 dikodekan sebelum mendekripsi itu. Anda juga dapat menggunakan--decode
parameter untuk memecahkan kode input Base64 dikodekan sebelum mengenkripsi itu.Sekali lagi, perintah menghilangkan konteks enkripsi dan menekan metadata (-
S
).
Anda juga dapat melakukan enkripsi dan mendekripsi operasi dalam satu perintah tanpa variabel intervensi.
Seperti pada contoh sebelumnya,--input
dan--output
parameter memiliki-
nilai dan perintah menggunakan--encode
parameter untuk mengkodekan output dan--decode
parameter untuk memecahkan kode input.
Menggunakan kunci utama beberapa
Contoh ini menunjukkan bagaimana menggunakan beberapa kunci master saat mengenkripsi dan mendekripsi data diAWSEnkripsi CLI.
Bila Anda menggunakan beberapa kunci master untuk mengenkripsi data, salah satu kunci master dapat digunakan untuk mendekripsi data. Strategi ini memastikan bahwa Anda dapat mendekripsi data bahkan jika salah satu kunci master tidak tersedia. Jika Anda menyimpan data terenkripsi dalam beberapaWilayah AWS, strategi ini memungkinkan Anda menggunakan kunci master di Wilayah yang sama untuk mendekripsi data.
Saat Anda mengenkripsi dengan beberapa tombol master, kunci master pertama memainkan peran khusus. Ini menghasilkan kunci data yang digunakan untuk mengenkripsi data. Kunci utama yang tersisa mengenkripsi kunci data polos. Yang dihasilkanpesan terenkripsitermasuk data terenkripsi dan kumpulan kunci data terenkripsi, satu untuk setiap kunci master. Meskipun kunci master pertama menghasilkan kunci data, salah satu kunci master dapat mendekripsi salah satu kunci data, yang dapat digunakan untuk mendekripsi data.
Enkripsi dengan tiga tombol master
Contoh perintah ini menggunakan tiga kunci pembungkus untuk mengenkripsiFinance.log
file, satu di masing-masing tigaWilayah AWS.
Ini menulis pesan terenkripsi keArchive
direktori. Perintah menggunakan--suffix
parameter tanpa nilai untuk menekan akhiran, sehingga nama file input dan output akan sama.
Perintah menggunakan--wrapping-keys
parameter dengan tigakunciatribut. Anda juga dapat menggunakan beberapa--wrapping-keys
parameter dalam perintah yang sama.
Untuk mengenkripsi file log,AWSEnkripsi CLI meminta kunci pembungkus pertama dalam daftar,$key1
, untuk menghasilkan kunci data yang digunakannya untuk mengenkripsi data. Kemudian, ia menggunakan masing-masing kunci pembungkus lainnya untuk mengenkripsi salinan teks biasa dari kunci data yang sama. Pesan terenkripsi dalam file output mencakup ketiga kunci data terenkripsi.
Perintah ini mendekripsi salinan terenkripsiFinance.log
file dan menulis keFinance.log.clear
file diFinance
direktori. Untuk mendekripsi data yang dienkripsi di bawah tigaAWS KMS keys, Anda dapat menentukan tiga yang samaAWS KMS keysatau bagian dari mereka. Contoh ini menentukan hanya salah satuAWS KMS keys.
Untuk memberitahuAWSEnkripsi CLI yangAWS KMS keysuntuk menggunakan dekripsi data Anda, gunakankunciatribut--wrapping-keys
parameter. Saat mendekripsi denganAWS KMS keys, nilaikunciatribut harusARN kunci.
Anda harus memiliki izin untuk memanggilDekripsi APIpadaAWS KMS keysAnda tentukan. Untuk informasi selengkapnya, lihatAutentikasi dan Kontrol Akses untukAWS KMS.
Sebagai praktik terbaik, contoh ini menggunakan--max-encrypted-data-keys
parameter untuk menghindari mendekripsi pesan cacat dengan jumlah yang berlebihan kunci data terenkripsi. Meskipun contoh ini hanya menggunakan satu kunci pembungkus untuk dekripsi, pesan terenkripsi memiliki tiga (3) kunci data terenkripsi; satu untuk masing-masing dari tiga kunci pembungkus yang digunakan saat mengenkripsi. Tentukan jumlah kunci data terenkripsi yang diharapkan atau nilai maksimum yang wajar, seperti 5. Jika Anda menentukan nilai maksimum kurang dari 3, perintah gagal. Untuk detailnya, lihat Membatasi kunci data terenkripsi.
Mengenkripsi dan mendekripsi dalam skrip
Contoh ini menunjukkan cara menggunakanAWSEnkripsi CLI dalam skrip. Anda dapat menulis skrip yang hanya mengenkripsi dan mendekripsi data, atau skrip yang mengenkripsi atau mendekripsi sebagai bagian dari proses manajemen data.
Dalam contoh ini, skrip mendapatkan koleksi file log, memampatkannya, mengenkripsinya, dan kemudian menyalin file terenkripsi ke bucket Amazon S3. Script ini memproses setiap file secara terpisah, sehingga Anda dapat mendekripsi dan memperluasnya secara independen.
Saat Anda mengompres dan mengenkripsi file, pastikan untuk mengompres sebelum mengenkripsi. Data yang dienkripsi dengan benar tidak kompresibel.
Awas
Hati-hati saat mengompresi data yang mencakup rahasia dan data yang mungkin dikendalikan oleh aktor berbahaya. Ukuran akhir dari data terkompresi mungkin secara tidak sengaja mengungkapkan informasi sensitif tentang isinya.
Menggunakan caching kunci data
Contoh ini menggunakancaching kunci datadalam perintah yang mengenkripsi sejumlah besar file.
Secara default,AWSEnkripsi CLI (dan versi lain dariAWS Encryption SDK) menghasilkan kunci data unik untuk setiap file yang dienkripsi. Meskipun menggunakan kunci data unik untuk setiap operasi adalah praktik terbaik kriptografi, penggunaan kembali kunci data yang terbatas dapat diterima untuk beberapa situasi. Jika Anda mempertimbangkan caching kunci data, berkonsultasilah dengan insinyur keamanan untuk memahami persyaratan keamanan aplikasi Anda dan tentukan ambang keamanan yang tepat untuk Anda.
Dalam contoh ini, caching kunci data mempercepat operasi enkripsi dengan mengurangi frekuensi permintaan ke penyedia kunci master.
Perintah dalam contoh ini mengenkripsi direktori besar dengan beberapa subdirektori yang berisi total sekitar 800 file log kecil. Perintah pertama menyimpan ARN dariAWS KMS keydalamkeyARN
variabel. Perintah kedua mengenkripsi semua file dalam direktori input (rekursif) dan menulisnya ke direktori arsip. Perintah menggunakan--suffix
parameter untuk menentukan.archive
sufiks.
Parameter--caching
parameter memungkinkan caching kunci data. Parameterkapasitasatribut, yang membatasi jumlah kunci data dalam cache, diatur ke 1, karena pemrosesan file serial tidak pernah menggunakan lebih dari satu kunci data pada satu waktu. Parametermax_ageatribut, yang menentukan berapa lama kunci data cache dapat digunakan, diatur ke 10 detik.
Opsionalmax_messages_encryptedatribut diatur ke 10 pesan, sehingga kunci data tunggal tidak pernah digunakan untuk mengenkripsi lebih dari 10 file. Membatasi jumlah file yang dienkripsi oleh setiap kunci data mengurangi jumlah file yang akan terpengaruh jika kunci data dikompromikan.
Untuk menjalankan perintah ini pada file log yang dihasilkan sistem operasi Anda, Anda mungkin memerlukan izin administrator (sudo
di Linux;Jalankan sebagai administratordi Windows).
Untuk menguji efek caching kunci data, contoh ini menggunakanPerintah Ukur
PS C:\>
Measure-Command {aws-encryption-cli --encrypt ` --input C:\Windows\Logs --recursive ` --output $home\Archive --suffix '.archive' ` --wrapping-keys key=$keyARN ` --encryption-context class=log ` --suppress-metadata }
Days : 0 Hours : 0 Minutes : 0 Seconds : 25 Milliseconds : 453 Ticks : 254531202 TotalDays : 0.000294596298611111 TotalHours : 0.00707031116666667 TotalMinutes : 0.42421867 TotalSeconds : 25.4531202 TotalMilliseconds : 25453.1202
Data key caching membuat proses lebih cepat, bahkan ketika Anda membatasi setiap kunci data untuk maksimal 10 file. Perintah sekarang membutuhkan waktu kurang dari 12 detik untuk menyelesaikan dan mengurangi jumlah panggilan ke penyedia kunci master menjadi 1/10 dari nilai asli.
PS C:\>
Measure-Command {aws-encryption-cli --encrypt ` --input C:\Windows\Logs --recursive ` --output $home\Archive --suffix '.archive' ` --wrapping-keys key=$keyARN ` --encryption-context class=log ` --suppress-metadata ` --caching capacity=1 max_age=10 max_messages_encrypted=10}
Days : 0 Hours : 0 Minutes : 0 Seconds : 11 Milliseconds : 813 Ticks : 118132640 TotalDays : 0.000136727592592593 TotalHours : 0.00328146222222222 TotalMinutes : 0.196887733333333 TotalSeconds : 11.813264 TotalMilliseconds : 11813.264
Jika Anda menghilangkanmax_messages_encrypted
pembatasan, semua file dienkripsi di bawah kunci data yang sama. Perubahan ini meningkatkan risiko menggunakan kembali kunci data tanpa membuat proses lebih cepat. Namun, hal itu mengurangi jumlah panggilan ke penyedia kunci master menjadi 1.
PS C:\>
Measure-Command {aws-encryption-cli --encrypt ` --input C:\Windows\Logs --recursive ` --output $home\Archive --suffix '.archive' ` --wrapping-keys key=$keyARN ` --encryption-context class=log ` --suppress-metadata ` --caching capacity=1 max_age=10}
Days : 0 Hours : 0 Minutes : 0 Seconds : 10 Milliseconds : 252 Ticks : 102523367 TotalDays : 0.000118661304398148 TotalHours : 0.00284787130555556 TotalMinutes : 0.170872278333333 TotalSeconds : 10.2523367 TotalMilliseconds : 10252.3367