如何使用加AWS密 CLI - AWS Encryption SDK

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

如何使用加AWS密 CLI

本主題說明如何使用AWS加密 CLI 中的參數。如需範例,請參閱示例AWS加密 CLI。如需完整的文件,請參閱閱讀相關文件。這些範例中顯示的語法適用於AWS加密 CLI 2.1 版。 x 及更新版本。

注意

早於 4.0.0 的AWS加密 CLI 版本處於 e nd-of-support 階段

您可以從 2.1 版安全地更新。 x 和更新版本的AWS加密 CLI 的最新版本,無需任何代碼或數據更改。但是,2.1 版中引入了新的安全功能x 不向後相容。要從 1.7 版本更新。 x 或更早版本,您必須先更新到最新的 1。 x 版本的AWS加密 CLI。如需詳細資訊,請參閱 遷移您的AWS Encryption SDK

新的安全功能最初在AWS加密 CLI 版本 1.7 中發布。 X 和 2.0。 x. 但是,AWS加密 CLI 版本 1.8。 x 取代了 1.7 版本。 x 和AWS加密指令碼 2.1. x 取代了 2.0。 x. 如需詳細資訊,請參閱的aws-encryption-sdk-cli儲存庫中的相關安全性建議GitHub。

如需示範如何使用限制加密資料金鑰之安全性功能的範例,請參閱限制加密的資料金鑰

如需展示如何使用AWS KMS多區域金鑰的範例,請參閱使用多地區 AWS KMS keys

如何加密和解密資料

加AWS密 CLI 使用的功能,可AWS Encryption SDK輕鬆安全地加密和解密資料。

注意

--master-keys參數在 1.8 版中已棄用。 AWS加密 CLI 的 x,並在 2.1 版中刪除。 x. 請改用 --wrapping-keys 參數。從 2.1 版開始。 x,加密和解密時需要該--wrapping-keys參數。如需詳細資訊,請參閱 AWS Encryption SDK CLI 語法和參數參考

  • 當您在AWS加密 CLI 中加密資料時,您可以指定純文字資料和包裝金鑰 (或主要金鑰),例如 AWS KMS key in AWS Key Management Service (AWS KMS)。如果您使用自訂主要金鑰提供者,您也需要指定提供者。您也可以指定已加密訊息和加密操作相關中繼資料的輸出位置。加密內容是選用的,但建議使用。

    在版本 1.8 中。 x,使用--commitment-policy參數時需要--wrapping-keys參數;否則無效。從 2.1 版開始。 x--commitment-policy參數是可選的,但建議使用。

    aws-encryption-cli --encrypt --input myPlaintextData \ --wrapping-keys key=1234abcd-12ab-34cd-56ef-1234567890ab \ --output myEncryptedMessage \ --metadata-output ~/metadata \ --encryption-context purpose=test \ --commitment-policy require-encrypt-require-decrypt

    加AWS密 CLI 會在唯一的資料金鑰下加密您的資料。然後它加密您指定的包裝鍵下的數據密鑰。它會傳回已加密訊息和操作的相關中繼資料。已加密訊息包含加密的資料 (加密文字) 和資料金鑰的已加密副本。您不需要擔心存放和管理問題,或是遺失資料金鑰。

     

  • 解密資料時,傳入已加密訊息、選用的加密內容,以及純文字輸出和中繼資料的位置。您也可以指定AWS加密 CLI 可用來解密訊息的包裝金鑰,或告訴AWS加密 CLI 它可以使用加密訊息的任何包裝金鑰。

    從版本 1.8 開始。 x,解密時該--wrapping-keys參數是可選的,但建議使用。從 2.1 版開始。 x,加密和解密時需要該--wrapping-keys參數。

    解密時,您可以使用--wrapping-keys參數的 key 屬性來指定解密資料的包裝金鑰。在解密時指定AWS KMS包裝金鑰是選擇性的,但最佳作法可防止您使用不想使用的金鑰。如果您使用自訂主要金鑰提供者,則必須指定提供者和包裝金鑰。

    如果您不使用金鑰屬性,則必須將--wrapping-keys參數的探索屬性設定為true,如此可讓 En AWS cryption CLI 使用加密訊息的任何包裝金鑰來解密。

    最佳作法是使用--max-encrypted-data-keys參數來避免解密含有過多加密資料金鑰的格式錯誤訊息。指定預期的加密資料金鑰數目 (加密中使用的每個包裝金鑰各一個) 或合理的最大值 (例如 5)。如需詳細資訊,請參閱 限制加密的資料金鑰

    只有在處理完所有輸入之後,--buffer參數才會傳回純文字,包括驗證數位簽章 (如果有的話)。

    --decrypt-unsigned參數解密文本,並確保消息在解密之前未簽名。如果您使用參數並選取沒有--algorithm數位簽章的演算法套件來加密資料,請使用此參數。如果密文已簽署,解密會失敗。

    您可以使用--decrypt--decrypt-unsigned進行解密,但不能同時使用兩者。

    aws-encryption-cli --decrypt --input myEncryptedMessage \ --wrapping-keys key=1234abcd-12ab-34cd-56ef-1234567890ab \ --output myPlaintextData \ --metadata-output ~/metadata \ --max-encrypted-data-keys 1 \ --buffer \ --encryption-context purpose=test \ --commitment-policy require-encrypt-require-decrypt

    加AWS密 CLI 使用包裝金鑰來解密加密訊息中的資料金鑰。接著使用資料金鑰來解密您的資料。它會傳回您的純文字資料和操作的相關中繼資料。

如何指定包裝鍵

在加密 CLI 中AWS加密資料時,您需要至少指定一個包裝金鑰 (或主要金鑰)。您可以使用 AWS KMS keys in AWS Key Management Service (AWS KMS)、從自訂主金鑰提供者包裝金鑰,或兩者都使用。自訂主金鑰提供者可以是任何相容的 Python 主金鑰提供者。

要在版本 1.8 中指定包裝鍵。 x 及更高版本,使用--wrapping-keys參數 (-w)。此參數的值是具有attribute=value格式的屬性集合。您使用的屬性取決於主金鑰提供者和命令。

  • AWS KMS。 在加密命令中,您必須指定帶有密屬性的--wrapping-keys參數。從 2.1 版開始。 x,在解密命令中也需要--wrapping-keys參數。解密時,--wrapping-keys參數必須具有值為 true (但不能兩者) 的引鍵屬性或探索屬性。其他屬性是可選的。

  • 自訂主金鑰提供者。您必須在每個指令中指定一個--wrapping-keys參數。參數值必須擁有 keyprovider 屬性。

您可以在同一指令中包括多個--wrapping-keys參數和多個關鍵屬性。

包裝關鍵參數屬性

--wrapping-keys 參數的值包含下列屬性以及其值。所有加密指令都需要--master-keys參數 (或參數)。--wrapping-keys從 2.1 版開始。 x,解密時也需要--wrapping-keys參數。

如果屬性名稱或值包含空格或特殊字元,請同時用引號括住名稱和值。例如:--wrapping-keys key=12345 "provider=my cool provider"

索引鍵:指定包裝索引鍵

使用 key 屬性來識別包裝鍵。加密時,值可以是主要金鑰提供者可識別的任何金鑰識別碼。

--wrapping-keys key=1234abcd-12ab-34cd-56ef-1234567890ab

在加密命令中,您必須包含至少一個屬性和值。要在多個包裝密鑰下加密數據密鑰,請使用多個密鑰屬性

aws-encryption-cli --encrypt --wrapping-keys key=1234abcd-12ab-34cd-56ef-1234567890ab key=1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d

在使用的加密命令中AWS KMS keys,key 的值可以是密鑰 ID,其密鑰 ARN,別名或別名 ARN。例如,此加密命令在 key 屬性的值中使用別名 ARN。有關的密鑰標識符的詳細信息AWS KMS key,請參閱AWS Key Management Service開發人員指南中的密鑰標識符

aws-encryption-cli --encrypt --wrapping-keys key=arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias

在使用自訂主金鑰提供者的解密命令中,keyprovider 屬性是必要的。

\\ Custom master key provider aws-encryption-cli --decrypt --wrapping-keys provider='myProvider' key='100101'

在使用的解密命令中AWS KMS,您可以使用金鑰屬性來指定AWS KMS keys要用於解密的,或使用值為的探索屬性true,這可讓 En AWS cryption CLI 使用任何AWS KMS key用來加密訊息的屬性。如果指定AWS KMS key,它必須是用來加密郵件的其中一個包裝金鑰。

指定環繞索引鍵是AWS Encryption SDK最佳作法。它可以確保您使用AWS KMS key要使用的。

在解密命令中,密屬性的值必須是密鑰 ARN

\\ AWS KMS key aws-encryption-cli --decrypt --wrapping-keys key=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
探索:解密AWS KMS key時使用任何

如果您在AWS KMS keys解密時不需要限制使用,可以使用探索屬性值為。true的值true允許AWS加密 CLI 使用任何加密訊息AWS KMS key的方式來解密。如果您未指定探查屬性,則探查為 false (預設值)。索屬性僅在解密命令中有效,且僅在使用加密郵件時才有效AWS KMS keys。

值為的探索屬性可替代使用索引鍵屬性來指定AWS KMS keys。true解密使用加密的郵件時AWS KMS keys,每個--wrapping-keys參數都必須具有金鑰屬性或探索屬性值為 (但不能同時使用兩者)。true

當探索為 true 時,最佳作法是使用探索分割區探索帳戶屬性,將使AWS KMS keys用的屬性限制為您指定的屬性。AWS 帳戶在下列範例中,探查屬性允許加AWS密 CLI 使用指定AWS KMS key的任何屬性AWS 帳戶。

aws-encryption-cli --decrypt --wrapping-keys \ discovery=true \ discovery-partition=aws \ discovery-account=111122223333 \ discovery-account=444455556666
提供者:指定主要金鑰提供者

provider 屬性識別主金鑰提供者。預設值是 aws-kms,代表 AWS KMS。如果您使用不同的主金鑰提供者,則 provider 屬性為必要。

--wrapping-keys key=12345 provider=my_custom_provider

如需有關使用自訂 (非AWS KMS) 主要金鑰提供者的詳細資訊,請參閱AWS加密 CLI 存放庫的 README 檔案中的進階組態主題。

區域:指定 AWS 區域

使用區域屬性來指定AWS 區域的AWS KMS key。此屬性僅在加密命令中有效,且僅適用於主金鑰提供者是 AWS KMS 時。

--encrypt --wrapping-keys key=alias/primary-key region=us-east-2

AWS如果金鑰屬性值包含區域 (例如 ARN),則加密 CLI 命令會使用在金鑰屬性值中指定的。如果金鑰值指定 aAWS 區域,則會忽略該區域屬性。AWS 區域

region 屬性優先於其他區域規格。如果您不使用區域屬性,En AWS cryption CLI 命令會使用您AWS 區域AWS CLI指定的設定 (如果有的話) 中指定的,或您的預設設定檔。

Profile:指定命名設定檔

使用 profile 屬性可指定 AWS CLI 命名描述檔。具名的設定檔可以包含認證和AWS 區域. 此屬性僅適用於主金鑰提供者是 AWS KMS 時。

--wrapping-keys key=alias/primary-key profile=admin-1

您可以使用 profile 屬性來指定加密和解密命令中的備用登入資料。在加密命令中,只有當金鑰值不包含區域且沒有區域屬性時,Encryp AWS tion CLI 才會AWS 區域在指定的設定檔中使用。在解密命令AWS 區域中,會忽略名稱設定檔中的。

如何指定多個包裝鍵

您可以在每個指令中指定多個環繞金鑰 (或主金鑰)。

如果您指定多個環繞金鑰,第一個包裝金鑰會產生並加密用於加密資料的資料金鑰。其他包裝金鑰會加密相同的資料金鑰。產生的加密訊息包含加密的資料 (「密文」) 和加密資料金鑰的集合,每個包裝金鑰一個加密。任何包裝都可以解密一個加密的數據密鑰,然後解密數據。

有兩種方法可以指定多個包裝鍵:

  • --wrapping-keys參數值中包含多個關鍵屬性。

    $key_oregon=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab $key_ohio=arn:aws:kms:us-east-2:111122223333:key/0987ab65-43cd-21ef-09ab-87654321cdef --wrapping-keys key=$key_oregon key=$key_ohio
  • 在同一個命令中加入多個 --wrapping-keys 參數。當您指定的屬性值不適用於指令中的所有環繞鍵時,請使用此語法。

    --wrapping-keys region=us-east-2 key=alias/test_key \ --wrapping-keys region=us-west-1 key=alias/test_key

值為的探索屬性true可讓AWS加密 CLI 使用任何AWS KMS key加密郵件的屬性。如果您在同一指令中使用多個--wrapping-keys參數,則discovery=true在任何--wrapping-keys參數中使用會有效地取代其他--wrapping-keys參數中關鍵屬性的限制。

例如,在下列命令中,第一個--wrapping-keys參數中的金鑰屬性會將AWS加密 CLI 限制為指定的AWS KMS key。不過,第二個--wrapping-keys參數中的探索屬性可讓AWS加密 CLI 使用指定帳戶AWS KMS key中的任何來解密郵件。

aws-encryption-cli --decrypt \ --wrapping-keys key=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \ --wrapping-keys discovery=true \ discovery-partition=aws \ discovery-account=111122223333 \ discovery-account=444455556666

如何提供輸入

加密 CLI 中的AWS加密作業會將純文字資料做為輸入,並傳回加密的訊息。解密操作採用已加密訊息做為輸入,並傳回純文字資料。

在所有AWS加密 CLI 命令中,都需要--input參數 (-i) 告訴加AWS密 CLI 在哪裡可以找到輸入。

您可以透過以下任何方式來提供輸入:

  • 使用檔案。

    --input myData.txt
  • 使用檔案名稱模式。

    --input testdir/*.xml
  • 使用目錄或目錄名稱模式。當輸入是目錄時,--recursive 參數 (-r, -R) 為必要。

    --input testdir --recursive
  • 將輸入輸送到命令 (stdin)。使用 - 參數的 --input 值。(--input 參數一律為必要)。

    echo 'Hello World' | aws-encryption-cli --encrypt --input -

如何指定輸出位置

--output參數告訴AWS加密 CLI 在何處寫入加密或解密操作的結果。每個AWS加密 CLI 命令都需要此功能。加AWS密 CLI 會為操作中的每個輸入文件創建一個新的輸出文件。

如果輸出檔案已存在,預設情況下,AWS加密 CLI 會列印警告,然後覆寫該檔案。若要防止覆寫,請使用 --interactive 參數,這會在覆寫前提示您確認;或者 --no-overwrite,如果輸出會造成覆寫則略過輸入。若要隱藏覆寫警告,請使用 --quiet。若要從AWS加密 CLI 擷取錯誤和警告,請使用2>&1重新導向運算子將它們寫入輸出串流。

注意

覆寫輸出檔案的命令首先會刪除輸出檔案。如果命令失敗,輸出檔案可能已遭到刪除。

您可以透過幾種方法指定輸出位置。

  • 指定檔案名稱。如果指定檔案路徑,路徑中的所有目錄都必須存在,命令才能執行。

    --output myEncryptedData.txt
  • 指定目錄。執行命令之前,輸出目錄必須存在。

    如果輸入包含子目錄,命令會在指定的目錄之下重新產生子目錄。

    --output Test

    當輸出位置為目錄 (不含檔案名稱) 時,AWS加密 CLI 會根據輸入檔案名稱加上尾碼建立輸出檔案名稱。加密操作會附加 .encrypted 到輸入檔案名稱,而解密操作會附加 .decrypted。若要變更尾碼,請使用 --suffix 參數。

    例如,如果您加密 file.txt,加密命令會建立 file.txt.encrypted。如果您解密 file.txt.encrypted,解密命令會建立 file.txt.encrypted.decrypted

     

  • 寫入命令列 (stdout)。輸入 - 參數的 --output 值。您可以使用 --output -,將輸出輸送到另一個命令或程式。

    --output -

如何使用加密內容

加AWS密 CLI 可讓您在加密和解密命令中提供加密內容。這不是必要項目,但它是我們建議的密碼編譯最佳實務。

加密內容是一種任意、非私密額外驗證資料。在AWS加密 CLI 中,加密內容由name=value配對的集合組成。您可以使用此配對中的任何內容,包括檔案的相關資訊、可協助您在日誌中尋找加密操作的資料,或者您授予或政策要求的資料。

在加密命令中

您在加密命令中指定的加密內容,以及 CMM 新增的任何額外配對,將以密碼編譯的方式繫結至加密的資料。它也會納入命令傳回的已加密訊息中 (以純文字形式)。如果您使用的是AWS KMS key,加密內容也可能會以純文字顯示在稽核記錄和記錄中,例如。AWS CloudTrail

以下範例顯示使用三個 name=value 配對的加密內容。

--encryption-context purpose=test dept=IT class=confidential

在解密命令中

在解密命令中,加密內容可協助您確認您正在解密正確的已加密訊息。

即使加密時有使用加密內容,您也不需要在解密命令中提供加密內容。不過,如果您這麼做,En AWS cryption CLI 會驗證解密命令的加密內容中的每個元素是否符合加密訊息的加密內容中的元素。如果沒有相符元素,解密命令會失敗。

例如,以下命令只有在加密內容包含 dept=IT 時,才會解密已加密訊息。

aws-encryption-cli --decrypt --encryption-context dept=IT ...

加密內容是安全策略的重要部分。不過,在選擇加密內容時,請記住它的值不是秘密。請勿在加密內容中包含任何機密資料。

指定加密內容

  • encrypt 命令中,使用 --encryption-context 參數搭配一或多個 name=value 對組。使用空格來分隔每個對組。

    --encryption-context name=value [name=value] ...
  • decrypt 命令中,--encryption-context 參數值可以包含 name=value 對組、name 元素 (沒有值),或兩者的組合。

    --encryption-context name[=value] [name] [name=value] ...

如果 name 對組中的 valuename=value 包含空格或特殊字元,請用引號括住整個對組。

--encryption-context "department=software engineering" "AWS 區域=us-west-2"

例如,此加密命令包含使用兩個對組 (purpose=testdept=23) 的加密內容。

aws-encryption-cli --encrypt --encryption-context purpose=test dept=23 ...

這些解密命令可以成功。每個命令中的加密內容是原始加密內容的子集。

\\ Any one or both of the encryption context pairs aws-encryption-cli --decrypt --encryption-context dept=23 ... \\ Any one or both of the encryption context names aws-encryption-cli --decrypt --encryption-context purpose ... \\ Any combination of names and pairs aws-encryption-cli --decrypt --encryption-context dept purpose=test ...

不過,這些解密命令會失敗。已加密訊息的加密內容不包含指定的元素。

aws-encryption-cli --decrypt --encryption-context dept=Finance ... aws-encryption-cli --decrypt --encryption-context scope ...

如何指定承諾產品原則

若要設定命令的承諾原則,請使用--commitment-policy參數。此參數在 1.8 版中引入。 x. 它在加密和解密命令中是有效的。您設定的承諾原則僅對其顯示的命令有效。如果您未為命令設定承諾原則,則加AWS密 CLI 會使用預設值。

例如,下列參數值會將履約承諾原則設定為require-encrypt-allow-decrypt,該原則一律會使用金鑰承諾進行加密,但會將加密的加密文字 (含或不使用金鑰承諾使用)。

--commitment-policy require-encrypt-allow-decrypt

如何在組態檔案中存放參數

您可以將常用的AWS加密 CLI 參數和值儲存在組態檔案中,以節省時間並避免輸入錯誤。

組態檔是一個文字檔,其中包含AWS加密 CLI 命令的參數和值。當您參照AWS加密 CLI 命令中的組態檔時,參照會被組態檔中的參數和值取代。其效果如同您在命令列中輸入檔案內容。組態檔案可使用任何名稱、位於目前使用者可存取的任何目錄中。

下面的示例配置文件,key.conf, 指定了兩個不同AWS KMS keys的區域。

--wrapping-keys key=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab --wrapping-keys key=arn:aws:kms:us-east-2:111122223333:key/0987ab65-43cd-21ef-09ab-87654321cdef

若要在命令中使用組態檔案,請在檔案名稱前加上 @ 符號 (@)。在PowerShell控制台中,使用反引號字符轉義 at 符號(`@)。

此範例命令在加密命令中使用 key.conf 檔案。

Bash
$ aws-encryption-cli -e @key.conf -i hello.txt -o testdir
PowerShell
PS C:\> aws-encryption-cli -e `@key.conf -i .\Hello.txt -o .\TestDir

組態檔案規則

使用組態檔案的規則如下所示:

  • 您可以在每個組態檔案中包含多個參數,它們可用任何順序列出。請在不同的行列出每個參數及其值 (如果有)。

  • 使用 # 可新增註解到所有行或部分行。

  • 您可以將參考加入其他組態檔案。不要使用反引號來逃避標@誌,即使在PowerShell。

  • 如果您在組態檔案中使用引號,引號內的文字不能跨越多行。

例如,這是範例 encrypt.conf 檔案的內容。

# Archive Files --encrypt --output /archive/logs --recursive --interactive --encryption-context class=unclassified dept=IT --suffix # No suffix --metadata-output ~/metadata @caching.conf # Use limited caching

您也可以在命令中包含多個組態檔案。此範例命令同時使用 encrypt.confmaster-keys.conf 組態檔案。

Bash
$ aws-encryption-cli -i /usr/logs @encrypt.conf @master-keys.conf
PowerShell
PS C:\> aws-encryption-cli -i $home\Test\*.log `@encrypt.conf `@master-keys.conf

下一個:嘗試加AWS密 CLI 範例