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

対応する RDS インスタンスで IAM 認証を使い、長期のデータベースパスワードへの依存を減らします。

説明

IAM データベース認証を使わない場合、アプリケーションは別途管理するデータベース認証情報に依存することがあります。対応する RDS for MariaDB、MySQL、PostgreSQL では IAM 認証トークンで接続できます。トークンは新しい接続の認証に 15 分間使えますが、確立済みセッションの存続時間を制限するものではありません。

想定される影響

長期パスワードを複数のシステムに保存・共有すると、漏えいやアクセス権の取り消し漏れのリスクが高まることがあります。

対処方法

エンジン、バージョン、アプリケーションの対応を確認し、EnableIAMDatabaseAuthentication: true を設定してください。IAM 認証用のデータベースユーザー、必要な rds-db:connect 権限、TLS 接続も構成してください。データベース内の権限と監査ログは別途管理してください。Aurora ではインスタンスではなくクラスターで IAM 認証を設定してください。

例

暗号化された RDS MySQL を複製元とするリードレプリカの抜粋です。複製元の識別子とリージョン、対応するインスタンスクラスを指定し、省略した MyKey の定義で利用可能な KMS キーを用意してください。

変更前

yaml
AWSTemplateFormatVersion: 2010-09-09
Description: RDS Storage Encrypted
Parameters:
  SourceDBInstanceIdentifier:
    Type: String
  DBInstanceType:
    Type: String
  SourceRegion:
    Type: String
Resources:
  MyDBSmall:
    Type: "AWS::RDS::DBInstance"
    Properties:
      DBInstanceClass: !Ref DBInstanceType
      SourceDBInstanceIdentifier: !Ref SourceDBInstanceIdentifier
      SourceRegion: !Ref SourceRegion
      DeletionProtection: false
      KmsKeyId: !Ref MyKey
      EnableIAMDatabaseAuthentication: false

レプリカの IAM データベース認証を有効にしていません。

変更後

yaml
AWSTemplateFormatVersion: 2010-09-09
Description: RDS Storage Encrypted
Parameters:
  SourceDBInstanceIdentifier:
    Type: String
  DBInstanceType:
    Type: String
  SourceRegion:
    Type: String
Resources:
  MyDBSmall:
    Type: "AWS::RDS::DBInstance"
    Properties:
      DBInstanceClass: !Ref DBInstanceType
      SourceDBInstanceIdentifier: !Ref SourceDBInstanceIdentifier
      SourceRegion: !Ref SourceRegion
      DeletionProtection: false
      KmsKeyId: !Ref MyKey
      EnableIAMDatabaseAuthentication: true

レプリカの IAM 認証を有効にします。アプリケーションでのトークン生成と実際のデータベース接続も確認してください。

参考資料