説明
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で公開アクセスを無効にしています。プライベートネットワークからの接続や他のセキュリティ設定は別途確認が必要です。