

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 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).
+  AWS Encryption SDK for Rust를 구성하고 사용하는 방법을 보여주는 예제는 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 다운로드 및 설치에 대한 자세한 내용은 카고 북의 [설치 절차를](https://doc.rust-lang.org/cargo/getting-started/installation.html) 참조하세요.

## 설치
<a name="rust-installation"></a>

 AWS Encryption SDK for Rust는 Crates.io [https://crates.io/crates/aws-esdk](https://crates.io/crates/aws-esdk) 크레이트로 사용할 수 있습니다. 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 for 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>

이 예제에서는 데이터 암호화 및 복호화의 기본 패턴을 보여줍니다. 하나의 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()` 메서드를 사용하고 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");
```