RDS クラスターの IAM データベース認証が未使用

対応するデータベースクラスターで IAM トークン認証を使い、接続権限を管理してください。

説明

IAM データベース認証に対応するクラスターでは、固定パスワードの代わりに IAM 認証トークンで接続できます。アプリケーションにパスワードを直接保存する負担を減らし、IAM ポリシーで接続権限を管理する場合に役立ちます。

IAM 認証が無効なだけで、データベースが認証なしに公開されているとは限りません。通常の DB 認証は利用でき、IAM 認証の導入は対応するエンジン・バージョンと運用要件に合わせて判断する必要があります。

想定される影響

  • 長期パスワードが複数のアプリケーションに残ると、漏えいやローテーション漏れのリスクが高まる可能性があります。
  • IAM による接続権限の管理が必要な環境で、アカウントと認証情報を別途管理する負担が生じます。

対処方法

  • エンジン・バージョン・リージョンとインスタンスクラスの対応状況を確認し、iam_database_authentication_enabled = true を設定してください。
  • IAM 認証用の DB ユーザー、必要な rds-db:connect 権限、TLS によるトークン接続を構成してください。各ユーザーのデータ操作権限は別途制限してください。
  • アプリケーションの接続を検証してから既存の認証方法を整理してください。IAM 認証用に構成したユーザーは、エンジンによってパスワードログインができなくなるため、先にアカウントごとの影響を確認してください。

例

同じ Aurora MySQL クラスターの認証設定を比較します。例のバージョンとアベイラビリティーゾーンが環境に合うことを確認し、DB インスタンス、ネットワーク、ユーザー権限は別途構成してください。db_password は安全に渡し、Terraform 状態に保存される値も保護する必要があります。

変更前

hcl
resource "aws_rds_cluster" "example" {
  cluster_identifier = "example-cluster"

  engine         = "aurora-mysql"
  engine_version = "8.0.mysql_aurora.3.05.2"

  master_username = "username"
  master_password = var.db_password

  iam_database_authentication_enabled = false

  availability_zones = ["us-east-1a", "us-east-1b", "us-east-1c"]

  skip_final_snapshot = true
}

クラスターの IAM データベース認証は無効です。別途 DB 認証とパスワード管理が必要です。

変更後

hcl
resource "aws_rds_cluster" "example" {
  cluster_identifier = "example-cluster"

  engine         = "aurora-mysql"
  engine_version = "8.0.mysql_aurora.3.05.2"

  master_username = "username"
  master_password = var.db_password

  iam_database_authentication_enabled = true

  availability_zones = ["us-east-1a", "us-east-1b", "us-east-1c"]

  skip_final_snapshot = true
}

IAM 認証を有効にしても、DB ユーザーやクライアントは自動的に移行されません。必要な権限と接続設定も適用してください。

参考資料