설명
기본 네트워크의 방화벽 규칙은 편리한 초기 구성을 제공하지만 서비스에 필요한 범위보다 넓을 수 있습니다. 예를 들어 기본 SSH·RDP 규칙은 전체 IPv4를 출발지로 허용합니다. 규칙 이름만으로 접근 권한이 결정되지는 않으므로 실제 출발지, 대상, 프로토콜·포트와 우선순위를 확인해야 합니다.
잠재적 영향
- 넓은 인바운드 허용과 외부 연결 경로가 함께 있으면 관리 서비스가 불필요한 연결 시도를 받을 수 있습니다.
- 내부 VM 사이의 과도한 허용도 침해된 VM에서 다른 서비스로 접근할 가능성을 높입니다.
해결 방법
- 각 허용 규칙의 필요성을 확인하고 관리 출발지, 대상 VM과 포트를 최소화하세요. 단순히 이름을 변경하는 것으로 접근 범위가 줄어들지는 않습니다.
- 내부 VM 사이의 통신에는 적절한 출발지·대상 태그 또는 서비스 계정을 사용하고, 태그와 계정을 변경할 수 있는 권한도 제한하세요.
- 기존의 넓은 허용 규칙을 제거하거나 수정한 뒤 유효한 방화벽 정책과 실제 연결을 확인하세요. 다른 이름이나 네트워크의 규칙을 추가해도 이전 규칙은 제거되지 않습니다.
예시
실제 네트워크·프로젝트와 인증 정보를 준비해야 하는 발췌입니다.
google.cloud 1.14.0 모듈은 source_tags와 target_tags의 동시 입력을 거부합니다. 아래 태그 조합은 Compute Engine API의 허용 범위를 설명하며, 해당 모듈 버전에서 실행하려면 지원되는 출발지·대상 조합으로 조정해야 합니다.
변경 전
yaml
- name: create a firewall2
google.cloud.gcp_compute_firewall:
name: default
allowed:
- ip_protocol: tcp
ports:
- "22"
state: present
network: "{{ my_network2 }}"
이 인바운드 규칙은 출발지와 대상을 제한하지 않습니다. 출발지 기본값은 0.0.0.0/0이며 지정한 네트워크의 VM에 TCP 22를 허용합니다. 실제 외부 접속에는 별도의 연결 경로도 필요합니다.
변경 후
yaml
- name: create a firewall
google.cloud.gcp_compute_firewall:
name: test-object
allowed:
- ip_protocol: tcp
ports:
- "22"
target_tags:
- test-ssh-server
- staging-ssh-server
source_tags:
- test-ssh-clients
project: "{{ project_id }}"
auth_kind: serviceaccount
service_account_file: "/tmp/auth.pem"
state: present
network: "{{ my_network }}"
같은 VPC에서 지정한 출발지 태그를 가진 VM과 대상 태그를 가진 VM 사이의 SSH를 허용합니다. 두 예시는 규칙 이름과 네트워크 입력이 다르므로 기존 규칙을 대체하는 작업은 별도로 해야 합니다.