Amazon RDS 리소스 암호화
Amazon RDS 리소스 암호화
Amazon RDS는 DB 인스턴스를 암호화할 수 있어요. 저장 시(at rest) 암호화되는 데이터에는 DB 인스턴스의 기본 스토리지, 로그, 자동 백업, 읽기 전용 복제본, 스냅샷이 포함돼요. 암호화된 DB 인스턴스는 업계 표준 AES-256 암호화 알고리즘을 사용해요.
출처: 문서
본문
Amazon RDS는 Amazon RDS DB 인스턴스를 암호화할 수 있어요. 저장 시(at rest) 암호화되는 데이터에는 DB 인스턴스의 기본 스토리지, 그 로그, 자동 백업, 읽기 전용 복제본, 스냅샷이 포함돼요.
Amazon RDS 암호화 DB 인스턴스는 업계 표준 AES-256 암호화 알고리즘을 사용해 Amazon RDS DB 인스턴스를 호스팅하는 서버의 데이터를 암호화해요.
데이터가 암호화되면 Amazon RDS는 접근 인증과 데이터 복호화를 투명하게 처리하며 성능에 미치는 영향은 최소화돼요. 암호화를 사용하기 위해 데이터베이스 클라이언트 애플리케이션을 수정할 필요가 없어요.
참고
암호화된 DB 인스턴스와 암호화되지 않은 DB 인스턴스 모두에서, 원본(source)과 읽기 전용 복제본 사이를 오가는 데이터는 AWS 리전 간 복제 중에도 암호화돼요.
주제 (Topics)
- Amazon RDS 리소스 암호화 개요
- DB 인스턴스 암호화
- DB 인스턴스에서 암호화가 활성화되어 있는지 확인
- Amazon RDS 암호화의 가용성
- 전송 중 암호화(Encryption in transit)
- Amazon RDS 암호화 DB 인스턴스의 제한 사항
Amazon RDS 리소스 암호화 개요
Amazon RDS 암호화 DB 인스턴스는 기본 스토리지에 대한 무단 접근으로부터 데이터를 보호해 데이터 보호의 추가 계층을 제공해요. Amazon RDS 암호화를 사용해 클라우드에 배포된 애플리케이션의 데이터 보호를 강화하고, 저장 시 암호화에 대한 규정 준수 요구 사항을 충족할 수 있어요. Amazon RDS 암호화 DB 인스턴스의 경우 모든 로그, 백업, 스냅샷이 암호화돼요. 암호화의 가용성과 제한 사항에 대한 자세한 내용은 "Amazon RDS 암호화의 가용성" 및 "Amazon RDS 암호화 DB 인스턴스의 제한 사항" 문서를 참고하세요.
Amazon RDS는 AWS Key Management Service(AWS KMS) 키를 사용해 이 리소스들을 암호화해요. AWS KMS는 안전하고 가용성이 높은 하드웨어와 소프트웨어를 결합해 클라우드에 맞게 확장된 키 관리 시스템을 제공해요. AWS 관리형 키(AWS managed key)를 사용하거나 고객 관리형 키(customer managed keys)를 생성할 수 있어요.
암호화된 DB 인스턴스를 생성할 때 고객 관리형 키 또는 Amazon RDS용 AWS 관리형 키 중 하나를 선택해 DB 인스턴스를 암호화할 수 있어요. 고객 관리형 키의 키 식별자를 지정하지 않으면 Amazon RDS는 새 DB 인스턴스에 AWS 관리형 키를 사용해요. Amazon RDS는 AWS 계정을 위해 Amazon RDS용 AWS 관리형 키를 생성해요. AWS 계정에는 각 AWS 리전별로 다른 Amazon RDS용 AWS 관리형 키가 있어요.
Amazon RDS 리소스를 암호화하고 복호화하는 데 사용되는 고객 관리형 키를 관리하려면 AWS Key Management Service(AWS KMS)를 사용해요.
AWS KMS를 사용해 고객 관리형 키를 생성하고 이 키의 사용을 제어하는 정책을 정의할 수 있어요. AWS KMS는 CloudTrail을 지원하므로 KMS 키 사용을 감사해 고객 관리형 키가 적절히 사용되고 있는지 확인할 수 있어요. 고객 관리형 키를 Amazon Aurora 및 Amazon S3, Amazon EBS, Amazon Redshift 같은 지원되는 AWS 서비스와 함께 사용할 수 있어요. AWS KMS와 통합된 서비스 목록은 "AWS Service Integration"을 참고하세요. KMS 키 사용에 대한 몇 가지 고려 사항은 다음과 같아요.
- 암호화된 DB 인스턴스를 생성한 후에는 해당 DB 인스턴스가 사용하는 KMS 키를 변경할 수 없어요. 그러므로 암호화된 DB 인스턴스를 생성하기 전에 KMS 키 요구 사항을 미리 결정해두세요.
- DB 인스턴스의 암호화 키를 변경해야 한다면 인스턴스의 수동 스냅샷을 만들고 스냅샷을 복사하는 동안 암호화를 활성화해요. 자세한 내용은 re:Post 지식 문서를 참고하세요.
- 암호화된 스냅샷을 복사하면 원본 스냅샷 암호화에 사용된 키와 다른 KMS 키로 대상 스냅샷을 암호화할 수 있어요.
- Amazon RDS 암호화 인스턴스의 읽기 전용 복제본은 둘 다 같은 AWS 리전에 있을 때 기본 DB 인스턴스와 동일한 KMS 키로 암호화해야 해요.
- 기본 DB 인스턴스와 읽기 전용 복제본이 다른 AWS 리전에 있다면 해당 AWS 리전의 KMS 키로 읽기 전용 복제본을 암호화해요.
- 스냅샷을 공유한 AWS 계정의 AWS 관리형 키로 암호화된 스냅샷은 공유할 수 없어요.
Amazon RDS는 Oracle 또는 SQL Server DB 인스턴스를 투명 데이터 암호화(TDE)로 암호화하는 것도 지원해요. TDE는 저장 시 RDS 암호화와 함께 사용할 수 있지만, TDE와 저장 시 RDS 암호화를 동시에 사용하면 데이터베이스 성능에 약간 영향을 줄 수 있어요. 각 암호화 방법에 대해 서로 다른 키를 관리해야 해요. TDE에 대한 자세한 내용은 "Oracle 투명 데이터 암호화" 또는 "SQL Server의 투명 데이터 암호화 지원" 문서를 참고하세요.
중요
KMS 키를 비활성화하면 Amazon RDS는 DB 인스턴스에 대한 KMS 키 접근을 잃어버려요. KMS 키 접근을 잃으면 암호화된 DB 인스턴스는 백업이 활성화된 인스턴스에서 감지 후 2시간 뒤에 inaccessible-encryption-credentials-recoverable 상태가 돼요. DB 인스턴스는 이 상태로 7일 동안 유지되고, 이 기간 동안 인스턴스는 중지돼요. 이 기간 동안 DB 인스턴스에 대한 API 호출은 성공하지 못할 수 있어요. DB 인스턴스를 복구하려면 KMS 키를 활성화하고 이 DB 인스턴스를 다시 시작해요. AWS Management Console, AWS CLI 또는 RDS API에서 KMS 키를 활성화해요. AWS CLI 명령 start-db-instance 또는 AWS Management Console을 사용해 DB 인스턴스를 다시 시작해요.
inaccessible-encryption-credentials-recoverable 상태는 중지할 수 있는 DB 인스턴스에만 적용돼요. 이 복구 가능 상태는 읽기 전용 복제본이나 읽기 전용 복제본이 있는 인스턴스처럼 중지할 수 없는 인스턴스에는 적용되지 않아요. 자세한 내용은 "DB 인스턴스 중지 제한 사항" 문서를 참고하세요.
DB 인스턴스가 7일 내에 복구되지 않으면 터미널 상태인 inaccessible-encryption-credentials 상태가 돼요. 이 상태에서 DB 인스턴스는 더 이상 사용할 수 없고 DB 스냅샷이나 백업에서만 복원할 수 있어요.
DB 인스턴스 생성 중에 Amazon RDS는 호출 주체가 KMS 키에 접근할 수 있는지 확인하고, DB 인스턴스의 전체 수명 동안 사용할 KMS 키에서 grant를 생성해요. 호출 주체의 KMS 키 접근을 취소해도 실행 중인 데이터베이스에는 영향이 없어요. 스냅샷을 다른 계정으로 복사하는 것 같은 교차 계정 시나리오에서 KMS 키를 사용할 때는 KMS 키를 다른 계정과 공유해야 해요. 다른 KMS 키를 지정하지 않고 스냅샷에서 DB 인스턴스를 생성하면 새 인스턴스는 원본 계정의 KMS 키를 사용해요. DB 인스턴스를 생성한 후 키 접근을 취소해도 인스턴스에는 영향이 없어요. 그러나 키를 비활성화하면 해당 키로 암호화된 모든 DB 인스턴스에 영향을 줘요. 이를 방지하려면 스냅샷 복사 작업 중에 다른 키를 지정해요.
백업이 비활성화된 DB 인스턴스는 인스턴스 수정 또는 복구 중에 볼륨이 호스트에서 분리될 때까지 사용 가능한 상태로 유지돼요. RDS는 해당하는 경우 인스턴스를 inaccessible-encryption-credentials-recoverable 상태나 inaccessible-encryption-credentials 상태로 이동시켜요.
inaccessible-encryption-credentials 상태의 DB 인스턴스는 제자리에서 복구할 수 없으므로, Amazon RDS는 DB 인스턴스가 이 상태로 전환될 때 최종 DB 스냅샷(final DB snapshot)을 자동으로 생성해요. 이것은 DB 인스턴스를 삭제할 때 요청할 수 있는 최종 스냅샷과 유사해요.
스냅샷은 가장 최근의 자동 백업 이후에 기록된 데이터를 캡처해요. 여기에는 KMS 키에 접근할 수 없을 때 수행된 쓰기도 포함돼요. 스냅샷을 사용해 그렇지 않으면 손실될 데이터를 복구할 수 있어요. Amazon RDS는 이를 rds-final:db-instance-identifier-resource-id라는 이름의 수동 DB 스냅샷으로 생성하며, 다른 DB 스냅샷 옆에 나타나요.
최종 스냅샷은 삭제할 때까지 보존되며, 수동 DB 스냅샷과 같은 방식으로 백업 스토리지 비용이 발생해요. 삭제할 때까지 비용이 계속 발생하므로 더 이상 필요 없으면 즉시 스냅샷을 삭제해요. 자세한 내용은 Amazon RDS 요금 페이지를 참고하세요.
Amazon RDS는 DB 인스턴스가 다음 상황 중 하나에서 inaccessible-encryption-credentials 상태로 전환될 때 최종 스냅샷 생성을 시도해요.
- KMS 키에 접근할 수 없게 되고 DB 인스턴스를 중지할 수 없어
inaccessible-encryption-credentials상태로 직접 이동하는 경우. 이 상황에는 읽기 전용 복제본과 읽기 전용 복제본이 있는 DB 인스턴스가 포함돼요. - DB 인스턴스가 복구되지 않은 채
inaccessible-encryption-credentials-recoverable상태로 7일간 유지되는 경우. - KMS 키에 접근할 수 없어 Amazon RDS가 완료할 수 없는 작업을 DB 인스턴스가 요구하는 경우. 예로 기본 호스트 교체와 스토리지 확장이 있어요.
Amazon RDS는 DB 인스턴스에 대해 다음이 모두 참일 때만 최종 스냅샷을 생성해요.
- DB 인스턴스에 데이터 볼륨이 연결되어 있는 경우. 연결된 스토리지가 없는 DB 인스턴스(예: 생성 중 실패했거나 이미 삭제 중인 인스턴스)는 캡처할 데이터가 없어요.
- DB 인스턴스가 Multi-AZ DB 클러스터나 Aurora DB 클러스터의 구성원이 아닌 경우. 이러한 클러스터는 개별 인스턴스 스냅샷 대신 클러스터 수준의 백업을 사용해요.
- DB 인스턴스의 데이터가 완전하고 변경되지 않는 경우. Amazon RDS는 DB 인스턴스가 다음 상태 중 하나인 동안에는 최종 스냅샷을 생성하지 않아요.
- 생성 중
- DB 스냅샷 또는 백업에서 복원 중
- 마이그레이션 중
- 트랜잭션 로그를 재생 중
- 복원의 일부로 오프라인 패치 중
- 읽기 전용 복제본으로 준비 또는 구성 중
자동 백업을 켤 필요는 없어요. Amazon RDS는 AWS Outposts의 DB 인스턴스와, 스토리지가 온전한 다른 터미널 상태의 DB 인스턴스에 대해서도 최종 스냅샷을 생성해요.
최종 스냅샷에서 복원하려면 먼저 KMS 키를 다시 활성화해요. 스냅샷이 원본 DB 인스턴스와 같은 키로 암호화되어 있기 때문이에요. 자세한 내용은 "AWS KMS 키 관리" 문서를 참고하세요. 그런 다음 다른 DB 스냅샷과 마찬가지로 스냅샷을 복원해요. 전체 매개변수 목록은 AWS CLI 명령 참조의 restore-db-instance-from-db-snapshot 문서를 참고하세요.
예시 — 최종 DB 스냅샷에서 DB 인스턴스 복원
Linux, macOS, 또는 Unix:
aws rds restore-db-instance-from-db-snapshot \
--db-instance-identifier mydb-restored \
--db-snapshot-identifier rds-final:mydb-db-abcdefghijklmnop
Windows:
aws rds restore-db-instance-from-db-snapshot ^
--db-instance-identifier mydb-restored ^
--db-snapshot-identifier rds-final:mydb-db-abcdefghijklmnop
자동 백업이 필수는 아니지만, 암호화된 DB 인스턴스에는 자동 백업을 켜서 최종 스냅샷에 더해 특정 시점 복구(point-in-time recovery)도 사용할 수 있게 하는 것이 좋아요.
KMS 키에 대한 자세한 내용은 AWS Key Management Service 개발자 가이드의 "AWS KMS keys" 및 "AWS KMS 키 관리" 문서를 참고하세요.
DB 인스턴스 암호화
새 DB 인스턴스를 암호화하려면 Amazon RDS 콘솔에서 **Enable encryption(암호화 활성화)**을 선택해요. DB 인스턴스 생성에 대한 정보는 "Amazon RDS DB 인스턴스 생성" 문서를 참고하세요.
create-db-instance AWS CLI 명령으로 암호화된 DB 인스턴스를 생성하려면 --storage-encrypted 매개변수를 설정해요. CreateDBInstance API 작업을 사용하면 StorageEncrypted 매개변수를 true로 설정해요.
create-db-instance AWS CLI 명령으로 고객 관리형 키를 사용해 암호화된 DB 인스턴스를 생성하려면 --kms-key-id 매개변수를 KMS 키의 임의의 키 식별자로 설정해요. Amazon RDS API CreateDBInstance 작업을 사용하면 KmsKeyId 매개변수를 KMS 키의 임의의 키 식별자로 설정해요. 다른 AWS 계정의 고객 관리형 키를 사용하려면 키 ARN 또는 별칭(alias) ARN을 지정해요.
DB 인스턴스에서 암호화가 활성화되어 있는지 확인
AWS Management Console, AWS CLI 또는 RDS API를 사용해 DB 인스턴스에서 저장 시 암호화가 활성화되어 있는지 확인할 수 있어요.
DB 인스턴스에서 저장 시 암호화가 활성화되어 있는지 확인하려면
- AWS Management Console에 로그인하고 https://console.aws.amazon.com/rds/ 에서 Amazon RDS 콘솔을 열어요.
- 탐색 창에서 **Databases(데이터베이스)**를 선택해요.
- 확인하려는 DB 인스턴스의 이름을 선택해 세부 정보를 봐요.
- Configuration(구성) 탭을 선택하고 Storage(스토리지) 아래의 Encryption(암호화) 값을 확인해요.
- Enabled(활성화됨) 또는 **Not enabled(활성화되지 않음)**으로 표시돼요.
AWS CLI로 DB 인스턴스에서 저장 시 암호화가 활성화되어 있는지 확인하려면 다음 옵션과 함께 describe-db-instances 명령을 호출해요.
--db-instance-identifier– DB 인스턴스의 이름이에요.
다음 예시는 mydb DB 인스턴스의 저장 시 암호화에 대해 TRUE 또는 FALSE를 반환하는 쿼리를 사용해요.
aws rds describe-db-instances --db-instance-identifier mydb --query "*[].{StorageEncrypted:StorageEncrypted}" --output text
Amazon RDS API로 DB 인스턴스에서 저장 시 암호화가 활성화되어 있는지 확인하려면 다음 매개변수와 함께 DescribeDBInstances 작업을 호출해요.
DBInstanceIdentifier– DB 인스턴스의 이름이에요.
Amazon RDS 암호화의 가용성
Amazon RDS 암호화는 현재 모든 데이터베이스 엔진과 스토리지 유형에서 사용할 수 있어요.
Amazon RDS 암호화는 대부분의 DB 인스턴스 클래스에서 사용할 수 있어요. 다음 표는 Amazon RDS 암호화를 지원하지 않는 DB 인스턴스 클래스를 나열해요.
| 인스턴스 유형 | 인스턴스 클래스 |
|---|---|
| 범용(General purpose, M1) | db.m1.small, db.m1.medium, db.m1.large, db.m1.xlarge |
| 메모리 최적화(Memory optimized, M2) | db.m2.xlarge, db.m2.2xlarge, db.m2.4xlarge |
| 버스트 가능(Burstable, T2) | db.t2.micro |
전송 중 암호화 (Encryption in transit)
물리 계층의 암호화
AWS 글로벌 네트워크를 통해 AWS 리전 사이를 이동하는 모든 데이터는 AWS 보안 시설을 떠나기 전에 물리 계층에서 자동으로 암호화돼요. 가용 영역(AD) 간의 모든 트래픽도 암호화돼요. 이 섹션에 나열된 것들을 포함한 추가 암호화 계층은 추가 보호를 제공할 수 있어요.
Amazon VPC 피어링 및 Transit Gateway 교차 리전 피어링에서 제공하는 암호화
Amazon VPC 및 Transit Gateway 피어링을 사용하는 모든 교차 리전 트래픽은 리전을 벗어날 때 자동으로 벌크 암호화돼요. 모든 트래픽이 AWS 보안 시설을 떠나기 전에 물리 계층에서 추가 암호화 계층이 자동으로 제공돼요.
인스턴스 간 암호화
AWS는 모든 유형의 DB 인스턴스 간에 안전하고 비공개적인 연결을 제공해요. 또한 일부 인스턴스 유형은 기본 Nitro System 하드웨어의 오프로드 기능을 사용해 인스턴스 간 전송 중 트래픽을 자동으로 암호화해요. 이 암호화는 256비트 암호화의 AEAD(Authenticated Encryption with Associated Data) 알고리즘을 사용해요. 네트워크 성능에는 영향이 없어요. 인스턴스 간의 이 추가 전송 중 트래픽 암호화를 지원하려면 다음 요구 사항을 충족해야 해요.
- 인스턴스가 다음 인스턴스 유형을 사용하는 경우:
- 범용: M6i, M6id, M6in, M6idn, M7g
- 메모리 최적화: R6i, R6id, R6in, R6idn, R7g, X2idn, X2iedn, X2iezn
- 인스턴스가 같은 AWS 리전에 있는 경우.
- 인스턴스가 같은 VPC 또는 피어링된 VPC에 있고, 트래픽이 로드 밸런서나 트랜짓 게이트웨이 같은 가상 네트워크 디바이스나 서비스를 통과하지 않는 경우.
Amazon RDS 암호화 DB 인스턴스의 제한 사항
Amazon RDS 암호화 DB 인스턴스에는 다음 제한 사항이 있어요.
- Amazon RDS DB 인스턴스는 생성할 때만 암호화할 수 있고, DB 인스턴스 생성 후에는 암호화할 수 없어요.
- 그러나 암호화되지 않은 스냅샷의 복사본을 암호화할 수 있으므로, 실제로 암호화되지 않은 DB 인스턴스에 암호화를 추가할 수 있어요. 즉, DB 인스턴스의 스냅샷을 만들고 그 스냅샷의 암호화된 복사본을 만들 수 있어요. 그런 다음 암호화된 스냅샷에서 DB 인스턴스를 복원하면 원래 DB 인스턴스의 암호화된 복사본을 갖게 돼요. 자세한 내용은 "Amazon RDS용 DB 스냅샷 복사" 문서를 참고하세요.
- 암호화된 DB 인스턴스에서 암호화를 끌 수 없어요.
- 암호화되지 않은 DB 인스턴스의 암호화된 스냅샷을 만들 수 없어요.
- 암호화된 DB 인스턴스의 스냅샷은 해당 DB 인스턴스와 동일한 KMS 키로 암호화해야 해요.
- 암호화되지 않은 DB 인스턴스의 암호화된 읽기 전용 복제본, 또는 암호화된 DB 인스턴스의 암호화되지 않은 읽기 전용 복제본을 가질 수 없어요.
- 암호화된 읽기 전용 복제본은 둘 다 같은 AWS 리전에 있을 때 원본 DB 인스턴스와 동일한 KMS 키로 암호화해야 해요.
- 암호화되지 않은 백업이나 스냅샷을 암호화된 DB 인스턴스로 복원할 수 없어요.
- 암호화된 스냅샷을 한 AWS 리전에서 다른 AWS 리전으로 복사하려면 대상 AWS 리전의 KMS 키를 지정해야 해요. KMS 키는 생성된 AWS 리전에 한정되기 때문이에요.
- 복사 프로세스 전반에 걸쳐 원본 스냅샷은 암호화된 상태로 유지돼요. Amazon RDS는 복사 프로세스 중 데이터를 보호하기 위해 봉투 암호화(envelope encryption)를 사용해요. 봉투 암호화에 대한 자세한 내용은 AWS Key Management Service 개발자 가이드의 "Envelope encryption" 문서를 참고하세요.
- 암호화된 DB 인스턴스의 암호화를 해제할 수 없어요. 그러나 암호화된 DB 인스턴스에서 데이터를 내보내 암호화되지 않은 DB 인스턴스로 가져올 수는 있어요.