BLOG
데이터 프라이버시는 모든 산업 조직에 필수적입니다. 암호화 서비스는 무단 액세스로부터 데이터를 보호하는 하나의 표준 방법을 제공하며, 암호화는 올바른 암호 해독키 없이는 읽을 수 없는 방식으로 데이터를 변경합니다.
Amazon RDS는 AWS 소유 키를 사용하여 기본적으로 데이터를 암호화합니다. 그러나 일부 고객은 기본 키가 아닌 키를 사용하여 데이터를 암호화하는 것을 선호합니다. 기본이 아닌 키를 사용하는 경우, 강력한 키 생성, 관리 및 삭제 도구 및 프로세스는 데이터 보안에 있어 필수적입니다. 이러한 도구와 프로세스는 또한 키 만료로 인해 데이터 가용성에 미치는 영향을 제한합니다.
오늘은 AWS KMS를 사용하여 RDS에 저장된 데이터의 데이터 암호화 및 주요 관리 프로세스를 단순화하는 방법에 대해 설명해 드리겠습니다. 다루어볼 주제는 다음과 같습니다.
- 키 관리
- 키 생성
- 암호화된 데이터베이스 생성
- 암호화된 데이터베이스 스냅샷 작성 및 복사
- 키 교체
- 키 액세스 제어
AWS KMS 소개
KMS는 RDS와 같은 AWS 서비스에 저장된 데이터를 암호화할 때 사용할 수 있습니다. 키 권한은 IAM과 완전히 통합됩니다. 또한 모든 KMS API 호출은 AWS CloudTrail에 작성되어 키 생성, 사용 및 삭제에 대한 전체 감사 추적을 제공합니다. KMS 키의 길이는 256비트이며 Galois / Counter Mode(GCM)에서 AES(Advanced Encryption Standard)를 사용합니다. 더 자세한 내용은 AWS Key Management Service 암호화 세부 정보(PDF)를 참고해 주시기 바랍니다..
RDS는 모든 키 유형을 지원하는데, 그 중 KMS에서 사용되는 주요 3가지 유형의 키는 다음의 표와 같습니다. 더욱 자세한 내용은 AWS Key Management Service Concepts를 참고해 주십시오.
CMK 유형 | 보기 가능? | 관리 가능? | AWS 계정에서만 사용 가능? |
AWS 소유 CMK | 아니오 | 아니오 | 아니오 |
AWS 관리형 CMK | 예 | 아니오 | 예 |
고객 관리형 CMK | 예 | 예 | 예 |
AWS 소유 키는 AWS 계정 외부에 존재하며 AWS가 소유하고 관리하는 CMK(고객 마스터 키) 모음의 일부입니다.
AWS는 AWS 관리 키를 생성하고 완전히 관리합니다. 고객 관리 키는 AWS 계정에서 생성, 소유 및 관리하는 CMK입니다.
고객 관리 CMK로 데이터를 암호화 및 암호 해독 하는 데 사용되는 소스 키 자료는 다음 표에 표시된 것처럼 여러 소스에서 제공될 수 있습니다.
고객 관리 형 CMK 유형 | 키 자료 제공 소스 |
고객 관리 | AWS KMS |
고객 관리 외부 | 사용자 (외부 소스, 즉 HSM 또는 OpenSSL 사용) |
맞춤 키 저장소 | 사용자 (CloudHSM 사용) |
사용자 정의 키 저장소에는 HSM의 프로비저닝도 필요합니다. 이에 대한 세부 내용은 AWS KMS 사용자 지정 키 스토어 발표를 참고해 주십시오.
키 생성
AWS KMS 콘솔을 열고 고객 관리 키를 생성해 줍니다. 세부 정보는 KMS 설명서의 키 생성하기에서 확인 가능합니다. 다음 단계에서 해당 키를 사용하여 암호화된 RDS 데이터베이스 클러스터를 생성합니다.
암호화된 RDS 데이터베이스 클러스터 생성
데이터베이스를 암호화하려면 데이터베이스 클러스터 생성 중에 KMS 키를 식별해야 합니다. 이 키는 RDS에서 사용하는 볼륨에 저장된 모든 데이터를 암호화합니다. 데이터가 암호화된 후 KMS 키 권한이 없으면 액세스 할 수 없습니다. 해당 권한이 없으면 RDS 스냅샷을 복원하거나 중지 된 RDS 인스턴스를 시작하려는 시도가 실패합니다.
RDS 콘솔을 열고 데이터베이스 클러스터를 작성하십시오. 그 후 추가 구성 섹션에서 앞서 만든 KMS 키를 선택했는지 확인해 줍니다. 이 절차에 대한 더 자세한 정보는 Amazon RDS 리소스 암호화를 살펴봐 주시기 바랍니다.
암호화된 데이터베이스 스냅샷
암호화된 RDS 인스턴스에서 생성한 모든 데이터베이스 스냅샷은 동일한 KMS 키를 공유하면서 암호화를 유지합니다. 사용자는 이러한 스냅샷에서 새 데이터베이스를 만들 수 있지만 이는 DB 스냅샷을 암호화하는 데 사용된 KMS 키에 액세스할 수 있는 경우에만 가능합니다.
RDS 스냅샷 생성
RDS 스냅샷을 생성하려면 데이터베이스 클러스터 인스턴스를 선택하고 Actions, Take snapshot 생성을 선택 하십시오.
암호화된 RDS 스냅샷을 다른 AWS 리전으로 복사
RDS 스냅샷을 생성 한 후, 다음의 단계에 따라 암호화 된 RDS 스냅샷을 다른 AWS 리전으로 복사할 수 있습니다. KMS 키는 리전에 따른 구조로 되어있습니다. 따라서 스냅샷을 다른 리전에 복사하려면 먼저 대상 리전에서 KMS 키를 만들어야 합니다. 이 새로운 키를 사용하여 해당 리전에서 스냅샷을 암호화하십시오.
- 먼저 대상 지역을 선택하고 앞에서 설명한 것과 동일한 절차를 사용하여 해당 지역에 키를 만듭니다. 새로 작성된 키의 key-id 및 key-alias를 기록하십시오.
- 현재 RDS 스냅샷이 있는 리전에서 RDS 콘솔을 엽니다.
- Snapshots 을 선택하고, 스냅샷을 복사 할 수 있는 RDS 스냅샷을 선택합니다. Action, Copy Snapshot을 선택하십시오
- 대상 지역을 선택하고 스냅샷에 친숙한 식별자를 제공하십시오. 태그 전략에 맞게 태그를 복사하십시오.
- Encryption아래의 해당 리전에서 새 키를 선택하고 Copy Snapshot을 선택합니다.
다음 bash 스크립트를 사용하여 데이터베이스 클러스터 스냅샷을 정기적으로 다른 리전으로 자동 복사하십시오. 이 방법은 테스트 목적이나 재해 복구 솔루션의 일부로 도움이 될 수 있습니다.
해당 스크립트를 사용하시려면 텍스트를 로컬 파일에 복사하여 붙여 넣고 환경에 맞게 최상위 변수를 수정해주세요. 또한 실행 권한을 포함하도록 로컬 파일의 권한을 수정합니다. 마지막으로 적합한 IAM 사용자 또는 역할로 AWS CLI를 구성한 다음 스크립트를 실행하시면 됩니다.
#!/bin/bash
# Adjust these variables
DBINSTANCE=rds-demo-cluster
SRC_AWS_ACCOUNT=111111111111
SRC_AWS_REGION=eu-west-1
DEST_AWS_REGION=eu-central-1
DEST_KMS_KEYID=1111111-2222-3333-4444444444444444
# —————————————-#
Don’t change anything else after this
# —————————————-
DATESR=$(date “+%Y%m%d%H%m”)
# Dynamically generate snapshotId based on date
SNAPSHOTNAME=$DBINSTANCE-snapshot-$DATESR
# Generate snapshot Arn
SRCSNAPSHOTID=arn:aws:rds:$SRC_AWS_REGION:$SRC_AWS_ACCOUNT:cluster-snapshot:$SNAPSHOTNAME
echo “Creating snapshot for DB Instance: $DBINSTANCE“
aws rds create-db-cluster-snapshot \
–db-cluster-identifier $DBINSTANCE \
–db-cluster-snapshot-identifier $SNAPSHOTNAME \
–region $SRC_AWS_REGION
echo “Waiting for cluster snapshot $SNAPSHOTNAME to be available“
while STATUS=$(aws rds describe-db-cluster-snapshots –region $SRC_AWS_REGION –query “DBClusterSnapshots[?DBClusterSnapshotIdentifier==’$SNAPSHOTNAME’].Status” –output text); test “$STATUS” != “available“
while STATUS=$(aws rds describe–db–cluster–snapshots —region $SRC_AWS_REGION —query “DBClusterSnapshots[?DBClusterSnapshotIdentifier==‘$SNAPSHOTNAME‘].Status“ —output text); test “$STATUS“ != “available“; do sleep 1 && echo “State: $STATUS“; done; echo “State: $STATUS“
echo “Copying DB Snapshot…this may take a while depending on the size of the snapshot”
aws rds copy–db–cluster–snapshot \
—source–db–cluster–snapshot–identifier $SRCSNAPSHOTID \
—target–db–cluster–snapshot–identifier $SNAPSHOTNAME \
—source–region $SRC_AWS_REGION \
—kms–key–id $DEST_KMS_KEYID \
—region $DEST_AWS_REGION
KMS 키 교체
키는 일반적으로 잠재적인 받을 수 있는 손상의 영향을 제한하기 위해 교체됩니다. CMK가 원본 KMS 키 자료에서 제공되는 경우, AWS가 매년 자동으로 CMK를 교체하도록 선택할 수 있고, 키가 생성 중이거나 KMS 키 생성이 완료되면 자동 연간 교체를 진행할 수 있습니다. 자세한 내용은 How to Enable and Disable Automatic Key (자동 키 교체를 활성화 또는 비활성화하는 방법)을 참고해 주십시오. 또한 KMS 키 교체에 대한 자세한 정보는 Rotating Custom Master Keys(사용자 지정 마스터 키 교체하기)를 확인해 주시기 바랍니다.
HSM(Hardware Security Module) 또는 다른 외부 소스에서 원본 키 자료를 얻은 경우, CMK를 수동으로 교체해야 합니다. RDS의 경우 다음 절차를 사용하여 재 암호화된 스냅샷 복사본에서 새 RDS 인스턴스 또는 클러스터를 만들 수 있습니다. 3단계까지는 앞에서 설명해 드린 절차를 참고하여 따라주시면 됩니다.
- 새 CMK를 만듭니다.
- 기존 인스턴스 또는 클러스터의 스냅샷을 만듭니다. 최근에 생성된 스냅샷이 있는 경우 이 단계를 건너 뛸 수 있습니다.
- 스냅샷 복사본을 만듭니다. 혹은 Encryption 내 새 CMK를 선택하여 신규 CMK와 새로운 스냅샷 복사본을 다시 암호화 할 수 있습니다.
- 새로운 스냅샷 사본을 선택하고 Actions, Restore Snapshot을 선택하십시오.
- 온라인 워크 플로우에 따라 새 RDS 인스턴스 또는 클러스터를 만듭니다. 새로운 CMK를 사용하여 데이터가 암호화됩니다. 이 방법은 앞에서 설명해 드린 새 인스턴스 또는 클러스터 생성 절차를 참고해주시면 됩니다.
KMS 키 액세스 제어
각 KMS 키에 대한 액세스를 제어하여 AWS에서 암호화된 리소스의 액세스를 관리합니다. 이에 대한 상세 내용은 Managing Access to AWS KMS CMKs(AWS KMS CMKs에 대한 액세스 관리) 를 확인해 주십시오.
다음 방법 중 하나를 사용하여 KMS 키에 대한 액세스 권한을 취소할 수 있습니다. 즉, 해당 키를 통해 암호화되었던 모든 AWS 리소스의 액세스 권한도 취소할 수 있습니다.
- KMS 키 비활성화: 키는 나중에 다시 활성화할 수 있음으로 이 절차는 되돌릴 수 있습니다.
- KMS 키 삭제: 이 과정은 우선 키 삭제를 예약만 하고 즉시 삭제하지는 않습니다. 사용자는 7일에서 30일 사이로 삭제 기간을 지정할 수 있으며, 지정된 삭제 기간 내에 언제든지 키 삭제를 취소 할 수 있습니다. 그 후로는 영구적인 삭제로 삭제된 키를 통해 암호화된 데이터를 복구할 수 없습니다.
- 외부에서 제공된 키 자료 제거: 외부에서 제공받은 키 자료를 사용하는 경우 이 키 자료를 제거 할 수 있으며, 제거 후엔 키가 효과적으로 비활성화됩니다. 키 자료를 다시 가져오면 이 작업을 취소할 수 있습니다. 해당 옵션을 사용하면 데이터에 액세스할 수 없지만, 나중에 액세스를 복원할 수 있습니다.
KMS 키 사용 및 수명 주기 감사
보안을 유지하려면 조직의 데이터를 암호화하는 데 사용되는 KMS 키의 생성, 사용, 수정 및 삭제를 모니터링해야 합니다. 모든 KMS 작업은 API 호출이므로 AWS CloudTrail을 사용하여 모니터링할 수 있습니다. 자세한 내용은 AWS CloudTrail을 사용하여 KMS API 호출 로깅 단원을 살펴봐 주십시오.
요약
오늘 블로그 글에서는 KMS를 사용하여 RDS에 저장된 데이터를 보호하는 방법과 RDS 인스턴스 또는 클러스터에서 키를 생성하고 데이터를 암호화하는 방법을 보여드렸습니다. 또한 암호화된 RDS 스냅샷을 생성하고 스냅샷을 다른 AWS 리전에 복사하는 방법 및 키 회전, KMS의 키 액세스 제어 및 AWS의 KMS 활동 감사 방법에 대해 설명해 드렸습니다.
이제 RDS에서 데이터 보호 기술을 적용하여 조직의 데이터 보호 정책에 따라 데이터를 보호할 수 있습니다. 관련 내용이 궁금하시다면 Amazon RDS 리소스 암호화를 확인해 주세요.
해당 게시물에 요약된 개념과 방법은 Amazon EC2 인스턴스에 연결된 Amazon EBS 볼륨, Amazon S3, Amazon Redshift 및 기타 여러 다른 AWS 서비스의 데이터를 보호할 때도 적용됩니다.
원문: https://aws.amazon.com/ko/blogs/database/securing-data-in-amazon-rds-using-aws-kms-encryption/
** 메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.