

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

# 如何使用 AWS 加密 CLI
<a name="crypto-cli-how-to"></a>

本主題說明如何使用 AWS 加密 CLI 中的參數。如需範例，請參閱 [AWS 加密 CLI 的範例](crypto-cli-examples.md)。如需完整的文件，請參閱[閱讀相關文件](https://aws-encryption-sdk-cli.readthedocs.io/en/latest/)。這些範例中顯示的語法適用於 AWS Encryption CLI 2.1.*x* 版及更新版本。

**注意**  
4.0.0 之前的 AWS 加密 CLI 版本處於[end-of-support階段](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)。  
您可以安全地從 2.1.*x* 版和更新版本更新至最新版的 AWS 加密 CLI，而不需要變更任何程式碼或資料。不過，2.1.*x* 版中引進[的新安全功能](about-versions.md#version-2)無法回溯相容。若要從 1.7.*x* 版或更早版本更新，您必須先更新至 AWS 加密 CLI 的最新 1.*x* 版本。如需詳細資訊，請參閱[遷移您的 AWS Encryption SDK](migration.md)。  
新的安全功能最初在 AWS 加密 CLI 版本 1.7.*x* 和 2.0.*x* 中發行。不過， AWS Encryption CLI 1.8.*x* 版取代了 1.7.*x* 版，而 AWS Encryption CLI 2.1.*x* 版取代了 2.0.*x*。如需詳細資訊，請參閱 GitHub 上 [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/) 儲存庫中的相關[安全建議](https://github.com/aws/aws-encryption-sdk-cli/security/advisories/GHSA-2xwp-m7mq-7q3r)。

如需示範如何使用限制加密資料金鑰之安全功能的範例，請參閱 [限制加密的資料金鑰](configure.md#config-limit-keys)。

如需示範如何使用 AWS KMS 多區域金鑰的範例，請參閱 [使用多區域 AWS KMS keys](configure.md#config-mrks)。

**Topics**
+ [如何加密和解密資料](#crypto-cli-e-d-intro)
+ [如何指定包裝金鑰](#crypto-cli-master-key)
+ [如何提供輸入](#crypto-cli-input)
+ [如何指定輸出位置](#crypto-cli-output)
+ [如何使用加密內容](#crypto-cli-encryption-context)
+ [如何指定承諾政策](#crypto-cli-commitment-policy)
+ [如何在組態檔案中存放參數](#crypto-cli-config-file)

## 如何加密和解密資料
<a name="crypto-cli-e-d-intro"></a>

Encryption CLI AWS 使用 的功能 AWS Encryption SDK ，讓您輕鬆加密和解密資料。

**注意**  
`--master-keys` 參數已在 AWS 加密 CLI 的 1.8.*x* 版中棄用，並在 2.1.*x* 版中移除。請改用 `--wrapping-keys` 參數。從 2.1.*x* 版開始，在加密和解密時需要 `--wrapping-keys` 參數。如需詳細資訊，請參閱[AWS Encryption SDK CLI 語法和參數參考](crypto-cli-reference.md)。
+ 當您在 AWS 加密 CLI 中加密資料時，您可以指定純文字資料和[包裝金鑰](concepts.md#master-key) （或*主金鑰*)，例如 AWS KMS key in AWS Key Management Service ()AWS KMS。如果您使用的是自訂主金鑰提供者，您也需要指定提供者。您也可以指定[已加密訊息](concepts.md#message)和加密操作相關中繼資料的輸出位置。[加密內容](concepts.md#encryption-context)是選用的，但建議使用。

  在 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 會使用唯一的資料金鑰加密您的資料。然後，它會在您指定的包裝金鑰下加密資料金鑰。它會傳回[已加密訊息](concepts.md#message)和操作的相關中繼資料。已加密訊息包含加密的資料 (*加密文字*) 和資料金鑰的已加密副本。您不需要擔心存放和管理問題，或是遺失資料金鑰。

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

  從 1.8.*x* 版開始， 參數在解密時`--wrapping-keys`為選用，但建議使用。從 2.1.*x* 版開始，在加密和解密時需要 `--wrapping-keys` 參數。

  解密時，您可以使用 `--wrapping-keys` 參數的**金鑰**屬性來指定解密資料的包裝金鑰。在解密時指定 AWS KMS 包裝金鑰是選用的，但[最佳實務](best-practices.md)是防止您使用不打算使用的金鑰。如果您使用的是自訂主金鑰提供者，則必須指定提供者和包裝金鑰。

  如果您不使用**金鑰**屬性，則必須將 `--wrapping-keys` 參數的[**探索**屬性](#discovery-cli-attribute)設定為 `true`，這可讓 AWS Encryption CLI 使用任何加密訊息的包裝金鑰來解密。

  最佳實務是使用 `--max-encrypted-data-keys` 參數，以避免解密格式不正確的訊息，其中包含過多的加密資料金鑰。指定預期的加密資料金鑰數量 （用於加密的每個包裝金鑰各一個） 或合理的上限 （例如 5)。如需詳細資訊，請參閱[限制加密的資料金鑰](configure.md#config-limit-keys)。

  `--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 Encryption CLI 使用包裝金鑰來解密加密訊息中的資料金鑰。接著使用資料金鑰來解密您的資料。它會傳回您的純文字資料和操作的相關中繼資料。

## 如何指定包裝金鑰
<a name="crypto-cli-master-key"></a>

當您在 AWS 加密 CLI 中加密資料時，您需要指定至少一個[包裝金鑰](concepts.md#master-key) （或*主金鑰*)。您可以使用 AWS KMS keys in AWS Key Management Service (AWS KMS)、來自自訂[主金鑰提供者的包裝金鑰](concepts.md#master-key-provider)，或兩者。自訂主金鑰提供者可以是任何相容的 Python 主金鑰提供者。

若要在 1.8.*x* 版和更新版本中指定包裝金鑰，請使用 `--wrapping-keys` 參數 (`-w`)。此參數的值是 `attribute=value` 格式的[屬性](#cli-master-key-attributes)集合。您使用的屬性取決於主金鑰提供者和命令。
+ **AWS KMS**。 在加密命令中，您必須指定具有**金鑰**屬性的`--wrapping-keys`參數。從 2.1.*x* 版開始，解密命令中也需要 `--wrapping-keys` 參數。解密時， `--wrapping-keys` 參數必須具有索引**鍵**屬性或值為 `true`（但不能同時具有兩者） 的**探索**屬性。其他屬性是選用的。
+ **自訂主金鑰提供者**。您必須在每個命令中指定`--wrapping-keys`參數。參數值必須擁有 **key** 和 **provider** 屬性。

您可以在相同的命令中包含[多個`--wrapping-keys`參數](#cli-many-cmks)和多個**金鑰**屬性。

### 包裝金鑰參數屬性
<a name="cli-master-key-attributes"></a>

`--wrapping-keys` 參數的值包含下列屬性以及其值。所有加密命令都需要 `--wrapping-keys` 參數 （或 `--master-keys` 參數）。從 2.1.*x* 版開始，解密時也需要 `--wrapping-keys` 參數。

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

**金鑰：指定包裝金鑰**  
使用**金鑰**屬性來識別包裝金鑰。加密時，該值可以是主金鑰提供者辨識的任何金鑰識別符。  

```
--wrapping-keys key=1234abcd-12ab-34cd-56ef-1234567890ab
```
在加密命令中，您必須包含至少一個**金鑰**屬性和值。若要在多個包裝金鑰下加密資料金鑰，請使用[多個**金鑰**屬性](#cli-many-cmks)。  

```
aws-encryption-cli --encrypt --wrapping-keys key=1234abcd-12ab-34cd-56ef-1234567890ab key=1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d
```
在 使用的加密命令中 AWS KMS keys，**金鑰**的值可以是金鑰 ID、其金鑰 ARN、別名名稱或別名 ARN。例如，此加密命令在 **key** 屬性的值中使用別名 ARN。如需 金鑰識別符的詳細資訊 AWS KMS key，請參閱《 *AWS Key Management Service 開發人員指南*》中的[金鑰識別符](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id)。  

```
aws-encryption-cli --encrypt --wrapping-keys key=arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias
```
在使用自訂主金鑰提供者的解密命令中，**key** 和 **provider** 屬性是必要的。  

```
\\ Custom master key provider
aws-encryption-cli --decrypt --wrapping-keys provider='myProvider' key='100101'
```
在 使用的解密命令中 AWS KMS，您可以使用**金鑰**屬性來指定 AWS KMS keys 要用於解密的 ，或使用值為 的[**探索**屬性](#discovery-cli-attribute)`true`，這可讓 AWS Encryption CLI 使用任何用來加密訊息 AWS KMS key 的 。如果您指定 AWS KMS key，它必須是用來加密訊息的其中一個包裝金鑰。  
指定包裝金鑰是[AWS Encryption SDK 最佳實務](best-practices.md)。它可確保您使用 AWS KMS key 打算使用的 。  
在解密命令中，**金鑰**屬性的值必須是[金鑰 ARN](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-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 時使用任何**  <a name="discovery-cli-attribute"></a>
如果您不需要限制在解密 AWS KMS keys 時使用 ，則可以使用值為 的 **探索**屬性`true`。值 `true`可讓 AWS 加密 CLI 使用加密訊息的任何 AWS KMS key 進行解密。如果您未指定**探索**屬性，則 探索為 `false`（預設）。**探索**屬性僅在解密命令中有效，且僅在訊息加密時使用 AWS KMS keys。  
值為 的**探索**屬性`true`是使用**金鑰**屬性來指定的替代方案 AWS KMS keys。解密使用 加密的訊息時 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** 屬性識別[主金鑰提供者](concepts.md#master-key-provider)。預設值是 `aws-kms`，代表 AWS KMS。如果您使用不同的主金鑰提供者，則 **provider** 屬性為必要。  

```
--wrapping-keys key=12345 provider=my_custom_provider
```
如需使用自訂 （非AWS KMS) 主金鑰提供者的詳細資訊，請參閱[AWS 加密 CLI ](https://github.com/aws/aws-encryption-sdk-cli/)儲存庫的 [README](https://github.com/aws/aws-encryption-sdk-cli/blob/master/README.rst) 檔案中的**進階組態**主題。

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

```
--encrypt --wrapping-keys key=alias/primary-key region=us-east-2
```
AWS 如果加密 CLI 命令包含區域，例如 ARN，則會使用**金鑰**屬性值中 AWS 區域 指定的 。如果**金鑰**值指定 a AWS 區域，則會忽略**區域**屬性。  
**region** 屬性優先於其他區域規格。如果您不使用區域屬性， AWS Encryption CLI 命令會使用 AWS CLI [您命名設定檔](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles)中 AWS 區域 指定的 ，如果有的話，或是您的預設設定檔。

**Profile：指定命名設定檔**  
使用 **profile** 屬性可指定 AWS CLI [命名描述檔](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles)。具名設定檔可以包含登入資料和 AWS 區域。此屬性僅適用於主金鑰提供者是 AWS KMS時。  

```
--wrapping-keys key=alias/primary-key profile=admin-1
```
您可以使用 **profile** 屬性來指定加密和解密命令中的備用登入資料。在加密命令中，只有在**金鑰**值不包含區域且沒有**區域**屬性時， AWS 加密 CLI 才會在具名設定檔 AWS 區域 中使用 。在解密命令中，會忽略名稱設定檔 AWS 區域 中的 。

### 如何指定多個包裝金鑰
<a name="cli-many-cmks"></a>

您可以在每個命令中指定多個包裝金鑰 （或*主金鑰*)。

如果您指定多個包裝金鑰，第一個包裝金鑰會產生並加密用於加密資料的資料金鑰。其他包裝金鑰會加密相同的資料金鑰。產生的[加密訊息](concepts.md#message)包含加密的資料 (「加密文字」) 和加密資料金鑰的集合，每個包裝金鑰各加密一個。任何包裝都可以解密一個加密的資料金鑰，然後解密資料。

有兩種方式可以指定多個包裝金鑰：
+ 在`--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`參數，在任何`--wrapping-keys`參數`discovery=true`中使用 會有效地覆寫其他`--wrapping-keys`參數中**金鑰**屬性的限制。

例如，在下列命令中，第一個`--wrapping-keys`參數中的**金鑰**屬性會將 AWS 加密 CLI 限制為指定的 AWS KMS key。不過，第二個`--wrapping-keys`參數中的 **探索**屬性可讓 AWS Encryption 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
```

## 如何提供輸入
<a name="crypto-cli-input"></a>

 AWS 加密 CLI 中的加密操作會將純文字資料做為輸入，並傳回[加密的訊息](concepts.md#message)。解密操作採用已加密訊息做為輸入，並傳回純文字資料。

所有 AWS Encryption CLI 命令都需要 `--input` 參數 (`-i`) ，告知 AWS Encryption CLI 在何處尋找輸入。

您可以透過以下任何方式來提供輸入：
+ 使用檔案。

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

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

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

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

## 如何指定輸出位置
<a name="crypto-cli-output"></a>

`--output` 參數會告知 AWS Encryption CLI 在何處寫入加密或解密操作的結果。每個 AWS Encryption 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 -
  ```

## 如何使用加密內容
<a name="crypto-cli-encryption-context"></a>

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

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

**在加密命令中**

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

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

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

**在解密命令中**

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

即使加密時有使用加密內容，您也不需要在解密命令中提供加密內容。不過，如果您這樣做， AWS 加密 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` 對組中的 `value` 或 `name=value` 包含空格或特殊字元，請用引號括住整個對組。

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

例如，此加密命令包含使用兩個對組 (`purpose=test` 和 `dept=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 ...
```

## 如何指定承諾政策
<a name="crypto-cli-commitment-policy"></a>

若要設定命令[的承諾政策](concepts.md#commitment-policy)，請使用 [`--commitment-policy` 參數](crypto-cli-reference.md#syntax-commitment-policy)。此參數在 1.8.*x* 版中推出。它在加密和解密命令中有效。您設定的承諾政策僅適用於其出現的命令。如果您未設定命令的承諾政策， AWS 加密 CLI 會使用預設值。

例如，下列參數值會將承諾政策設定為 `require-encrypt-allow-decrypt`，該政策一律使用金鑰承諾加密，但會解密使用或不使用金鑰承諾加密的加密文字。

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

## 如何在組態檔案中存放參數
<a name="crypto-cli-config-file"></a>

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

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

下列範例組態檔案 AWS KMS keys 會在不同的區域中`key.conf`指定兩個 。

```
--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 主控台中，請使用反引號字元來逸出 @ 符號 (``@`)。

此範例命令在加密命令中使用 `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.conf` 和 `master-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 範例](crypto-cli-examples.md)