서브넷 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이 사설 대역이라고 해서 인터넷 경로가 차단되는 것은 아닙니다.

참조