

# SEC08-BP02 저장 시 암호화 적용
<a name="sec_protect_data_rest_encrypt"></a>

 저장 데이터에 대한 암호화 사용을 적용해야 합니다. 암호화는 무단 액세스 또는 우발적 공개의 경우 민감한 데이터의 기밀성을 유지합니다. 

 **원하는 결과:** 프라이빗 데이터는 저장 시 기본적으로 암호화되어야 합니다. 암호화는 데이터의 기밀성을 유지하는 데 도움이 되며 의도적이거나 의도치 않은 데이터 공개 또는 유출에 대한 추가 보호 계층을 제공합니다. 암호화된 데이터는 먼저 데이터의 암호화를 해제하지 않고는 읽거나 액세스할 수 없습니다. 암호화되지 않은 상태로 저장된 모든 데이터는 인벤토리를 만들고 제어해야 합니다. 

 **일반적인 안티 패턴:** 
+  기본적으로 암호화 구성을 사용하지 않습니다. 
+  복호화 키에 지나치게 관대한 액세스를 제공합니다. 
+  암호화 및 복호화 키의 사용을 모니터링하지 않습니다. 
+  데이터를 암호화되지 않은 상태로 저장합니다. 
+  데이터 용도, 유형 및 분류에 관계없이 모든 데이터에 동일한 암호화 키를 사용합니다. 

 **이 모범 사례를 따르지 않을 경우 노출 위험도:** 높음 

## 구현 가이드
<a name="implementation-guidance"></a>

 워크로드 내의 데이터 분류에 암호화 키를 매핑합니다. 이 접근 방식은 데이터에 단일 암호화 키 또는 매우 적은 수의 암호화 키를 사용할 때 지나치게 관대한 액세스로부터 데이터를 보호하는 데 도움이 됩니다([SEC07-BP01 워크로드 안에서 데이터 식별](sec_data_classification_identify_data.md) 참조). 

 AWS Key Management Service(AWS KMS)는 많은 AWS 서비스와 통합되어 저장 데이터를 보다 쉽게 암호화할 수 있습니다. 예를 들어 Amazon Simple Storage Service(Amazon S3)의 경우 버킷에 [기본 암호화](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-encryption.html)를 설정하여 새 객체가 자동으로 암호화되도록 하면 됩니다. AWS KMS를 사용할 때 데이터를 얼마나 엄격하게 제한해야 하는지 고려합니다. 기본 및 서비스 제어 AWS KMS 키는 사용자를 대신하여 AWS에서 관리하고 사용합니다. 기본 암호화 키에 대한 세분화된 액세스 권한이 필요한 민감한 데이터의 경우 고객 관리형 키(CMK)를 고려합니다. 키 정책을 사용하여 교체 및 액세스 관리를 포함하여 CMK를 완전히 제어할 수 있습니다. 

 또한 [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-by-default) 및 [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-bucket-encryption.html)는 기본 암호화 설정을 통해 암호화를 기본적으로 적용하도록 지원합니다. [AWS Config 규칙](https://docs.aws.amazon.com/config/latest/developerguide/managed-rules-by-aws-config.html)를 사용하여 [Amazon Elastic Block Store(Amazon EBS) 볼륨](https://docs.aws.amazon.com/config/latest/developerguide/encrypted-volumes.html), [Amazon Relational Database Service(Amazon RDS) 인스턴스](https://docs.aws.amazon.com/config/latest/developerguide/rds-storage-encrypted.html) 및 [Amazon S3 버킷](https://docs.aws.amazon.com/config/latest/developerguide/s3-default-encryption-kms.html)에 암호화를 사용하고 있는지 자동으로 확인할 수 있습니다. 

 AWS는 또한 클라이언트측 암호화 옵션을 제공하므로 데이터를 클라우드에 업로드하기 전에 암호화할 수 있습니다. AWS Encryption SDK는 [봉투 암호화](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)를 사용하여 데이터를 암호화하는 방법을 제공합니다. 래핑 키를 제공하면 AWS Encryption SDK가 암호화하는 각 데이터 객체에 대해 고유한 데이터 키를 생성합니다. 관리형 단일 테넌트 하드웨어 보안 모듈(HSM)이 필요한 경우 AWS CloudHSM을 고려합니다. AWS CloudHSM을 사용하면 FIPS 140-2 레벨 3 검증 HSM에서 암호화 키를 생성, 가져오기 및 관리할 수 있습니다. AWS CloudHSM의 일부 사용 사례에는 인증 기관(CA) 발급을 위한 프라이빗 키 보호와 Oracle 데이터베이스용 투명한 데이터 암호화(TDE) 활성화가 포함됩니다. AWS CloudHSM 클라이언트 SDK는 데이터를 AWS에 업로드하기 전에 AWS CloudHSM에 저장된 키를 사용하여 데이터 클라이언트측을 암호화할 수 있는 소프트웨어를 제공합니다. Amazon DynamoDB Encryption Client를 사용하면 DynamoDB 테이블에 업로드하기 전에 항목을 암호화하고 서명할 수도 있습니다. 

 **구현 단계** 
+  **Amazon S3에 저장 시 암호화 적용:** [Amazon S3 버킷 기본 암호화](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-bucket-encryption.html)를 구현합니다. 

   **[새 Amazon EBS 볼륨에 기본 암호화](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) 구성:** Amazon EBS에서 제공하는 기본 키 또는 사용자가 생성한 키를 사용하는 옵션을 통해 새로 생성되는 모든 AWS 볼륨이 암호화된 형식으로 생성되도록 지정합니다. 

   **암호화된 Amazon Machine Image(AMI) 구성:** 암호화가 활성화된 기존 AMI를 복사하면 루트 볼륨과 스냅샷이 자동으로 암호화됩니다. 

   **[Amazon RDS 암호화](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Overview.Encryption.html) 구성:** 암호화 옵션을 사용하여 저장 시 Amazon RDS 데이터베이스 클러스터 및 스냅샷에 대한 암호화를 구성합니다. 

   **각 데이터 분류를 위해 적절한 보안 주체에 대한 액세스를 제한하는 정책으로 AWS KMS 키 생성 및 구성:** 예를 들어 프로덕션 데이터 암호화를 위한 하나의 AWS KMS 키와 개발 또는 테스트 데이터 암호화를 위한 다른 키를 생성합니다. 다른 AWS 계정에 키 액세스를 제공할 수도 있습니다. 개발 및 프로덕션 환경에 대해 서로 다른 계정을 사용하는 것이 좋습니다. 프로덕션 환경에서 개발 계정의 아티팩트를 복호화해야 하는 경우 개발 아티팩트를 암호화하는 데 사용되는 CMK 정책을 편집하여 프로덕션 계정에 해당 아티팩트를 복호화할 수 있는 기능을 제공할 수 있습니다. 그러면 프로덕션 환경에서 프로덕션에 사용하기 위해 복호화된 데이터를 수집할 수 있습니다. 

   **추가 AWS 서비스에서 암호화 구성:** 사용하는 다른 AWS 서비스의 경우 해당 서비스의 [보안 문서](https://docs.aws.amazon.com/security/)를 검토하여 서비스의 암호화 옵션을 결정합니다. 

## 리소스
<a name="resources"></a>

 **관련 문서:** 
+  [AWS 암호화 도구](https://docs.aws.amazon.com/aws-crypto-tools) 
+  [AWS 설명서](https://docs.aws.amazon.com/) 
+  [AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html) 
+  [AWS KMS 암호화 세부 정보 백서](https://docs.aws.amazon.com/kms/latest/cryptographic-details/intro.html) 
+  [AWS Key Management Service](https://aws.amazon.com/kms) 
+  [AWS 암호화 서비스 및 도구](https://docs.aws.amazon.com/crypto/latest/userguide/awscryp-overview.html) 
+  [Amazon EBS 암호화](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) 
+  [Amazon EBS 볼륨의 기본 암호화](https://aws.amazon.com/blogs/aws/new-opt-in-to-default-encryption-for-new-ebs-volumes/) 
+  [Amazon RDS 리소스 암호화](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.html) 
+  [Amazon S3 버킷에 기본 암호화를 사용하려면 어떻게 해야 하나요?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/default-bucket-encryption.html) 
+  [암호화를 사용하여 Amazon S3 데이터 보호](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingEncryption.html) 

 **관련 동영상:** 
+  [How Encryption Works in AWS(AWS에서 암호화가 작동하는 방식)](https://youtu.be/plv7PQZICCM) 
+  [Securing Your Block Storage on AWS(AWS에서 블록 스토리지 보호)](https://youtu.be/Y1hE1Nkcxs8) 