RDS 보안: 암호화 및 파라미터 그룹
KMS로 저장된 RDS 데이터를 암호화하고 파라미터 그룹으로 연결 수준 암호화를 제어하며 IAM 인증으로 보안을 강화합니다.
RDS 보안: 암호화 및 파라미터 그룹은(는) CoddyKit의 무료 AWS Solutions Architect 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AWS Solutions Architect 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AWS Solutions Architect 강의에는 총 4개의 강의가 포함되어 있습니다.
저장 데이터 암호화
RDS는 AWS Key Management Service(KMS)를 사용하여 저장 데이터 암호화를 지원합니다. DB 인스턴스를 생성할 때 암호화를 활성화하면 기본 EBS 볼륨의 모든 데이터, 자동 백업, 스냅샷 및 Read Replicas가 지정된 KMS 키를 사용하여 암호화됩니다.
암호화는 생성 시점에 활성화해야 하며, 기존의 암호화되지 않은 인스턴스를 제자리에서 암호화할 수는 없습니다. 해결 방법은 암호화되지 않은 스냅샷을 생성하고, 암호화를 활성화한 상태로 복사한 다음, 암호화된 스냅샷에서 복원하는 것입니다. KMS 키는 AWS 관리형 키 또는 추가적인 제어와 감사 기능을 제공하는 고객 관리형 키(CMK)일 수 있습니다.
# Create an encrypted RDS instance
aws rds create-db-instance \
--db-instance-identifier mydb-encrypted \
--engine mysql \
--db-instance-class db.t3.micro \
--master-username admin \
--master-user-password MyPass123! \
--allocated-storage 20 \
--storage-encrypted \
--kms-key-id arn:aws:kms:us-east-1:123456789:key/my-key-id기존 암호화되지 않은 RDS 인스턴스 암호화
기존 인스턴스에서는 암호화를 활성화할 수 없으므로 다음 마이그레이션 경로를 따르십시오.
- 암호화되지 않은 인스턴스의 수동 스냅샷을 생성합니다
- 스냅샷을 복사하면서 암호화를 활성화하고 KMS 키를 지정합니다
- 암호화된 스냅샷에서 새 DB 인스턴스를 복원합니다
- 애플리케이션 엔드포인트를 새 인스턴스로 업데이트합니다
- 기존 암호화되지 않은 인스턴스를 삭제합니다
전환 전에 DMS를 사용하여 새 암호화 인스턴스를 동기화된 상태로 유지하지 않는 한, 이 접근 방식에서는 어느 정도의 중단 시간이 발생합니다.
# Copy snapshot with encryption enabled
aws rds copy-db-snapshot \
--source-db-snapshot-identifier mydb-unencrypted-snap \
--target-db-snapshot-identifier mydb-encrypted-snap \
--kms-key-id alias/aws/rdsSSL/TLS를 사용한 전송 중 암호화
RDS는 SSL/TLS를 사용하여 전송 중인 데이터를 암호화합니다. 각 엔진은 클라이언트 드라이버가 서버의 ID를 확인하는 데 사용하는 다운로드 가능한 CA 인증서를 제공합니다. SSL 연결을 강제하려면 암호화되지 않은 연결을 거부하도록 데이터베이스 엔진을 구성하십시오.
MySQL의 경우 매개변수 그룹에서 require_secure_transport = ON을 설정합니다. PostgreSQL의 경우 ssl = 1을 설정하고, SSL이 아닌 연결을 완전히 거부하려면 선택적으로 rds.force_ssl = 1을 설정합니다. 많은 Java 및 Python 데이터베이스 드라이버는 sslmode=require 연결 문자열 매개변수도 허용합니다.
# Connect to RDS MySQL over SSL
mysql -h mydb.abcd1234.us-east-1.rds.amazonaws.com \
-u admin -p \
--ssl-ca=rds-ca-2019-root.pem \
--ssl-verify-server-cert매개변수 그룹이란 무엇인가요?
매개변수 그룹은 RDS 인스턴스에 연결하는 이름이 지정된 엔진 구성 설정 모음입니다. 이는 MySQL의 my.cnf 또는 PostgreSQL의 postgresql.conf를 편집하는 것과 같은 RDS 기능이지만, AWS에서 관리되며 엔진 패밀리별로 버전이 관리됩니다.
AWS는 각 엔진 버전에 대해 기본 매개변수 그룹을 제공하지만 해당 설정은 편집할 수 없습니다. 매개변수를 사용자 지정하려면 사용자 지정 매개변수 그룹을 생성하고 원하는 매개변수를 수정한 다음 DB 인스턴스에 연결하십시오. 정적 매개변수를 변경하려면 재부팅이 필요하며, 동적 매개변수는 즉시 적용됩니다.
# Create a custom parameter group
aws rds create-db-parameter-group \
--db-parameter-group-name my-mysql8-params \
--db-parameter-group-family mysql8.0 \
--description 'Custom MySQL 8.0 parameters'매개변수 그룹 설정 수정
사용자 지정 매개변수 그룹을 생성한 후 modify-db-parameter-group CLI 명령 또는 콘솔을 사용하여 개별 매개변수를 수정합니다. 매개변수에는 적용 방식이 있습니다. immediate는 재부팅 없이 적용되고, pending-reboot은 다음 인스턴스 재시작 후에만 적용됩니다.
시험을 위해 알아 두어야 할 중요한 매개변수는 다음과 같습니다. max_connections(동시 연결 제한), innodb_buffer_pool_size(MySQL 메모리 내 캐시 크기), log_bin_trust_function_creators(바이너리 로그에 쓰는 저장 함수 허용), rds.force_ssl(PostgreSQL에 SSL 강제).
# Force SSL in a PostgreSQL parameter group
aws rds modify-db-parameter-group \
--db-parameter-group-name my-postgres-params \
--parameters 'ParameterName=rds.force_ssl,ParameterValue=1,ApplyMethod=immediate'추가 기능을 위한 옵션 그룹
옵션 그룹은 매개변수 그룹과 비슷하지만 구성 조정이 아니라 데이터베이스 엔진의 추가 기능을 제어합니다. 주로 Oracle 및 SQL Server에서 Oracle Application Express(APEX), SQL Server Transparent Data Encryption(TDE), SQL Server Active Directory 인증과 같은 기능을 활성화하는 데 사용됩니다.
옵션 그룹의 각 옵션에는 자체 설정이 있을 수 있습니다. 옵션 그룹은 엔진 패밀리별로 버전이 관리되며 DB 인스턴스에 연결해야 합니다. 대부분의 오픈 소스 엔진(MySQL, PostgreSQL, MariaDB)에서는 사용자 지정 옵션 그룹이 거의 필요하지 않습니다.
IAM 데이터베이스 인증
RDS는 MySQL 및 PostgreSQL 엔진에서 IAM 데이터베이스 인증을 지원합니다. 정적인 사용자 이름/암호 대신 애플리케이션이 IAM 역할을 수임하고 generate-db-auth-token AWS CLI 명령 또는 SDK 호출을 사용하여 임시 인증 토큰(15분 동안 유효)을 생성합니다.
장점으로는 장기간 유지되는 데이터베이스 암호가 필요하지 않고, IAM 정책을 통해 자격 증명을 자동으로 교체할 수 있으며, 액세스 제어를 중앙에서 관리할 수 있다는 점이 있습니다. 이 기능을 사용하려면 인스턴스에서 --enable-iam-database-authentication을 활성화하고 IAM 역할에 매핑된 데이터베이스 사용자를 생성해야 합니다.
# Generate an RDS IAM auth token
aws rds generate-db-auth-token \
--hostname mydb.abcd1234.us-east-1.rds.amazonaws.com \
--port 3306 \
--username mydbuser \
--region us-east-1RDS와 Secrets Manager 통합
AWS Secrets Manager는 RDS 마스터 암호와 애플리케이션 자격 증명을 저장하고 자동으로 교체할 수 있습니다. 교체를 활성화하면 Secrets Manager가 Lambda 함수를 호출하여 데이터베이스 암호를 업데이트하고 새 값을 보안 암호에 저장합니다. 애플리케이션은 Secrets Manager API를 통해 최신 보안 암호 값을 가져오므로 항상 유효한 자격 증명을 사용합니다.
콘솔에서 RDS 인스턴스를 생성할 때 마스터 자격 증명을 Secrets Manager에서 관리하도록 선택할 수 있습니다. 이렇게 하면 코드나 환경 변수에 암호를 하드코딩하지 않아도 됩니다.
# Retrieve RDS credentials from Secrets Manager
aws secretsmanager get-secret-value \
--secret-id rds!db-1234abcd-5678-efgh-ijkl-mnopqrstuvwx \
--query SecretString \
--output text | python3 -m json.toolVPC 및 보안 그룹 제어
RDS 인스턴스는 VPC 내부에서 실행되며 DB 서브넷 그룹을 사용하여 인스턴스를 배치할 수 있는 서브넷(여러 AZ에 걸쳐 있음)을 정의합니다. 모범 사례는 직접적인 인터넷 액세스가 없는 프라이빗 서브넷에 RDS를 배치하는 것입니다.
보안 그룹은 어떤 IP 주소와 다른 보안 그룹이 DB 포트에 연결할 수 있는지 제어합니다(예: MySQL의 TCP 3306). 애플리케이션 계층의 보안 그룹만 RDS 보안 그룹에서 허용되는 소스가 되도록 하여 네트워크 수준의 최소 권한을 적용해야 합니다. RDS 보안 그룹의 인바운드 규칙에 0.0.0.0/0(모든 트래픽)을 절대 설정하지 마십시오.
향상된 모니터링 및 감사 로그
향상된 모니터링은 OS 수준 지표(CPU, 메모리, 파일 시스템, 디스크 I/O)를 1~60초마다 CloudWatch Logs에 게시하므로 기본 60초 CloudWatch 지표보다 더 세밀한 단위로 확인할 수 있습니다. DB 호스트에서 실행되는 에이전트를 사용하며 SQL Server 미러링 모드를 제외한 모든 엔진에서 사용할 수 있습니다.
데이터베이스 감사 로그(MySQL의 일반 쿼리 로그와 느린 쿼리 로그, PostgreSQL의 pgaudit)는 규정 준수 분석을 위해 CloudWatch Logs에 게시할 수 있습니다. 매개변수 그룹을 통해 이러한 로그를 활성화한 다음 RDS 콘솔의 로그 내보내기에서 로그 내보내기를 구성하십시오.
# Enable PostgreSQL logs export to CloudWatch
aws rds modify-db-instance \
--db-instance-identifier mydb \
--cloudwatch-logs-export-configuration 'EnableLogTypes=[postgresql,upgrade]' \
--apply-immediately보안 모범 사례 요약
SAA-C03 시험을 위한 주요 RDS 보안 모범 사례는 다음과 같습니다.
- 인스턴스를 생성할 때 KMS CMK를 사용하여 저장 중 암호화를 활성화합니다
- 매개변수 그룹 설정을 통해 전송 중 SSL/TLS를 강제합니다
- 제한적인 보안 그룹이 적용된 프라이빗 서브넷에 인스턴스를 배치합니다
- 정적인 암호를 사용하지 않도록 IAM 데이터베이스 인증 또는 Secrets Manager를 사용합니다
- RDS API 호출을 기록하려면 CloudTrail을, 데이터베이스 감사 로그를 기록하려면 CloudWatch Logs를 활성화합니다
- 잘못된 구성을 감지하려면 AWS Config 규칙(예:
rds-instance-public-access-check)을 사용합니다
빠른 확인
이 단원에서 배운 AWS Solutions Architect(SAA-C03) 개념을 얼마나 이해했는지 확인해 보십시오.
단원 복습
이 단원에서는 RDS 저장 중 암호화가 KMS를 사용하며 생성할 때 활성화해야 한다는 점, 매개변수 그룹이 엔진 구성을 제어하고 전송 중 SSL/TLS 적용도 관리한다는 점, IAM 데이터베이스 인증과 Secrets Manager가 정적인 데이터베이스 암호를 없앤다는 점을 배웠습니다. 다음에는 DynamoDB 테이블, 항목 및 기본 키 설계를 살펴보겠습니다.
자주 묻는 질문
“RDS 보안: 암호화 및 파라미터 그룹” 강의는 무료인가요?
네 — “RDS 보안: 암호화 및 파라미터 그룹” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AWS Solutions Architect 강의 전체를 잠금 해제할 수 있습니다. AWS Solutions Architect 강의에는 총 4개의 강의가 포함되어 있습니다.
“RDS 보안: 암호화 및 파라미터 그룹”에서 뭘 배우나요?
KMS로 저장된 RDS 데이터를 암호화하고 파라미터 그룹으로 연결 수준 암호화를 제어하며 IAM 인증으로 보안을 강화합니다. 브라우저에서 직접 실행하는 실습 코드로 AWS Solutions Architect을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
AWS Solutions Architect을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 AWS Solutions Architect은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“RDS 보안: 암호화 및 파라미터 그룹” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 AWS Solutions Architect 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 AWS Solutions Architect 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- RDS 엔진 및 인스턴스 클래스
- 다중 AZ 및 자동 백업
- 읽기 확장을 위한 읽기 전용 복제본
- RDS 보안: 암호화 및 파라미터 그룹