

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

# 기존 Amazon RDS for PostgreSQL DB 인스턴스 암호화하기
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance"></a>

*Piyush Goyal, Shobana Raghu, Yaser Raja, Amazon Web Services*

## 요약
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-summary"></a>

이 패턴은 AWS 클라우드에서 가동 중지 시간을 최소화하면서 PostgreSQL용 Amazon Relational Database Service(RDS) 단원을 암호화하는 방법을 설명합니다. 이 프로세스는 Amazon RDS for MySQL DB 인스턴스에서 사용할 수 있습니다.

Amazon RDS DB 인스턴스를 생성할 때 암호화를 사용하도록 설정할 수 있지만, 생성된 후에는 사용할 수 없습니다. 하지만 DB 인스턴스의 스냅샷을 만든 다음 해당 스냅샷의 암호화된 사본을 만들어 암호화되지 않은 DB 인스턴스에 암호화를 추가할 수 있습니다. 그런 다음 암호화된 스냅샷에서 DB 인스턴스를 복원하여 원본 DB 인스턴스의 암호화된 사본을 얻을 수 있습니다. 이 작업 중에 프로젝트가 다운타임 (최소한 쓰기 트랜잭션의 경우) 을 허용하는 경우 이 작업만 수행하면 됩니다. 암호화된 새 DB 인스턴스 사본을 사용할 수 있게 되면 애플리케이션이 새 데이터베이스를 가리키도록 할 수 있습니다. 그러나 프로젝트에서 이러한 활동으로 인한 심각한 가동 중지 시간이 허용되지 않는 경우 가동 중지 시간을 최소화하는 데 도움이 되는 대체 접근 방식이 필요합니다. 이 패턴은 AWS Database Migration Service(AWS DMS)를 사용하여 데이터를 마이그레이션하고 지속적으로 복제하므로 가동 중지 시간을 최소화하면서 암호화된 새 데이터베이스로 전환할 수 있습니다. 

Amazon RDS 암호화 DB 인스턴스는 업계 표준인 AES-256 암호화 알고리즘을 사용하여 Amazon RDS DB 인스턴스를 호스팅하는 서버의 데이터를 암호화합니다. 데이터가 암호화되면 Amazon RDS는 성능에 미치는 영향을 최소화하면서 데이터의 액세스 인증 및 암호 해독을 투명하게 처리합니다. 암호화를 사용하도록 데이터베이스 클라이언트 애플리케이션을 수정하지 않아도 됩니다.

## 사전 조건 및 제한 사항
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 암호화 해제된 Amazon RDS for PostgreSQL DB 인스턴스
+ AWS DMS 작업을 사용한 경험(생성, 수정 또는 중지) (AWS DMS 설명서의 [AWS DMS 작업](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.html) 사용 참조)
+ 데이터베이스 암호화를 위한 AWS Key Management Service(AWS KMS))에 대한 지식이 있어야 함([AWS KMS 설명서 참고](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html))

**제한 사항 **
+ Amazon RDS DB 인스턴스에 대한 암호화는 암호화를 생성할 때에만 활성화할 수 있으며 DB 인스턴스가 생성된 후에는 불가능합니다.
+ [로깅되지 않은 테이블](https://www.postgresql.org/docs/current/sql-createtable.html)의 데이터는 스냅샷을 사용하여 복원되지 않습니다. 자세한 내용은 [PostgreSQL로 작업하기 위한 모범 사례를](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_BestPractices.html#CHAP_BestPractices.PostgreSQL) 참조하십시오.
+ 암호화되지 않은 DB 인스턴스의 암호화된 읽기 전용 복제본이나 암호화된 DB 인스턴스의 암호화되지 않은 읽기 전용 복제본은 보유할 수 없습니다.
+ 암호화되지 않은 백업 또는 스냅샷을 암호화된 DB 인스턴스로 복원할 수 없습니다.
+ AWS DMS는 시퀀스를 자동으로 전송하지 않으므로 이를 처리하려면 추가 단계가 필요합니다.

자세한 내용은 Amazon RDS 설명서의 [Amazon RDS 암호화된 DB 인스턴스의 제한을](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.html#Overview.Encryption.Limitations) 참조하십시오.

## 아키텍처
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-architecture"></a>

**소스 아키텍처**
+ 암호화되지 않은 RDS DB 인스턴스

**대상 아키텍처 **
+ 암호화된 RDS DB 인스턴스
  + 대상 RDS DB 인스턴스는 원본 RDS DB 인스턴스의 DB 스냅샷 복사본을 복원하여 생성됩니다.
  + AWS KMS 키는 스냅샷을 복원하는 동안 암호화하는 데 사용됩니다.
  + AWS DMS 복제 작업은 데이터를 마이그레이션하는 데 사용됩니다.

![프로세스는 AWS DMS를 사용하여 기존 Amazon RDS for PostgreSQL DB 인스턴스를 새 DB로 암호화합니다.](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/820d17c0-0eed-4ed9-9f43-cbada081d924/images/44dd8420-d89d-466e-b7fb-1bdafab8f7f9.png)


## 도구
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-tools"></a>

**암호화를 활성화하는 데 사용되는 도구:**
+ 암호화를 위한 AWS KMS 키 - 암호화된 DB 인스턴스를 생성할 때 고객 관리형 키 또는 Amazon RDS용 AWS 관리형 키를 선택하여 DB 인스턴스를 암호화할 수 있습니다. 고객 관리형 키에 대한 키 식별자를 지정하지 않으면 Amazon RDS는 새 DB 인스턴스에 대해 AWS 관리형 키를 사용합니다. Amazon RDS는 AWS 계정에 대한 AWS 관리형 키를 생성합니다. AWS 계정에는 각 AWS 리전마다 Amazon RDS에 대해 서로 다른 AWS 관리형 키가 있습니다. Amazon RDS 암호화에 KMS 키를 사용하는 방법에 대한 자세한 내용은 [Amazon RDS 리소스 암호화](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.html)를 참조하십시오.

**지속적인 복제에 사용되는 도구**:
+ AWS Database Migration Service(AWS DMS)를 사용하여 원본 DB에서 대상 DB로 변경 내용을 복제할 수 있습니다. 다운타임을 최소화하려면 원본과 대상 DB를 동기화된 상태로 유지하는 것이 중요합니다. AWS DMS 설정 및 작업 생성에 대한 자세한 내용은 [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 참조하십시오.

## 에픽
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-epics"></a>

### 소스 DB 인스턴스의 스냅샷을 만들고 암호화합니다.
<a name="create-a-snapshot-of-the-source-db-instance-and-encrypt-it"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 원본 PostgreSQL DB 인스턴스의 세부 정보를 확인합니다. | Amazon RDS 콘솔에서 원본 PostgreSQL DB 인스턴스를 선택합니다. **구성** 탭에서 인스턴스에 대해 암호화가 활성화되어 있지 않은지 확인합니다. 화면 그림은 [추가 정보](#encrypt-an-existing-amazon-rds-for-postgresql-db-instance-additional) 섹션을 참조하십시오. | DBA | 
| DB 스냅샷을 만듭니다. | 암호화하려는 인스턴스의 DB 스냅샷을 생성합니다. 스냅샷을 만드는 데 걸리는 시간은 데이터베이스의 크기에 따라 다릅니다. 지침은 Amazon RDS 설명서의 [DB 스냅샷 생성](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateSnapshot.html)을 참조하십시오. | DBA | 
| 스냅샷을 암호화합니다. | Amazon RDS 콘솔 탐색 창에서 [스냅샷] 을 선택하고 생성한 DB **스냅샷**을 선택합니다. **작업**에서 **스냅샷 복사**를 선택합니다. 대상 AWS 리전과 DB 스냅샷 사본의 이름을 해당 필드에 입력합니다. **암호화 활성화** 확인란을 선택합니다. [**Master Key**]에 대해 DB 스냅샷 사본을 암호화할 때 사용할 KMS 키 식별자를 지정합니다. [**Copy Snapshot**]을 선택합니다. 자세한 내용은 Amazon RDS 문서에서 [스냅샷 복사](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CopySnapshot.html)를 참조하세요. | DBA | 

### 대상 DB 인스턴스 준비
<a name="prepare-the-target-db-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| DB 스냅샷을 복원합니다. | Amazon RDS 콘솔에서 **스냅샷**을 선택합니다. 생성한 암호화된 스냅샷을 선택합니다. **작업**에서 **스냅샷 복원**을 선택합니다. **DB 인스턴스 식별자**의 경우 새 DB 인스턴스의 고유 이름을 입력합니다. 인스턴스 세부 정보를 검토한 다음 **DB 인스턴스 복원** 을 선택합니다. 스냅샷에서 암호화된 새 DB 인스턴스가 생성됩니다. 자세한 내용은 Amazon RDS 설명서에서 [DB 스냅샷에서 복원](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_RestoreFromSnapshot.html)을 참조하세요. | DBA | 
| AWS DMS를 사용하여 데이터를 마이그레이션합니다. | AWS DMS 콘솔에서 AWS DMS 작업을 생성합니다. **마이그레이션 유형**에서 **기존 데이터 마이그레이션 및 진행 중인 변경 사항 복제**를 선택합니다. **작업 설정**에서 **대상 테이블 준비 모드**에 대해 **잘라내기**를 선택합니다. 자세한 내용은 AWS DMS 문서에서 [작업 만들기](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html)를 참조하세요. | DBA | 
| 데이터 유효성 검사를 사용 설정합니다. | **작업 설정에서** **검증 활성화**를 선택합니다. 이렇게 하면 소스 데이터와 대상 데이터를 비교하여 데이터가 정확하게 마이그레이션되었는지 확인할 수 있습니다.  | DBA | 
| 대상 DB 인스턴스에서 제약 조건을 비활성화합니다. | 대상 DB [인스턴스에서 트리거 및 외래 키 제약 조건을 비활성화한](https://www.postgresql.org/docs/current/sql-altertable.html) 다음 AWS DMS 작업을 시작합니다. 트리거 비활성화 및 외래 키 제약 조건에 대한 자세한 내용은 [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)를 참조하십시오. | DBA | 
| 데이터 확인  | 전체 로드가 완료되면 대상 DB 인스턴스의 데이터가 원본 데이터와 일치하는지 확인합니다. 자세한 내용은 AWS DMS 설명서에서 [AWS DMS 데이터 유효성 검사](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html)를 참조하세요. | DBA | 

### 대상 DB 인스턴스로 전환
<a name="cut-over-to-the-target-db-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 DB 인스턴스에서 쓰기 작업을 중지합니다. | 애플리케이션 다운타임이 시작될 수 있도록 원본 DB 인스턴스에서 쓰기 작업을 중지하십시오. AWS DMS가 파이프라인의 데이터 복제를 완료했는지 확인하십시오. 대상 DB 인스턴스에서 트리거와 외래 키를 활성화합니다. | DBA | 
| 데이터베이스 시퀀스 업데이트 | 원본 데이터베이스에 시퀀스 번호가 포함되어 있는 경우 대상 데이터베이스의 시퀀스를 확인하고 업데이트하십시오. | DBA | 
| 애플리케이션 엔드포인트를 구성합니다. | 애플리케이션 연결을 구성하여 Amazon RDS DB 인스턴스 엔드포인트를 사용합니다. 이제 DB 인스턴스가 암호화됩니다. | DBA, 애플리케이션 소유자 | 

## 관련 리소스
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-resources"></a>
+ [AWS DMS 태스크 생성](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html) 
+ [Amazon CloudWatch를 사용한 복제 작업 모니터링](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Monitoring.html#CHAP_Monitoring.CloudWatch)
+ [AWS DMS 작업 모니터링](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Monitoring.html)
+ [Amazon RDS 암호화 키 업데이트](https://aws.amazon.com/premiumsupport/knowledge-center/update-encryption-key-rds/)

## 추가 정보
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-additional"></a>

원본 PostgreSQL DB 인스턴스의 암호화를 확인합니다.

![소스 PostgreSQL DB 인스턴스의 요약 페이지에는 스토리지에 대해 활성화되지 않은 암호화가 표시됩니다.](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/820d17c0-0eed-4ed9-9f43-cbada081d924/images/d53d1dab-b5c2-452d-b823-ba3d6508ad15.png)


이 패턴에 대한 추가 참고 사항:
+ `rds.logical_replication` 파라미터를 1로 설정하여 PostgreSQL에서 복제를 활성화합니다.

**중요 참고 사항:** 복제 슬롯은 파일이 외부에서 사용될 때까지 WAL (Write Ahead Log) 파일을 보관합니다. 예를 들어, `pg_recvlogical` 등 추출, 전환, 적재(ETL) 작업이나 AWS DMS에 의해 사용됩니다. `rds.logical_replication` 파라미터 값을 1로 설정하면 AWS DMS는 `wal_level`, `max_wal_senders`, `max_replication_slots`, 및 `max_connections` 파라미터를 설정합니다. 논리적 복제 슬롯이 있지만 복제 슬롯에 보관된 WAL 파일을 사용할 소비자가 없는 경우, 트랜잭션 로그 디스크 사용량은 증가하고 사용 가능한 스토리지 공간은 계속 감소할 수 있습니다. 이 문제를 해결하기 위한 자세한 내용 및 단계는 AWS Support 지식 센터의 [Amazon RDS for PostgreSQL에서 ‘디바이스에 남은 공간 없음’ 또는 ‘DiskFull’ 오류의 원인을 식별하려면 어떻게 해야 합니까?](https://aws.amazon.com/premiumsupport/knowledge-center/diskfull-error-rds-postgresql/) 문서를 참조하십시오.
+ DB 스냅샷을 생성한 후 원본 DB 인스턴스에 적용한 스키마 변경 사항은 대상 DB 인스턴스에 적용되지 않습니다.
+ 암호화된 DB 인스턴스를 만든 후에는 해당 DB 인스턴스에서 사용하는 KMS 키를 변경할 수 없습니다. 암호화된 DB 인스턴스를 생성하기 전에 KMS 키 요구 사항을 확인해야 합니다.
+ AWS DMS 작업을 실행하기 전에 대상 DB 인스턴스에서 트리거와 외래 키를 비활성화해야 합니다. 작업이 완료되면 이러한 기능을 다시 활성화할 수 있습니다.