公開アクセスが有効な RDS インスタンス

RDS の公開アクセス設定を確認し、省略時の既定値と実際の接続に必要なネットワーク条件を区別します。

説明

RDS インスタンスで publicly_accessible: true を設定すると公開アクセスが有効になり、エンドポイントは VPC の外部でパブリック IP アドレスに解決されます。実際の接続にはネットワーク経路とセキュリティグループの許可も必要で、データベースの認証は別に行われます。公開アクセスの設定だけで、誰でもデータにアクセスできると判断しないでください。

publicly_accessible を省略した場合の AWS API の既定値は、エンジンとサブネットグループの指定によって変わります。省略を false と同じ意味で扱わず、稼働中のインスタンスの設定も確認してください。

想定される影響

  • ネットワークとセキュリティグループが外部接続を許可していると、データベースに望まない接続を試みられる可能性があります。
  • 認証やデータベースの権限にも問題があれば、不正なデータアクセスにつながる可能性があります。
  • 値の省略を非公開設定だと思い込むと、稼働中のインスタンスで公開アクセスが有効になっていても見落とすおそれがあります。

対処方法

  • 内部専用のデータベースには publicly_accessible: false を明示し、アプリケーションと管理者が利用するプライベートな接続経路を用意してください。
  • サブネットのルーティングとセキュリティグループを必要な接続に制限してください。このフラグを無効にしても、インスタンスが別のサブネットへ移動したり、他のすべてのアクセス経路が遮断されたりするわけではありません。
  • 変更が適用されるタイミングと接続への影響を確認し、適用後は実際の設定とアプリケーションの正常な接続を確認してください。

例

以下の構成例は、publicly_accessible の値の違いを示します。エンジンや他のプロパティも異なるため、変更後の例全体を既存データベースへの移行手順として使わないでください。インスタンスタイプ、モジュールのバージョン、変数、クラスターなどの必要なリソースは別途確認してください。

変更前

yaml
- name: create public db instance
  community.aws.rds_instance:
    id: test-encrypted-db
    state: present
    engine: mariadb
    storage_encrypted: true
    db_instance_class: db.t2.medium
    username: "{{ username }}"
    password: "{{ password }}"
    allocated_storage: "{{ allocated_storage }}"
    publicly_accessible: true

変更後

yaml
- name: create private db instance
  community.aws.rds_instance:
    engine: aurora
    db_instance_identifier: ansible-test-aurora-db-instance
    instance_type: db.t2.small
    password: "{{ password }}"
    username: "{{ username }}"
    cluster_id: ansible-test-cluster
    publicly_accessible: false

補足:

  • 変更前: publicly_accessible: true で公開アクセスを有効にしています。storage_encrypted: true は保存データの暗号化設定であり、ネットワークアクセスの制限を代替するものではありません。
  • 変更後: publicly_accessible: false で公開アクセスを無効にしています。プライベートネットワークからの接続や他のセキュリティ設定は別途確認が必要です。

参考資料