RDS 인스턴스의 IAM 데이터베이스 인증 미사용

지원되는 RDS 인스턴스에서 IAM 토큰 인증을 활용해 애플리케이션의 장기 비밀번호 의존도를 줄이세요.

설명

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 정책과 토큰을 사용하는 클라이언트 설정이 필요합니다.

참조