암호 종류
고정 암호
- AWS KMS(AES-256 암호화)를 사용해 마스터와 읽기 복제본을 암호화 할 수 있다.
- 인스턴스 시작시 암호를 정의한다.
- 만약 마스터가 암호화 되지 않았다면 읽기 복제본도 암호화 될 수 없다.
- 오라클과 SQL 서버를 위한 Transparent Data Encryption(TDE)을 사용할 수도 있다.
In-flight 암호
- RDS로 데이터가 들어올 때 SSL인증서로 데이터를 암호화 한다.
- In-flight는 데이터가 클라로부터 DB로 전송되는 것을 뜻한다.
- 고정 암호랑 함께 사용 한다.
- 데이터베이스에 연결할 때 신뢰할 수 있는 증명서와 함께 SSL 옵션을 제공해야 한다.
- 모든 데이터베이스가 SSL을 사용하도록 만들기 위한 설정:
- PostgreSQL: 파라미터 그룹 설정 -> 콘솔에서 rds.force_ssl = 1로 설정
- MySQL: SQL 명령문 사용 -> GRANT USAGE ON *.* TO 'mysqluser'@'%' REQUIRE_SSL
RDS 암호화 기능
- RDS 백업 암호화
- 암호화 되지 않은 RDS의 스냅샷은 암호화 되지 않는다.
- 반대로 암호화 된 경우 스냅샷 역시 암호화 된다.
- 암호화 되지 않은 스냅샷을 암호화된 스냅샷으로 복사할 수 있다.
- 먼저, 암호화 되지 않은 스냅샷을 생성한다.
- 스냅샷을 복사하고 해당 스냅샷을 암호화 한다.
- 암호화된 스냅샷으로 데이터베이스를 저장한다.
- 애플리케이션을 새로운 데이터베이스로(암호화된) 옮기고 이전 데이터베이스를 삭제한다.
네트워크 보안과 IAM
네트워크 보안
- RDS 데이터베이스는 보통 프라이빗 서브넷에 배치된다.
- RDS 보안은 보안 그룹을 활용하면 된다.
접근 관리
- RDS를 관리하기 위해 IAM 정책을 사용할 수 있다.
- 전통적인 username과 password로 데이터베이스에 로그인 할 수 있다.
- MySQL과 PostgreSQL에서만 IAM 자격 증명을 이용해 로그인 할 수 있다.
IAM 자격 증명
- MySQL과 PostgreSQL에서만 사용 가능하다.
- IAM role을 이용해 RDS service를 호출해 auth token을 가져오면 이를 SSL encryption이 RDS 보안 그룹에 넘겨 자격을 확인한다.
- auth token의 수명은 15분이다.
이점
- 안팎의 네트워크가 SSL을 통해 반드시 암호화 된다.
- IAM이 중심적인 매니저 사용자로 사용된다.
- 이는 훨씬 중심에 집중된 자격 증명이다.
- IAM role과 EC2 instance profile을 이용해 쉽게 통합이 가능하다.
RDS는 관리형 서비스이기 때문에 백엔드에서 사용되는 instance에는 사용자가 직접 접속할 수 없다. 즉, SSH 접속은 불가능하다!