프로그래밍/AWS Solutions Architect
AWS SAA - Amazon RDS
병인
2022. 5. 15. 17:14
- RDS는 Relational Database Service(관계형 데이터베이스 서비스)를 나타낸다.
- SQL을 쿼리 언어로 사용하는 데이터베이스를 위한 관리형 데이터베이스를 말한다.
- SQL은 데이터베이스 쿼리를 위한 구조적 언어이다.
- SQL을 이용해 클라우드에 데이터베이스를 생성할 수 있다.
- AWS에서 관리하는 데이터베이스 엔진
- Postgres
- MySQL
- MariaDB
- Oracle
- Microsoft SQL Server
- Aurora (AWS Proprietary database)
인스턴스 상에 자체 데이터베이스 서비스를 배포하지 않고 RDS를 사용하는 이유
- RDS는 관리형 서비스이다.
- 데이터베이스의 프로비저닝은 완전히 자동화 되어있고, 기본 OS 패치 또한 자동으로 이루어진다.
- 지속적인 백업이 수행되며 특정 타임스탬프도 복구할 수 있다.(Point in Time Restore, PITR)
- 모니터링 대시보드를 통해서 데이터베이스 성능을 확인할 수 있다.
- 읽기 성능 향상을 목적으로 하는 읽기 전용 복제본이 있다.
- 다중 AZ를 설정할 수 있다 (재해 복구 시 유용하게 이용할 수 있다.)
- 업그레이드를 위한 유지 보수가 존재한다.
- 인스턴스 유형을 늘리고 읽기 전용 복제본을 추가함으로써 인스턴스 유형의 수직 및 수평 확장성을 증가시킬 수 있다.
- 스토리지가 EBS를 기반으로 한다. (gp2 볼륨 또는 io1을 뜻한다)
- SSH를 따로 가질 수 없다.
- AWS에서 제공되는 기본 EC2 인스턴스에 대해서는 사용자가 따로 접근 권한을 갖지 않기 때문이다.
RDS Backups
- 백업은 RDS에서 자동으로 활성화되며 자동으로 생성된다.
- 자동 백업
- 정의해 놓은 유지 관리 기간 동안 매일 수행되는 데이터베이스 전체에 대한 백업을 진행한다.
- 트랜잭션 로그, 즉 일일 트랜잭션 로그가 매 5분마다 RDS에 백업된다.
- 그 어떤 지정 시점으로든 데이터베이스를 복원할 수 있다.
- 자동 백업은 기본적으로 7일간 보관되지만 최대 35일까지 보관 기간을 설정할 수 있다.
- DB Snapshots
- 사용자가 수동으로 발동시키는 작업이다.
- 백업 보관 기간을 사용자 임의로 설정할 수 있다.
RDS Storage Auto Scaling
RDS 데이터베이스를 생성할 때는 원하는 스토리지 용량을 지정해야 한다.
데이터베이스 사용이 많고 사용 가능한 공간이 부족해지는 경우 RDS Storage Auto Scaling이 활성화되어 있으면 자동으로 스토리지를 확장한다.
데이터베이스 스토리지를 수동으로 확장하는 작업을 피하기 위해 만들어졌다.
최대 스토리지 임계값을 설정해야 한다.
- 남은 공간이 10% 미만으로 떨어질 때
- 낮은 스토리지 상태가 5분 이상 지속되며
- 지난 수정이 6시간이 지났을 경우 수정한다.
워크로드를 예측할 수 없는 애플리케이션에 아주 유용하다.
MariaDB, MySQL, PostgreSQL, SQL Server, Oracle 등 모든 RDS 데이터베이스 엔진을 지원한다.
Read Replicas for read scalability (읽기 전용 복제본)
- 읽기를 스케일링 한다.
- 최대 5개까지 생성할 수 있다.
- 동일한 가용 영역 또는 가용 영역이나 리전을 걸쳐서 생성될 수 있다.
- 비동기식(ASYNC) 복제가 할생한다
- 읽기가 일관적으로 유지된다
- 복제본은 DB로 승격시켜 이용할 수 있다.
- 읽기 전용 복제본을 사용하려는 경우 화면 상단의 주요 애플리케이션에 있는 모든 연결을 업데이트해야 하며 이를 통해서 RDS 클러스터 상의 읽기 전용 복제본 전체 목록을 활용할 수 있다.
RDS Read Replicas 사용 사례
- 평균적인 로드를 감당하고 있는 생산 데이터에서 데이터를 기반으로 몇 가지 보고와 분석을 실시할 경우 리포팅 애플리케이션을 메인 RDS 데이터베이스 인스턴스에 연결하면 오버로드가 발생하고 생산 애플리케이션이 느려진다.
- 이러한 상황에서 새로운 워크로드에 대한 읽기 전용 복제본을 생성한다. 읽기 전용 복제본을 생성하면 메인 RDS 데이터베이스 인스턴스와 읽기 전용 복제본 간 비동기식 복제가 발생한다.
- 읽기 전용 복제본이 있는 경우 오직 SELECT 명령어만 사용 가능하다. INSERT, UPDATE DELETE는 사용이 불가능하다.
RDS Read Replicas - Network Cost
- AWS에서는 하나의 가용 영역에서 다른 가용 영역으로 데이터가 이동할 때 비용이 발생한다.
- 하지만 예외는 존재하고 이 예외는 보통 관리형 서비스에서 나타난다.
- RDS Read Replicas는 다른 AZ이지만, 같은 Region의 경우 비용이 발생하지 않는다.
- 다른 Resion에 Replica가 존재하는 경우 네트워크에 대한 복제 비용이 발생한다.
RDS Multi AZ (재해 복구)
- 하나의 애플리케이션은 가용영역 A에서 읽기와 쓰기를 수행하는 마스터 데이터베이스 인스턴스이다.
- 동기식으로 가용영역 B에 스탠바이 인스턴스로 복제한다.
- 마스터 데이터베이스의 모든 변화를 동기적으로 복제하는 행동이다.
- 애플리케이션의 마스터에 쓰이는 변경 사항이 스탠바이 인스턴스에도 그대로 복제된다.
- 하나의 DNS 이름을 갖고 애플리케이션 또한 하나의 DNS 이름으로 통신하며 마스터에 문제가 생길 때에도 스탠바이 데이터베이스에 자동으로 장애 조치가 수행된다.
- 가용성을 높일 수 있어 Multi AZ라고 불린다.
- 모든 AZ 또는 네트워크가 손실될 때에 대비한 장애 조치이자 마스터 데이터베이스의 인스턴스 또는 스토리지에 장애가 발생할 때 스탠바이 데이터베이스가 새로운 마스터가 될 수 있도록 한다.
- 장애 발생 시 자동으로 시행된다.
- 스탠바이 데이터베이스는 누구도 읽거나 쓸 수 없다.
- 재해 복구를 대비해서 읽기 전용 복제본을 다중 AZ로 설정할 수 있다.
RDS Security
Encryption
rest encryption
- 사용하지 않는 데이터로, AES 256비트 암호화를 사용하는 AWS의 키 매니지먼트 서비스인 AWS KMS로 마스터베이스와 read replicas를 암호화할 수 있다.
- 암호화 실행 시 실행 시간을 정의해야 하며 마스터 데이터베이스를 암호화하지 않으면 복제본도 암호화할 수 없다.
- Oracle과 SQL Server에서 Transparent Data Encryption (TDE)를 활성화 할 수 있고 데이터베이스 암호화의 대안을 제공한다.
In-flight encryption
- 전송 중인 RDS로 데이터를 암호화하는 SSL 인증서
- 데이터베이스에 연결 시 신뢰할 수 있는 인증서로 SSL 옵션을 제공하면 SSL을 연결할 수 있다.
- 모든 클라이언트가 SSL을 사용하도록 하려면
- PostgreSQL에서는 rds.force_ssl=I인 콘솔 매개변수 그룹을 설정해야 한다.
- MySQL에서는 GRANT USAGE ON . TO 'mysqluser'@%' REQUIRE SSL; 을 실행해야 한다.
RDS Encryption Operations
- RDS 백업 암호화
- 암호화 되지 않은 RDS 데이터베이스에서 스냅샷을 생성하면 스냅샷 자체는 암호화되지 않는다.
- 암호화 된 RDS 데이터베이스에서 스냅샷을 생성하면 모든 스냅샷이 기본으로 암호화되는데 이는 항상 기본 값은 아니다.
- 암호화되지 않은 스냅샷을 암호화된 스냅샷으로 복제해야 한다.
- 암호화되지 않은 RDS 데이터베이스의 스냅샷을 생성해 복제한 뒤 스냅샷의 암호화된 버전을 쉽게 만들 수 있다.
- RDS 백업 암호화
- 암호화 되지 않은 RDS 데이터베이스를 암호화 하는 방법
- 암호화되지 않은 스냅샷을 생성한다.
- 생성한 스냅샷을 복제하고 복제한 스냅샷의 암호화를 활성화한다.
- 암호화된 스냅샷으로 데이터베이스를 복원할 수 있고 이 때 암호화된 RDS 데이터베이스를 만들 수 있다.
- 모든 애플리케이션을 새 암호화 된 데이터베이스로 옮기고, 이전 데이터베이스를 삭제한다.
Network & IAM
Network Security
- 대부분의 RDS 데이터베이스는 퍼블릿 서브넷이 아닌 프라이빗 서브넷에서 배포된다.
- 데이터베이스가 WWW에 노출되지 않도록 해야 한다.
- RDS 보안은 RDS 인스턴스에 연결되어 있는 Security Group을 활용해 실행된다.
- RDS와 통신할 수 있는 IP 또는 Security Group을 제어한다.
- 대부분의 RDS 데이터베이스는 퍼블릿 서브넷이 아닌 프라이빗 서브넷에서 배포된다.
Access Management
- 사용자 관리 등 권한 액세스 관리에는 IAM 정책이 있다.
- AWS RDS를 관리하는 사람만 제어할 수 있다.
- 데이터를 생성하고 삭제할 수 있으며 읽기 전용 복제본 생성 등을 할 수 있다.
- 기존의 방식으로 데이터베이스를 연결하려면 사용자 이름과 암호를 사용해야한다.
- RDS MySQL & PostfreSQL과 같은 IAM 기반의 인증을 사용할 수 있다.
- 사용자 관리 등 권한 액세스 관리에는 IAM 정책이 있다.
IAM Authentication
- MySQL과 PostfreSQL에서만 실행된다.
- 암호는 필요하지 않고 인증 토큰이 필요하다.
- RDS API 호출을 사용해서 IAM으로 직접 얻을 수 있다.
- 인증토큰은 수명이 15분이다.
- 장점
- 네트워크 안팎이 SSL로 암호화된다.
- IAM은 데이터베이스 내부에서의 사용자 관리 대신 중앙에서의 사용자 관리에 사용된다.
- IAM 역할과 EC2 인스턴스 프로파일로 쉽게 통합할 수 있다.
정리
- Encryption at rest
- 데이터베이스 인스턴스를 처음 생성할 때만 사용된다.
- 데이터베이스가 암호화되지 않았으면
- 스냅샷을 생성해야 한다.
- 스냅샷을 복제해 암호화한다.
- 암호화된 스냅샷에서 새 데이터베이스를 생성한다.
- 새 데이터베이스는 암호화 되어 있다.
- 사용자의 책임
- 모든 포트와 IP, 보안 그룹, 인바운드 규칙, 사용 가능한 데이터베이스의 보안 그룹을 확인한다.
- 내부 데이터베이스의 모든 사용자 생성 및 권한을 관리하거나 MySQL과 PostgreSQL 용 IAM으로 관리해야 한다.
- 퍼블릭 액세스가 있거나 없는 데이터베이스를 생성해 프라이빗 서브넷이나 퍼블릭 서브넷으로 가게 한다.
- 파라미터 그룹과 데이터베이스가 SSL 연결만 허용하도록 구성되어 암호화되는지 확인해야 한다.
- AWS의 책임
- SSH 액세스가 발생하지 않도록 한다.
- 데이터베이스 패치나 OS 패치를 자동으로 해준다.
- 기본 인스턴스를 확인한다.