설명
IAM 데이터베이스 인증을 사용하면 고정 비밀번호 대신 IAM 토큰으로 지원되는 RDS 데이터베이스에 연결할 수 있습니다. 이 기능이 꺼져 있어도 일반 데이터베이스 인증은 사용할 수 있으므로, 인증이 없거나 데이터베이스가 공개되었다는 의미는 아닙니다.
IAM으로 연결 권한을 관리하려는 환경에서는 지원되는 엔진과 버전에서 이 기능을 활성화하고 클라이언트 접속 방식도 함께 구성하세요.
잠재적 영향
- 애플리케이션에 장기 비밀번호를 분산 저장하면 유출과 교체 누락 위험이 커질 수 있습니다.
- IAM 기반 연결 권한 관리를 적용하지 못해 데이터베이스 계정과 자격 증명을 별도로 관리해야 할 수 있습니다.
해결 방법
- 엔진·버전·리전의 지원 여부와 클라이언트 호환성을 확인하고
iam_database_authentication_enabled = true를 설정하세요. - IAM 인증을 사용하는 DB 사용자와 필요한
rds-db:connect권한을 구성하고 TLS 연결에서 인증 토큰을 사용하세요. - 각 계정의 기존 인증 방식과 접속 영향을 확인하고 불필요한 비밀번호 사용을 줄이세요. 이 설정만으로 DB 사용자가 생성되거나 기존 비밀번호가 폐기되지는 않습니다.
예시
같은 MySQL 인스턴스의 인증 설정을 비교하는 발췌입니다. 버전과 인스턴스 클래스의 지원 여부를 확인하고 네트워크·DB 사용자·IAM 권한을 별도로 구성하세요. db_password는 안전하게 공급하고 비밀번호가 저장되는 Terraform 상태의 접근도 제한해야 합니다.
변경 전
hcl
resource "aws_db_instance" "example" {
allocated_storage = 20
storage_type = "gp2"
engine = "mysql"
engine_version = "8.0"
instance_class = "db.t2.micro"
db_name = "mydb"
username = "foo"
password = var.db_password
iam_database_authentication_enabled = false
}
IAM 토큰 인증은 비활성화되어 있습니다. 데이터베이스 비밀번호 인증이 없다는 뜻은 아닙니다.
변경 후
hcl
resource "aws_db_instance" "example" {
allocated_storage = 20
storage_type = "gp2"
engine = "mysql"
engine_version = "8.0"
instance_class = "db.t2.micro"
db_name = "mydb"
username = "foo"
password = var.db_password
iam_database_authentication_enabled = true
}
IAM 인증 기능을 활성화합니다. 실제 접속에는 DB 사용자, IAM 정책과 토큰을 사용하는 클라이언트 설정이 필요합니다.