설명
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로 공개 접근을 비활성화합니다. 사설 네트워크를 통한 연결과 다른 보안 설정은 별도로 점검해야 합니다.