Cloud/AWS

RDS IAM Authentication

ISFJ 개발자의 이야기 2026. 2. 15. 04:33

이번 블로그에서는 RDS IAM Authentication을 구성하는 방법에 대해서 작성해보겠습니다.

 

IAM Authentication을 사용하는 이유

RDS Database에 접속할 때 암호를 사용해도 되지만, IAM 인증을 사용하기도 됩니다. IAM 인증에서는 RDS가 생성하는 인증 토큰을 사용하며 각 토큰의 수명은 15분입니다. SSL 또는 TLS를 사용하여 DB 인스턴스에 대한 연결을 암호화합니다. 즉 비밀번호 관리 필요성을 없애 보안을 강화하고, IAM 기반의 중앙집중식 권한 관리를 통해 운영 효율성을 높이며, 15분마다 만료되는 토큰을 사용하여 해킹 위협을 줄이기 위해 사용합니다.

 

구축 방안

우선 EC2에서 사용할 역할을 생성 및 권한을 부여해줘야합니다.

권한은 아래의 사진과 JSON을 참고하여 구성하면 됩니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "rds-db:connect"
            ],
            "Resource": [
                "arn:aws:rds-db:ap-northeast-2:<ACCOUNT_ID>:dbuser:*/*"
            ]
        }
    ]
}

아래의 사진과 같이 정책의 이름을 부여해주고 생성해줍니다.

EC2가 Bastion Server의 역할을 하기에 Admin 권한도 부여해주겠습니다.

다음으로 RDS에서 사용할 보안그룹을 아래의 사진을 참고하여 구성해줍니다.

다음으로 RDS의 서브넷 그룹을 생성해줍니다. 보안을 위해 Protected (Isolated) 서브넷을 선택해주겠습니다.

이제 RDS 생성 메뉴로 들어가 Standard create를 선택해주고 Aurora MySQL을 선택해주겠습니다.

운영을 할 목적이 아니기에 Dev/Test를 선택해주고 Cluster의 이름 및 설정을 아래의 사진을 참고하여 구성해줍니다.

인스턴스 타입은 t3.medium을 선택 해주겠습니다.

다음으로 VPC를 선택해주고 생성했던 서브넷 그룹과 보안그룹을 선택해줍니다.

다음으로 오늘의 주제인 IAM Authentication을 활성화 해줍니다.

다음으로 초기 데이터베이스 이름을 지정 및 RDS를 생성해줍니다.

다음으로 EC2 생성 메뉴에서 IAM Instanc Profile을 생성해줬던 역할을 선택 및 인스턴스를 생성해줍니다. 

다음으로 생성한 EC2에 접속해 아래의 명령어를 이용해 MySQL을 설치해줍니다.

sudo dnf update -y
sudo dnf install -y mariadb105

 

다음으로 MySQL 설치를 완료 하였다면 아래의 명령어를 이용해 RDS의 Endpoint를 불러옵니다.

RDS_EP=$(aws rds describe-db-cluster-endpoints --query "DBClusterEndpoints[?EndpointType=='WRITER'].Endpoint" --output text)

 

다음으로 아래의 명령어로 RDS의 접근 해줍니다. (비밀번호에 맞게 작성이 필요합니다.)

mysql -h $RDS_EP -u admin -P 3306 -pSkill53##

 

다음으로 아래의 사진과 같이 SSL 접속 허용 및 IAM 인증 접속을 허용하는 'rds_iam'이라는 이름의 User를 생성해줍니다.

CREATE USER rds_iam IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS';
ALTER USER 'rds_iam'@'%' REQUIRE SSL;

 

다음으로 exit를 통해 RDS에서 빠져 나온 뒤 아래의 명령어를 이용해 인증토큰을 발급해줍니다.

RDSHOST=$(aws rds describe-db-instances --query "DBInstances[?DBInstanceStatus=='available'].Endpoint.Address" --output text)
TOKEN="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 3306 --username rds_iam)"

 

마지막으로 아래의 명령어를 이용해 SSL 접속을 위해 모든 리전에서 작동하는 루트 인증서를 다운로드해줍니다.

wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem

 

Result

아래의 사진과 같이 IAM 인증을 사용해 RDS에 접속해본다면 정상적으로 접근되는 모습을 확인 할 수 있습니다.

mysql --host=$RDSHOST --ssl-ca=./global-bundle.pem --enable-cleartext-plugin --user=rds_iam --password=$TOKEN

 

이것으로 RDS IAM Authentication 구축 글을 마치겠습니다. 감사합니다!

'Cloud > AWS' 카테고리의 다른 글

RDS Healthcheck Disaster Recovery  (5) 2026.02.11
AWS EC2 Fail2ban  (0) 2026.02.11
Route53 DNSSEC  (0) 2026.01.05
Route53 DNS Query Logging  (0) 2026.01.03
EC2 Connect Endpoint  (0) 2025.12.31