병인 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 데이터베이스를 만들 수 있다.
    - 모든 애플리케이션을 새 암호화 된 데이터베이스로 옮기고, 이전 데이터베이스를 삭제한다.

Network & IAM

  • Network Security

    • 대부분의 RDS 데이터베이스는 퍼블릿 서브넷이 아닌 프라이빗 서브넷에서 배포된다.
      • 데이터베이스가 WWW에 노출되지 않도록 해야 한다.
    • RDS 보안은 RDS 인스턴스에 연결되어 있는 Security Group을 활용해 실행된다.
      • RDS와 통신할 수 있는 IP 또는 Security Group을 제어한다.
  • Access Management

    • 사용자 관리 등 권한 액세스 관리에는 IAM 정책이 있다.
      • AWS RDS를 관리하는 사람만 제어할 수 있다.
      • 데이터를 생성하고 삭제할 수 있으며 읽기 전용 복제본 생성 등을 할 수 있다.
    • 기존의 방식으로 데이터베이스를 연결하려면 사용자 이름과 암호를 사용해야한다.
    • RDS MySQL & PostfreSQL과 같은 IAM 기반의 인증을 사용할 수 있다.

IAM Authentication

  • MySQL과 PostfreSQL에서만 실행된다.
  • 암호는 필요하지 않고 인증 토큰이 필요하다.
    • RDS API 호출을 사용해서 IAM으로 직접 얻을 수 있다.
    • 인증토큰은 수명이 15분이다.
  • 장점
    • 네트워크 안팎이 SSL로 암호화된다.
    • IAM은 데이터베이스 내부에서의 사용자 관리 대신 중앙에서의 사용자 관리에 사용된다.
    • IAM 역할과 EC2 인스턴스 프로파일로 쉽게 통합할 수 있다.

정리

  • Encryption at rest
    • 데이터베이스 인스턴스를 처음 생성할 때만 사용된다.
    • 데이터베이스가 암호화되지 않았으면
      • 스냅샷을 생성해야 한다.
      • 스냅샷을 복제해 암호화한다.
      • 암호화된 스냅샷에서 새 데이터베이스를 생성한다.
      • 새 데이터베이스는 암호화 되어 있다.
  • 사용자의 책임
    • 모든 포트와 IP, 보안 그룹, 인바운드 규칙, 사용 가능한 데이터베이스의 보안 그룹을 확인한다.
    • 내부 데이터베이스의 모든 사용자 생성 및 권한을 관리하거나 MySQL과 PostgreSQL 용 IAM으로 관리해야 한다.
    • 퍼블릭 액세스가 있거나 없는 데이터베이스를 생성해 프라이빗 서브넷이나 퍼블릭 서브넷으로 가게 한다.
    • 파라미터 그룹과 데이터베이스가 SSL 연결만 허용하도록 구성되어 암호화되는지 확인해야 한다.
  • AWS의 책임
    • SSH 액세스가 발생하지 않도록 한다.
    • 데이터베이스 패치나 OS 패치를 자동으로 해준다.
    • 기본 인스턴스를 확인한다.