

# Athena의 데이터 보호
<a name="security-data-protection"></a>

AWS [공동 책임 모델](https://aws.amazon.com/compliance/shared-responsibility-model/)은 데이터 보호에 적용됩니다. 이 모델에서 설명하는 것처럼 AWS는 모든 AWS 클라우드를 실행하는 글로벌 인프라를 보호할 책임이 있습니다. 사용자는 이 인프라에 호스팅되는 콘텐츠에 대한 통제 권한을 유지할 책임이 있습니다. 사용하는 AWS 서비스의 보안 구성과 관리 태스크에 대한 책임도 사용자에게 있습니다. 데이터 프라이버시에 관한 자세한 내용은 [데이터 프라이버시 FAQ](https://aws.amazon.com/compliance/data-privacy-faq/)를 참조하세요. 유럽의 데이터 보호에 대한 자세한 내용은 *AWS보안 블로그*의 [AWS공동 책임 모델 및 GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 블로그 게시물을 참조하세요.

데이터를 보호하려면 AWS 계정자격 증명을 보호하고 AWS IAM Identity Center또는 AWS Identity and Access Management(IAM)를 통해 개별 사용자 계정을 설정하는 것이 좋습니다. 이렇게 하면 개별 사용자에게 자신의 직무를 충실히 이행하는 데 필요한 권한만 부여됩니다. 또한 다음과 같은 방법으로 데이터를 보호하는 것이 좋습니다.
+ 각 계정에 다중 인증(MFA)을 사용합니다.
+ SSL/TLS를 사용하여 AWS리소스와 통신하세요. TLS 1.2는 필수이며 TLS 1.3을 권장합니다.
+ AWS CloudTrail으로 API 및 사용자 활동 로깅을 설정하세요. AWS 활동 캡처에 CloudTrail 추적을 사용하는 방법에 대한 자세한 내용은 *AWS CloudTrail사용 설명서*의 [CloudTrail 추적 작업](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)을 참조하세요.
+ AWS 암호화 솔루션을 AWS 서비스내의 모든 기본 보안 컨트롤과 함께 사용하세요.
+ Amazon S3에 저장된 민감한 데이터를 검색하고 보호하는 데 도움이 되는 Amazon Macie와 같은 고급 관리형 보안 서비스를 사용합니다.
+ 명령줄 인터페이스 또는 API를 통해 AWS에 액세스할 때 FIPS 140-3 검증된 암호화 모듈이 필요한 경우, FIPS 엔드포인트를 사용합니다. 사용 가능한 FIPS 엔드포인트에 대한 자세한 내용은 [연방 정보 처리 표준(FIPS) 140-3](https://aws.amazon.com/compliance/fips/)을 참조하세요.

고객의 이메일 주소와 같은 기밀 정보나 중요한 정보는 태그나 **이름** 필드와 같은 자유 형식 텍스트 필드에 입력하지 않는 것이 좋습니다. 여기에는 콘솔, API, AWS CLI 또는 AWS SDK를 사용하여 또는 다른 AWS 서비스로 작업하는 경우가 포함됩니다. 이름에 사용되는 태그 또는 자유 형식 텍스트 필드에 입력하는 모든 데이터는 청구 또는 진단 로그에 사용될 수 있습니다. 외부 서버에 URL을 제공할 때 해당 서버에 대한 요청을 검증하기 위해 자격 증명을 URL에 포함해서는 안 됩니다.

추가 보안 단계로 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-calledvia](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-calledvia) 전역 조건 컨텍스트 키를 사용하여 Athena에서 보낸 요청으로만 요청을 제한할 수 있습니다. 자세한 내용은 [Athena용 CalledVia 컨텍스트 키 사용](security-iam-athena-calledvia.md) 섹션을 참조하세요.

## 다양한 유형의 데이터 보호
<a name="security-data-protection-types-of-data"></a>

Athena를 사용하여 데이터베이스 및 테이블을 작성할 때 여러 유형의 데이터가 관련됩니다. 이러한 데이터 형식에는 Amazon S3에 저장된 원본 데이터, 쿼리를 실행할 때 만드는 데이터베이스 및 테이블의 메타 데이터 또는 데이터, 쿼리 결과 데이터 및 쿼리 기록 검색을 위한 AWS Glue 크롤러가 포함됩니다. 이 섹션에서는 각 유형의 데이터에 대해 설명하고 데이터 보호에 대한 지침을 제공합니다.
+ **소스 데이터** – Athena는 사용자가 Amazon S3에 저장한 데이터베이스와 테이블의 데이터를 수정하지 않습니다. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [Amazon S3의 데이터 보호](https://docs.aws.amazon.com/AmazonS3/latest/userguide/DataDurability.html)를 참조하세요. Amazon S3에서 소스 데이터에 대한 액세스를 제어하고 이를 암호화할 수 있습니다. Athena는 [Amazon S3에서 암호화된 데이터 세트를 기반으로 테이블을 생성](creating-tables-based-on-encrypted-datasets-in-s3.md)할 수 있습니다.
+ **데이터베이스 및 테이블 메타데이터(스키마)** – Athena는 스키마-온-리드(schema-on-read) 기술을 사용합니다. 즉, 테이블 정의는 Athena 쿼리 실행 시 Amazon S3의 데이터에 적용됩니다. 사용자가 정의하는 모든 스키마는 명시적으로 삭제하지 않는 한, 자동으로 저장됩니다. Athena에서 DDL 문을 사용하여 데이터 카탈로그 메타데이터를 수정할 수 있습니다. Amazon S3에 저장된 기본 데이터에 영향을 주지 않고도 테이블 정의 및 스키마를 삭제할 수도 있습니다. Athena에서 사용하는 데이터베이스 및 테이블의 메타데이터는 AWS Glue Data Catalog에 저장됩니다.

  AWS Identity and Access Management(IAM)를 사용하면 AWS Glue Data Catalog에 등록된 [데이터베이스 및 테이블에 대해 세분화된 액세스 정책을 정의](fine-grained-access-to-glue-resources.md)할 수 있습니다. [AWS Glue Data Catalog의 메타데이터도 암호화](https://docs.aws.amazon.com/glue/latest/dg/encrypt-glue-data-catalog.html)할 수 있습니다. 메타데이터를 암호화하는 경우 액세스를 위해 [암호화된 메타데이터에 대한 사용 권한](encryption.md#glue-encryption)을 사용하세요.
+ **저장된 쿼리를 포함한 쿼리 결과 및 쿼리 기록** – 쿼리 결과는 전역 또는 각 작업 그룹에 대해 지정하도록 선택할 수 있는 Amazon S3의 위치에 저장됩니다. 지정하지 않으면 Athena는 각 경우에 기본 위치를 사용합니다. 쿼리 결과 및 저장된 쿼리를 저장하는 Amazon S3 버킷에 대한 액세스를 제어합니다. 또한 Amazon S3에 저장한 쿼리 결과를 암호화하도록 선택할 수 있습니다. 사용자는 Amazon S3 위치에 액세스하고 파일을 해독할 수 있는 적절한 권한을 가지고 있어야 합니다. 자세한 내용은 이 문서의 [Amazon S3에 저장된 Athena 쿼리 결과 암호화](encrypting-query-results-stored-in-s3.md) 단원을 참조하세요.

  Athena는 45일 동안 쿼리 기록을 보관합니다. 콘솔에서 Athena API와 AWS CLI를 사용하여 [쿼리 기록을 볼](queries-viewing-history.md) 수 있습니다. 45일 이상 된 쿼리를 저장하려면 저장하세요. 저장된 쿼리에 대한 액세스를 보호하려면 Athena에서 [작업 그룹을 사용](workgroups-manage-queries-control-costs.md)하여 저장된 쿼리에 대한 액세스 권한을, 쿼리를 볼 수 있는 권한이 있는 사용자에게만 제한합니다.

**Topics**
+ [다양한 유형의 데이터 보호](#security-data-protection-types-of-data)
+ [저장 시 암호화](encryption.md)
+ [전송 중 암호화](encryption-in-transit.md)
+ [키 관리](key-management.md)
+ [인터네트워크 트래픽 개인 정보](internetwork-traffic-privacy.md)

# 저장 시 암호화
<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) 섹션을 참조하세요.

# CSE-KMS에서 SSE-KMS로 마이그레이션
<a name="migrating-csekms-ssekms"></a>

CSE-KMS 암호화하는 방법은 두 가지로, 작업 그룹 쿼리 결과 암호화 구성 및 클라이언트 측 설정 중에 지정할 수 있습니다. 자세한 내용은 [Amazon S3에 저장된 Athena 쿼리 결과 암호화](encrypting-query-results-stored-in-s3.md) 섹션을 참조하세요. 마이그레이션 프로세스 중에 CSE-KMS 데이터를 읽고 쓰는 기존 워크플로를 감사하고, CSE-KMS가 구성된 작업 그룹을 식별하고, 클라이언트 측 파라미터를 통해 CSE-KMS가 설정된 인스턴스를 찾는 것이 중요합니다.

## 작업 그룹 쿼리 결과 암호화 설정 업데이트
<a name="migrating-updating-workgroup-query-results-encryption"></a>

------
#### [ Console ]

**Athena 콘솔에서 데이터 암호화 설정 업데이트**

1. [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/)에서 Athena 콘솔을 엽니다.

1. Athena 콘솔 탐색 창에서 **작업 그룹(Workgroups)**을 선택합니다.

1. **작업 그룹(Workgroups)** 페이지에서 편집할 작업 그룹의 버튼을 선택합니다.

1. **작업(Actions)**, **편집(Edit)**을 선택합니다.

1. **쿼리 결과 구성**을 열고 **쿼리 결과 암호화**를 선택합니다.

1. **암호화 유형** 섹션에서 **SSE\$1KMS** 암호화 옵션을 선택합니다.

1. **다른 AWS KMS 키 선택(고급)**에 사용하는 KMS 키를 입력합니다.

1. **변경 사항 저장**을 선택합니다. **작업 그룹(Workgroups)** 페이지의 목록에 업데이트된 작업 그룹이 나타납니다.

------
#### [ CLI ]

다음 명령을 실행하여 쿼리 결과 암호화 구성을 작업 그룹의 SSE-KMS로 업데이트합니다.

```
aws athena update-work-group \
    --work-group "my-workgroup" \
    --configuration-updates '{
        "ResultConfigurationUpdates": {
            "EncryptionConfiguration": {
                "EncryptionOption": "SSE_KMS",
                "KmsKey": "<my-kms-key>"
            }
        }
    }'
```

------

## 클라이언트 측 쿼리 결과 암호화 설정 업데이트
<a name="migrating-updating-clientside-query-results-encryption"></a>

------
#### [ Console ]

쿼리 결과 암호화를 위한 클라이언트 측 설정을 CSE-KMS에서 SSE-KMS로 업데이트하려면 [Amazon S3에 저장된 Athena 쿼리 결과 암호화](encrypting-query-results-stored-in-s3.md) 섹션을 참조하세요.

------
#### [ CLI ]

클라이언트 측 설정에서 쿼리 결과 암호화 구성 지정은 `start-query-execution` 명령을 사용해서 할 수 있습니다. 이 CLI 명령을 실행하고 작업 그룹에서 지정한 쿼리 결과 암호화 구성을 CSE-KMS로 재정의하는 경우 다음과 같이 `SSE_KMS`를 사용하여 명령을 변경해 쿼리 결과를 암호화합니다.

```
aws athena start-query-execution \
    --query-string "SELECT * FROM <my-table>;" \
    --query-execution-context "Database=<my-database>,Catalog=<my-catalog>" \
    --result-configuration '{
        "EncryptionConfiguration": {
            "EncryptionOption": "SSE_KMS",
            "KmsKey": "<my-kms-key>"
        }
    }' \
    --work-group "<my-workgroup>"
```

------

**참고**  
작업 그룹 또는 클라이언트 측 설정을 업데이트한 후 쓰기 쿼리로 삽입하는 모든 신규 데이터는 CSE-KMS 대신 SSE-KMS 암호화를 사용합니다. 쿼리 결과 암호화 구성이 새로 삽입된 테이블 데이터에도 적용되기 때문입니다. Athena 쿼리 결과, 메타데이터 및 매니페스트 파일도 SSE-KMS로 암호화됩니다.
Athena는 CSE-KMS 암호화 객체와 SSE-S3/SSE-KMS 객체가 혼합된 경우에도 `has_encrypted_data` 테이블 속성이 있는 테이블을 읽을 수 있습니다.

# CSE-KMS 테이블 데이터를 SSE-KMS로 변환
<a name="convert-csekms-table-ssekms"></a>

현재 워크플로가 테이블 데이터 암호화에 CSE-KMS를 사용하는 경우 다음 단계를 통해 SSE-KMS로 전환합니다.

## 사전 조건
<a name="convert-csekms-table-ssekms-preq"></a>

CSE-KMS 작업 그룹 또는 클라이언트 측 설정을 사용하여 여전히 데이터를 쓰는 경우 [CSE-KMS에서 SSE-KMS로 마이그레이션](migrating-csekms-ssekms.md)의 단계에 따라 SSE-KMS로 업데이트하세요. 이렇게 하면 마이그레이션 프로세스 중에 테이블에 쓸 수 있는 다른 워크플로에서 새 CSE-KMS 암호화된 데이터가 추가되지 않습니다.

## 데이터 마이그레이션
<a name="convert-csekms-table-ssekms-migrat"></a>

1. 테이블에 `has_encrypted_data` 속성이 `true`로 설정되어 있는지 확인합니다. 이 속성은 테이블에 CSE-KMS 암호화 데이터가 포함될 수 있도록 지정합니다. 그러나 이 속성은 CSE-KMS 암호화 데이터가 실제로는 없는 테이블에도 존재할 수 있다는 점에 유의해야 합니다.

------
#### [ Console ]

   1. [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/)에서 Athena 콘솔을 엽니다.

   1. **쿼리 편집기 시작**을 선택합니다.

   1. 편집기 왼쪽의 **데이터베이스**에서 쿼리할 데이터베이스를 선택합니다.

   1. 쿼리 편집기에서 다음 쿼리를 실행하여 `has_encrypted_data table` 속성으로 설정된 값을 확인합니다.

      ```
      SHOW TBLPROPERTIES <table_name>('has_encrypted_data');
      ```

------
#### [ CLI ]

   다음 예제와 같이 테이블에 `has_encrypted_data` 속성 값을 표시하는 Athena 쿼리를 시작합니다.

   ```
   aws athena start-query-execution \
       --query-string "SHOW TBLPROPERTIES <table-name>('has_encrypted_data');" \
       --work-group "<my-workgroup>"
   ```

   다음 예제와 같이 쿼리 결과를 가져와서 테이블의 `has_encrypted_data` 테이블 속성 값을 확인합니다.

   ```
   aws athena get-query-results --query-execution-id <query-execution-id-from-previous-step>
   ```

------

1. 테이블의 각 CSE-KMS 암호화 객체의 경우.

   1. S3 암호화 클라이언트를 사용하여 S3에서 객체를 다운로드하고 복호화합니다. 다음은 AWS Java SDK V2의 예제입니다.

      **가져오기**

      ```
      import software.amazon.awssdk.core.ResponseInputStream;
      import software.amazon.awssdk.services.s3.model.GetObjectRequest;
      import software.amazon.awssdk.services.s3.model.GetObjectResponse;
      import software.amazon.encryption.s3.S3EncryptionClient;
      import software.amazon.encryption.s3.materials.Keyring;
      import software.amazon.encryption.s3.materials.KmsDiscoveryKeyring;
      ```

      코드

      ```
      final Keyring kmsDiscoveryKeyRing = KmsDiscoveryKeyring.builder()
              .enableLegacyWrappingAlgorithms(true)
              .build();
      final S3EncryptionClient s3EncryptionClient = S3EncryptionClient.builder()
              .enableLegacyUnauthenticatedModes(true)
              .keyring(kmsDiscoveryKeyRing)
              .build();
      
      GetObjectRequest getObjectRequest = GetObjectRequest.builder()
              .bucket("amzn-s3-demo-bucket")
              .key("<my-key>")
              .build();
      
      ResponseInputStream<GetObjectResponse> s3Object = s3EncryptionClient.getObject(getObjectRequest);
      ```

   1. 동일한 이름과 SSE-KMS 암호화를 사용하여 객체를 S3에 업로드합니다. 다음은 AWS Java SDK V2의 예제입니다.

      **가져오기**

      ```
      import software.amazon.awssdk.core.ResponseInputStream;
      import software.amazon.awssdk.core.sync.RequestBody;
      import software.amazon.awssdk.services.s3.S3Client;
      import software.amazon.awssdk.services.s3.model.PutObjectRequest;
      import software.amazon.awssdk.services.s3.model.ServerSideEncryption;
      ```

      **코드**

      ```
      final S3Client s3Client = S3Client.builder()
              .build();
                  
      PutObjectRequest putObjectRequest = PutObjectRequest.builder()
              .bucket("amzn-s3-demo-bucket")
              .key("<my-key>")
              .serverSideEncryption(ServerSideEncryption.AWS_KMS)
              .ssekmsKeyId("<my-kms-key>")
              .build();
      
      s3Client.putObject(putObjectRequest, RequestBody.fromBytes(s3Object.readAllBytes()));
      ```

## 마이그레이션 후
<a name="convert-csekms-table-ssekms-post-migrat"></a>

테이블의 모든 CSE-KMS 파일에 대한 재암호화를 만료한 후 다음 단계를 수행합니다.

1. 테이블에서 `has_encrypted_data` 속성을 제거합니다.

------
#### [ Console ]

   1. [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/)에서 Athena 콘솔을 엽니다.

   1. **쿼리 편집기 시작**을 선택합니다.

   1. 편집기 왼쪽의 **데이터베이스**에서 쿼리할 데이터베이스를 선택합니다.

   1. 쿼리 편집기에서 테이블에 대해 다음 쿼리를 실행합니다.

      ```
      ALTER TABLE <database-name>.<table-name> UNSET TBLPROPERTIES ('has_encrypted_data')
      ```

------
#### [ CLI ]

   다음 명령을 실행하여 테이블에서 `has_encrypted_data` 속성을 제거합니다.

   ```
   aws athena start-query-execution \
       --query-string "ALTER TABLE <database-name>.<table-name> UNSET TBLPROPERTIES ('has_encrypted_data');" \
       --work-group "<my-workgroup>"
   ```

------

1. S3 암호화 클라이언트 대신 기본 S3 클라이언트를 사용하도록 워크플로를 업데이트한 다음 데이터 쓰기에 SSE-KMS 암호화를 지정합니다.

# Amazon S3에 저장된 Athena 쿼리 결과 암호화
<a name="encrypting-query-results-stored-in-s3"></a>

Athena 콘솔을 사용하거나 JDBC 또는 ODBC를 사용할 경우 쿼리 결과 암호화를 설정합니다. 작업 그룹을 통해 쿼리 결과를 암호화할 수 있습니다.

**참고**  
쿼리 결과를 암호화하면 Athena는 쿼리가 작성한 모든 객체를 암호화합니다. 여기에는 `INSERT INTO`, `UPDATE`와 같은 문의 결과와 Iceberg 또는 기타 형식의 데이터에 대한 쿼리 결과가 포함됩니다.

콘솔에서 쿼리 결과의 암호화 구성에 대한 설정은 다음 두 가지 방법으로 구성할 수 있습니다.
+ **클라이언트 측 설정** - 콘솔에서 **설정**을 사용하거나 API 작업을 사용하여 쿼리 결과를 암호화하도록 지정할 경우 클라이언트 측 설정을 사용하는 것입니다. 클라이언트 측 설정에는 쿼리 결과 위치와 암호화가 포함됩니다. 이를 지정할 경우 작업 그룹 설정에서 재정의하지 않는 한 이 설정이 사용됩니다.
+ **작업 그룹 설정** – [작업 그룹을 생성하거나 편집](creating-workgroups.md)하고 **클라이언트 측 설정 재정의(Override client-side settings)** 필드를 선택할 경우 이 작업 그룹에서 실행되는 모든 쿼리가 작업 그룹 암호화 및 쿼리 결과 위치 설정을 사용합니다. 자세한 내용은 [Override client-side settings(클라이언트 측 설정 재정의)](workgroups-settings-override.md) 섹션을 참조하세요.

**콘솔을 사용해 Amazon S3에 저장된 쿼리 결과를 암호화하려면**
**중요**  
작업 그룹에 **클라이언트 측 설정 재정의(Override client-side settings)** 필드가 선택되어 있으면 작업 그룹의 모든 쿼리가 작업 그룹 설정을 사용합니다. Athena 콘솔의 **설정** 탭에 지정된 암호화 구성 및 쿼리 결과 위치, API 작업, JDBC 및 ODBC 드라이버는 사용되지 않습니다. 자세한 내용은 [Override client-side settings(클라이언트 측 설정 재정의)](workgroups-settings-override.md) 섹션을 참조하세요.

1. Athena 콘솔에서 **설정**을 선택합니다.  
![\[Athena 쿼리 편집기의 설정 탭.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/settings.png)

1. **관리**를 선택합니다.

1. **쿼리 결과 위치(Location of query result)**에 Amazon S3 경로를 입력하거나 선택합니다. 이는 쿼리 결과가 저장되는 Amazon S3 위치입니다.

1. [**Encrypt query results**]를 선택합니다.  
![\[Athena 콘솔의 설정 관리 페이지에 있는 쿼리 결과 암호화 옵션.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/encrypt-query-results.png)

1. [**Encryption type**]에서 [**CSE-KMS**], [**SSE-KMS**] 또는 [**SSE-S3**]를 선택합니다. 이 세 가지 중에서 **CSE-KMS**는 가장 높은 수준의 암호화를 제공하고 **SSE-S3**는 가장 낮은 수준의 암호화를 제공합니다.

1. **SSE-KMS** 또는 **CSE-KMS**를 선택한 경우 AWS KMS 키를 지정합니다.
   + 계정에 기존 AWS KMS 고객 관리형 키에 대한 액세스 권한이 있는 경우 **AWS KMS 키 선택**에서 별칭을 선택하거나 AWS KMS 키 ARN을 입력합니다.
   +  계정에서 기존 고객 관리형 키에 액세스할 수 없는 경우 **AWS KMS 키 생성**을 선택한 다음 [AWS KMS 콘솔](https://console.aws.amazon.com/kms)을 엽니다. 자세한 정보는 *AWS Key Management Service 개발자 안내서*의 [키 생성](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)을 참조하세요.
**참고**  
Athena는 데이터 읽기 및 쓰기를 위한 대칭 키만 지원합니다.

1. Athena 콘솔로 돌아가서 별칭 또는 ARN으로 생성한 키를 선택합니다.

1. **저장**을 선택합니다.

## JDBC 또는 ODBC를 사용할 때 Athena 쿼리 결과 암호화
<a name="encrypting-query-results-stored-in-s3-jdbc-odbc"></a>

JDBC 또는 ODBC 드라이버를 사용하여 연결하는 경우 사용할 암호화 유형과 Amazon S3 스테이징 디렉터리 위치를 지정하는 드라이버 옵션을 구성합니다. Athena가 지원하는 암호화 프로토콜을 사용하여 쿼리 결과를 암호화하도록 JDBC 또는 ODBC 드라이버를 구성하는 방법은 [ODBC 및 JDBC 드라이버로 Amazon Athena에 연결](athena-bi-tools-jdbc-odbc.md) 섹션을 참조하세요.

# Amazon S3의 암호화된 데이터세트에 기반한 테이블 생성
<a name="creating-tables-based-on-encrypted-datasets-in-s3"></a>

Athena는 기본 데이터세트가 SSE-S3, SSE-KMS 또는 CSE-KMS로 암호화된 테이블을 읽고 쓸 수 있습니다. 테이블 데이터에 사용되는 암호화 옵션 및 실행된 쿼리 유형에 따라 암호화된 데이터를 읽고 쓰려면 몇 가지 추가 테이블 속성을 지정해야 할 수 있습니다.

## SSE-S3/SSE-KMS로 암호화된 테이블 읽기
<a name="reading-sse-s3-sse-kms-encrypted-tables"></a>

SSE-S3/SSE-KMS로 암호화된 데이터세트를 읽기 위해 테이블 생성 시 추가 테이블 속성을 지정할 필요가 없습니다. Amazon S3는 SSE 객체 복호화를 자동으로 처리합니다.

## CSE-KMS로 암호화된 테이블 읽기
<a name="reading-cse-kms-encrypted-tables"></a>

Athena가 CSE-KMS로 암호화된 데이터세트를 읽기 위해 지정할 수 있는 두 가지 테이블 속성 세트가 있습니다.
+ `encryption_option` 및 `kms_key` 테이블 속성 사용(권장)
+ `has_encrypted_data` 테이블 속성 사용

**중요**  
Amazon EMR을 EMRFS와 함께 사용해 CSE-KMS로 암호화된 Parquet 파일을 업로드하는 경우 `fs.s3n.multipart.uploads.enabled`를 `false`로 설정해 멀티파트 업로드를 비활성화해야 합니다. 이 작업을 하지 않으면, Athena는 Parquet 파일 길이를 확인하지 못하며 **HIVE\$1CANNOT\$1OPEN\$1SPLIT** 오류가 발생합니다. 자세한 내용은 *Amazon EMR 관리 안내서*의 [Amazon S3에 대한 멀티파트 업로드 구성](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-upload-s3.html#Config_Multipart)을 참조하세요.

### encryption\$1option 및 kms\$1key 테이블 속성 사용
<a name="using-encryption-option-and-kms-key-table-properties"></a>

다음 예제처럼 [CREATE TABLE](create-table.md) 문에서 `encryption_option='CSE_KMS'` 및 `kms_key='aws_kms_key_arn'`을 지정하는 `TBLPROPERTIES` 절을 사용합니다.

```
CREATE EXTERNAL TABLE 'my_encrypted_data' (
   `n_nationkey` int,
   `n_name` string,
   `n_regionkey` int,
   `n_comment` string)
ROW FORMAT SERDE
   'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
   'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
LOCATION
   's3://amzn-s3-demo-bucket/folder_with_my_encrypted_data/'
TBLPROPERTIES (
    'encryption_option' = 'CSE_KMS',
    'kms_key' = 'arn:aws:kms:us-east-1:012345678901:key/my_kms_key')
```

이러한 속성이 구성되는 경우
+ Athena는 V1, V2 또는 V3 Amazon S3 암호화 클라이언트에서 생성된 CSE-KMS로 암호화된 객체를 읽을 수 있습니다.
+ Athena는 `kms_key`의 AWS KMS 키를 사용하여 CSE-KMS 데이터를 복호화합니다. 객체가 다른 AWS KMS 키로 암호화된 경우 쿼리에 실패합니다.
+ 서버 측 객체와 클라이언트 측의 암호화된 객체를 혼합하는 방식은 권장되지 않지만 Athena는 여전히 SSE-S3 및 SSE-KMS로 암호화된 객체를 읽을 수 있습니다.

### has\$1encrypted\$1data 테이블 속성 사용
<a name="using-has-encrypted-data-table-property"></a>

다음 예제처럼 [CREATE TABLE](create-table.md) 문에서 `has_encrypted_data='true'`를 지정하는 `TBLPROPERTIES` 절을 사용합니다.

```
CREATE EXTERNAL TABLE 'my_encrypted_data' (
   `n_nationkey` int,
   `n_name` string,
   `n_regionkey` int,
   `n_comment` string)
ROW FORMAT SERDE
   'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
   'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
LOCATION
   's3://amzn-s3-demo-bucket/folder_with_my_encrypted_data/'
TBLPROPERTIES (
    'has_encrypted_data' = 'true')
```

has\$1encrypted\$1data 테이블 속성이 지정되는 경우
+ Athena는 V1 Amazon S3 암호화 클라이언트에서 생성된 CSE-KMS로 암호화된 객체만 읽을 수 있습니다.
+ Athena는 객체 메타데이터에서 CSE-KMS 객체를 암호화하는 데 사용되는 AWS KMS 키를 추론한 다음, 해당 키를 사용하여 객체를 복호화합니다.
+ 서버 측 객체와 클라이언트 측의 암호화된 객체를 혼합하는 방식은 권장되지 않지만 Athena는 여전히 SSE-S3 및 SSE-KMS로 암호화된 객체를 읽을 수 있습니다.

**참고**  
`encryption_option` 및 `kms_key`가 `has_encrypted_data`와 함께 지정되면 `encryption_option` 및 `kms_key` 테이블 속성이 우선하고 `has_encrypted_data`는 무시됩니다.

Athena 콘솔에서 [양식을 사용하여 테이블을 생성](data-sources-glue-manual-table.md)하고 테이블 위치를 지정할 때 **암호화된 데이터세트** 옵션을 선택하고 `has_encrypted_data='true'` 속성을 테이블에 추가합니다.

![\[테이블 추가 양식에서 암호화된 데이터 세트(Encrypted data set)을 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/add-table-form-encrypted-option.png)


Athena 콘솔 테이블 목록에서 `has_encrypted_data='true'`를 사용하여 CSE-KMS로 암호화된 테이블은 열쇠 모양 아이콘을 표시합니다.

![\[암호화 테이블 아이콘\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/tables-list-encrypted-table-icon.png)


## SSE-S3/SSE-KMS/CSE-KMS 암호화 데이터 쓰기
<a name="writing-sse-s3-sse-kms-cse-kms-encrypted-data"></a>

기본적으로 새로 삽입된 데이터 파일은 Athena 작업 그룹에 지정된 쿼리 결과의 암호화 구성을 사용하여 암호화됩니다. 쿼리 결과의 암호화 구성과 다른 암호화 구성으로 테이블 데이터를 쓰려면 몇 가지 테이블 속성을 더 추가해야 합니다.

다음 예제처럼 [CREATE TABLE](create-table.md) 문에서 `encryption_option='SSE_S3 | SSE_KMS | CSE_KMS'` 및 `kms_key='aws_kms_key_arn'`을 지정하는 `TBLPROPERTIES` 절을 사용합니다.

```
CREATE EXTERNAL TABLE 'my_encrypted_data' (
   `n_nationkey` int,
   `n_name` string,
   `n_regionkey` int,
   `n_comment` string)
ROW FORMAT SERDE
   'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
   'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
LOCATION
   's3://amzn-s3-demo-bucket/folder_with_my_encrypted_data/'
TBLPROPERTIES (
    'encryption_option' = 'SSE_KMS',
    'kms_key' = 'arn:aws:kms:us-east-1:012345678901:key/my_kms_key')
```

새로 삽입된 모든 데이터는 작업 그룹에서 쿼리 결과의 암호화 구성을 사용하는 대신 테이블 속성에 지정된 암호화 구성을 사용하여 암호화됩니다.

## 고려 사항 및 제한
<a name="considerations-and-limitations"></a>

암호화된 데이터세트를 쓰고 읽을 때 다음 사항을 고려합니다.
+ `has_encrypted_data`, `encryption_option` 및 `kms_key` 테이블 속성은 Hive 테이블에서만 사용할 수 있습니다.
+ CSE-KMS로 암호화된 데이터가 포함된 테이블을 생성할 때는 모든 데이터가 동일한 AWS KMS 키로 암호화되도록 하는 것이 좋습니다.
+ CSE-KMS로 암호화된 데이터가 포함된 테이블을 생성할 때는 모든 데이터가 CSE-KMS로 암호화되고 CSE-KMS 및 CSE-KMS 이외 방식으로 암호화된 객체가 혼합되지 않도록 하는 것이 좋습니다.

# 전송 중 암호화
<a name="encryption-in-transit"></a>

Amazon S3의 저장된 데이터를 암호화하는 것 외에도 Amazon Athena는 Athena와 Amazon S3 사이, 그리고 Athena와 이에 액세스하는 고객 에플리케이션 사이의 전송 중 데이터에 TLS(Transport Layer Security) 암호화를 사용합니다.

Amazon S3 버킷 IAM 정책에 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Boolean](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Boolean)을 사용하여 HTTPS(TLS)를 통해 암호화된 연결만 허용해야 합니다.

JDBC 또는 ODBC 클라이언트로 스트리밍하는 쿼리 결과는 TLS를 사용하여 암호화됩니다. JDBC 및 ODBC 드라이버의 최신 버전 및 해당 설명서에 대한 자세한 내용은 [JDBC로 Amazon Athena에 연결](connect-with-jdbc.md) 및 [ODBC로 Amazon Athena에 연결](connect-with-odbc.md) 단원을 참조하세요.

Athena 페더레이션된 데이터 소스 커넥터의 경우 TLS를 사용한 전송 중 암호화 지원은 개별 커넥터에 따라 다릅니다. 자세한 내용은 개별 [데이터 소스 커넥터](connectors-available.md)에 대한 설명서를 참조하세요.

# 키 관리
<a name="key-management"></a>

Amazon Athena는 AWS Key Management Service(AWS KMS)가 Amazon S3 및 Athena 쿼리 결과의 데이터세트 암호화 수행을 지원합니다. AWS KMS는 고객 마스터 키를 사용하여 Amazon S3 객체를 암호화하고 [봉투 암호화](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)를 사용합니다.

AWS KMS에서 다음 작업을 수행할 수 있습니다.
+  [키 생성](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) 
+  [새로운 고객 관리형 키에 대해 자체 키 구성 요소 가져오기](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html) 

**참고**  
Athena는 데이터 읽기 및 쓰기를 위한 대칭 키만 지원합니다.

자세한 내용은 *AWS Key Management Service 개발자 안내서*의 [AWS Key Management Service란 무엇인가?](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)와, [Amazon Simple Storage Service가 AWS KMS를 사용하는 방식](https://docs.aws.amazon.com/kms/latest/developerguide/services-s3.html)을 참조하세요. AWS에서 계정을 위해 직접 생성하고 관리하는 키를 보려면 탐색 창에서 **AWS 고객 관리형 키**를 선택합니다.

SSE-KMS로 암호화된 객체를 업로드 또는 액세스하는 경우 강화된 보안을 위해 AWS 서명 버전 4를 사용합니다. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [요청 인증에서 서명 버전 지정](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingAWSSDK.html#specify-signature-version)을 참조하세요.

Athena 워크로드가 대량의 데이터를 암호화하는 경우 Amazon S3 버킷 키를 사용하여 비용을 절감할 수 있습니다. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [Amazon S3 버킷 키를 사용하여 SSE-KMS 비용 절감](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-key.html)을 참조하세요.

# 인터네트워크 트래픽 개인 정보
<a name="internetwork-traffic-privacy"></a>

Athena 및 온프레미스 애플리케이션 간 및 Athena, Amazon S3 간 트래픽이 보호됩니다. Athena와 AWS Glue 및 AWS Key Management Service 등의 다른 서비스 간의 트래픽은 기본값으로 HTTP를 사용합니다.
+ **Athena 및 온프레미스 클라이언트와 애플리케이션 간의 트래픽의 경우** JDBC 또는 ODBC 클라이언트로 스트리밍되는 쿼리 결과는 TLS(전송 계층 보안)를 사용하여 암호화됩니다.

  프라이빗 네트워크와 AWS 사이에 연결 옵션 중 하나를 사용할 수 있습니다.
  + Site-to-Site VPN Site-to-Site VPN 연결. 자세한 내용은 *AWS Site-to-Site VPN 사용 설명서*에서 [Site-to-Site VPN Site-to-Site VPN이란 무엇인가?](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html)를 참조하세요.
  + Direct Connect 연결. 자세한 내용은 *Direct Connect 사용 설명서*에서 [Direct Connect란 무엇입니까?](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) 단원을 참조하세요.
+ **Athena와 Amazon S3 버킷 간의 트래픽의 경우** 전송 계층 보안(TLS)이 Athena와 Amazon S3 사이, 그리고 Athena와 이에 액세스하는 고객 애플리케이션 사이의 전송 중 객체를 암호화합니다. Amazon S3 버킷 IAM 정책에 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Boolean](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Boolean)을 사용할 때는 HTTPS(TLS)를 통해 암호화된 연결만 허용해야 합니다. Athena는 현재 퍼블릭 엔드포인트를 사용하여 Amazon S3 버킷의 데이터에 액세스하지만 이것이 데이터가 퍼블릭 인터넷을 통과한다는 의미는 아닙니다. Athena와 Amazon S3 간의 모든 트래픽은 AWS 네트워크를 통해 라우팅되고 TLS를 사용하여 암호화됩니다.
+ **규정 준수 프로그램** - Amazon Athena는 SOC, PCI, FedRAMP 등의 여러 AWS 규정 준수 프로그램을 준수합니다. 자세한 내용은 [규정 준수 프로그램 제공 범위 내 AWS 서비스](https://aws.amazon.com/compliance/services-in-scope/)를 참조하세요.