

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS Encryption SDK コマンドラインインターフェイス
<a name="crypto-cli"></a>

 AWS Encryption SDK コマンドラインインターフェイス (AWS Encryption CLI) を使用すると、 を使用して AWS Encryption SDK 、コマンドラインとスクリプトでデータをインタラクティブに暗号化および復号化できます。暗号化やプログラミングの専門知識は必要ありません。

**注記**  
4.0.0 より前のバージョンの AWS Encryption CLI は[end-of-supportフェーズ](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)にあります。  
バージョン 2.1.x 以降から、コードやデータを変更せずに最新バージョンの AWS Encryption CLI に安全に更新できます。ただし、バージョン 2.1.x で導入された[新しいセキュリティ機能](about-versions.md#version-2)には下位互換性がありません。バージョン 1.7.*x* 以前から更新するには、まず Encryption AWS CLI の最新バージョンの 1.*x* に更新する必要があります。詳細については、「[の移行 AWS Encryption SDK](migration.md)」を参照してください。  
新しいセキュリティ機能は、もともと AWS Encryption 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)を参照してください。

のすべての実装と同様に AWS Encryption SDK、Encryption AWS CLI には高度なデータ保護機能が用意されています。これには[エンベロープ暗号化](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/how-it-works.html#envelope-encryption)、追加の認証データ (AAD)、キー取得、[キーコミットメント](concepts.md#key-commitment)、署名で使用する 256 ビット AES-GCM などのセキュアで認証済みの対称キー[アルゴリズムスイート](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/supported-algorithms.html)などが含まれます。

 AWS Encryption CLI は 上に構築[AWS Encryption SDK for Python](python.md)されており、Linux、macOS、および Windows でサポートされています。コマンドやスクリプトを実行して、Linux や macOS の任意のシェル、Windows のコマンドプロンプトウィンドウ (cmd.exe)、任意のシステムの PowerShell コンソールでデータを暗号化および復号することができます。

Encryption AWS CLI AWS Encryption SDKを含む の言語固有の実装はすべて相互運用可能です。たとえば、 でデータを暗号化[AWS Encryption SDK for Java](java.md)し、Encryption CLI AWS で復号できます。

このトピックでは、Encryption AWS CLI を紹介し、インストールして使用する方法と、使用開始に役立ついくつかの例を示します。クイックスタートについては、 AWS セキュリティブログ[の「暗号化 CLI を使用してデータを AWS 暗号化および復号する方法](https://aws.amazon.com/blogs/security/how-to-encrypt-and-decrypt-your-data-with-the-aws-encryption-cli/)」を参照してください。詳細については、[「 ドキュメントを読み](https://aws-encryption-sdk-cli.readthedocs.io/en/latest/)、GitHub の aws-encryption-sdk-cli AWS リポジトリで Encryption CLI の開発に参加してください。」を参照してください。 [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/) 

**パフォーマンス**  
Encryption AWS CLI は 上に構築されています AWS Encryption SDK for Python。CLI を実行するたびに、Python ランタイムの新しいインスタンスが起動されます。パフォーマンスを向上させるには、個別のコマンドを何回も使用するのではなく、できるだけ 1 つのコマンドを使用します。例えば、ファイルごとに個別のコマンドを実行するのではなく、ディレクトリ内のファイルを再帰的に処理する 1 つのコマンドを実行します。

**Topics**
+ [CLI のインストール](crypto-cli-install.md)
+ [CLI の使用方法](crypto-cli-how-to.md)
+ [例](crypto-cli-examples.md)
+ [構文およびパラメータのリファレンス](crypto-cli-reference.md)
+ [バージョン](crypto-cli-versions.md)

# AWS Encryption SDK コマンドラインインターフェイスのインストール
<a name="crypto-cli-install"></a>

このトピックでは、Encryption AWS CLI をインストールする方法について説明します。詳細については、GitHub の [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/) リポジトリおよび「[ドキュメントを読む](https://aws-encryption-sdk-cli.readthedocs.io/en/latest/)」を参照してください。

**Topics**
+ [前提条件のインストール](#crypto-cli-prerequisites)
+ [CLI のインストール](#install-sdk-cli)

## 前提条件のインストール
<a name="crypto-cli-prerequisites"></a>

Encryption AWS CLI は 上に構築されています AWS Encryption SDK for Python。 AWS Encryption CLI をインストールするには、Python と `pip`Python パッケージ管理ツールである が必要です。Python と `pip` は、サポートされているすべてのプラットフォームで使用できます。

Encryption CLI AWS をインストールする前に、次の前提条件をインストールします。

**Python**  
Encryption CLI バージョン 4.2.0 AWS 以降では、Python 3.8 以降が必要です。  
以前のバージョンの AWS Encryption CLI は Python 2.7 および 3.4 以降をサポートしていますが、最新バージョンの AWS Encryption CLI を使用することをお勧めします。  
Python は、ほとんどの Linux と macOS のインストールに含まれていますが、Python 3.6 以降にアップグレードする必要があります。最新バージョンの Python の使用をお勧めします。Windows では Python をインストールする必要があります。デフォルトではインストールされていません。Python をダウンロードしてインストールするには、「[Python のダウンロード](https://www.python.org/downloads/)」を参照してください。  
Python がインストールされているかどうかを確認するには、コマンドラインで次のように入力します。  

```
python
```
Python のバージョンを確認するには `-V` (大文字 V) パラメータを使用します。  

```
python -V
```
Windows では、Python をインストールしたら、`Python.exe` ファイルのパスを **Path** 環境変数の値に追加します。  
デフォルトでは、`$home` サブディレクトリの Python がインストールされているすべてのユーザーまたはユーザープロファイルディレクトリ内 (`%userprofile%` または `AppData\Local\Programs\Python`) にあります。システム内の `Python.exe` ファイルの場所を確認するには、次のいずれかのレジストリキーを確認します。PowerShell を使用してレジストリを検索できます。  

```
PS C:\> dir HKLM:\Software\Python\PythonCore\version\InstallPath
# -or-
PS C:\> dir HKCU:\Software\Python\PythonCore\version\InstallPath
```

**pip**  
`pip` は Python パッケージマネージャーです。 AWS Encryption CLI とその依存関係をインストールするには、8.1 `pip` 以降が必要です。`pip` のインストールまたはアップグレードのヘルプについては、`pip` ドキュメントの「[インストール](https://pip.pypa.io/en/latest/installing/)」を参照してください。  
Linux インストールでは、 8.1 より`pip`前のバージョンの では、Encryption CLI AWS が必要とする**暗号化**ライブラリを構築できません。`pip` バージョンを更新しないことを選択した場合は、ビルドツールを個別にインストールできます。詳細については、「[Building cryptography on Linux](https://cryptography.io/en/latest/installation.html#building-cryptography-on-linux)」を参照してください。

**AWS Command Line Interface**  
 AWS Command Line Interface (AWS CLI) は、Encryption CLI で (AWS KMS) AWS KMS keys で AWS Key Management Service AWS を使用している場合にのみ必要です。別の[マスターキープロバイダー](concepts.md#master-key-provider)を使用している場合、 AWS CLI は必要ありません。  
Encryption AWS CLI AWS KMS keys で を使用するには、 [をインストール](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)して[設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#cli-quick-configuration)する必要があります AWS CLI。この設定により、認証に使用する認証情報が AWS Encryption CLI AWS KMS で使用できるようになります。

## Encryption AWS CLI のインストールと更新
<a name="install-sdk-cli"></a>

最新バージョンの AWS Encryption CLI をインストールします。`pip` を使用して Encryption CLI AWS をインストールすると、 、Python 暗号化ライブラリ[AWS Encryption SDK for Python](python.md)、 など、CLI に必要な[ライブラリ](https://cryptography.io/en/latest/)が自動的にインストールされます[AWS SDK for Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)。

**注記**  
4.0.0 より前のバージョンの AWS Encryption CLI は[end-of-supportフェーズ](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)にあります。  
バージョン 2.1.x 以降から、コードやデータを変更せずに最新バージョンの AWS Encryption CLI に安全に更新できます。ただし、バージョン 2.1.x で導入された[新しいセキュリティ機能](about-versions.md#version-2)には下位互換性がありません。バージョン 1.7.*x* 以前から更新するには、まず Encryption AWS CLI の最新バージョンの 1.*x* に更新する必要があります。詳細については、「[の移行 AWS Encryption SDK](migration.md)」を参照してください。  
新しいセキュリティ機能は、もともと AWS Encryption 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)を参照してください。

**Encryption CLI AWS の最新バージョンをインストールするには**  

```
pip install aws-encryption-sdk-cli
```

**Encryption CLI AWS の最新バージョンにアップグレードするには**  

```
pip install --upgrade aws-encryption-sdk-cli
```

**Encryption CLI と AWS のバージョン番号を確認するには AWS Encryption SDK**  

```
aws-encryption-cli --version
```
出力には、両方のライブラリのバージョン番号が表示されます。  

```
aws-encryption-sdk-cli/2.1.0 aws-encryption-sdk/2.0.0
```

**Encryption CLI AWS の最新バージョンにアップグレードするには**  

```
pip install --upgrade aws-encryption-sdk-cli
```

Encryption AWS CLI をインストールすると AWS SDK for Python (Boto3)、最新バージョンの もインストールされます。Boto3 がインストールされている場合、インストーラは Boto3 のバージョンを確認し、必要に応じて更新します。

**インストールされている Boto3 のバージョンを確認するには**  

```
pip show boto3
```

**Boto3 の最新バージョンに更新するには**  

```
pip install --upgrade boto3
```

現在開発中の Encryption CLI AWS のバージョンをインストールするには、GitHub の [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/) リポジトリを参照してください。

`pip` を使用した Python パッケージのインストールおよびアップグレードの詳細については、[pip のドキュメント](https://pip.pypa.io/en/stable/quickstart/)を参照してください。

# Encryption AWS CLI の使用方法
<a name="crypto-cli-how-to"></a>

このトピックでは、Encryption CLI AWS でパラメータを使用する方法について説明します。例については「[Encryption AWS CLI の例](crypto-cli-examples.md)」を参照してください。完全なドキュメントについては、「[ドキュメントを読む](https://aws-encryption-sdk-cli.readthedocs.io/en/latest/)」を参照してください。これらの例に示す構文は、Encryption CLI AWS バージョン 2.1.*x* 以降用です。

**注記**  
4.0.0 より前のバージョンの AWS Encryption CLI は[end-of-supportフェーズ](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)にあります。  
バージョン 2.1.x 以降から、コードやデータを変更せずに最新バージョンの AWS Encryption CLI に安全に更新できます。ただし、バージョン 2.1.x で導入された[新しいセキュリティ機能](about-versions.md#version-2)には下位互換性がありません。バージョン 1.7.*x* 以前から更新するには、まず Encryption AWS CLI の最新バージョンの 1.*x* に更新する必要があります。詳細については、「[の移行 AWS Encryption SDK](migration.md)」を参照してください。  
新しいセキュリティ機能は、もともと AWS Encryption CLI バージョン 1.7.*x* および 2.0.*x* でリリースされました。ただし、 AWS Encryption CLI バージョン 1.8.*x* はバージョン 1.7.*x* に置き換わり、Encryption AWS 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>

 AWS Encryption CLI は の機能を使用して AWS Encryption SDK 、データを安全に暗号化および復号化することを容易にします。

**注記**  
`--master-keys` パラメータは AWS Encryption CLI のバージョン 1.8.*x* で非推奨となり、バージョン 2.1.*x* で削除されます。代わりに、`--wrapping-keys` パラメータを使用します。バージョン 2.1.*x* 以降は、`--wrapping-keys` パラメータが暗号化および復号化時に必要となります。詳細については、「[AWS Encryption SDK CLI 構文とパラメータリファレンス](crypto-cli-reference.md)」を参照してください。
+ Encryption CLI AWS でデータを暗号化するときは、プレーンテキストデータと in AWS Key Management Service () などの[ラッピングキー](concepts.md#master-key) (または*マスターキー*) AWS KMS key を指定しますAWS KMS。カスタムのマスターキープロバイダーを使用する場合は、プロバイダーを指定する必要もあります。また、[暗号化されたメッセージ](concepts.md#message)および暗号化オペレーションに関するメタデータの出力場所を指定します。[暗号化コンテキスト](concepts.md#encryption-context)はオプションですが、推奨されています。

  バージョン 1.8.*x* では、`--wrapping-keys` パラメータを使用するときに `--commitment-policy` パラメータが必要です。これがない場合は無効です。バージョン 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 Encryption CLI は、一意のデータキーでデータを暗号化します。その後、指定したラッピングキーでデータキーを暗号化します。[暗号化されたメッセージ](concepts.md#message)とオペレーションに関するメタデータが返されます。暗号化されたメッセージには、暗号化されたデータ (*暗号化テキスト*) およびデータキーの暗号化されたコピーが含まれます。データキーの保存、管理、または紛失について心配する必要はありません。

   
+ データを復号する際、暗号化されたメッセージ、オプションの暗号化コンテキスト、プレーンテキスト出力およびメタデータの場所を渡します。また、Encryption CLI AWS がメッセージの復号に使用できるラッピングキーを指定するか、メッセージを暗号化したラッピングキーを使用できることを AWS Encryption CLI に伝えます。

  バージョン 1.8.*x* 以降では、復号時の `--wrapping-keys` パラメータはオプションですが推奨されます。バージョン 2.1.*x* 以降は、`--wrapping-keys` パラメータが暗号化および復号化時に必要となります。

  復号するときには、`--wrapping-keys` パラメータの **key** 属性を使用して、データを復号化するラッピングキーを指定します。復号時に AWS KMS ラッピングキーを指定することはオプションですが、使用する予定のないキーを使用できないようにする[ベストプラクティス](best-practices.md)です。カスタムのマスターキープロバイダーを使用する場合は、プロバイダーおよびラッピングキーを指定する必要があります。

  key **** 属性を使用しない場合は、 `--wrapping-keys`パラメータの検出[****属性](#discovery-cli-attribute)を に設定する必要があります。これにより`true`、Encryption AWS CLI はメッセージを暗号化したラッピングキーを使用して復号化できます。

  ベストプラクティスとして、`--max-encrypted-data-keys` パラメータを使用して、暗号化されたデータキーの数が多すぎる不正な形式のメッセージの復号化を回避してください。暗号化されたデータキーの予想数 (暗号化で使用されるラッピングキーごとに 1 つ)、または適切な最大値 (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>

Encryption CLI でデータを暗号化する場合は、少なくとも 1 AWS つの[ラッピングキー](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**。暗号化コマンドでは、**key** 属性を使用して `--wrapping-keys` パラメータを指定する必要があります。バージョン 2.1.*x* 以降は、`--wrapping-keys` パラメータが復号化コマンドにも必要となります。復号化するとき、`--wrapping-keys` パラメータでは、**key** 属性を指定するか、**discovery** 属性を `true` にする必要があります (両方ではない)。その他の属性はオプションです。
+ **カスタムマスターキープロバイダー**。どのコマンドでも `--wrapping-keys` パラメータを指定する必要があります。パラメータ値に **key** および **provider** 属性を含める必要があります。

同じコマンドで[複数の `--wrapping-keys` パラメータ](#cli-many-cmks)および複数の **key** 属性を含めることができます。

### ラッピングキーパラメータの属性
<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"`。

**Key: ラッピングキーを指定します。**  
**key** 属性を使用してラッピングキーを識別します。暗号化時に、この値は、マスターキープロバイダーが認識する任意のキー識別子を使用できます。  

```
--wrapping-keys key=1234abcd-12ab-34cd-56ef-1234567890ab
```
暗号化コマンドでは、少なくとも 1 つの **key** 属性と値が含まれている必要があります。複数のラッピングキーでデータキーを暗号化するには、[複数の **key** 属性](#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、**key** 属性を使用して復号 AWS KMS keys に使用する を指定するか、 の値を持つ [**discovery** 属性](#discovery-cli-attribute)を指定できます。これにより`true`、Encryption AWS CLI AWS KMS key はメッセージの暗号化に使用された任意の を使用できます。を指定する場合 AWS KMS key、メッセージの暗号化に使用されるラッピングキーの 1 つである必要があります。  
ラッピングキーの指定は、[AWS Encryption SDK のベストプラクティス](best-practices.md)です。これにより、使用する AWS KMS key 予定の を使用することが保証されます。  
復号コマンドでは、**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 使用する を制限する必要がない場合は、**discovery** 属性を の値で使用できます`true`。の値`true`を指定すると、Encryption AWS CLI はメッセージを暗号化 AWS KMS key した を使用して復号できます。**discovery** 属性は、指定しない場合、`false` です (デフォルト)。**discovery** 属性は、復号コマンドで、メッセージが暗号化された場合にのみ有効です AWS KMS keys。  
**discovery** 属性を `true` にするのは、**key** 属性を使用して AWS KMS keysを指定することに代わる方法です。で暗号化されたメッセージを復号する場合 AWS KMS keys、各`--wrapping-keys`パラメータには**キー**属性または の値を持つ**検出**属性が必要ですが`true`、両方を持つことはできません。  
discovery が true の場合、**discovery-partition** 属性と **discovery-account** 属性を使用して、 AWS KMS keys 使用する を AWS アカウント 指定した 内のものに制限するのがベストプラクティスです。次の例では、**検出**属性により、Encryption AWS CLI は指定された AWS KMS key で を使用できます AWS アカウント。  

```
aws-encryption-cli --decrypt --wrapping-keys \
    discovery=true \
    discovery-partition=aws \
    discovery-account=111122223333 \
    discovery-account=444455556666
```

**Provider: マスターキープロバイダーを指定します。**  
**provider** 属性は、[マスターキープロバイダー](concepts.md#master-key-provider)を識別します。デフォルト値は `aws-kms` であり、 AWS KMSを表します。別のマスターキープロバイダーを使用している場合、**provider** 属性が必要です。  

```
--wrapping-keys key=12345 provider=my_custom_provider
```
カスタム (AWS KMSではない) マスターキープロバイダーを使用する方法の詳細については、[AWS Encryption CLI](https://github.com/aws/aws-encryption-sdk-cli/) レポジトリの [README](https://github.com/aws/aws-encryption-sdk-cli/blob/master/README.rst) ファイルにあるトピック「**高度な設定**」を参照してください。

**リージョン: を指定する AWS リージョン**  
region **** 属性を使用して、 AWS リージョン の を指定します AWS KMS key。この属性は、暗号化コマンドで、マスターキープロバイダが AWS KMSのときにのみ有効です。  

```
--encrypt --wrapping-keys key=alias/primary-key region=us-east-2
```
AWS 暗号化 CLI コマンド AWS リージョン は、ARN などのリージョンが含まれている場合、**キー**属性値で指定された を使用します。**キー**値が を指定すると AWS リージョン、**リージョン**属性は無視されます。  
**region** 属性は、他のリージョンの仕様よりも優先されます。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** 属性を使用して、暗号化と復号コマンドで別の認証情報を指定できます。Encryption コマンドでは、 AWS Encryption CLI は、**キー**値にリージョンが含まれておらず、**リージョン**属性がない場合にのみ、名前付きプロファイル AWS リージョン で を使用します。復号コマンドでは、名前プロファイル AWS リージョン の は無視されます。

### 複数のラッピングキーを指定する方法
<a name="cli-many-cmks"></a>

複数のラッピングキー (*マスターキー*) を各コマンドで指定できます。

複数のラッピングキーを指定した場合、最初のラッピングキーはデータの暗号化に使用するデータキーを生成および暗号化します。その他のラッピングキーは、同じデータキーを暗号化します。結果として得られる[暗号化されたメッセージ](concepts.md#message)には、暗号化されたデータ (暗号化テキスト) と各ラッピングキーで 1 つずつ暗号化された一組のデータキーが含まれます。どのラッピングも、1 つの暗号化されたデータキーを復号してデータを復号することができます。

複数のラッピングキーを指定するには、2 つの方法があります。
+ `--wrapping-keys` パラメータの値に複数の **key** 属性を含めます。

  ```
  $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
  ```

の値を持つ **discovery** 属性`true`を使用すると、Encryption AWS CLI はメッセージを暗号化 AWS KMS key した を使用できます。複数の `--wrapping-keys` パラメータを同じコマンドで使用する場合、`--wrapping-keys` パラメータで `discovery=true` を使用すると、その他の `--wrapping-keys` パラメータで **key** 属性の制限が事実上無効になります。

たとえば、次のコマンドでは、最初の`--wrapping-keys`パラメータの **key** 属性は AWS Encryption CLI を指定された に制限します AWS KMS key。ただし、2 番目の`--wrapping-keys`パラメータの **discovery** 属性を使用すると、Encryption 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
```

## 入力を指定する方法
<a name="crypto-cli-input"></a>

Encryption CLI AWS の暗号化オペレーションは、プレーンテキストデータを入力として受け取り、[暗号化されたメッセージ](concepts.md#message)を返します。復号オペレーションは、暗号化されたメッセージを入力として受け取り、プレーンテキストのデータを返します。

すべての Encryption AWS CLI コマンドでは、入力の場所を Encryption CLI AWS に指示する `--input`パラメータ (`-i`) が必要です。

次のいずれかの方法で入力を指定できます。
+ ファイルを使用します。

  ```
  --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 Encryption CLI は、オペレーションの入力ファイルごとに新しい出力ファイルを作成します。

出力ファイルがすでに存在する場合、デフォルトで Encryption AWS CLI は警告を出力し、ファイルを上書きします。上書きされないようにするには、上書きする前に確認のメッセージが表示する `--interactive` パラメータを使用するか、または、出力が上書きしようとすると入力をスキップする `--no-overwrite` を使用します。上書きの警告を表示しないようにするには、`--quiet` を使用します。Encryption CLI AWS からエラーと警告をキャプチャするには、`2>&1`リダイレクト演算子を使用して出力ストリームに書き込みます。

**注記**  
出力ファイルを上書きするコマンドは、出力ファイルを削除することで開始します。コマンドが失敗した場合は、出力ファイルが既に削除されている場合があります。

さまざまな方法で出力場所を変更できます。
+ ファイル名を指定します。ファイルにパスを指定する場合、コマンドの実行前にパス内のすべてのディレクトリが存在している必要があります。

  ```
  --output myEncryptedData.txt
  ```
+ ディレクトリを指定します。コマンドの実行前に出力ディレクトリが存在している必要があります。

  入力にサブディレクトリが含まれている場合、コマンドは指定されたディレクトリの下にサブディレクトリを再現します。

  ```
  --output Test
  ```

  出力場所がディレクトリ (ファイル名なし) AWS の場合、Encryption 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 Encryption CLI では、暗号化コマンドと復号コマンドで暗号化コンテキストを指定できます。これは必須ではありませんが、推奨される暗号化のベストプラクティスです。

*暗号化コンテキスト*は、任意の、シークレットではない*追加認証データ*です。 AWS Encryption CLI では、暗号化コンテキストは `name=value` のペアの集合で構成されます。ペアの内容はどれでも使用できます。これには、権限やポリシーに必要とされるログ、またはデータ内の暗号化オペレーションを探すのに役立つファイルやデータに関する情報が含まれます。

**暗号化コマンドの場合**

暗号化コンポーネントによって追加された追加の暗号化コンテキストと共に、[CMM](concepts.md#crypt-materials-manager) によって追加されたペアは、暗号化されたデータに暗号化されてバインドされます。これは、コマンドが返す[暗号化されたメッセージ](concepts.md#encryption-context)にも含まれています (プレーンテキスト)。を使用している場合 AWS KMS key、暗号化コンテキストは、 などの監査レコードやログにもプレーンテキストで表示されることがあります AWS CloudTrail。

次の例は、`name=value` の 3 つのペアを持つ暗号化コンテキストを示しています。

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

**復号コマンドの場合**

復号コマンドにおいて、暗号化コンテキストは、暗号化された適切なメッセージを復号しているかどうか確認するのに役立ちます。

暗号化コンテキストが暗号化で使用されていないとしても、復号コマンドで暗号化コンテキストを指定する必要はありません。ただし、その場合、Encryption AWS CLI は、復号コマンドの暗号化コンテキストのすべての要素が、暗号化されたメッセージの暗号化コンテキストの要素と一致することを確認します。いずれかの要素が一致しない場合、復号コマンドは失敗します。

たとえば、次のコマンドは、暗号化コンテキストに `dept=IT` が含まれている場合にのみ暗号化メッセージを復号します。

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

暗号化コンテキストは、セキュリティ戦略の重要な部分です。ただし、暗号化コンテキストを選択する際、その値がシークレットではないことに注意してください。暗号化コンテキストに機密データを含めないでください。

**暗号化コンテキストを指定するには**
+ **暗号化**コマンドでは、`--encryption-context` パラメータを 1 つ以上の `name=value` ペアで使用します。各ペアを区切るためにスペースを使用します。

  ```
  --encryption-context name=value [name=value] ...
  ```
+ **復号**コマンドでは、`--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` という 2 つのペアを持つ暗号化コンテキストが含まれています。

```
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* で導入されました。暗号化コマンドと復号コマンドで有効です。設定するコミットメントポリシーは、表示されるコマンドに対してのみ有効です。コマンドのコミットメントポリシーを設定しない場合、Encryption AWS CLI はデフォルト値を使用します。

例えば、次のパラメータ値ではコミットメントポリシーが `require-encrypt-allow-decrypt` に設定され、常にキーコミットメントで暗号化されますが、暗号化された暗号化テキストはキーコミットメントの有無にかかわらず復号化されます。

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

## 設定ファイルにパラメータを保存する方法
<a name="crypto-cli-config-file"></a>

頻繁に使用する Encryption CLI AWS パラメータと値を設定ファイルに保存することで、時間を節約し、入力エラーを回避できます。

*設定ファイルは*、Encryption AWS CLI コマンドのパラメータと値を含むテキストファイルです。 AWS Encryption CLI コマンドで設定ファイルを参照すると、リファレンスは設定ファイルのパラメータと値で置き換えられます。ファイルの内容をコマンドラインで入力した場合にも同じ効果が得られます。設定ファイルは任意の名前を使用でき、現在のユーザーがアクセス可能な任意のディレクトリに配置できます。

次の設定ファイル (`key.conf`) の例では、2 つの 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 コンソールでは、バックティック文字を使用してアットマーク (``@`) をエスケープする必要があります。

このコマンド例では、暗号化コマンドで `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
```

------

**Next: **[AWS Encryption CLI の例を試します。](crypto-cli-examples.md)

# Encryption AWS CLI の例
<a name="crypto-cli-examples"></a>

次の例を使用して、希望するプラットフォームで AWS Encryption CLI を試します。マスターキーおよびその他のパラメータのヘルプについては、「[Encryption AWS CLI の使用方法](crypto-cli-how-to.md)」を参照してください。クイックリファレンスについては、「[AWS Encryption SDK CLI 構文とパラメータリファレンス](crypto-cli-reference.md)」を参照してください。

**注記**  
次の例では、Encryption CLI AWS バージョン 2.1.*x* の構文を使用します。  
新しいセキュリティ機能は、もともと AWS Encryption 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**
+ [ファイルの暗号化](#cli-example-encrypt-file)
+ [ファイルの復号](#cli-example-decrypt-file)
+ [ディレクトリ内のすべてのファイルの暗号化](#cli-example-encrypt-directory)
+ [ディレクトリ内のすべてのファイルの復号](#cli-example-decrypt-directory)
+ [コマンドラインでの暗号化と復号](#cli-example-stdin)
+ [複数のマスターキーの使用](#cli-example-multimaster)
+ [スクリプトでの暗号化と復号](#cli-example-script)
+ [データキーキャッシュの使用](#cli-example-caching)

## ファイルの暗号化
<a name="cli-example-encrypt-file"></a>

この例では AWS 、Encryption CLI を使用して、「Hello World」文字列を含む`hello.txt`ファイルの内容を暗号化します。

ファイルで暗号化コマンドを実行すると、 AWS Encryption CLI はファイルの内容を取得し、一意の[データキー](concepts.md#DEK)を生成し、データキーの下のファイル内容を暗号化してから、[暗号化されたメッセージを](concepts.md#message)新しいファイルに書き込みます。

最初のコマンドは、 のキー ARN を `$keyArn`変数 AWS KMS key に保存します。で暗号化する場合 AWS KMS key、キー ID、キー ARN、エイリアス名、またはエイリアス ARN を使用して識別できます。のキー識別子の詳細については AWS KMS key、「 *AWS Key Management Service デベロッパーガイド*」の[「キー識別子](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id)」を参照してください。

2 番目のコマンドは、ファイルの内容を暗号化します。コマンドは `--encrypt` パラメータを使用してオペレーションを指定し、`--input` パラメータを使用して暗号化するファイルを指定します。[`--wrapping-keys` パラメータ](crypto-cli-how-to.md#crypto-cli-master-key)とその必須の **key** 属性は、キー ARN で AWS KMS key 表される を使用するように コマンドに指示します。

このコマンドは `--metadata-output` パラメータを使用して、暗号化オペレーションに関するメタデータのテキストファイルを指定します。ベストプラクティスとして、このコマンドは `--encryption-context` パラメータを使用して[暗号化コンテキスト](crypto-cli-how-to.md#crypto-cli-encryption-context)を指定します。

このコマンドでは、[`--commitment-policy` パラメータ](crypto-cli-reference.md#syntax-commitment-policy)も使用してコミットメントポリシーを明示的に設定します。バージョン 1.8.*x* では、`--wrapping-keys` パラメータを使用するときにこのパラメータが必要です。バージョン 2.1.*x* 以降では、`--commitment-policy` パラメータはオプションですが推奨されます。

`--output` パラメータの値のドット (.) は、出力ファイルを現在のディレクトリに書き込むようコマンドに指示します。

------
#### [ 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 .
```

------

暗号化コマンドが成功した場合、出力を返しません。コマンドが成功したかどうかを確認するには、`$?` 変数のブール値をチェックします。コマンドが成功した場合、`$?` の値は `0` (Bash) または `True` (PowerShell) です。コマンドが失敗した場合、`$?` の値は 0 以外 (Bash) または `False` (PowerShell) です。

------
#### [ Bash ]

```
$ echo $?
0
```

------
#### [ PowerShell ]

```
PS C:\> $?
True
```

------

また、ディレクトリ一覧コマンドを使用して、暗号化コマンドが新しいファイル `hello.txt.encrypted` を作成したかどうかを確認することもできます。encrypt コマンドは出力のファイル名を指定しなかったため、Encryption CLI AWS は入力ファイルと同じ名前と`.encrypted`サフィックスを持つファイルに出力を書き込みました。別のサフィックスを使用するか、サフィックスを抑制するには、`--suffix` パラメータを使用します。

`hello.txt.encrypted` ファイルには、[暗号化メッセージ](concepts.md#message)が含まれています。それには、`hello.txt` ファイルの暗号テキスト、データキーの暗号化コピー、および暗号化コンテキストを含む追加のメタデータが含まれています。

------
#### [ 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
```

------

## ファイルの復号
<a name="cli-example-decrypt-file"></a>

この例では、Encryption AWS CLI を使用して、前の例で暗号化された`Hello.txt.encrypted`ファイルの内容を復号します。

復号コマンドは `--decrypt` パラメータを使用してオペレーションを指定し、`--input` パラメータを使用して復号するファイルを指定します。`--output` パラメータの値は、現在のディレクトリを表すドットです。

**key** 属性を含む `--wrapping-keys` パラメータでは、暗号化されたメッセージの復号に使用するラッピングキーを指定します。を使用した復号コマンドでは AWS KMS keys、key 属性の値は[キー ARN](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN) である必要があります。復号コマンドには `--wrapping-keys` パラメータが必要です。 AWS KMS keysを使用している場合は、**key** 属性を使用して復号用の AWS KMS keys を指定するか、**discovery** 属性を `true` にします (両方ではない)。カスタムマスターキープロバイダーを使用している場合、**key** 属性と **provider** 属性は必須です。

バージョン 2.1.x 以降では、[`--commitment-policy` パラメータ](crypto-cli-reference.md#syntax-commitment-policy)はオプションですが推奨されます。明示的に使用すると、デフォルト値 `require-encrypt-require-decrypt` を指定した場合でも、意図が明確になります。

`--encryption-context` パラメータは、暗号化コマンドで[暗号化コンテキスト](crypto-cli-how-to.md#crypto-cli-encryption-context)が指定されている場合でも、復号コマンドではオプションです。この場合、復号コマンドは暗号化コマンドで提供されたものと同じ暗号化コンテキストを使用します。暗号化 CLI AWS は、復号する前に、暗号化されたメッセージの暗号化コンテキストに`purpose=test`ペアが含まれていることを確認します。そうでない場合、復号コマンドは失敗します。

`--metadata-output` パラメータは、復号オペレーションに関するメタデータのファイルを指定します。`--output` パラメータの値のドット (.) は、出力ファイルを現在のディレクトリに書き込みます。

ベストプラクティスとして、`--max-encrypted-data-keys` パラメータを使用して、暗号化されたデータキーの数が多すぎる不正な形式のメッセージの復号化を回避してください。暗号化されたデータキーの予想数 (暗号化で使用されるラッピングキーごとに 1 つ)、または適切な最大値 (5 など) を指定します。詳細については、「[暗号化されたデータキーの制限](configure.md#config-limit-keys)」を参照してください。

`--buffer` では、デジタル署名が存在する場合の検証も含めて、すべての入力が処理された後にのみプレーンテキストが返されます。

------
#### [ 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 .
```

------

復号コマンドが成功した場合、出力を返しません。コマンドが成功したかどうかを確認するには、`$?` 変数の値を取得します。また、ディレクトリ一覧コマンドを使用して、コマンドが `.decrypted` サフィックスが付加された新しいファイルを作成したかどうかを確認することもできます。プレーンテキストコンテンツを表示するには、ファイルコンテンツを取得するコマンドの `cat` や [Get-Content](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-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
```

------

## ディレクトリ内のすべてのファイルの暗号化
<a name="cli-example-encrypt-directory"></a>

この例では、Encryption AWS CLI を使用して、ディレクトリ内のすべてのファイルの内容を暗号化します。

コマンドが複数のファイルに影響を与えると、Encryption AWS CLI は各ファイルを個別に処理します。コマンドはファイルの内容を取得し、マスターキーからファイルの一意の[データキー](concepts.md#DEK)を取得し、データキーでファイルの内容を暗号化して、結果を出力ディレクトリの新しいファイルに書き込みます。その結果、出力ファイルを個別に復号することができます。

`TestDir` ディレクトリのこのリストには、暗号化するプレーンテキストファイルが表示されています。

------
#### [ 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
```

------

最初のコマンドは、 の [Amazon リソースネーム (ARN)](https://docs.aws.amazon.com/kms/latest/developerguide/viewing-keys.html#find-cmk-id-arn) を `$keyArn`変数 AWS KMS key に保存します。

2 番目のコマンドは、`TestDir` ディレクトリ内のファイルのコンテンツを暗号化し、暗号化されたコンテンツのファイルを `TestEnc` ディレクトリに書き込みます。`TestEnc` ディレクトリが存在しない場合、コマンドは失敗します。入力場所はディレクトリのため、`--recursive` パラメータが必要です。

[`--wrapping-keys` パラメータ](crypto-cli-how-to.md#crypto-cli-master-key)とその必須の **key** 属性は、使用するラッピングキーを指定します。暗号化コマンドには[暗号化コンテキスト](crypto-cli-how-to.md#crypto-cli-encryption-context)、`dept=IT` が含まれています。複数のファイルを暗号化するコマンドに暗号化コンテキストを指定すると、すべてのファイルで同じ暗号化コンテキストが使用されます。

コマンドには、暗号化オペレーションに関するメタデータを書き込む場所を Encryption AWS CLI に指示する`--metadata-output`パラメータもあります。 AWS Encryption CLI は、暗号化されたファイルごとに 1 つのメタデータレコードを書き込みます。

バージョン 2.1.x.以降では、[`--commitment-policy parameter`](crypto-cli-how-to.md#crypto-cli-commitment-policy) はオプションですが推奨されます。コマンドまたはスクリプトが暗号化テキストを復号化できないために失敗した場合は、明示的なコミットメントポリシー設定により、問題を迅速に検出できます。

コマンドが完了すると、Encryption AWS CLI は暗号化されたファイルを `TestEnc` ディレクトリに書き込みますが、出力は返しません。

最後のコマンドは `TestEnc` ディレクトリ内のファイルを一覧表示します。プレーンテキストの入力ファイルごとに、暗号化されたコンテンツの出力ファイルが 1 つあります。コマンドは代替サフィックスを指定していないため、暗号化コマンドは各入力ファイル名に `.encrypted` を付加しました。

------
#### [ 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
```

------

## ディレクトリ内のすべてのファイルの復号
<a name="cli-example-decrypt-directory"></a>

この例では、ディレクトリ内のすべてのファイルを復号します。これは、前の例で暗号化された `TestEnc` ディレクトリ内のファイルから始まります。

------
#### [ 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
```

------

この復号コマンドは、TestEnc ディレクトリ内のすべてのファイルを復号し、プレーンテキストファイルを TestDec ディレクトリに書き込みます。**キー**属性と[キー ARN](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN) AWS 値を持つ `--wrapping-keys`パラメータは、ファイルの復号 AWS KMS keys に使用する Encryption CLI に指示します。コマンドは `--interactive`パラメータを使用して、同じ名前のファイルを上書きする前に Encryption AWS CLI にプロンプトを表示します。

このコマンドは、ファイルが暗号化されたときに指定された暗号化コンテキストも使用します。複数のファイルを復号する場合、Encryption AWS CLI はすべてのファイルの暗号化コンテキストをチェックします。ファイルの暗号化コンテキストチェックが失敗した場合、Encryption AWS CLI はファイルを拒否し、警告を書き込み、失敗をメタデータに記録し、残りのファイルのチェックを続行します。 AWS Encryption CLI が他の理由でファイルの復号に失敗した場合、復号コマンド全体がすぐに失敗します。

この例では、すべての入力ファイルで暗号化されたメッセージに `dept=IT` 暗号化コンテキスト要素が含まれています。ただし、異なる暗号化コンテキストを使用してメッセージを復号している場合でも、暗号化コンテキストの一部を確認できる可能性があります。たとえば、あるメッセージの暗号化コンテキストが `dept=finance` で、他のメッセージが `dept=IT` だった場合、その値を指定しないことで暗号化コンテキストに常に `dept` 名が含まれていることを確認できます。より具体的にするには、別々のコマンドでファイルを復号します。

復号コマンドから返される出力はありませんが、ディレクトリ一覧コマンドを使用して `.decrypted` サフィックスが付いた新しいファイルを作成したことを確認できます。プレーンテキストコンテンツを表示するには、ファイルコンテンツを取得するコマンドを使用します。

------
#### [ 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
```

------

## コマンドラインでの暗号化と復号
<a name="cli-example-stdin"></a>

これらの例は、入力をコマンドにパイプし (stdin)、出力をコマンドライン (stdout) に書き込む方法を示しています。これらは、コマンドで stdin と stdout を表す方法と、組み込みの Base64 エンコードツールを使用してシェルが ASCII 以外の文字を誤って解釈するのを防ぐ方法について説明します。

この例では、パイププレーンテキストの文字列を暗号化コマンドにパイプし、暗号化されたメッセージを変数に保存します。次に、変数に格納された暗号化されたメッセージを復号コマンドにパイプし、その出力をパイプライン (stdout) に書き込みます。

この例では、3 つのコマンドで構成されています。
+ 最初のコマンドは、 の[キー ARN](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN) を `$keyArn`変数 AWS KMS key に保存します。

------
#### [ 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'
  ```

------

   
+ 2 番目のコマンドは、`Hello World` 文字列を暗号化コマンドにパイプし、その結果を `$encrypted` 変数に保存します。

  `--input` および `--output` パラメータは、すべての AWS Encryption CLI コマンドで必須です。入力がコマンドにパイプされている (stdin) ことを示すには、(`-`) を `--input` パラメータの値に使用します。出力をコマンドラインに送信する (stdout) には、`--output` パラメータの値にハイフンを使用します。

  `--encode` パラメータは、出力を返す前に Base64 エンコードします。これにより、暗号化されたメッセージの ASCII 以外の文字をシェルが誤って解釈することを防止します。

  このコマンドは PoC (概念実証) に過ぎないため、暗号化コンテキストを省略し、メタデータを抑制します (`-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
  ```

------

   
+ 3 番目のコマンドは、`$encrypted` 変数に格納された暗号化されたメッセージを復号コマンドにパイプします。

  この復号コマンドでは、入力がパイプラインから来ている (stdin) ことを示すために `--input -` を使い、出力をパイプラインに送る (stdout) ために `--output -` を使います。(入力パラメータは実際の入力バイトではなく、入力の場所を取るため、`$encrypted` 変数を `--input` パラメータの値として使用することはできません。) 

  この例では、 `--wrapping-keys`パラメータの検出****属性を使用して、Encryption AWS CLI が任意の AWS KMS key を使用してデータを復号できるようにします。[コミットメントポリシー](concepts.md#commitment-policy)は指定しないため、バージョン 2.1.*x* 以降のデフォルト値 `require-encrypt-require-decrypt` が使用されます。

  出力が暗号化されてエンコードされたため、復号コマンドは `--decode` パラメータを使用して Base64 でエンコードされた入力を復号する前にデコードします。また、`--decode` パラメータを使用して、Base64 でエンコードされた入力を暗号化する前にデコードすることもできます。

  ここでも、コマンドは暗号化コンテキストを省略し、メタデータを抑制します (-`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
  ```

------

暗号化および復号オペレーションは、介在する変数なしで 1 つのコマンドで実行することもできます。

前の例と同様に、`--input` および `--output` パラメータには `-` 値があり、このコマンドは `--encode` パラメータを使用して出力をエンコードし、`--decode` パラメータを使用して入力をデコードします。

------
#### [ 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
```

------

## 複数のマスターキーの使用
<a name="cli-example-multimaster"></a>

この例では、 AWS Encryption CLI でデータを暗号化および復号するときに複数のマスターキーを使用する方法を示します。

複数のマスターキーを使用してデータを暗号化すると、いずれかのマスターキーを使用してデータを復号できます。この戦略では、マスターキーの 1 つが使用できなくてもデータを復号できます。暗号化されたデータを複数の に保存する場合 AWS リージョン、この戦略では、同じリージョンのマスターキーを使用してデータを復号化できます。

複数のマスターキーで暗号化する場合、最初のマスターキーが特別な役割を果たします。それは、データの暗号化に使用されるデータキーを生成します。残りのマスターキーは、プレーンテキストのデータキーを暗号化します。結果として得られる[暗号化されたメッセージ](concepts.md#message)には、暗号化されたデータと、各マスターキーに対して 1 つずつの暗号化されたデータキーの集合が含まれます。最初のマスターキーがデータキーを生成したにもかかわらず、いずれのマスターキーもデータキーの 1 つを復号でき、それをデータキーの復号に使用することができます。

**3 つのマスターキーによる暗号化**

このコマンド例では、3 つの AWS リージョンの 3 つのラッピングキーを使用して `Finance.log` ファイルを暗号化しています。

これは、暗号化されたメッセージを `Archive` ディレクトリに書き込みます。このコマンドでは、サフィックスを抑制する値を指定せずに `--suffix` パラメータを使用しているため、入力ファイル名と出力ファイル名は変わりません。

このコマンドは、`--wrapping-keys` パラメータとその 3 つの **key** 属性を使用します。同じコマンドで複数の `--wrapping-keys` パラメータを使用することもできます。

ログファイルを暗号化するために、Encryption AWS CLI はリストの最初のラッピングキー に`$key1`、データの暗号化に使用するデータキーの生成を求めます。次に、他の各ラッピングキーを使用して同じデータキーのプレーンテキストコピーを暗号化します。出力ファイルの暗号化されたメッセージには、暗号化された 3 つのデータキーがすべて含まれています。

------
#### [ 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
```

------

このコマンドは、`Finance.log` ファイルの暗号化されたコピーを復号し、それを `Finance.log.clear` ディレクトリの `Finance` ファイルに書き込みます。3 で暗号化されたデータを復号するには AWS KMS keys、同じ 3 AWS KMS keys つ、またはそのサブセットを指定できます。この例では AWS KMS keysを 1 つだけ指定します。

データの復号 AWS KMS keys に使用する AWS Encryption CLI に指示するには、 `--wrapping-keys`パラメータの **key** 属性を使用します。で復号する場合 AWS KMS keys、**キー**属性の値は[キー ARN](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN) である必要があります。

 AWS KMS keys 指定した で [Decrypt API](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) を呼び出すアクセス許可が必要です。詳細については、「[AWS KMSに対する認証とアクセスコントロール](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html)」を参照してください。

ベストプラクティスとして、この例では `--max-encrypted-data-keys` パラメータを使用して、暗号化されたデータキーの数が多すぎる不正なメッセージの復号化を回避します。この例では、復号化にラッピングキーを 1 つだけ使用しますが、暗号化されたメッセージには、暗号化時に使用される 3 つのラッピングキーごとに 1 つずつ、合計 3 つの暗号化されたデータキーがあります。暗号化されたデータキーの予想数または適切な最大値 (5 など) を指定します。3 より小さい最大値を指定すると、コマンドは失敗します。詳細については、「[暗号化されたデータキーの制限](configure.md#config-limit-keys)」を参照してください。

------
#### [ 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
```

------

## スクリプトでの暗号化と復号
<a name="cli-example-script"></a>

この例では、スクリプトで AWS Encryption CLI を使用する方法を示します。データを暗号化または復号するだけのスクリプト、またはデータ管理プロセスの一部として暗号化または復号するスクリプトを作成できます。

この例では、スクリプトはログファイルのコレクションを取得、圧縮してから暗号化し、暗号化されたファイルを Amazon S3 バケットにコピーします。このスクリプトは各ファイルを別々に処理するため、それらを個別に復号して展開できます。

ファイルを圧縮して暗号化するときは、暗号化する前に圧縮する必要があります。適切に暗号化されたデータは圧縮できません。

**警告**  
シークレットデータと悪意のあるユーザーによって制御される可能性のあるデータの両方を含むデータを圧縮するときは注意が必要です。圧縮されたデータの最終サイズは、誤ってそのコンテンツに関する機密情報を明らかにする可能性があります。

------
#### [ 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"
                    }
                }
            }
        }
    }
}
```

------

## データキーキャッシュの使用
<a name="cli-example-caching"></a>

この例では、多数のファイルを暗号化するコマンドで[データキーキャッシュ](data-key-caching.md)を使用します。

デフォルトでは、Encryption AWS CLI (および の他のバージョン AWS Encryption SDK) は、暗号化するファイルごとに一意のデータキーを生成します。各オペレーションに一意のデータキーを使用するのは暗号化のベストプラクティスですが、一部の状況では限定的なデータキーの再利用が許容されます。データキーキャッシュを検討している場合は、セキュリティエンジニアに相談して、アプリケーションのセキュリティ要件を理解し、適切なセキュリティしきい値を判断してください。

この例では、マスターキープロバイダへのリクエストの頻度を減らすことによって、データキーキャッシュは暗号化オペレーションを高速化します。

この例のコマンドは、合計約 800 の小さなログファイルを含む複数のサブディレクトリを持つ大きなディレクトリを暗号化します。最初のコマンドは、 AWS KMS key の ARN を `keyARN` 変数に保存します。2 番目のコマンドは、入力ディレクトリ内のすべてのファイルを (再帰的に) 暗号化し、アーカイブディレクトリに書き込みます。このコマンドでは、`--suffix` パラメータを使用して `.archive` サフィックスを指定します。

`--caching` パラメータはデータキーキャッシュを有効にします。シリアルのファイル処理では一度に複数のデータキーを使用することはないため、キャッシュ内のデータキーの数を制限する **capacity** 属性は 1 に設定されます。キャッシュされたデータキーの使用可能時間を決定する **max\$1age** 属性は 10 秒に設定します。

オプションの **max\$1messages\$1encrypted** 属性は 10 個のメッセージに設定されているため、1 つのデータキーが 10 個以上のファイルを暗号化するために使用されることはありません。各データキーで暗号化するファイル数を制限することで、万一データキーが侵害された場合に影響を受けるファイルの数を減らすことができます。

オペレーティングシステムが生成するログファイルに対してこのコマンドを実行するには、管理者アクセス許可 (Linux では `sudo`、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
```

------

データキーキャッシュの効果をテストするために、この例では PowerShell の [Measure-Command](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/measure-command) コマンドレットを使用します。データキーキャッシュなしでこの例を実行すると、完了に約 25 秒かかります。このプロセスは、ディレクトリ内のファイルごとに新しいデータキーを生成します。

```
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
```

データキーキャッシュを使用すると、各データキーを最大 10 個のファイルに制限しても、処理が迅速になります。このコマンドは完了するまでに 12 秒もかからず、マスターキープロバイダへの呼び出し回数を元の値の 1/10 に減らしました。

```
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
```

`max_messages_encrypted` の制限を解除すると、すべてのファイルが同じデータキーで暗号化されます。この変更では、プロセスは大幅に高速化されず、データキーの再利用に伴うリスクが高まります。ただし、マスターキープロバイダの呼び出し数は 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
```

# AWS Encryption SDK CLI 構文とパラメータリファレンス
<a name="crypto-cli-reference"></a>

このトピックでは、 AWS Encryption SDK コマンドラインインターフェイス (CLI) の使用に役立つ構文の例を示し、パラメータについて簡単に説明します。ラッピングキーおよびその他のパラメータのヘルプについては、「[Encryption AWS CLI の使用方法](crypto-cli-how-to.md)」を参照してください。例については「[Encryption AWS CLI の例](crypto-cli-examples.md)」を参照してください。完全なドキュメントについては、「[ドキュメントを読む](https://aws-encryption-sdk-cli.readthedocs.io/en/latest/)」を参照してください。

**Topics**
+ [AWS 暗号化 CLI 構文](#crypto-cli-syntax)
+ [AWS Encryption CLI コマンドラインパラメータ](#crypto-cli-parameters)
+ [高度なパラメータ](#cli-advanced-parameters)

## AWS 暗号化 CLI 構文
<a name="crypto-cli-syntax"></a>

これらの AWS Encryption CLI 構文図は、 AWS Encryption CLI で実行する各タスクの構文を示しています。Encryption CLI AWS バージョン 2.1.*x* 以降の推奨構文を表します。

新しいセキュリティ機能は、もともと AWS Encryption 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)を参照してください。

**注記**  
パラメータの説明に記載されている場合を除き、各パラメータまたは属性は、各コマンドで 1 回のみ使用できます。  
パラメータがサポートしていない属性を使用する場合、Encryption AWS CLI はそのサポートされていない属性を警告やエラーなしで無視します。

**ヘルプの表示**  
パラメータの説明を含む完全な AWS Encryption CLI 構文を取得するには、 `--help`または を使用します`-h`。  

```
aws-encryption-cli (--help | -h)
```

**バージョンの取得**  
Encryption CLI AWS インストールのバージョン番号を取得するには、 を使用します`--version`。Encryption CLI AWS の使用に関する質問、問題の報告、ヒントの共有を行う場合は、必ず バージョンを含めてください。  

```
aws-encryption-cli --version
```

**データを暗号化する**  
次の構文の例は、**encrypt** コマンドで使用するパラメータを示しています。  

```
aws-encryption-cli --encrypt
                   --input <input> [--recursive] [--decode]
                   --output <output> [--interactive] [--no-overwrite] [--suffix [<suffix>]] [--encode]
                   --wrapping-keys  [--wrapping-keys] ...
                       key=<keyID> [key=<keyID>] ...
                       [provider=<provider-name>] [region=<aws-region>] [profile=<aws-profile>]
                   --metadata-output <location> [--overwrite-metadata] | --suppress-metadata]
                   [--commitment-policy <commitment-policy>]
                   [--encryption-context <encryption_context> [<encryption_context> ...]]
                   [--max-encrypted-data-keys <integer>]
                   [--algorithm <algorithm_suite>]
                   [--caching <attributes>] 
                   [--frame-length <length>]
                   [-v | -vv | -vvv | -vvvv]
                   [--quiet]
```

**データを復号化する**  
次の構文の例は、**decrypt** コマンドで使用するパラメータを示しています。  
バージョン 1.8.*x* では、復号時の `--wrapping-keys` パラメータはオプションですが推奨されます。バージョン 2.1.*x* 以降は、`--wrapping-keys` パラメータが暗号化および復号化時に必要となります。 AWS KMS keysの場合、**key** 属性を使用してラッピングキーを指定するか (ベストプラクティス)、**discovery** 属性を `true` に設定して、 AWS Encryption CLI が使用できるラッピングキーを制限しません。  

```
aws-encryption-cli --decrypt (or [--decrypt-unsigned]) 
                   --input <input> [--recursive] [--decode]
                   --output <output> [--interactive] [--no-overwrite]  [--suffix [<suffix>]] [--encode]           
                   --wrapping-keys  [--wrapping-keys] ...
                       [key=<keyID>] [key=<keyID>] ...
                       [discovery={true|false}] [discovery-partition=<aws-partition-name> discovery-account=<aws-account-ID> [discovery-account=<aws-account-ID>] ...] 
                       [provider=<provider-name>] [region=<aws-region>] [profile=<aws-profile>]
                   --metadata-output <location> [--overwrite-metadata] | --suppress-metadata]
                   [--commitment-policy <commitment-policy>]
                   [--encryption-context <encryption_context> [<encryption_context> ...]]
                   [--buffer]
                   [--max-encrypted-data-keys <integer>]
                   [--caching <attributes>]
                   [--max-length <length>]
                   [-v | -vv | -vvv | -vvvv]
                   [--quiet]
```

**設定ファイルの使用**  
パラメータとその値が格納されている設定ファイルを参照できます。これは、コマンドでパラメータと値を入力するのに相当します。例については、[設定ファイルにパラメータを保存する方法](crypto-cli-how-to.md#crypto-cli-config-file)を参照してください。  

```
aws-encryption-cli @<configuration_file>

# In a PowerShell console, use a backtick to escape the @.
aws-encryption-cli `@<configuration_file>
```

## AWS Encryption CLI コマンドラインパラメータ
<a name="crypto-cli-parameters"></a>

このリストには、Encryption AWS CLI コマンドパラメータの基本的な説明が記載されています。詳細な説明については、[aws-encryption-sdk-cli のドキュメント](http://aws-encryption-sdk-cli.readthedocs.io/en/latest/)を参照してください。

**--encrypt (-e)**  
入力データを暗号化します。すべてのコマンドに、`--encrypt`、`--decrypt`、`--decrypt-unsigned` パラメータのいずれかが必要です。

**--decrypt (-d)**  
入力データを復号します。すべてのコマンドに、`--encrypt`、`--decrypt`、`--decrypt-unsigned` パラメータのいずれかが必要です。

**—decrypt-unsigned [バージョン 1.9.*x* および 2.2.*x* で導入]**  
`--decrypt-unsigned` パラメータでは、暗号化テキストを復号し、復号化前にメッセージが署名なしであることを確認します。このパラメータは、`--algorithm` パラメータを使用し、データを暗号化するためのデジタル署名なしのアルゴリズムスイートを選択した場合に使用します。暗号化テキストが署名されている場合、復号化は失敗します。  
`--decrypt` または `--decrypt-unsigned` を復号化に使用できますが、両方とも使用することはできません。

**—wrapping-keys (-w) [バージョン 1.8.*x* で導入]**  <a name="wrapping-keys"></a>
暗号化と復号のオペレーションで使用される[ラッピングキー](concepts.md#master-key) (*マスターキー*) を指定します。各コマンドで[複数の `--wrapping-keys` パラメータ](crypto-cli-how-to.md#cli-many-cmks)を使用できます。  
バージョン 2.1.x 以降は、`--wrapping-keys` パラメータが暗号化コマンドおよび復号化コマンド時に必要となります。バージョン 1.8.x では、暗号化コマンドには `--wrapping-keys` または `--master-keys` パラメーターが必要です。バージョン 1.8.*x* の復号化のコマンドでは、`--wrapping-keys` パラメータはオプションですが推奨されます。  
カスタムのマスターキープロバイダーを使用するとき、暗号化と復号のコマンドでは、**key** および **provider** 属性が必須です。を使用する場合 AWS KMS keys、暗号化コマンドには **key** 属性が必要です。復号コマンドでは、`true` 値の **key** 属性、または **discovery** 属性が必要です（両方ではない)。復号時に **key** 属性を使用することが、[AWS Encryption SDK のベストプラクティス](best-practices.md)です。Amazon S3 バケットや Amazon SQS キュー内のメッセージなど、なじみのないメッセージのバッチを復号化する場合は、これが特に重要です。  
 AWS KMS マルチリージョンキーをラッピングキーとして使用する方法の例については、「」を参照してください[マルチリージョンの使用 AWS KMS keys](configure.md#config-mrks)。  
**属性**: `--wrapping-keys` パラメータの値は、以下の属性で構成されます。形式は `attribute_name=value` です。    
**key**  
オペレーションで使用するラッピングキーを識別します。形式は、**key**=ID のペアです。各 `--wrapping-keys` パラメータ値に、複数の **key** 属性を指定できます。  
+ **暗号化コマンド**: すべての暗号化コマンドには **key** 属性が必要です。暗号化コマンド AWS KMS key で を使用する場合、**キー**属性の値は、キー ID、キー ARN、エイリアス名、またはエイリアス ARN です。 AWS KMS キー識別子の詳細については、「 *AWS Key Management Service デベロッパーガイド*」の[「キー識別子](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id)」を参照してください。
+ **復号コマンド**: AWS KMS keysで復号する場合、`--wrapping-keys` パラメータでは **key** 属性を[キー ARN](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN) にするか、**discovery** 属性を `true` にする必要があります (両方ではない)。**key** 属性を使用することが、[AWS Encryption SDK のベストプラクティス](best-practices.md)です。カスタムのマスターキープロバイダーで復号化する場合、**key** 属性は必須です。
**注記**  
復号コマンドで AWS KMS ラッピングキーを指定するには、**key** 属性の値がキー ARN である必要があります。キー ID、エイリアス名、またはエイリアス ARN を使用する場合、Encryption AWS CLI はラッピングキーを認識しません。
各 `--wrapping-keys` パラメータ値に、複数の **key** 属性を指定できます。ただし、`--wrapping-keys` パラメータの **provider**、**region**、**profile** 属性は、そのパラメータ値のすべてのラッピングキーに適用されます。異なる属性値を持つラッピングキーを指定するには、コマンドで複数の `--wrapping-keys` パラメータを使用します。  
**discovery**  
 AWS Encryption CLI が任意の AWS KMS key を使用してメッセージを復号できるようにします。**discovery** の値は、`true` または `false` にすることができます。デフォルト値は `false` です。**discovery** 属性は、復号コマンドで、マスターキープロバイダーが AWS KMSのときにのみ有効です。  
で復号する場合 AWS KMS keys、 `--wrapping-keys`パラメータには**キー**属性または の値を持つ**検出**属性が必要です `true` (両方ではありません）。**key** 属性を使用する場合は、**discovery** 属性を `false` にして、検出を明示的に拒否できます。  
+ `False` (デフォルト) — discovery **** 属性が指定されていないか、その値が の場合`false`、 AWS Encryption CLI は `--wrapping-keys`パラメータの **key** 属性で AWS KMS keys 指定された のみを使用してメッセージを復号します。discovery を `false` にして **key** 属性を指定しないと、復号コマンドは失敗します。この値は Encryption AWS CLI [のベストプラクティス](best-practices.md)をサポートしています。
+ `True` — discovery **** 属性の値が の場合`true`、Encryption AWS CLI は暗号化されたメッセージのメタデータ AWS KMS keys から AWS KMS keys を取得し、それらを使用してメッセージを復号します。の値を持つ**検出**属性`true`は、復号時にラッピングキーを指定できなかったバージョン 1.8.*x* より前のバージョンの AWS Encryption CLI のように動作します。ただし、 を使用する意図 AWS KMS key は明示的です。discovery を `true` にして **key** 属性を指定すると、復号コマンドは失敗します。

  この`true`値を指定する AWS アカウント と、Encryption AWS CLI がさまざまな および リージョン AWS KMS keys で を使用するか、ユーザーが使用する権限がない AWS KMS keys を使用しようとする可能性があります。
**discovery** が の場合`true`、**discovery-partition** 属性と **discovery-account** 属性を使用して、 AWS KMS keys 使用する を AWS アカウント 指定した 内のものに制限するのがベストプラクティスです。  
**discovery-account**  
復号 AWS KMS keys に使用する を、指定された 内のものに制限します AWS アカウント。この属性で有効な値は [AWS アカウント ID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html) のみです。  
この属性はオプションであり、**discovery** 属性 AWS KMS keys が に設定`true`され、**discovery-partition** 属性が指定されている 復号コマンドでのみ有効です。  
各 **discovery-account** 属性は 1 つの AWS アカウント ID のみを取りますが、同じ`--wrapping-keys`パラメータで複数の **discovery-account** 属性を指定できます。特定の `--wrapping-keys` パラメータで指定するすべてのアカウントは、指定した AWS パーティション内に存在する必要があります。  
**discovery-partition**  
**discovery-account** 属性のアカウントの AWS パーティションを指定します。その値は、、`aws`、 `aws-cn`などの AWS パーティションである必要があります`aws-gov-cloud`。詳細については、「AWS 全般のリファレンス」の「[Amazon リソースネーム](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arns-syntax)」を参照してください。  
この属性は、**discovery-account** 属性を使用するとき必須です。各 `--wrapping keys` パラメータに指定できる **discovery-partition** パーティションは 1 つだけです。複数のパーティション AWS アカウント で を指定するには、追加の `--wrapping-keys` パラメータを使用します。  
**provider**  
[マスターキープロバイダー](concepts.md#master-key-provider)を指定します。形式は、**provider**=ID のペアです。デフォルト値の **aws-kms** は を表します AWS KMS。この属性は、マスターキープロバイダーがそうでない場合にのみ必要です AWS KMS。  
**リージョン**  
 AWS リージョン の を識別します AWS KMS key。この属性は に対してのみ有効です AWS KMS keys。**key** の識別子が特定のリージョンを示していない場合にのみ使用され、それ以外の場合は無視されます。これを使用すると、 AWS CLI 名前付きプロファイルのデフォルトリージョンが上書きされます。  
**profile**  
 AWS CLI [名前付きプロファイル](https://docs.aws.amazon.com/cli/latest/userguide/cli-multiple-profiles.html)を識別します。この属性は に対してのみ有効です AWS KMS keys。プロファイルのリージョンは、key の識別子が特定のリージョンを示しておらず、コマンドに **region** 属性がない場合にのみ使用されます。

**--input (-i)**  
暗号化または復号するデータの場所を指定します。このパラメータは必須です。指定できる値は、ファイルかディレクトリへのパス、またはファイル名のパターンです。コマンド (stdin) にパイピング入力する場合は、`-` を使用します。  
入力が存在しない場合、エラーまたは警告なしでコマンドが正常に完了します。    
**--recursive (-r, -R)**  
入力ディレクトリとそのサブディレクトリにあるファイルでオペレーションを実行します。このパラメータは、`--input` の値がディレクトリの場合に必要です。  
**--decode**  
Base64-encoded 入力をデコードします。  
暗号化されエンコードされたメッセージを復号する場合は、復号する前にメッセージをデコードする必要があります。これはパラメータによって実行されます。  
たとえば、暗号化コマンドで `--encode` パラメータを使用した場合、対応する復号コマンドで `--decode` パラメータを使用します。また、このパラメータを使用して、Base64 でエンコードされた入力を暗号化する前にデコードすることもできます。

**--output (-o)**  
出力先を指定します。このパラメータは必須です。値には、既存のディレクトリ、ファイル名、またはコマンドライン (stdout) に出力を書き込む `-` を使用できます。  
指定した出力ディレクトリが存在しない場合、コマンドは失敗します。入力にサブディレクトリが含まれている場合、Encryption AWS CLI は指定した出力ディレクトリの下にサブディレクトリを再現します。  
デフォルトでは、Encryption AWS CLI は同じ名前のファイルを上書きします。この動作を変更するには、`--interactive` または `--no-overwrite` パラメータを使用します。上書きの警告を表示しないようにするには、`--quiet` パラメータを使用します。  
出力ファイルを上書きするコマンドが失敗した場合、出力ファイルは削除されます。  
**--インタラクティブ**  
ファイルを上書きする前にプロンプトが表示されます。  
**--no-overwrite**  
ファイルは上書きされません。代わりに、出力ファイルが存在する場合、Encryption AWS CLI は対応する入力をスキップします。  
**--サフィックス**  
Encryption AWS CLI が作成するファイルのカスタムファイル名のサフィックスを指定します。サフィックスがないことを示すには、値のないパラメータ (`--suffix`) を使用します。  
デフォルトでは、`--output` パラメータでファイル名が指定されない場合、出力ファイル名は同じ名前の入力ファイル名にサフィックスを加えたものになります。暗号化コマンドのサフィックスは `.encrypted` です。復号コマンドのサフィックスは `.decrypted` です。  
**--encode**  
Base64 (バイナリからテキスト) エンコーディングを出力に適用します。エンコーディングによりシェルホストプログラムが、出力テキストの非 ASCII 文字を誤って解釈するのを防ぎます。  
出力を別のコマンドにパイピング、または変数に保存する場合でも、暗号化された出力を stdout (`--output -`) 特に PowerShell コンソールに書き込むときはこのパラメータを使用します。

**--metadata-output**  
暗号化オペレーションに関するメタデータの場所を指定します。パスとファイル名を入力します。ディレクトリが存在しない場合、コマンドは失敗します。コマンドライン (stdout) にメタデータを書き込むには、`-` を使用します。  
同じコマンドでコマンド出力 (`--output`) とメタデータ出力 (`--metadata-output`) を stdout に記述することはできません また、`--input` や `--output` の値がディレクトリ (ファイル名なし) の場合は、メタデータ出力を同じディレクトリまたはそのディレクトリのサブディレクトリに書き込むことはできません。  
既存のファイルを指定すると、デフォルトで Encryption AWS CLI はファイル内のすべてのコンテンツに新しいメタデータレコードを追加します。この機能を使用すると、すべての暗号化オペレーションのメタデータが格納された 1 つのファイルを作成できます。既存のファイルのコンテンツを上書きするには、`--overwrite-metadata` パラメータを使用します。  
 AWS Encryption CLI は、コマンドが実行する暗号化または復号オペレーションごとに JSON 形式のメタデータレコードを返します。各メタデータレコードには、入力ファイルと出力ファイル、暗号化コンテキスト、アルゴリズムスイート、セキュリティ基準を満たしているかどうかを検証しオペレーションを確認するために使用できるその他の有益な情報への完全なパスが含まれます。    
**--overwrite-metadata**  
メタデータの出力ファイルでコンテンツが上書きされます。デフォルトでは、`--metadata-output` パラメータはファイル内の既存のコンテンツにメタデータを追加します。

**--suppress-metadata (-S)**  
暗号化または復号オペレーションに関するメタデータを抑制します。

**--commitment-policy**  <a name="syntax-commitment-policy"></a>
暗号化および復号コマンドの[コミットメントポリシー](concepts.md#commitment-policy)を指定します。コミットメントポリシーは、[キーコミットメント](concepts.md#key-commitment)セキュリティ機能を使用してメッセージを暗号化および復号化するかどうかを決定します。  
`--commitment-policy` パラメータはバージョン 1.8.*x* で導入されました。暗号化コマンドと復号コマンドで有効です。  
**バージョン 1.8.*x*** AWS では、Encryption CLI はすべての暗号化および復号オペレーションに`forbid-encrypt-allow-decrypt`コミットメントポリシーを使用します。`--wrapping-keys` パラメータを暗号化コマンドまたは復号コマンドで使用するときには、値 `forbid-encrypt-allow-decrypt` を指定した `--commitment-policy` パラメータが必要です。`--wrapping-keys` パラメータを使用しない場合、`--commitment-policy` パラメータは無効です。コミットメントポリシーを明示的に設定すると、バージョン 2.1.*x* へのアップグレード時にコミットメントポリシーが自動的に `require-encrypt-require-decrypt` に変更されなくなります。  
**バージョン 2.1.*x*** 以降は、すべてのコミットメントポリシーの値がサポートされます。`--commitment-policy` パラメータはオプションであり、デフォルト値は `require-encrypt-require-decrypt` です。  
このパラメータには次の値があります。  
+ `forbid-encrypt-allow-decrypt` — キーコミットメントで暗号化することはできません。キーコミットメントが使用されているかどうかにかかわらず、暗号化された暗号化テキストを復号化できます。

  バージョン 1.8.*x* では、これが唯一の有効な値です。 AWS Encryption CLI は、すべての暗号化および復号オペレーションに`forbid-encrypt-allow-decrypt`コミットメントポリシーを使用します。
+ `require-encrypt-allow-decrypt` — キーコミットメントで暗号化します。復号化はキーコミットメントの有無に関係なく行われます。この値はバージョン 2.1.*x* で導入されました。
+ `require-encrypt-require-decrypt` (デフォルト) — キーコミットメントでのみ暗号化および復号化が行われます。この値はバージョン 2.1.*x* で導入されました。バージョン 2.1.*x* 以降では、これがデフォルト値です。この値では、Encryption AWS CLI は以前のバージョンの で暗号化された暗号文を復号しません AWS Encryption SDK。
コミットメントポリシーの設定の詳細については、「[の移行 AWS Encryption SDK](migration.md)」を参照してください。

**--encryption-context (-c)**  
オペレーションの[暗号化コンテキスト](crypto-cli-how-to.md#crypto-cli-encryption-context)を指定します。このパラメータは必須ではありませんが、推奨されています。  
+ `--encrypt` コマンドでは、1 つまたは複数の `name=value` ペアを入力します。ペアを区切るには、スペースを使用します。
+ `--decrypt` コマンドでは、`name=value` ペア、値のない `name` 要素、またはその両方を入力します。
`name` ペアの `value` や `name=value` にスペースや特殊文字が含まれている場合、ペア全体を引用符で囲みます。例えば、`--encryption-context "department=software development"`。

**—buffer (-b) [バージョン 1.9.*x* および 2.2.*x* で導入]**  
デジタル署名が存在する場合の検証も含めて、すべての入力が処理された後にのみプレーンテキストが返されます。

**--max-encrypted-data-keys [バージョン 1.9.*x* および 2.2.*x* で導入]**  
暗号化されたメッセージ内の暗号化されたデータキーの最大数を指定します。このパラメータはオプションです。  
有効な値は 1～65,535 です。このパラメータを省略すると、Encryption AWS CLI は最大値を適用しません。暗号化されたメッセージには、最大 65,535 (2^16 - 1) の暗号化されたデータキーを使用できます。  
このパラメータを暗号化コマンドで使用して、不正な形式のメッセージを防ぐことができます。これを復号コマンドで使用して、悪意のあるメッセージを検出し、復号できない多数の暗号化されたデータキーを含むメッセージの復号化を回避できます。詳細と例については、「[暗号化されたデータキーの制限](configure.md#config-limit-keys)」を参照してください。

**--help (-h)**  
コマンドラインで使用量と構文を表示します。

**--version**  
Encryption AWS CLI のバージョンを取得します。

**-v \$1 -vv \$1 -vvv \$1 -vvvv**  
詳細な情報、警告、およびデバッグメッセージを表示します。出力の詳細は、パラメータ内の `v`s 数とともに増加します。最も詳細な設定 (`-vvvv`) は、Encryption AWS CLI とそれが使用するすべてのコンポーネントからデバッグレベルのデータを返します。

**--quiet (-q)**  
出力ファイルを上書きしたときに表示されるメッセージなど、警告メッセージを抑制します。

**--master-keys (-m) [非推奨]**  
—master-keys パラメータは 1.8.*x* で非推奨となり、バージョン 2.1.*x* で削除されました。代わりに、[--wrapping-keys](#wrapping-keys) パラメータを使用してください。
暗号化と復号のオペレーションで使用される[マスターキー](concepts.md#master-key)を指定します。複数のマスターキーパラメータを各コマンドで使用できます。  
この暗号化コマンドには、`--master-keys` パラメータが必要です。これはカスタム (AWS KMS以外の) マスターキープロバイダーを使用しているときにのみ、復号コマンドで必要です。  
**属性**: `--master-keys` パラメータの値は、以下の属性で構成されます。形式は `attribute_name=value` です。    
**key**  
オペレーションで使用する[ラッピングキー](concepts.md#master-key)を識別します。形式は、**key**=ID のペアです。すべての暗号化コマンドには、**key** 属性が必要です。  
暗号化コマンド AWS KMS key で を使用する場合、**キー**属性の値は、キー ID、キー ARN、エイリアス名、またはエイリアス ARN です。 AWS KMS キー識別子の詳細については、「 *AWS Key Management Service デベロッパーガイド*」の[「キー識別子](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id)」を参照してください。  
マスターキープロバイダーが AWS KMSでない場合、復号コマンドには **key** 属性が必須です。 AWS KMS keyで暗号化されたデータを復号するコマンドでは、**key** 属性は許可されていません。  
各 `--master-keys` パラメータ値に、複数の **key** 属性を指定できます。ただし、**provider**、**region**、および **profile** 属性は、パラメータ値のマスターキーすべてに適用されます。異なる属性値を持つマスターキーを指定するには、コマンドで複数の `--master-keys` パラメータを使用します。  
**provider**  
[マスターキープロバイダー](concepts.md#master-key-provider)を指定します。形式は、**provider**=ID のペアです。デフォルト値の **aws-kms** は を表します AWS KMS。この属性は、マスターキープロバイダーがそうでない場合にのみ必要です AWS KMS。  
**リージョン**  
 AWS リージョン の を識別します AWS KMS key。この属性は に対してのみ有効です AWS KMS keys。**key** の識別子が特定のリージョンを示していない場合にのみ使用され、それ以外の場合は無視されます。これを使用すると、 AWS CLI 名前付きプロファイルのデフォルトリージョンが上書きされます。  
**profile**  
 AWS CLI [名前付きプロファイル](https://docs.aws.amazon.com/cli/latest/userguide/cli-multiple-profiles.html)を識別します。この属性は に対してのみ有効です AWS KMS keys。プロファイルのリージョンは、key の識別子が特定のリージョンを示しておらず、コマンドに **region** 属性がない場合にのみ使用されます。

## 高度なパラメータ
<a name="cli-advanced-parameters"></a>

**--algorithm**  
[アルゴリズムスイート](concepts.md#crypto-algorithm)の代替を指定します。このパラメータはオプションであり、暗号化コマンドでのみ有効です。  
このパラメータを省略すると、Encryption AWS CLI はバージョン 1.8.*x* で AWS Encryption SDK 導入された のデフォルトのアルゴリズムスイートのいずれかを使用します。どちらのデフォルトアルゴリズムも、[HKDF](https://en.wikipedia.org/wiki/HKDF)、ECDSA 署名、および 256 ビットの暗号化キーを含む AES-GCM を使用します。キーコミットメントは、使用される場合と使用されない場合があります。デフォルトのアルゴリズムスイートは、コマンドの[コミットメントポリシー](concepts.md#commitment-policy)によって選択されます。  
デフォルトアルゴリズムスイートは、ほとんどの暗号化オペレーションで推奨されます。有効な値のリストについては、「[ドキュメントを読む](https://aws-encryption-sdk-cli.readthedocs.io/en/latest/index.html#execution)」の `algorithm` パラメータの値を参照してください。

**--frame-length**  
指定されたフレームの長さで出力を作成します。このパラメータはオプションであり、暗号化コマンドでのみ有効です。  
値をバイトで入力します。有効な値は、0 および 1 ～ 2^31 - 1 です。値 0 は、フレーム化されていないデータを示します。デフォルト値は 4096 (バイト) です。  
可能な限り、フレーム化されたデータを使用してください。は、レガシー使用のためにのみフレーム化されていないデータ AWS Encryption SDK をサポートします。の一部の言語実装では、フレーム化されていない暗号文を生成 AWS Encryption SDK できます。サポートされているすべての言語実装では、フレーム化された暗号化テキストとフレーム化されていない暗号化文書を復号化できます。

**--max-length**  
暗号化されたメッセージから読み取る最大フレームサイズ (またはフレーム化されていないメッセージの最大コンテンツ長) をバイト数で指定します。このパラメータはオプションであり、復号コマンドでのみ有効です。これは、悪意のある膨大な量の暗号化テキストを復号する際に保護できるように設計されています。  
値をバイトで入力します。このパラメータを省略しても、 AWS Encryption SDK は復号時にフレームサイズを制限しません。

**--caching**  
入力ファイルごとに新しいデータキーを生成する代わりに、データキーを再利用する[データキーキャッシュ](data-key-caching.md)機能を有効にします。このパラメータでは、高度なシナリオがサポートされています。この機能を使用する前に、[データキーキャッシュ](data-key-caching.md)のドキュメントを参照してください。  
`--caching` パラメータには以下のような属性があります。    
**capacity (必須)**  
キャッシュのエントリの最大数を決定します。  
最小値は 1 です。最大値は存在しません。  
**max\$1age (必須)**  
キャッシュエントリがキャッシュに追加された時点から、どのくらいの期間使用されるかを決定します (秒単位)。  
0 より大きい値を入力します。最大値は存在しません。  
**max\$1messages\$1encrypted (オプション)**  
キャッシュされたエントリが暗号化できるメッセージの最大数を決定します。  
有効な値は 1～2^32 です。デフォルト値は 2^32 (メッセージ) です。  
**max\$1bytes\$1encrypted (オプション)**  
キャッシュされたエントリが暗号化できるバイトの最大数を決定します。  
有効な値は、0 および 1 ～ 2^63 - 1 です。デフォルト値は 2^63 - 1 (メッセージ) です。値を 0 に指定することで、空のメッセージ文字列を暗号化している場合にのみデータキーキャッシュを使用できます。

# Encryption AWS CLI のバージョン
<a name="crypto-cli-versions"></a>

最新バージョンの AWS Encryption CLI を使用することをお勧めします。

**注記**  
4.0.0 より前のバージョンの AWS Encryption CLI は[end-of-supportフェーズ](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)にあります。  
バージョン 2.1.x 以降から、コードやデータを変更せずに最新バージョンの AWS Encryption CLI に安全に更新できます。ただし、バージョン 2.1.x で導入された[新しいセキュリティ機能](about-versions.md#version-2)には下位互換性がありません。バージョン 1.7.*x* 以前から更新するには、まず Encryption AWS CLI の最新バージョンの 1.*x* に更新する必要があります。詳細については、「[の移行 AWS Encryption SDK](migration.md)」を参照してください。  
新しいセキュリティ機能は、もともと AWS Encryption 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)を参照してください。

の重要なバージョンについては AWS Encryption SDK、「」を参照してください[のバージョン AWS Encryption SDK](about-versions.md)。

**使用すべきバージョン**

 AWS Encryption CLI を初めて使用する場合は、最新バージョンを使用します。

バージョン 1.7.*x* より AWS Encryption SDK 前の のバージョンで暗号化されたデータを復号するには、まず Encryption CLI AWS の最新バージョンに移行します。[推奨される変更をすべて](migration-guide.md)行ってから、バージョン 2.1.*x* 以降にアップデートしてください。詳細については、「[の移行 AWS Encryption SDK](migration.md)」を参照してください。

**詳細はこちら**
+ これらの新しいバージョンへの移行に関する変更とガイダンスについては、「[の移行 AWS Encryption SDK](migration.md)」を参照してください。
+ 新しい Encryption AWS CLI パラメータと属性の詳細については、「」を参照してください[AWS Encryption SDK CLI 構文とパラメータリファレンス](crypto-cli-reference.md)。

次のリストでは、バージョン AWS 1.8.*x* および 2.1.*x* での Encryption CLI の変更について説明します。

## Encryption CLI のバージョン AWS 1.8.*x* の変更
<a name="cli-changes-1.7"></a>
+ `--master-keys` パラメータは非推奨となります。代わりに、`--wrapping-keys` パラメータを使用します。
+ `--wrapping-keys` (`-w`) パラメータが追加されます。`--master-keys` パラメータのすべての属性がサポートされます。また、次のオプションの属性も追加されます。これは、 AWS KMS keysで復号化する場合にのみ有効です。
  + **discovery**
  + **discovery-partition**
  + **discovery-account**

  カスタムマスターキープロバイダーの場合、`--encrypt` と -`-decrypt` コマンドには、`--wrapping-keys` パラメータまたは `--master-keys` パラメータが必要です (両方ではない)。また、 を使用する `--encrypt` コマンドには、 `--wrapping-keys`パラメータまたは `--master-keys`パラメータ (両方ではない) AWS KMS keys が必要です。

  を使用する`--decrypt`コマンドでは AWS KMS keys、 `--wrapping-keys`パラメータはオプションですが、バージョン 2.1.*x* で必須であるため、推奨されます。使用する場合は、**key** 属性を指定するか、**discovery** 属性を `true` にする必要があります (両方ではない)。
+ `--commitment-policy` パラメータが追加されます。唯一の有効な値は `forbid-encrypt-allow-decrypt` です。`forbid-encrypt-allow-decrypt` コミットポリシーは、すべての暗号化と復号コマンドで使用されます。

  バージョン 1.8.*x* では、`--wrapping-keys` パラメータを使用するときに、値が `forbid-encrypt-allow-decrypt` の `--commitment-policy` パラメータが必要です。値を明示的に設定すると、バージョン 2.1.x へのアップグレード時に[コミットメントポリシー](concepts.md#commitment-policy)が自動的に `require-encrypt-require-decrypt` に変更されなくなります。

## Encryption CLI のバージョン AWS 2.1.*x* の変更
<a name="cli-changes-2.x"></a>
+ `--master-keys` パラメータは削除されます。代わりに、`--wrapping-keys` パラメータを使用します。
+ すべての暗号化コマンドと復号コマンドには、`--wrapping-keys` パラメータが必要です。**key** 属性を指定するか、**discovery** 属性を `true` にする必要があります (両方ではない)。
+ `--commitment-policy` パラメータでは次の値がサポートされます。詳細については、「[コミットメントポリシーの設定](migrate-commitment-policy.md)」を参照してください。
  + `forbid-encrypt-allow-decrypt`
  + `require-encrypt-allow-decrypt`
  + `require-encrypt-require decrypt` (デフォルト)
+ バージョン 2.1.*x* では、`--commitment-policy` パラメータはオプションです。デフォルト値は `require-encrypt-require-decrypt` です。

## Encryption CLI のバージョン 1.9.*x* AWS および 2.2.*x* の変更
<a name="cli-changes-2.2"></a>
+ `--decrypt-unsigned` パラメータが追加されます。詳細については、「[バージョン 2.2.x](about-versions.md#version2.2.x)」を参照してください。
+ `--buffer` パラメータが追加されます。詳細については、「[バージョン 2.2.x](about-versions.md#version2.2.x)」を参照してください。
+ `--max-encrypted-data-keys` パラメータが追加されます。詳細については、「[暗号化されたデータキーの制限](configure.md#config-limit-keys)」を参照してください。

## バージョン 3.0.*x* の AWS Encryption CLI への変更
<a name="cli-changes-v3"></a>
+  AWS KMS マルチリージョンキーのサポートを追加しました。詳細については、[マルチリージョンの使用 AWS KMS keys](configure.md#config-mrks) を参照してください