GCP 기본 방화벽 규칙의 접근 범위 점검

기본 방화벽 규칙의 출발지, 대상과 허용 포트를 확인하고 업무에 필요한 범위로 제한하세요.

설명

기본 네트워크의 방화벽 규칙은 편리한 초기 구성을 제공하지만 서비스에 필요한 범위보다 넓을 수 있습니다. 예를 들어 기본 SSH·RDP 규칙은 전체 IPv4를 출발지로 허용합니다. 규칙 이름만으로 접근 권한이 결정되지는 않으므로 실제 출발지, 대상, 프로토콜·포트와 우선순위를 확인해야 합니다.

잠재적 영향

  • 넓은 인바운드 허용과 외부 연결 경로가 함께 있으면 관리 서비스가 불필요한 연결 시도를 받을 수 있습니다.
  • 내부 VM 사이의 과도한 허용도 침해된 VM에서 다른 서비스로 접근할 가능성을 높입니다.

해결 방법

  1. 각 허용 규칙의 필요성을 확인하고 관리 출발지, 대상 VM과 포트를 최소화하세요. 단순히 이름을 변경하는 것으로 접근 범위가 줄어들지는 않습니다.
  2. 내부 VM 사이의 통신에는 적절한 출발지·대상 태그 또는 서비스 계정을 사용하고, 태그와 계정을 변경할 수 있는 권한도 제한하세요.
  3. 기존의 넓은 허용 규칙을 제거하거나 수정한 뒤 유효한 방화벽 정책과 실제 연결을 확인하세요. 다른 이름이나 네트워크의 규칙을 추가해도 이전 규칙은 제거되지 않습니다.

예시

실제 네트워크·프로젝트와 인증 정보를 준비해야 하는 발췌입니다.

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를 허용합니다. 두 예시는 규칙 이름과 네트워크 입력이 다르므로 기존 규칙을 대체하는 작업은 별도로 해야 합니다.

참조