Contoh dariAWSEnkripsi CLI - AWS Encryption SDK

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 keamanandiaws-encryption-sdk-clirepositori padaGitHub.

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.

Mengenkripsi file

Contoh ini menggunakanAWSEnkripsi CLI untuk mengenkripsi isihello.txtfile, 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$keyArnvariabel. 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--encryptparameter untuk menentukan operasi dan--inputparameter untuk menunjukkan file untuk mengenkripsi. Parameter--wrapping-keysparameter, dan yang diperlukankunciatribut, memberitahu perintah untuk menggunakanAWS KMS keydiwakili oleh ARN kunci.

Perintah menggunakan--metadata-outputparameter untuk menentukan file teks untuk metadata tentang operasi enkripsi. Sebagai praktik terbaik, perintah menggunakan--encryption-contextparameter 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-keysparameter. Dimulai pada versi 2.1.x, yang--commitment-policyparameter opsional, tetapi direkomendasikan.

Nilai dari--outputparameter, titik (.), memberitahu perintah untuk menulis file output ke direktori saat ini.

Bash
\\ To run this example, replace the fictitious key ARN with a valid value. $ keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab $ aws-encryption-cli --encrypt \ --input hello.txt \ --wrapping-keys key=$keyArn \ --metadata-output ~/metadata \ --encryption-context purpose=test \ --commitment-policy require-encrypt-require-decrypt \ --output .
PowerShell
# To run this example, replace the fictitious key ARN with a valid value. PS C:\> $keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' PS C:\> aws-encryption-cli --encrypt ` --input Hello.txt ` --wrapping-keys key=$keyArn ` --metadata-output $home\Metadata.txt ` --commitment-policy require-encrypt-require-decrypt ` --encryption-context purpose=test ` --output .

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).

Bash
$ echo $? 0
PowerShell
PS C:\> $? True

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.encryptedsufiks. Untuk menggunakan akhiran yang berbeda, atau menekan akhiran, gunakan--suffixparameter.

Parameterhello.txt.encryptedfile berisipesan terenkripsiyang mencakup ciphertext darihello.txtfile, salinan terenkripsi kunci data, dan metadata tambahan, termasuk konteks enkripsi.

Bash
$ ls hello.txt hello.txt.encrypted
PowerShell
PS C:\> dir Directory: C:\TestCLI Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 9/15/2017 5:57 PM 11 Hello.txt -a---- 9/17/2017 1:06 PM 585 Hello.txt.encrypted

Mendekripsi file

Contoh ini menggunakanAWSCLI enkripsi untuk mendekripsi isiHello.txt.encryptedfile yang dienkripsi pada contoh sebelumnya.

Perintah dekripsi menggunakan--decryptparameter untuk menunjukkan operasi dan--inputparameter untuk mengidentifikasi file untuk mendekripsi. Nilai dari--outputparameter adalah titik yang mewakili direktori saat ini.

Parameter--wrapping-keysparameter dengankunciatribut menentukan kunci pembungkus yang digunakan untuk mendekripsi pesan terenkripsi. Dalam mendekripsi perintah denganAWS KMS keys, nilai atribut kunci harusARN kunci. Parameter--wrapping-keysparameter 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-contextparameter 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=testpasangan. Jika tidak, perintah dekripsi gagal.

Parameter--metadata-outputparameter menentukan file untuk metadata tentang operasi dekripsi. Nilai dari--outputparameter, titik (.), menulis file output ke direktori saat ini.

Sebagai praktik terbaik, gunakan--max-encrypted-data-keysparameter 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--buffermengembalikan plaintext hanya setelah semua masukan diproses, termasuk memverifikasi tanda tangan digital jika ada.

Bash
\\ To run this example, replace the fictitious key ARN with a valid value. $ keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab $ aws-encryption-cli --decrypt \ --input hello.txt.encrypted \ --wrapping-keys key=$keyArn \ --commitment-policy require-encrypt-require-decrypt \ --encryption-context purpose=test \ --metadata-output ~/metadata \ --max-encrypted-data-keys 1 \ --buffer \ --output .
PowerShell
\\ To run this example, replace the fictitious key ARN with a valid value. PS C:\> $keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' PS C:\> aws-encryption-cli --decrypt ` --input Hello.txt.encrypted ` --wrapping-keys key=$keyArn ` --commitment-policy require-encrypt-require-decrypt ` --encryption-context purpose=test ` --metadata-output $home\Metadata.txt ` --max-encrypted-data-keys 1 ` --buffer ` --output .

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.decryptedsufiks. Untuk melihat konten plaintext, gunakan perintah untuk mendapatkan konten file, seperticatatauDapatkan-Content.

Bash
$ ls hello.txt hello.txt.encrypted hello.txt.encrypted.decrypted $ cat hello.txt.encrypted.decrypted Hello World
PowerShell
PS C:\> dir Directory: C:\TestCLI Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 9/17/2017 1:01 PM 11 Hello.txt -a---- 9/17/2017 1:06 PM 585 Hello.txt.encrypted -a---- 9/17/2017 1:08 PM 11 Hello.txt.encrypted.decrypted PS C:\> Get-Content Hello.txt.encrypted.decrypted Hello World

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 dariTestDirdirektori menunjukkan file plaintext yang ingin kita enkripsi.

Bash
$ ls testdir cool-new-thing.py hello.txt employees.csv
PowerShell
PS C:\> dir C:\TestDir Directory: C:\TestDir Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 9/12/2017 3:11 PM 2139 cool-new-thing.py -a---- 9/15/2017 5:57 PM 11 Hello.txt -a---- 9/17/2017 1:44 PM 46 Employees.csv

Perintah pertama menyimpanAmazon Resource Name (ARN) AmazondariAWS KMS keydi$keyArnvariabel.

Perintah kedua mengenkripsi isi file diTestDirdirektori dan menulis file konten terenkripsi keTestEncdirektori. JikaTestEncdirektori tidak ada, perintah gagal. Karena lokasi input adalah direktori,--recursiveparameter 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-outputparameter 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 keTestEncdirektori, tetapi tidak mengembalikan output apa pun.

Perintah akhir mencantumkan file diTestEncdirektori. Ada satu file output dari konten terenkripsi untuk setiap file input konten plaintext. Karena perintah tidak menentukan akhiran alternatif, perintah enkripsi ditambahkan.encrypteduntuk masing-masing nama file input.

Bash
# To run this example, replace the fictitious key ARN with a valid master key identifier. $ keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab $ aws-encryption-cli --encrypt \ --input testdir --recursive\ --wrapping-keys key=$keyArn \ --encryption-context dept=IT \ --commitment-policy require-encrypt-require-decrypt \ --metadata-output ~/metadata \ --output testenc $ ls testenc cool-new-thing.py.encrypted employees.csv.encrypted hello.txt.encrypted
PowerShell
# To run this example, replace the fictitious key ARN with a valid master key identifier. PS C:\> $keyArn = arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab PS C:\> aws-encryption-cli --encrypt ` --input .\TestDir --recursive ` --wrapping-keys key=$keyArn ` --encryption-context dept=IT ` --commitment-policy require-encrypt-require-decrypt ` --metadata-output .\Metadata\Metadata.txt ` --output .\TestEnc PS C:\> dir .\TestEnc Directory: C:\TestEnc Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 9/17/2017 2:32 PM 2713 cool-new-thing.py.encrypted -a---- 9/17/2017 2:32 PM 620 Hello.txt.encrypted -a---- 9/17/2017 2:32 PM 585 Employees.csv.encrypted

Mendekripsi semua file dalam direktori

Contoh ini mendekripsi semua file dalam sebuah direktori. Dimulai dengan file diTestEncdirektori yang dienkripsi pada contoh sebelumnya.

Bash
$ ls testenc cool-new-thing.py.encrypted hello.txt.encrypted employees.csv.encrypted
PowerShell
PS C:\> dir C:\TestEnc Directory: C:\TestEnc Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 9/17/2017 2:32 PM 2713 cool-new-thing.py.encrypted -a---- 9/17/2017 2:32 PM 620 Hello.txt.encrypted -a---- 9/17/2017 2:32 PM 585 Employees.csv.encrypted

Perintah dekripsi ini mendekripsi semua file dalamTestEncdirektori dan menulis file plaintext keTestDecdirektori. Parameter--wrapping-keysparameter dengankunciatribut danARN kuncinilai memberitahuAWSEnkripsi CLI yangAWS KMS keysuntuk digunakan untuk mendekripsi file. Perintah menggunakan--interactiveparameter 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=ITelemen 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=financedan yang laindept=IT, Anda dapat memverifikasi bahwa konteks enkripsi selalu berisideptnama 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.decryptedsufiks. Untuk melihat konten plaintext, gunakan perintah untuk mendapatkan konten file.

Bash
# To run this example, replace the fictitious key ARN with a valid master key identifier. $ keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab $ aws-encryption-cli --decrypt \ --input testenc --recursive \ --wrapping-keys key=$keyArn \ --encryption-context dept=IT \ --commitment-policy require-encrypt-require-decrypt \ --metadata-output ~/metadata \ --max-encrypted-data-keys 1 \ --buffer \ --output testdec --interactive $ ls testdec cool-new-thing.py.encrypted.decrypted hello.txt.encrypted.decrypted employees.csv.encrypted.decrypted
PowerShell
# To run this example, replace the fictitious key ARN with a valid master key identifier. PS C:\> $keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' PS C:\> aws-encryption-cli --decrypt ` --input C:\TestEnc --recursive ` --wrapping-keys key=$keyArn ` --encryption-context dept=IT ` --commitment-policy require-encrypt-require-decrypt ` --metadata-output $home\Metadata.txt ` --max-encrypted-data-keys 1 ` --buffer ` --output C:\TestDec --interactive PS C:\> dir .\TestDec Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 10/8/2017 4:57 PM 2139 cool-new-thing.py.encrypted.decrypted -a---- 10/8/2017 4:57 PM 46 Employees.csv.encrypted.decrypted -a---- 10/8/2017 4:57 PM 11 Hello.txt.encrypted.decrypted

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$keyArnvariabel.

    Bash
    $ keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
    PowerShell
    PS C:\> $keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

     

  • Perintah kedua pipaHello Worldstring ke perintah enkripsi dan menyimpan hasilnya di$encryptedvariabel.

    Parameter--inputdan--outputparameter diperlukan dalam semuaAWSPerintah enkripsi CLI. Untuk menunjukkan bahwa input sedang disalurkan ke perintah (stdin), gunakan tanda hubung (-) untuk nilai--inputparameter. Untuk mengirim output ke baris perintah (stdout), gunakan tanda hubung untuk nilai--outputparameter.

    Parameter--encodeparameter 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).

    Bash
    $ encrypted=$(echo 'Hello World' | aws-encryption-cli --encrypt -S \ --input - --output - --encode \ --wrapping-keys key=$keyArn )
    PowerShell
    PS C:\> $encrypted = 'Hello World' | aws-encryption-cli --encrypt -S ` --input - --output - --encode ` --wrapping-keys key=$keyArn

     

  • Perintah ketiga pipa pesan terenkripsi di$encryptedvariabel 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$encryptedvariabel sebagai nilai--inputparameter.)

    Contoh ini menggunakanpenemuanatribut--wrapping-keysparameter 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--decodeparameter untuk memecahkan kode input Base64 dikodekan sebelum mendekripsi itu. Anda juga dapat menggunakan--decodeparameter untuk memecahkan kode input Base64 dikodekan sebelum mengenkripsi itu.

    Sekali lagi, perintah menghilangkan konteks enkripsi dan menekan metadata (-S).

    Bash
    $ echo $encrypted | aws-encryption-cli --decrypt --wrapping-keys discovery=true --input - --output - --decode --buffer -S Hello World
    PowerShell
    PS C:\> $encrypted | aws-encryption-cli --decrypt --wrapping-keys discovery=$true --input - --output - --decode --buffer -S Hello World

Anda juga dapat melakukan enkripsi dan mendekripsi operasi dalam satu perintah tanpa variabel intervensi.

Seperti pada contoh sebelumnya,--inputdan--outputparameter memiliki-nilai dan perintah menggunakan--encodeparameter untuk mengkodekan output dan--decodeparameter untuk memecahkan kode input.

Bash
$ keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab $ echo 'Hello World' | aws-encryption-cli --encrypt --wrapping-keys key=$keyArn --input - --output - --encode -S | aws-encryption-cli --decrypt --wrapping-keys discovery=true --input - --output - --decode -S Hello World
PowerShell
PS C:\> $keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' PS C:\> 'Hello World' | aws-encryption-cli --encrypt --wrapping-keys key=$keyArn --input - --output - --encode -S | aws-encryption-cli --decrypt --wrapping-keys discovery=$true --input - --output - --decode -S Hello World

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.logfile, satu di masing-masing tigaWilayah AWS.

Ini menulis pesan terenkripsi keArchivedirektori. Perintah menggunakan--suffixparameter tanpa nilai untuk menekan akhiran, sehingga nama file input dan output akan sama.

Perintah menggunakan--wrapping-keysparameter dengan tigakunciatribut. Anda juga dapat menggunakan beberapa--wrapping-keysparameter 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.

Bash
$ key1=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab $ key2=arn:aws:kms:us-east-2:111122223333:key/0987ab65-43cd-21ef-09ab-87654321cdef $ key3=arn:aws:kms:ap-southeast-1:111122223333:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d $ aws-encryption-cli --encrypt --input /logs/finance.log \ --output /archive --suffix \ --encryption-context class=log \ --metadata-output ~/metadata \ --wrapping-keys key=$key1 key=$key2 key=$key3
PowerShell
PS C:\> $key1 = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' PS C:\> $key2 = 'arn:aws:kms:us-east-2:111122223333:key/0987ab65-43cd-21ef-09ab-87654321cdef' PS C:\> $key3 = 'arn:aws:kms:ap-southeast-1:111122223333:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d' PS C:\> aws-encryption-cli --encrypt --input D:\Logs\Finance.log ` --output D:\Archive --suffix ` --encryption-context class=log ` --metadata-output $home\Metadata.txt ` --wrapping-keys key=$key1 key=$key2 key=$key3

Perintah ini mendekripsi salinan terenkripsiFinance.logfile dan menulis keFinance.log.clearfile diFinancedirektori. 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-keysparameter. 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-keysparameter 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.

Bash
$ aws-encryption-cli --decrypt --input /archive/finance.log \ --wrapping-keys key=$key1 \ --output /finance --suffix '.clear' \ --metadata-output ~/metadata \ --max-encrypted-data-keys 3 \ --buffer \ --encryption-context class=log
PowerShell
PS C:\> aws-encryption-cli --decrypt ` --input D:\Archive\Finance.log ` --wrapping-keys key=$key1 ` --output D:\Finance --suffix '.clear' ` --metadata-output .\Metadata\Metadata.txt ` --max-encrypted-data-keys 3 ` --buffer ` --encryption-context class=log

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.

Bash
# Continue running even if an operation fails. set +e dir=$1 encryptionContext=$2 s3bucket=$3 s3folder=$4 masterKeyProvider="aws-kms" metadataOutput="/tmp/metadata-$(date +%s)" compress(){ gzip -qf $1 } encrypt(){ # -e encrypt # -i input # -o output # --metadata-output unique file for metadata # -m masterKey read from environment variable # -c encryption context read from the second argument. # -v be verbose aws-encryption-cli -e -i ${1} -o $(dirname ${1}) --metadata-output ${metadataOutput} -m key="${masterKey}" provider="${masterKeyProvider}" -c "${encryptionContext}" -v } s3put (){ # copy file argument 1 to s3 location passed into the script. aws s3 cp ${1} ${s3bucket}/${s3folder} } # Validate all required arguments are present. if [ "${dir}" ] && [ "${encryptionContext}" ] && [ "${s3bucket}" ] && [ "${s3folder}" ] && [ "${masterKey}" ]; then # Is $dir a valid directory? test -d "${dir}" if [ $? -ne 0 ]; then echo "Input is not a directory; exiting" exit 1 fi # Iterate over all the files in the directory, except *gz and *encrypted (in case of a re-run). for f in $(find ${dir} -type f \( -name "*" ! -name \*.gz ! -name \*encrypted \) ); do echo "Working on $f" compress ${f} encrypt ${f}.gz rm -f ${f}.gz s3put ${f}.gz.encrypted done; else echo "Arguments: <Directory> <encryption context> <s3://bucketname> <s3 folder>" echo " and ENV var \$masterKey must be set" exit 255 fi
PowerShell
#Requires -Modules AWSPowerShell, Microsoft.PowerShell.Archive Param ( [Parameter(Mandatory)] [ValidateScript({Test-Path $_})] [String[]] $FilePath, [Parameter()] [Switch] $Recurse, [Parameter(Mandatory=$true)] [String] $wrappingKeyID, [Parameter()] [String] $masterKeyProvider = 'aws-kms', [Parameter(Mandatory)] [ValidateScript({Test-Path $_})] [String] $ZipDirectory, [Parameter(Mandatory)] [ValidateScript({Test-Path $_})] [String] $EncryptDirectory, [Parameter()] [String] $EncryptionContext, [Parameter(Mandatory)] [ValidateScript({Test-Path $_})] [String] $MetadataDirectory, [Parameter(Mandatory)] [ValidateScript({Test-S3Bucket -BucketName $_})] [String] $S3Bucket, [Parameter()] [String] $S3BucketFolder ) BEGIN {} PROCESS { if ($files = dir $FilePath -Recurse:$Recurse) { # Step 1: Compress foreach ($file in $files) { $fileName = $file.Name try { Microsoft.PowerShell.Archive\Compress-Archive -Path $file.FullName -DestinationPath $ZipDirectory\$filename.zip } catch { Write-Error "Zip failed on $file.FullName" } # Step 2: Encrypt if (-not (Test-Path "$ZipDirectory\$filename.zip")) { Write-Error "Cannot find zipped file: $ZipDirectory\$filename.zip" } else { # 2>&1 captures command output $err = (aws-encryption-cli -e -i "$ZipDirectory\$filename.zip" ` -o $EncryptDirectory ` -m key=$wrappingKeyID provider=$masterKeyProvider ` -c $EncryptionContext ` --metadata-output $MetadataDirectory ` -v) 2>&1 # Check error status if ($? -eq $false) { # Write the error $err } elseif (Test-Path "$EncryptDirectory\$fileName.zip.encrypted") { # Step 3: Write to S3 bucket if ($S3BucketFolder) { Write-S3Object -BucketName $S3Bucket -File "$EncryptDirectory\$fileName.zip.encrypted" -Key "$S3BucketFolder/$fileName.zip.encrypted" } else { Write-S3Object -BucketName $S3Bucket -File "$EncryptDirectory\$fileName.zip.encrypted" } } } } } }

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 keydalamkeyARNvariabel. Perintah kedua mengenkripsi semua file dalam direktori input (rekursif) dan menulisnya ke direktori arsip. Perintah menggunakan--suffixparameter untuk menentukan.archivesufiks.

Parameter--cachingparameter 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 (sudodi Linux;Jalankan sebagai administratordi Windows).

Bash
$ keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab $ aws-encryption-cli --encrypt \ --input /var/log/httpd --recursive \ --output ~/archive --suffix .archive \ --wrapping-keys key=$keyArn \ --encryption-context class=log \ --suppress-metadata \ --caching capacity=1 max_age=10 max_messages_encrypted=10
PowerShell
PS C:\> $keyARN = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' PS C:\> 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

Untuk menguji efek caching kunci data, contoh ini menggunakanPerintah Ukurcmdlet diPowerShell. Ketika Anda menjalankan contoh ini tanpa caching kunci data, dibutuhkan sekitar 25 detik untuk menyelesaikan. Proses ini menghasilkan kunci data baru untuk setiap file dalam direktori.

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_encryptedpembatasan, 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