サブネットの CIDR に /0 を指定した RDS 構成

RDS のサブネットに有効なアドレス範囲を指定し、ルーティングと公開アクセス設定を合わせて確認します。

説明

RDS のサブネットグループに含まれるサブネットには、VPC の範囲内で有効なアドレスブロックを指定する必要があります。サブネットの cidr に 0.0.0.0/0、または ipv6_cidr に ::/0 を指定する構成は、AWS では有効ではありません。

AWS では、インターネットゲートウェイへの直接のルートを持つサブネットがパブリックサブネットです。プライベート CIDR を使っていても、このようなルートがあればパブリックサブネットになります。ルートの宛先としての /0 と、サブネット自体のアドレス範囲を区別して確認してください。

想定される影響

  • 無効な /0 のサブネット設定は、デプロイの失敗につながります。
  • プライベート CIDR だけでネットワークの分離を判断すると、実際のインターネット接続経路を見落とすおそれがあります。
  • ルーティング、公開アクセス設定、セキュリティグループがそろって外部接続を許可していると、RDS に対する望まない接続試行が発生する可能性があります。

対処方法

  • VPC の範囲内で、有効かつ重複しない CIDR ブロックをサブネットに指定してください。CIDR の変更だけでは、サブネットは非公開になりません。
  • 内部専用のデータベースには、インターネットゲートウェイへの直接のルートがないサブネットを選び、サブネットグループの実際の構成を確認してください。
  • publicly_accessible、セキュリティグループ、アプリケーションの接続経路を合わせて確認してください。アベイラビリティーゾーンに関するサブネットグループの要件も、利用する RDS 構成に応じて確認してください。

例

以下はサブネットのアドレス設定を比較する抜粋であり、デプロイ用の構成ではありません。最初の例の /0 は有効なサブネット CIDR ではなく、どちらの例も二つ目のサブネット定義とルーティング設定を省略しています。古いモジュール名、リソース識別子、RDS の設定も利用環境に合わせて確認してください。

変更前

yaml
- name: create minimal aurora 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
    db_subnet_group_name: my_subnet_group

- name: Add or change a subnet group
  community.aws.rds_subnet_group:
    state: present
    name: my_subnet_group
    description: My Fancy Ex Parrot Subnet Group
    subnets:
      - "{{ subnet1.subnet.id }}"
      - "{{ subnet2.subnet.id }}"

- name: Create subnet for database servers
  amazon.aws.ec2_vpc_subnet:
    state: present
    vpc_id: vpc-123456
    cidr: 0.0.0.0/0
  register: subnet1

変更後

yaml
- name: create minimal aurora 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
    db_subnet_group_name: my_private_subnet_group

- name: add private subnet group
  community.aws.rds_subnet_group:
    state: present
    name: my_private_subnet_group
    description: private database subnets
    subnets:
      - "{{ subnet_private_a.subnet.id }}"
      - "{{ subnet_private_b.subnet.id }}"

- name: create private subnet
  amazon.aws.ec2_vpc_subnet:
    state: present
    vpc_id: vpc-123456
    cidr: 10.0.1.16/28
  register: subnet_private_a

補足:

  • 変更前: 0.0.0.0/0 はサブネットのアドレス範囲として使用できません。パブリックサブネットにも、有効な CIDR と適切なルーティングが必要です。
  • 変更後: サブネットのアドレス範囲を 10.0.1.16/28 に変更しています。この範囲が VPC 内にあり、ほかのサブネットと重複しないことを確認してください。名前に private が含まれることやプライベート CIDR を使うこと自体は、インターネットへの経路を遮断しません。

参考資料