

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

# DynamoDB Encryption Client for Python 사용
<a name="python-using"></a>

**참고**  
클라이언트측 암호화 라이브러리의 [이름이 AWS Database Encryption SDK로 변경되었습니다](DDBEC-rename.md). 다음 주제에서는 Java용 DynamoDB Encryption Client 버전 1.*x*\$12.*x* 와 Python용 DynamoDB Encryption Client 버전 1.*x*\$13.*x*에 대한 정보를 제공합니다. 자세한 내용은 [AWS Database Encryption SDK for DynamoDB 버전 지원](legacy-dynamodb-encryption-client.md#legacy-support)을 참조하세요.

이 주제에서는 다른 프로그래밍 언어 구현에서는 찾을 수 없는 DynamoDB Encryption Client for Python의 일부 기능에 대해 설명합니다. 이러한 기능은 가장 안전한 방법으로 DynamoDB Encryption Client를 더 쉽게 사용할 수 있도록 설계되었습니다. 특별한 사용 사례가 아니라면 이를 사용하는 것이 좋습니다.

DynamoDB Encryption Client를 사용한 프로그래밍에 대한 자세한 내용은 이 가이드의 [Python 예제](python-examples.md), GitHub의 ws-dynamodb-encryption-pytho 리포지토리의 [예제](https://github.com/aws/aws-dynamodb-encryption-python/tree/master/examples) 및 DynamoDB Encryption Client에 대한 [Python 설명서](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/)를 참조하세요.

**Topics**
+ [클라이언트 헬퍼 클래스](#python-helpers)
+ [TableInfo 클래스](#table-info)
+ [Python의 속성 작업](#python-attribute-actions)

## 클라이언트 헬퍼 클래스
<a name="python-helpers"></a>

DynamoDB Encryption Client for Python에는 DynamoDB용 Boto 3 클래스를 미러링하는 여러 클라이언트 헬퍼 클래스가 포함되어 있습니다. 이러한 헬퍼 클래스는 다음과 같이 기존 DynamoDB 애플리케이션에 암호화 및 서명을 더 쉽게 추가하고 가장 일반적인 문제를 방지할 수 있도록 설계되었습니다.
+ 기본 키에 대한 재정의 작업을 [AttributeActions](#python-attribute-actions) 객체에 추가하거나 `AttributeActions` 객체가 기본 키를 암호화하도록 클라이언트에 명시적으로 지시하는 경우 예외를 발생시키는 방식으로 항목에서 기본 키를 암호화하지 못하도록 합니다. `AttributeActions` 객체의 기본 작업이 `DO_NOTHING`이면 클라이언트 헬퍼 클래스는 프라이머리 키에 대해 해당 작업을 사용합니다. 그렇지 않으면 `SIGN_ONLY`를 사용합니다.
+ [TableInfo 객체](#python-helpers)를 생성하고 DynamoDB 호출을 기반으로 [DynamoDB 암호화 컨텍스트](concepts.md#encryption-context)를 채웁니다. 이는 DynamoDB 암호화 컨텍스트가 정확하고 클라이언트가 프라이머리 키를 식별할 수 있도록 하는 데 도움이 됩니다.
+ 테이블에 쓰거나 읽어올 때 사용자 모르게 테이블 항목을 암호화 및 복호화하는 `put_item` 및 `get_item`와 같은 방법을 지원합니다. `update_item` 메소드만 지원되지 않습니다.

하위 수준의 [항목 암호화 도구](DDBEC-legacy-concepts.md#item-encryptor)를 사용하여 직접 상호 작용하는 대신에 클라이언트 헬퍼 클래스를 사용할 수 있습니다. 항목 암호화 도구에서 고급 옵션을 설정해야 하는 경우가 아니면 이 클래스를 사용합니다.

클라이언트 헬퍼 클래스에는 다음이 포함됩니다.
+ DynamoDB의 [테이블](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#table) 리소스를 사용하여 한 번에 하나의 테이블을 처리하는 애플리케이션을 위한 [EncryptedTable](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/lib/encrypted/table.html#module-dynamodb_encryption_sdk.encrypted.table).
+ 일괄 처리를 위해 DynamoDB의 [서비스 리소스](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#service-resource) 클래스를 사용하는 애플리케이션을 위한 [EncryptedResource](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/lib/encrypted/resource.html).
+ DynamoDB에서 [하위 수준 클라이언트](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#client)를 사용하는 애플리케이션을 위한 [EncryptedClient](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/lib/encrypted/client.html).

클라이언트 헬퍼 클래스를 사용하려면 호출자에게 대상 테이블에서 DynamoDB [DescribeTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html) 작업을 호출할 수 있는 권한이 있어야 합니다.

## TableInfo 클래스
<a name="table-info"></a>

[TableInfo](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/lib/tools/structures.html#dynamodb_encryption_sdk.structures.TableInfo) 클래스는 프라이머리 키 및 보조 인덱스에 대한 필드가 포함된 DynamoDB 테이블을 나타내는 헬퍼 클래스입니다. 테이블에 대한 정확한 실시간 정보를 얻는 데 도움이 됩니다.

[클라이언트 헬퍼 클래스](#python-helpers)를 사용하는 경우 이 클래스에서 사용자를 대신하여 `TableInfo` 객체를 만들고 사용합니다. 그렇지 않으면 명시적으로 생성할 수 있습니다. 예제는 [항목 암호화 도구 사용](python-examples.md#python-example-item-encryptor) 섹션을 참조하세요.

`TableInfo` 객체에 대해 `refresh_indexed_attributes` 방법을 호출하면 DynamoDB [DescribeTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html) 작업을 호출하여 객체의 속성 값이 채워집니다. 테이블 쿼리는 하드 코딩된 인덱스 이름보다 훨씬 더 안정적입니다. `TableInfo` 클래스에는 [DynamoDB 암호화 컨텍스트](concepts.md#encryption-context)에 필요한 값을 제공하는 `encryption_context_values` 속성도 포함되어 있습니다.

`refresh_indexed_attributes` 방법을 사용하려면 호출자에게 대상 테이블에서 DynamoDB [DescribeTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html) 작업을 호출할 수 있는 권한이 있어야 합니다.

## Python의 속성 작업
<a name="python-attribute-actions"></a>

[속성 작업](DDBEC-legacy-concepts.md#legacy-attribute-actions)은 항목의 각 속성에 대해 수행할 작업을 항목 암호화 도구에 알려줍니다. Python에서 속성 작업을 지정하려면 기본 작업과 특정 속성에 대한 예외가 포함된 `AttributeActions` 객체를 만듭니다. 유효한 값은 `CryptoAction` 열거 유형에 정의됩니다.

**중요**  
속성 작업을 사용하여 테이블 항목을 암호화한 후 데이터 모델에서 속성을 추가하거나 제거하면 서명 검증 오류가 발생하여 데이터를 복호화하지 못할 수 있습니다. 자세한 내용은 [데이터 모델 변경](data-model.md) 단원을 참조하십시오.

```
DO_NOTHING = 0
SIGN_ONLY = 1
ENCRYPT_AND_SIGN = 2
```

예를 들어, 이 `AttributeActions` 객체는 모든 속성에 대한 기본값을 `ENCRYPT_AND_SIGN`으로 설정하고 `ISBN` 및 `PublicationYear` 속성에 대한 예외를 지정합니다.

```
actions = AttributeActions(
    default_action=CryptoAction.ENCRYPT_AND_SIGN,
    attribute_actions={
        'ISBN': CryptoAction.DO_NOTHING,
        'PublicationYear': CryptoAction.SIGN_ONLY
    }
)
```

[클라이언트 헬퍼 클래스](#python-helpers)를 사용하는 경우 기본 키 속성에 대한 속성 작업을 지정할 필요가 없습니다. 클라이언트 헬퍼 클래스는 프라이머리 키를 암호화하는 것을 방지합니다.

클라이언트 헬퍼 클래스를 사용하지 않고 프라이머리 작업이`ENCRYPT_AND_SIGN` 인 경우 프라이머리 키에 대한 작업을 지정해야 합니다. 프라이머리 키에 대한 권장 조치는 `SIGN_ONLY`입니다. 이를 쉽게 하려면 프라이머리 키에 SIGN\$1ONLY를 사용하거나 기본 작업인 경우 DO\$1NOTHING을 사용하는 `set_index_keys` 방법을 사용합니다.

**주의**  
기본 키 속성은 암호화하지 마십시오. 일반 텍스트로 남겨 두어야 DynamoDB에서 전체 테이블 스캔을 실행하지 않고 해당 항목을 찾을 수 있습니다.

```
actions = AttributeActions(
    default_action=CryptoAction.ENCRYPT_AND_SIGN,
)
actions.set_index_keys(*table_info.protected_index_keys())
```