

# 저장 시 암호화
<a name="encryption"></a>

동일한 리전 및 제한된 수의 리전에 있는 Amazon S3의 암호화된 데이터에 대해 Amazon Athena에서 쿼리를 실행할 수 있습니다. Amazon S3의 쿼리 결과와 AWS Glue 데이터 카탈로그의 데이터를 암호화할 수도 있습니다.

다음과 같은 Athena의 자산을 암호화할 수 있습니다.
+ Athena가 Amazon S3 결과 위치로 알려진 위치에 저장하는 Amazon S3의 모든 쿼리 결과 기본 데이터 세트가 Amazon S3에서 암호화되든 그렇지 않든 Amazon S3에 저장된 쿼리 결과를 암호화할 수 있습니다. 자세한 내용은 [Amazon S3에 저장된 Athena 쿼리 결과 암호화](encrypting-query-results-stored-in-s3.md) 섹션을 참조하세요.
+ AWS Glue 데이터 카탈로그의 데이터. 자세한 내용은 [AWS Glue 데이터 카탈로그에 저장된 암호화된 메타데이터 권한](#glue-encryption) 섹션을 참조하세요.

**참고**  
Athena를 사용하여 암호화된 테이블을 읽을 때 Athena는 쿼리 결과에 대한 암호화 옵션이 아니라 테이블 데이터에 지정된 암호화 옵션을 사용합니다. 쿼리 결과 및 테이블 데이터에 대해 별도의 암호화 방법 또는 키가 구성된 경우 Athena는 쿼리 결과를 암호화하거나 해독하는 데 사용되는 암호화 옵션 및 키를 사용하지 않고 테이블 데이터를 읽습니다.  
하지만 Athena를 사용하여 암호화된 데이터가 있는 테이블에 데이터를 삽입하는 경우 Athena는 쿼리 결과에 지정된 암호화 구성을 사용하여 삽입된 데이터를 암호화합니다. 예를 들어 쿼리 결과에 `CSE_KMS` 암호화를 지정하는 경우 Athena는 쿼리 결과 암호화에 사용한 것과 동일한 AWS KMS 키 ID를 사용하여 `CSE_KMS`와 함께 삽입된 테이블 데이터를 암호화합니다.

**Topics**
+ [지원되는 Amazon S3 암호화 옵션](#encryption-options-S3-and-Athena)
+ [Amazon S3의 암호화 데이터 권한](#permissions-for-encrypting-and-decrypting-data)
+ [AWS Glue 데이터 카탈로그에 저장된 암호화된 메타데이터 권한](#glue-encryption)
+ [CSE-KMS에서 SSE-KMS로 마이그레이션](migrating-csekms-ssekms.md)
+ [Amazon S3에 저장된 Athena 쿼리 결과 암호화](encrypting-query-results-stored-in-s3.md)
+ [Amazon S3의 암호화된 데이터세트에 기반한 테이블 생성](creating-tables-based-on-encrypted-datasets-in-s3.md)

## 지원되는 Amazon S3 암호화 옵션
<a name="encryption-options-S3-and-Athena"></a>

Athena에서는 Amazon S3의 데이터 세트 및 쿼리 결과에 대해 다음과 같은 암호화 옵션을 지원합니다.


| 암호화 유형 | 설명 | 리전 간 지원 | 
| --- | --- | --- | 
| [SSE-S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html) | Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE). | 예 | 
| [SSE-KMS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)(권장됨) | AWS Key Management Service 고객 관리형 키를 사용한 서버 측 암호화(SSE)  | 예 | 
| [CSE-KMS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html#client-side-encryption-kms-managed-master-key-intro) |  AWS KMS 고객 관리형 키를 사용한 클라이언트 측 암호화(CSE) Athena에서 이 옵션을 사용하려면 `'kms_key'='kms_key_arn'`으로 `'has_encrypted_data'='true'` 또는 `'encryption_option'='CSE_KMS'`를 지정하는 `TBLPROPERTIES` 절과 함께 `CREATE TABLE` 문을 사용해야 합니다. 자세한 내용은 [Amazon S3의 암호화된 데이터세트에 기반한 테이블 생성](creating-tables-based-on-encrypted-datasets-in-s3.md) 섹션을 참조하세요.  | 아니요 | 

Amazon S3를 사용한 AWS KMS 암호화에 관한 자세한 내용은 *AWS Key Management Service 개발자 안내서*에서 [AWS Key Management Service란 무엇인가?](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 및 [Amazon Simple Storage Service(Amazon S3)의 AWS KMS 사용 방법](https://docs.aws.amazon.com/kms/latest/developerguide/services-s3.html)을 참조하세요. Athena에 SSE-KMS 또는 CSE-KMS를 사용하는 방법에 대한 자세한 내용은 *AWS Big Data Blog*의 [Launch: Amazon Athena adds support for querying encrypted data](https://aws.amazon.com/blogs/aws/launch-amazon-athena-adds-support-for-querying-encrypted-data/)를 참조하세요.

### 암호화 권장 사항
<a name="encryption-recommendation"></a>

고객 관리형 KMS 키를 사용하여 테이블 데이터 및 쿼리 결과를 암호화 및 복호화하는 경우 SSE-S3 또는 CSE-KMS 암호화 방법을 통한 SSE-KMS 암호화를 사용하는 것이 좋습니다. SSE-KMS는 제어, 단순성 및 성능 부문에서 균형을 제공하므로 데이터 암호화에 관리형 KMS 키를 사용할 때 권장되는 방법입니다.

**SSE-S3를 통한 SSE-KMS의 이점**
+ SSE-KMS를 사용하면 자체 키를 지정하고 관리할 수 있으므로 더 정확한 제어 권한을 제공합니다. 키 정책 정의, 키 수명 주기 감독, 키 사용량 모니터링을 수행할 수 있습니다.

**CSE-KMS를 통한 SSE-KMS의 이점**
+ SSE-KMS는 S3 암호화 클라이언트를 지속적으로 유지 관리해야 하는 CSE-KMS와 달리 데이터 암호화 및 복호화를 추가 인프라가 필요하지 않습니다.
+ CSE-KMS는 진화하는 암호화 알고리즘으로 인해 최신 및 이전 S3 암호화 클라이언트 간의 호환성 문제가 생길 수 있으며, SSE-KMS는 이를 방지합니다.
+ SSE-KMS는 암호화 및 복호화 프로세스 중에 키 검색을 위해 KMS 서비스에 대한 API 직접 호출을 줄여 CSE-KMS에 비해 더 나은 성능을 제공합니다.

### 지원되지 않는 옵션
<a name="encryption-unsupported-options"></a>

다음 암호화 옵션은 지원되지 않습니다.
+ 고객 제공 키가 있는 SSE(SSE-C).
+ 클라이언트 측 관리형 키를 사용한 클라이언트 측 암호화.
+ 비대칭 키.

Amazon S3 암호화 옵션을 비교하려면 *Amazon Simple Storage Service 사용 설명서*의 [암호화를 사용한 데이터 보호](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html)를 참조하세요.

### 클라이언트 측 암호화를 위한 도구
<a name="encryption-client-side-tools"></a>

 클라이언트 측 암호화를 위해 다음 두 가지 도구를 사용할 수 있습니다.
+ [Amazon S3 암호화 클라이언트](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3EncryptionClient.html) - Amazon S3의 데이터만 암호화하며 Athena에서 지원됩니다.
+ [AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html) - SDK를 사용하여 모든 AWS에서 데이터를 암호화할 수 있으나 Athena에서 직접 지원하지는 않습니다.

이러한 도구는 호환되지 않으며 한 도구를 사용하여 암호화된 데이터는 다른 도구에서 복호화할 수 없습니다. Athena는 Amazon S3 암호화 클라이언트만 직접적으로 지원합니다. SDK를 사용하여 데이터를 암호화하면 Athena에서 쿼리를 실행할 수 있지만 데이터가 암호화된 텍스트로 반환됩니다.

Athena를 사용하여 AWS 암호화 SDK로 암호화된 데이터를 쿼리하려면 데이터를 다운로드하고 복호화한 다음 Amazon S3 암호화 클라이언트를 사용하여 데이터를 다시 암호화해야 합니다.

## Amazon S3의 암호화 데이터 권한
<a name="permissions-for-encrypting-and-decrypting-data"></a>

Amazon S3에서 사용한 암호화 유형에 따라, Athena에서 사용한 정책에 ‘허용’ 작업이라고 하는 권한을 추가해야 할 수도 있습니다.
+ **SSE-S3** – 암호화에 SSE-S3를 사용하면 Athena 사용자는 정책에 추가 권한이 필요하지 않습니다. 적절한 Amazon S3 위치(및 Athena 작업)에 대해 적절한 Amazon S3 권한을 갖는 것으로 충분합니다. 적절한 Athena 및 Amazon S3 권한을 허용하는 정책에 대한 자세한 내용은 [Amazon Athena의 AWS 관리형 정책](security-iam-awsmanpol.md) 및 [Athena에서 Amazon S3에 대한 액세스 제어](s3-permissions.md) 단원을 참조하세요.
+ **AWS KMS** – 암호화에 AWS KMS를 사용한다면, Athena 및 Amazon S3 권한 외에 특정 AWS KMS 작업을 수행할 수 있는 권한을 Athena 사용자에게 허용해야 합니다. Amazon S3에서 데이터를 암호화하는 데 사용되는 고객 관리형 키의 키 정책을 편집하여 이러한 작업을 허용합니다. 키 사용자를 적절한 AWS KMS 키 정책에 추가하기 위해 AWS KMS 콘솔을 사용할 수 있습니다([https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms)). AWS KMS 키 정책에 사용자를 추가하는 방법에 대한 자세한 내용은 *AWS Key Management Service 개발자 안내서*의 [키 사용자가 고객 관리형 키를 사용하도록 허용](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default-allow-users)을 참조하세요.
**참고**  
고급 키 정책 관리자는 키 정책을 세부적으로 조정할 수 있습니다. `kms:Decrypt`는 Athena 사용자가 암호화된 데이터 세트로 작업할 때 허용되는 최소 작업입니다. 암호화된 쿼리 결과로 작업할 때 허용되는 최소 작업은 `kms:GenerateDataKey` 및 `kms:Decrypt`입니다.

  AWS KMS로 암호화된 객체가 다수 포함되어 있는 Amazon S3에서 Athena를 사용해 데이터세트를 쿼리한다면 AWS KMS가 쿼리 결과를 제한할 수 있습니다. 다수의 작은 객체가 있는 경우 이런 현상이 발생할 가능성이 높습니다. Athena가 재시도 요청을 취소해도 제한 오류가 계속 발생할 수 있습니다. 많은 수의 암호화된 객체로 작업하고 이 문제가 발생하는 경우 Amazon S3 버킷 키를 활성화하여 KMS에 대한 호출 수를 줄이는 것이 한 가지 방법입니다. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [Amazon S3 버킷 키를 사용하여 SSE-KMS 비용 절감](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-key.html)을 참조하세요. 또 다른 옵션은 AWS KMS에 대한 서비스 할당량을 늘리는 것입니다. 자세한 내용은 *AWS Key Management Service 개발자 안내서*에서 [할당량](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html#requests-per-second)을 참조하세요.

Amazon S3와 Athena 사용 시 권한에 대한 문제 해결 정보는 [권한](troubleshooting-athena.md#troubleshooting-athena-permissions) 주제의 [Athena의 문제 해결](troubleshooting-athena.md) 단원을 참조하세요.

## AWS Glue 데이터 카탈로그에 저장된 암호화된 메타데이터 권한
<a name="glue-encryption"></a>

[AWS Glue Data Catalog의 메타데이터를 암호화한다면](https://docs.aws.amazon.com/glue/latest/dg/encrypt-glue-data-catalog.html), Athena 액세스에 사용한 정책에 `"kms:GenerateDataKey"`, `"kms:Decrypt"`, `"kms:Encrypt"` 작업을 추가해야 합니다. 자세한 내용은 [Athena에서 AWS Glue Data Catalog의 암호화된 메타데이터에 대한 액세스 구성](access-encrypted-data-glue-data-catalog.md) 섹션을 참조하세요.