암호화되지 않은 Amazon RDS DB 인스턴스 및 클러스터를 자동으로 수정하기 - 권장 가이드

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

암호화되지 않은 Amazon RDS DB 인스턴스 및 클러스터를 자동으로 수정하기

작성자: Ajay Rawat 및 Josh Joy

환경: PoC 또는 파일럿

기술: 보안, 자격 증명, 규정 준수, 분석, 데이터베이스

서비스: Config; KMS, Identity and Access Management, Systems Manager, Amazon RDS

요약

이 패턴은 Config, Systems Manager 런북 및 KMS(키 관리 서비스) 키를 사용하여 Amazon Web Services에서 암호화되지 않은Amazon Relational Database Service(Amazon RDS) DB 인스턴스 및 클러스터를 자동으로 수정하는 방법을 설명합니다.

암호화된 RDS DB 인스턴스는 기본 스토리지에 대한 무단 액세스로부터 데이터의 보안을 유지해 추가 계층의 데이터 보호를 제공합니다. 클라우드에 배포된 애플리케이션의 데이터 보호를 강화하고 저장된 데이터 암호화를 위한 규정 준수 요구 사항을 만족하기 위해 Amazon RDS 암호화를 사용할 수 있습니다. RDS DB 인스턴스를 생성할 때 암호화를 사용하도록 설정할 수 있지만, 생성된 후에는 사용할 수 없습니다. 하지만 DB 인스턴스의 스냅샷을 만든 후 해당 스냅샷의 암호화된 사본을 만들어 암호화되지 않은 RDS DB 인스턴스에 암호화를 추가할 수 있습니다. 그런 다음 암호화된 스냅샷에서 DB 인스턴스를 복원하여 원본 DB 인스턴스의 암호화된 사본을 얻을 수 있습니다.

이 패턴은 Config 규칙을 사용하여 RDS DB 인스턴스 및 클러스터를 평가합니다. 규정 미준수 Amazon RDS 리소스에서 수행할 작업을 정의하는 Systems Manager 런북과 DB 스냅샷을 암호화할 KMS 키를 사용하여 문제 해결을 적용합니다. 그런 다음 서비스 제어 정책(SCP)을 적용하여 암호화 없이 새로운 DB 인스턴스 및 클러스터를 생성하지 못하도록 합니다.

이 패턴의 코드는 에 제공됩니다 GitHub.

사전 조건 및 제한 사항

사전 조건 

  • 활성 상태의 계정.

  • 이 패턴에 대한 GitHub 소스 코드 저장소의 파일이 컴퓨터에 다운로드됩니다.

  • 암호화되지 않은 RDS DB 인스턴스 또는 클러스터

  • RDS DB 인스턴스 및 클러스터를 암호화하기 위한 기존 KMS 키

  • KMS 키 리소스 정책을 업데이트하기 위한 액세스

  • 계정에서 활성화된 Config(설명서의 Config 시작하기 참고).

제한 사항

  • RDS DB 인스턴스에 대한 암호화는 DB 인스턴스를 생성할 때에만 활성화할 수 있으며 DB 인스턴스가 생성된 후에는 불가능합니다.

  • 암호화되지 않은 DB 인스턴스의 암호화된 읽기 전용 복제본이나 암호화된 DB 인스턴스의 암호화되지 않은 읽기 전용 복제본은 보유할 수 없습니다.

  • 암호화되지 않은 백업 또는 스냅샷을 암호화된 DB 인스턴스로 복원할 수 없습니다.

  • Amazon RDS 암호화는 대부분의 DB 인스턴스 클래스에서 사용 가능합니다. 예외 목록은 Amazon RDS 설명서의 Amazon RDS 리소스 암호화를 참고하십시오.

  • 암호화된 스냅샷을 한 리전에서 다른 리전으로 복사하려면 대상 리전에 KMS 키를 지정해야 합니다. 이는 KMS 키가 생성된 리전에만 해당하기 때문입니다.

  • 소스 스냅샷은 복사 프로세스 전체에서 암호화를 유지합니다. Amazon RDS는 봉투 암호화를 사용하여 복사 프로세스 중에 데이터를 보호합니다. 자세한 내용은 KMS 설명서의 봉투 암호화를 참조하십시오.

  • 암호화된 DB 인스턴스의 암호화를 해제할 수 없습니다. 하지만 암호화된 DB 인스턴스에서 데이터를 내보내고 암호화되지 않은 DB 인스턴스로 해당 데이터를 가져올 수 있습니다.

  • 더 이상 사용할 필요가 없다고 확신하는 경우에만 KMS 키를 삭제해야 합니다. 확실하지 않은 경우에는 삭제하는 대신 KMS 키를 비활성화하는 방법을 고려하십시오. 비활성화한 KMS 키는 나중에 다시 사용해야 할 때 재활성화할 수 있지만 삭제한 KMS 키는 복구할 수 없습니다. 

  • 자동 백업을 보존하도록 선택하지 않으면 DB 인스턴스와 동일한 리전의 자동 백업이 삭제됩니다. DB 인스턴스를 삭제한 후에는 복구할 수 없습니다.

  • 자동 백업은 삭제 시점에 DB 인스턴스에 설정된 보존 기간 동안 보존됩니다. 설정된 이 보존 기간은 최종 DB 스냅샷을 생성할지 여부와 상관없이 적용됩니다.

  • 자동 수정이 활성화된 경우 이 솔루션은 동일한 KMS 키를 가진 모든 데이터베이스를 암호화합니다.

아키텍처

다음 다이어그램은 AWS CloudFormation 구현의 아키텍처를 보여줍니다. Cloud Development Kit(CDK)를 사용하여 이 패턴을 구현할 수도 있다는 점을 유의하십시오.

암호화되지 않은 Amazon RDS 인스턴스를 개선하기 위한 AWS CloudFormation 구현.

도구

도구

  • AWS는 AWS 리소스를 자동으로 설정할 수 있도록 CloudFormation 도와줍니다. 이를 통해 템플릿 파일을 사용하여 리소스 모음을 단일 유닛으로 생성 및 구성할 수 있습니다.

  • Cloud Development Kit(CDK)는 익숙한 프로그래밍 언어를 사용하여 클라우드 인프라를 코드로 정의하고 프로비저닝하기 위한 소프트웨어 개발 프레임워크입니다.

서비스 및 특성

  • Config는 리소스의 구성 및 다른 리소스와의 관계를 추적합니다. 또한, 해당 리소스의 규정 준수를 평가할 수 있습니다. 이 서비스는 원하는 구성과 비교하여 리소스를 평가하도록 구성할 수 있는 규칙을 사용합니다. 일반적인 규정 준수 시나리오에 대해 Config 관리형 규칙 세트를 사용하거나 사용자 지정 시나리오에 대한 자체 규칙을 생성할 수 있습니다. 리소스가 규정을 준수하지 않는 것으로 확인되면 Systems Manager 런북을 통해 수정 조치를 지정하고 선택적으로 Amazon Simple Notification Service(SNS) 주제를 통해 알림을 보낼 수 있습니다. 즉, 수정 작업을 Config 규칙과 연결하고 수동 개입 없이 규정을 준수하지 않는 리소스를 처리하는 것을 자동으로 실행하도록 선택할 수 있습니다. 자동 문제 해결 후에도 리소스가 계속 규정을 준수하지 않는 경우, 자동 문제 해결을 다시 시도하도록 규칙을 설정할 수 있습니다.

  • Amazon Relational Database Service(RDS)를 사용하여 클라우드에서 더 쉽게 관계형 데이터베이스를 설정, 운영 및 확장할 수 있습니다. Amazon RDS의 기본 빌딩 블록은 클라우드에 있는 격리된 데이터베이스 환경인 DB 인스턴스입니다. Amazon RDS는 다양한 관계형 데이터베이스 사용 사례에 맞게 최적화된 다양한 인스턴스 유형을 제공합니다. 인스턴스 유형은 CPU, 메모리, 스토리지, 네트워킹 용량의 다양한 조합으로 구성되며 애플리케이션에 적합한 리소스 조합을 선택할 수 있는 유연성을 제공합니다. 각 인스턴스 유형에는 하나 이상의 인스턴스 크기가 포함되므로 대상 워크로드의 요구 사항에 맞게 리소스를 확장할 수 있습니다.

  • Key Management Service(KMS)는 데이터를 암호화하는 KMS 키를 쉽게 생성하고 제어할 수 있게 해주는 관리형 서비스입니다. KMS 키는 루트 키를 논리적으로 표현한 것입니다. KMS 키에는 키 ID, 생성 날짜, 설명 및 키 상태와 같은 메타데이터가 포함됩니다.

  • Identity and Access Management(IAM)는 사용자에 대한 인증 및 권한 부여를 제어함으로써 리소스에 대한 액세스를 안전하게 제어할 수 있습니다.

  • SCP(서비스 제어 정책)는 조직의 모든 계정에 사용 가능한 최대 권한을 중앙에서 제어합니다. SCP를 사용하면 조직의 액세스 제어 지침에 따라 계정을 유지할 수 있습니다. SCP는 관리 계정의 사용자 또는 역할에 영향을 미치지 않습니다. 조직의 멤버 계정에만 영향을 줍니다. 정책이 계정에 미치는 영향을 철저히 검증하지 않았다면 SCP를 조직의 루트에 연결하지 않는 것을 적극 권장합니다. 대신 한 번에 하나씩, 또는 소량 단위로 계정을 옮길 수 있는 조직 단위(OU)를 만들어 사용자가 주요 서비스를 이용하지 못하는 일이 없게 하십시오.

코드

이 패턴의 소스 코드와 템플릿은 GitHub 리포지토리에서 사용할 수 있습니다. 패턴은 두 가지 구현 옵션을 제공합니다. AWS CloudFormation 템플릿을 배포하여 RDS DB 인스턴스 및 클러스터를 암호화하는 수정 역할을 생성하거나 AWS CDK를 사용할 수 있습니다. 리포지토리에는 이 두 옵션에 대한 별도의 폴더가 있습니다.

Epic 섹션에서는 템플릿 배포 step-by-step 지침을 제공합니다. CloudFormation AWS CDK를 사용하려면 리포지토리의 README.md 파일에 있는 지침을 따르십시오. GitHub

모범 사례

  • 저장 및 전송 중에 데이터 암호화를 활성화합니다.

  • 모든 계정과 리전에서 Config를 활성화합니다.

  • 모든 리소스 유형에 대한 구성 변경 사항을 기록합니다.

  • IAM 자격 증명을 정기적으로 순환합니다.

  • Config에 대한 태그 지정을 활용하여 리소스를 더욱 쉽게 관리, 검색 및 필터링할 수 있습니다.

에픽

작업설명필요한 기술

템플릿을 다운로드하십시오. CloudFormation

GitHub 저장소에서 unencrypted-to-encrypted-rds.template.json 파일을 다운로드합니다.

DevOps 엔지니어

CloudFormation 스택을 만드세요.

  1. AWS 관리 콘솔에 로그인하고 https://console.aws.amazon.com/cloudformation/ 에서 CloudFormation 콘솔을 엽니다. 

  2. unencrypted-to-encrypted-rds.template.json 템플릿을 실행하여 새 스택을 생성합니다.

템플릿 배포에 대한 자세한 내용은 AWS CloudFormation 설명서를 참조하십시오.

DevOps 엔지니어

CloudFormation 매개변수와 값을 검토하십시오.

  1. 스택 세부 정보를 검토하고 환경 요구 사항에 따라 값을 업데이트합니다.

  2. 스택 생성을 선택하여 템플릿을 배포합니다.

DevOps 엔지니어

리소스를 검토합니다.

스택이 생성되면 상태가 CREATE_COMPLETE로 바뀝니다. 콘솔에서 생성된 리소스 (IAM 역할, AWS Systems Manager 런북) 를 CloudFormation 검토하십시오.

DevOps 엔지니어
작업설명필요한 기술

KMS 키 정책을 업데이트합니다.

  1. 키 별칭 alias/RDSEncryptionAtRestKMSAlias가 존재하는지 확인합니다. 

  2. 주요 정책 설명에는 IAM 수정 역할이 포함되어야 합니다. (이전 에픽에서 배포한 CloudFormation 템플릿으로 만든 리소스를 확인하세요.) 

  3. 다음 주요 정책에서 굵게 표시된 부분을 계정 및 생성된 IAM 역할과 일치하도록 업데이트하십시오.

{ "Sid": "Allow access through RDS for all principals in the account that are authorized to use RDS", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam:: <your-AWS-account-ID>”:role/<your-IAM-remediation-role>" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:ListGrants", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "rds.us-east-1.amazonaws.com", "kms:CallerAccount": "<your-AWS-account-ID>" } } }
DevOps 엔지니어
작업설명필요한 기술

규정을 준수하지 않는 리소스를 확인합니다.

  1. 규정을 준수하지 않는 리소스 목록을 보려면 https://console.aws.amazon.com/config/에서 Config 콘솔을 엽니다. 

  2. 탐색 창에서 규칙을 선택한 후 rds-storage-encrypted 규칙을 선택합니다.

Config 콘솔에 나열된 비준수 리소스는 클러스터가 아닌 인스턴스입니다. 수정 자동화는 인스턴스와 클러스터를 암호화하고 새로 암호화된 인스턴스 또는 새로 생성된 클러스터를 생성합니다. 그러나 동일한 클러스터에 속하는 여러 인스턴스에 동시에 업데이트를 적용하지 않도록 주의하십시오.

RDS DB 인스턴스 또는 볼륨에 업데이트를 적용하기 전에 RDS DB 인스턴스를 사용하고 있지 않아야 합니다. 스냅샷을 생성하는 동안 쓰기 작업이 발생하지 않는지 확인하여 스냅샷에 원본 데이터가 포함되어 있는지 확인하십시오. 수정 작업이 실행되는 동안 유지 관리 기간을 적용하는 것을 고려해 보십시오.

DevOps 엔지니어

규정을 준수하지 않는 리소스를 찾아 수정합니다.

  1. 사용자가 준비를 마친 상태이고 유지 관리 기간이 적용되면 수정할 리소스를 선택한 다음 해결을 선택합니다.

    이제 작업 상태 열에 작업 실행 대기 중으로 표시되어야 합니다.

  2. Systems Manager에서 수정 진행 상황과 상태를 확인합니다. https://console.aws.amazon.com/systems-manager/에서 Systems Manager 콘솔을 엽니다. 탐색 창에서 자동화를 선택한 후, 해당 자동화의 실행 ID를 선택하면 자세한 내용을 볼 수 있습니다.

DevOps 엔지니어

RDS DB 인스턴스를 사용할 수 있는지 확인합니다.

자동화가 완료되면 새로 암호화된 RDS DB 인스턴스를 사용할 수 있게 됩니다. 암호화된 RDS DB 인스턴스에는 접두사 encrypted  뒤에 원래 이름이 붙습니다. 예를 들어 암호화되지 않은 RDS DB 인스턴스 이름이 database-1인 경우 새로 암호화된 RDS DB 인스턴스는 encrypted-database-1이 됩니다.

DevOps 엔지니어

암호화되지 않은 인스턴스를 종료합니다.

수정이 완료되고 새로 암호화된 리소스가 검증되면, 암호화되지 않은 인스턴스를 종료할 수 있습니다. 리소스를 종료하기 전에 새로 암호화된 리소스가 암호화되지 않은 리소스와 일치하는지 확인하십시오.

DevOps 엔지니어
작업설명필요한 기술

SCP를 적용합니다.

SCP를 적용하여 향후에 암호화 없이 DB 인스턴스와 클러스터를 생성하는 것을 방지합니다. GitHub 리포지토리에 제공된 rds_encrypted.json 파일을 이 용도로 사용하고 AWS 설명서의 지침을 따르십시오. 

보안 엔지니어

관련 리소스

참조

도구

가이드 및 패턴

추가 정보

FAQ

질문: Config는 어떻게 작동합니까?

A. Config를 켜면 먼저 계정에 있는 지원되는 리소스를 찾고, 각 리소스에 대한 구성 항목을 생성합니다. 또한 리소스의 구성이 변경되면 구성 항목을 생성하고, 구성 레코더를 시작할 때부터 리소스의 구성 항목에 대한 기록 내역을 유지합니다. 기본적으로 Config는 리전에서 지원되는 모든 리소스에 대한 구성 항목을 생성합니다. Config가 지원되는 모든 리소스에 대한 구성 항목을 생성하지 않도록 하려면 추적하려는 리소스 유형을 지정할 수 있습니다.

질문 Config 및 Config 규칙은 Security Hub와 어떤 관련이 있습니까?

답변 Security Hub는 보안 및 규정 준수 상태 관리를 서비스로 제공하는 보안 및 규정 준수 서비스입니다. Config 및 Config 규칙을 기본 메커니즘으로 사용하여 리소스의 구성을 평가합니다. Config 규칙을 사용하여 리소스 구성을 직접 평가할 수도 있습니다. Config 규칙은 Control Tower 및 Firewall Manager와 같은 다른 서비스에서도 사용됩니다.