-
Spring Boot와 함께하는 AWS RDS IAM Auth 활용법(1)Dev&Ops/DevOps 2025. 11. 16. 13:20
안녕하세요!
AWS Community Builder이자 DevOps Engineer인 zerone-code입니다.
구독자 여러분들은 서비스의 단위인 Application에서 어떻게 DB에 접근하고 계시나요?
AWS에서는 Password 기반 접근과 IAM 기반 접근, Kerberos 기반 접근을 지원하고 있습니다.아마 대부분 Password 기반 접근을 사용하실거라고 생각이 되는데요.
이번 블로그에서는 IAM Role 기반 접근 하는 방식에 대해서 설명하고, 다음 블로그에서는 Springboot에서 이 방법을 적용한 코드 수준의 적용법을 알아보도록 하겠습니다.
궁금한 부분은 댓글로 남겨주시면 아는 만큼 성심성의껏 답변해 드리도록 하겠습니다.
잘 읽으셨다면 많은 공감과 구독 부탁드립니다!
AWS를 쓰다 보면 한 번쯤 이런 고민을 해봤을 겁니다.
“DB 비밀번호를 어디에 저장하지?”
“Lambda에서 비밀번호 노출 안 되게 관리하려면 어떻게 하지?”이럴 때 딱 등장하는 게 바로 IAM 기반 인증 (IAM Database Authentication) 입니다.
1️⃣ IAM Auth란?
간단히 말해서 RDS에 접속할 때 비밀번호 대신 IAM Role을 통해 받은 임시 자격 증명을 사용하는 방식입니다.
즉, AWS IAM Role이 “DB 로그인 권한 발급기” 역할을 하는 거죠.- ✅ 비밀번호를 코드나 환경 변수에 저장할 필요 없음
- ✅ 15분짜리 임시 토큰으로 로그인 → 보안성 강화
- ✅ IAM Role 기반 접근 제어 → 누가, 언제, 어떤 DB에 접속했는지 추적 가능
2️⃣ 작동 원리: IAM이 DB 로그인도 대신한다
RDS IAM 인증의 흐름은 다음과 같습니다.
[1] IAM 사용자 또는 Role에 RDS 접속 권한 부여 ↓ [2] AWS SDK / CLI를 통해 Auth Token 생성 (15분 유효) ↓ [3] 클라이언트가 해당 토큰을 비밀번호처럼 사용해 RDS 접속 ↓ [4] RDS는 AWS IAM에 토큰을 검증 요청 → 유효하면 로그인 성공
3️⃣ 기본 설정 절차
IAM Auth를 활성화하기 위해서는 다음 4단계를 따라가면 됩니다.
🧩 1. RDS 인스턴스에서 IAM 인증 활성화
RDS 콘솔 → Modify DB instance → IAM DB authentication 옵션을 Enable로 변경 → Apply changes.

🧩 2. DB 사용자에 IAM 인증 플러그인 설정
MySQL 기준으로:
CREATE USER 'testuser'@'%' IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS'; GRANT ALL PRIVILEGES ON test.* TO 'testuser'@'%';PostgreSQL 기준으로:
CREATE USER testuser; GRANT rds_iam TO testuser;🧩 3. IAM 정책 추가
먼저 클러스터에 설정된 Resource ID를 확인해야 합니다. 해당 Resource ID와 username을 조합으로 IAM policy에 권한을 부여하게 됩니다.

위에서 확인한 Resrouce ID와 username을 조합해서 dbuser 뒤에 추가해줍니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "rds-db:connect", "Resource": "arn:aws:rds-db:ap-northeast-2:123456789012:dbuser:cluster-DM7O*****6OQ/mydbuser" } ] }🧩 4. Auth Token 생성 및 DB 접근
CLI를 통해 Token을 발급받아야하는데, generate-db-auth-token은 15분간 유효한 토큰입니다.
MySQL 예시:
RDSHOST="mysqldb.123456789012.ap-northeast-2.rds.amazonaws.com" TOKEN="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 3306 --region ap-northeast-2 --username testuser )" mysql -h $RDSHOST \ -P 3306 \ -u testuser \ -p $TOKEN \ --enable-cleartext-pluginPostgeSQL 예시:
export RDSHOST="rdspostgres.123456789012.ap-northeast-2.rds.amazonaws.com" export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --region ap-northeast-2 --username testuser )" psql "host=$RDSHOST port=5432 dbname=DBName user=testuser password=$PGPASSWORD"
4️⃣ 아키텍처 다이어그램
다음은 AWS RDS IAM Auth의 전형적인 구성입니다.
+--------------------+ | AWS IAM | |--------------------| | rds-db:connect | | STS Token (15min) | +--------------------+ ▲ | (3) Validate Token| | +--------------------------------------+ | AWS RDS (MySQL/Postgres) | +--------------------------------------+ ▲ ▲ | (2) Auth Token | | | +-------------------+ +-------------------+ | Lambda / EC2 / | | Local Developer | | ECS Task / App | | Environment | +-------------------+ +-------------------+ │ │ (1) Assume Role / Generate Token ▼ +-------------------+ | AWS SDK or CLI | +-------------------+요약 흐름
- 애플리케이션이 IAM Role을 이용해 토큰 발급 요청
- AWS RDS Auth Token 생성 (15분 유효)
- 애플리케이션이 이 토큰으로 RDS 로그인
- RDS가 AWS IAM에 토큰 검증 → OK 시 접속 허용
5️⃣ 실제 사용 예시: Lambda → RDS MySQL
AWS Lambda 함수에서 IAM 인증을 활용할 때는 아래처럼 작성합니다.
import pymysql import boto3 import os rds_host = os.environ['RDS_HOST'] rds_user = os.environ['RDS_USER'] rds_port = 3306 region = 'ap-northeast-2' # Generate Auth Token token = boto3.client('rds').generate_db_auth_token( DBHostname=rds_host, Port=rds_port, DBUsername=rds_user, Region=region ) # Connect to RDS conn = pymysql.connect( host=rds_host, user=rds_user, password=token, port=rds_port, ssl={'ssl': {}} )이렇게 하면 비밀번호 노출 없이 완전한 IAM 기반 인증 흐름이 완성됩니다.
위와 같은 방식으로 하면 Password를 IAM 기반 인증을 통해서 별도로 관리하지 않아도 됩니다.
하지만, 위 방식도 제약사항이 존재하는데요, AWS 공식 문서에는 아래와 같은 제약사항을 두고 있습니다.

저희 팀에서도 요즘 위 방식을 통해서 기존에 Password 기반의 인증방식에서 IAM 인증 방식으로 하나씩 마이그레이션을 하고 있는데요,
위 제약사항 중에 걸렸던 부분은 사용자 지정 Route53 DNS 레코드을 사용할 수 없다는 제약사항 외에는 이슈가 없었습니다.
좀 더 운영하면서 어떤 문제가 생기면 또 공유드리도록 하겠습니다.
다음 블로그에서는 Springboot sample 코드를 통해 RDS IAM Auth를 사용하는 방법을 공유해보도록 하겠습니다.
궁금한 부분은 댓글로 남겨주시면 아는 만큼 성심성의껏 답변해 드리도록 하겠습니다.
잘 읽으셨다면 많은 공감과 구독 부탁드립니다!
Reference
https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html
MariaDB, MySQL 및 PostgreSQL IAM 데이터베이스 인증 - Amazon Relational Database Service
MariaDB, MySQL 및 PostgreSQL IAM 데이터베이스 인증 AWS Identity and Access Management(IAM) 데이터베이스 인증을 사용하여 DB 인스턴스에 인증할 수 있습니다. IAM 데이터베이스 인증은 MariaDB, MySQL, PostgreSQL과 함
docs.aws.amazon.com
'Dev&Ops > DevOps' 카테고리의 다른 글
Terraform CLI 버전 관리 어떻게 하고 있나요? (0) 2025.03.23 Nginx Proxy Server가 이상하다! (22) 2024.06.22 Karpenter와 Empty Pod을 활용한 스케일링(2) (0) 2023.10.24 [Infra] Karpenter와 Empty Pod을 활용한 스케일링(1) (0) 2023.07.13 [Infra] EKS 환경에서 Springboot에 IRSA 적용해보기 (0) 2023.06.11