

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

# AWS Encryption SDK Rust 用
<a name="rust"></a>

このトピックでは、 AWS Encryption SDK for Rust をインストールして使用する方法について説明します。 AWS Encryption SDK for Rust を使用したプログラミングの詳細については、GitHub の aws-encryption-sdk リポジトリの [Rust](https://github.com/aws/aws-encryption-sdk-dafny/tree/mainline/AwsEncryptionSDK/runtimes/rust/) ディレクトリを参照してください。

 AWS Encryption SDK for Rust は、以下の点 AWS Encryption SDK で の他のプログラミング言語実装とは異なります。
+ [データキーキャッシュ](data-key-caching.md)はサポートされていません。ただし、 AWS Encryption SDK for Rust は、代替の暗号化マテリアルキャッシュソリューションである[AWS KMS 階層キーリング](use-hierarchical-keyring.md)をサポートしています。
+ ストリーミングデータはサポートしていません

 AWS Encryption SDK for Rust には、 の他の言語実装のバージョン 2.0.*x* 以降で導入されたすべてのセキュリティ機能が含まれています AWS Encryption SDK。ただし、 AWS Encryption SDK for Rust を使用して、 の 2.0.*x* より前のバージョンの別の言語実装で暗号化されたデータを復号する場合は AWS Encryption SDK、[コミットメントポリシー](concepts.md#commitment-policy)を調整する必要がある場合があります。詳細については、「[コミットメントポリシーの設定方法](migrate-commitment-policy.md#migrate-commitment-step1)」を参照してください。

 AWS Encryption SDK for Rust は、仕様を記述する正式な検証言語である [Dafny](https://github.com/dafny-lang/dafny/blob/master/README.md) AWS Encryption SDK の の製品であり、実装するコード、およびテストするための証明です。その結果、機能の正確性を保証するフレームワークに、 AWS Encryption SDK の機能を実装するライブラリができあがりました。

**詳細はこちら**
+ 代替アルゴリズムスイートの指定 AWS Encryption SDK、暗号化されたデータキーの制限、 AWS KMS マルチリージョンキーの使用など、 でオプションを設定する方法の例については、「」を参照してください[の設定 AWS Encryption SDK](configure.md)。
+ Rust AWS Encryption SDK の を設定して使用する方法の例については、GitHub の aws-encryption-sdk リポジトリの [Rust の例](https://github.com/aws/aws-encryption-sdk-dafny/tree/mainline/AwsEncryptionSDK/runtimes/rust/examples)を参照してください。

**Topics**
+ [

## 前提条件
](#prerequisites-rust)
+ [

## インストール
](#rust-installation)
+ [例](rust-examples.md)

## 前提条件
<a name="prerequisites-rust"></a>

 AWS Encryption SDK for Rust をインストールする前に、次の前提条件があることを確認してください。

**Rust と Cargo をインストールする**  
[rustup](https://rustup.rs/) を使用して [Rust](https://www.rust-lang.org/) の現在の安定リリースをインストールします。  
rustup のダウンロードとインストールの詳細については、「Cargo Book」の[「インストール手順](https://doc.rust-lang.org/cargo/getting-started/installation.html)」を参照してください。

## インストール
<a name="rust-installation"></a>

 AWS Encryption SDK for Rust は[https://crates.io/crates/aws-esdk](https://crates.io/crates/aws-esdk)、Crates.io で木箱として利用できます。 AWS Encryption SDK for Rust のインストールと構築の詳細については、GitHub の aws-encryption-sdk リポジトリの [README.md](https://github.com/aws/aws-encryption-sdk/tree/mainline) を参照してください。

 AWS Encryption SDK for Rust は、次の方法でインストールできます。

**手動**  
 AWS Encryption SDK for Rust をインストールするには、[aws-encryption-sdk](https://github.com/aws/aws-encryption-sdk/tree/mainline) GitHub リポジトリのクローンを作成するか、ダウンロードします。

**Crates.io の使用**  
プロジェクトディレクトリで次の Cargo コマンドを実行します。  

```
cargo add aws-esdk
```
または、Cargo.toml に次の行を追加します。  

```
aws-esdk = "<version>"
```

# AWS Encryption SDK Rust のサンプルコード
<a name="rust-examples"></a>

次の例は、 AWS Encryption SDK for Rust でプログラミングするときに使用する基本的なコーディングパターンを示しています。具体的には、 AWS Encryption SDK とマテリアルプロバイダーライブラリをインスタンス化します。次に、各メソッドを呼び出す前に、メソッドの入力を定義する オブジェクトをインスタンス化します。

代替アルゴリズムスイートの指定や暗号化されたデータキーの制限など AWS Encryption SDK、 でオプションを設定する方法の例については、GitHub の aws-encryption-sdk リポジトリの [Rust の例](https://github.com/aws/aws-encryption-sdk-dafny/tree/mainline/AwsEncryptionSDK/runtimes/rust/examples/)を参照してください。

## AWS Encryption SDK for Rust でのデータの暗号化と復号
<a name="rust-example-encrypt"></a>

この例では、データを暗号化および復号するための基本的なパターンを示しています。1 つのラ AWS KMS ッピングキーで保護されたデータキーを使用して小さなファイルを暗号化します。

**ステップ 1: をインスタンス化します AWS Encryption SDK。**  
のメソッドを使用して、データを AWS Encryption SDK 暗号化および復号します。  

```
let esdk_config = AwsEncryptionSdkConfig::builder().build()?;
let esdk_client = esdk_client::Client::from_conf(esdk_config)?;
```

**ステップ 2: AWS KMS クライアントを作成する。**  

```
let sdk_config = aws_config::load_defaults(aws_config::BehaviorVersion::latest()).await;
let kms_client = aws_sdk_kms::Client::new(&sdk_config);
```

**オプション: 暗号化コンテキストを作成します。**  

```
let encryption_context = HashMap::from([
    ("encryption".to_string(), "context".to_string()),
    ("is not".to_string(), "secret".to_string()),
    ("but adds".to_string(), "useful metadata".to_string()),
    ("that can help you".to_string(), "be confident that".to_string()),
    ("the data you are handling".to_string(), "is what you think it is".to_string()),
]);
```

**ステップ 3: マテリアルプロバイダーライブラリをインスタンス化します。**  
マテリアルプロバイダライブラリのメソッドを使用して、データを保護するキーを指定するキーリングを作成します。  

```
let mpl_config = MaterialProvidersConfig::builder().build()?;
let mpl = mpl_client::Client::from_conf(mpl_config)?;
```

**ステップ 4: AWS KMS キーリングを作成します。**  
キーリングを作成するには、キーリング入力オブジェクトを使用してキーリングメソッドを呼び出します。この例では、 `create_aws_kms_keyring()`メソッドを使用し、1 つの KMS キーを指定します。  

```
let kms_keyring = mpl
    .create_aws_kms_keyring()
    .kms_key_id(kms_key_id)
    .kms_client(kms_client)
    .send()
    .await?;
```

**ステップ 5: プレーンテキストを暗号化します。**  

```
let plaintext = example_data.as_bytes();

let encryption_response = esdk_client.encrypt()
    .plaintext(plaintext)
    .keyring(kms_keyring.clone())
    .encryption_context(encryption_context.clone())
    .send()
    .await?;

let ciphertext = encryption_response
                    .ciphertext
                    .expect("Unable to unwrap ciphertext from encryption response");
```

**ステップ 6: 暗号化に使用したのと同じキーリングを使用して、暗号化されたデータを復号します。**  

```
let decryption_response = esdk_client.decrypt()
    .ciphertext(ciphertext)
    .keyring(kms_keyring)
    // Provide the encryption context that was supplied to the encrypt method
    .encryption_context(encryption_context)
    .send()
    .await?;

let decrypted_plaintext = decryption_response
                            .plaintext
                            .expect("Unable to unwrap plaintext from decryption response");
```