방화벽 규칙 사용

이 페이지에서는 방화벽 규칙을 다루기 위한 명령어를 설명하고 몇 가지 사용 예를 제공합니다. 방화벽 규칙에 대해 자세히 알아보려면 방화벽 규칙 개요를 참조하세요.

방화벽 규칙 만들기

GCP 방화벽 규칙에 익숙하지 않은 경우 방화벽 규칙 구성요소를 살펴보세요. 방화벽 규칙은 네트워크 수준에서 정의되며 방화벽이 만들어진 네트워크에만 적용됩니다. 각 방화벽 규칙의 이름은 프로젝트에서 고유해야 합니다.

콘솔

  1. Google Cloud Platform Console의 방화벽 규칙 페이지로 이동합니다.
    방화벽 규칙 페이지로 이동
  2. 방화벽 규칙 만들기를 클릭합니다.
  3. 방화벽 규칙의 이름을 입력합니다.
    이 이름은 프로젝트에서 고유해야 합니다.
  4. 방화벽 규칙이 구현되는 네트워크를 지정합니다.
  5. 규칙의 우선순위를 지정합니다.
    숫자가 작을수록 우선순위가 높아집니다.
  6. 트래픽 방향에서 수신 또는 송신을 선택합니다.
  7. 일치 시 작업에서 허용 또는 거부를 선택합니다.
  8. 규칙의 대상을 지정합니다.
    • 네트워크의 모든 인스턴스에 규칙을 적용하려면 All instances in the network를 선택합니다.
    • 네트워크(대상) 태그별로 선택한 인스턴스에 규칙을 적용하려면 Specified target tags를 선택한 다음 대상 태그 필드에 규칙을 적용해야 하는 태그를 입력합니다.
    • 연결된 서비스 계정별로 선택한 인스턴스에 규칙을 적용하려면 Specified service account를 선택하고 서비스 계정 범위 아래에서 서비스 계정이 현재 프로젝트에 있는지 아니면 다른 프로젝트에 있는지를 지정하고 대상 서비스 계정 필드에서 서비스 계정 이름을 선택하거나 입력합니다.
  9. 수신 규칙의 경우 소스 필터를 지정합니다.
    • IP ranges를 선택하고 소스 IP 범위 필드에 CIDR 블록을 입력하여 수신 트래픽의 소스를 IP 주소 범위별로 정의합니다. 모든 네트워크의 소스에 0.0.0.0/0을 사용합니다.
    • Subnets를 선택한 다음 서브넷 팝업 버튼에서 필요한 항목에 표시하여 수신 트래픽의 소스를 서브넷 이름별로 정의합니다.
    • 네트워크 태그로 소스를 제한하려면 Source tags를 선택한 다음 소스 태그 필드에 네트워크 태그를 입력합니다. 소스 태그의 개수에 대한 제한은 VPC 할당량 및 제한을 참조하세요. 소스 태그별 필터링은 대상이 서비스 계정으로 지정되지 않은 경우에만 사용할 수 있습니다. 자세한 내용은 서비스 계정별 필터링 및 네트워크 태그별 필터링을 참조하세요.
    • 서비스 계정별로 소스를 제한하려면 Service account를 선택하고 서비스 계정 범위 아래에서 서비스 계정이 현재 프로젝트에 있는지 아니면 다른 프로젝트에 있는지를 지정하고, 소스 서비스 계정 필드에서 서비스 계정 이름을 선택하거나 입력합니다. 소스 서비스 계정별 필터링은 대상이 네트워크 태그로 지정되지 않은 경우에만 사용할 수 있습니다. 자세한 내용은 서비스 계정별 필터링 및 네트워크 태그별 필터링을 참조하세요.
    • 원하는 경우 보조 소스 필터를 지정합니다. 보조 소스 필터는 기본 소스 필터와 동일한 필터 기준을 사용할 수 없습니다.
  10. 송신 규칙의 경우 대상 필터를 지정합니다.
    • IP ranges를 선택하고 대상 IP 범위 필드에 CIDR 블록을 입력하여 발신 트래픽의 대상을 IP 주소 범위별로 정의합니다. 모든 곳을 나타내려면 0.0.0.0/0을 사용합니다.
    • Subnets를 선택한 다음 서브넷 팝업 버튼에서 필요한 항목에 표시하여 발신 트래픽의 대상을 서브넷 이름별로 정의합니다.
  11. 규칙을 적용할 프로토콜 및 포트를 정의합니다.

    • 규칙을 모든 프로토콜 및 포트에 적용하려면 작업에 따라 Allow all 또는 Deny all을 선택합니다.

    • 특정 프로토콜 및 포트를 정의합니다.

      • TCP 프로토콜과 포트를 포함하려면 tcp를 선택합니다. all 또는 쉼표로 구분된 포트 목록(예: 20-22, 80, 8080)을 입력합니다.
      • UDP 프로토콜과 포트를 포함하려면 udp를 선택합니다. all 또는 쉼표로 구분된 포트 목록(예: 67-69, 123)을 입력합니다.
      • 기타 프로토콜을 선택하여 icmp 또는 sctp와 같은 프로토콜을 포함합니다.
  12. (선택사항) 방화벽 규칙을 만들고, 적용 상태를 사용 중지됨으로 설정하여 규칙을 시행하지 않을 수 있습니다. 규칙 사용 중지를 클릭한 다음 사용 중지됨을 선택합니다.

  13. (선택사항) 방화벽 규칙 로깅을 사용할 수 있습니다.

    • 로그 > 사용을 클릭합니다.
    • 사용 설정을 클릭합니다.
  14. 만들기를 클릭합니다.

gcloud

방화벽 규칙을 만들기 위한 gcloud 명령어:

gcloud compute firewall-rules create [NAME] \
    [--network [NETWORK]; default=”default”] \
    [--priority [PRIORITY];default=1000] \
    [--direction (ingress|egress|in|out); default=”ingress”] \
    [--action (deny | allow )] \
    [--target-tags [TAG][,TAG,...]] \
    [--target-service-accounts=[IAM Service Account] \
    [--source-ranges [CIDR-RANGE][,CIDR-RANGE…]] \
    [--source-tags [TAG][,TAG,...]] \
    [--source-service-accounts=[IAM Service Account] \
    [--destination-ranges [CIDR-RANGE][,CIDR-RANGE...]] \
    [--rules ([PROTOCOL][:PORT[-PORT]],[PROTOCOL[:PORT[-PORT]],...]] | all ) \
    [--disabled | --no-disabled]
    [--enable-logging | --no-enable-logging] (requires `gcloud beta`)

매개변수를 다음과 같이 사용합니다. 각 항목에 대한 자세한 내용은 SDK 참조 문서에서 볼 수 있습니다.

  • --network 규칙이 만들어지는 네트워크. 생략할 경우 default 네트워크에 규칙이 만들어집니다. 기본 네트워크가 없거나 특정 네트워크에 규칙을 만들려는 경우 이 필드를 사용해야 합니다.
  • --priority 규칙의 우선순위를 나타내는 숫자 값. 숫자가 작을수록 우선순위가 높아집니다.
  • --direction 트래픽의 방향(ingress 또는 egress).
  • --action 일치 시 작업(allow 또는 deny). --rules 플래그와 함께 사용해야 합니다.
  • 세 가지 방법 중 하나로 대상을 지정합니다.
    • 네트워크의 모든 대상에 규칙이 적용되어야 하는 경우 --target-tags--target-service-accounts를 생략합니다.
    • --target-tags 네트워크 태그별로 대상을 정의하려면 이 플래그를 사용합니다.
    • --target-service-accounts 연결된 서비스 계정별로 대상을 정의하려면 이 플래그를 사용합니다.
  • 수신 규칙의 경우 소스를 지정합니다.
    • 수신 소스가 모든 곳(0.0.0.0/0)이어야 하는 경우 --source-ranges, source-tags, --source-service-accounts를 생략합니다.
    • --source-ranges 소스 IP 주소 범위를 CIDR 형식으로 지정하려면 이 플래그를 사용합니다.
    • --source-tags 네트워크 태그별로 소스 인스턴스를 지정하려면 이 플래그를 사용합니다. 소스 태그별 필터링은 대상이 서비스 계정으로 지정되지 않은 경우에만 사용할 수 있습니다. 자세한 내용은 서비스 계정별 필터링 및 네트워크 태그별 필터링을 참조하세요.
    • --source-ranges--source-tags함께 사용할 수 있습니다. 둘 다 지정할 경우 유효한 소스 집합은 소스 범위 IP 주소와 네트워크 태그로 식별된 인스턴스의 합집합입니다. 태그가 지정된 인스턴스에 소스 범위의 IP가 없더라도 마찬가지입니다.
    • --source-service-accounts 사용하는 서비스 계정별로 인스턴스를 지정하려면 이 플래그를 사용합니다. 소스 서비스 계정별 필터링은 대상이 네트워크 태그로 지정되지 않은 경우에만 사용할 수 있습니다. 자세한 내용은 서비스 계정별 필터링 및 네트워크 태그별 필터링을 참조하세요.
  • 송신 규칙의 경우 대상을 지정합니다.
    • 송신 대상이 모든 곳(0.0.0.0/0)이어야 하는 경우 --destination-ranges를 생략합니다.
    • --destination-ranges 대상 IP 주소 범위를 CIDR 형식으로 지정하려면 이 플래그를 사용합니다.
  • --rules 규칙을 적용할 프로토콜 및 포트의 목록. 모든 프로토콜 및 포트에 규칙을 적용할 수 있도록 하려면 all을 사용합니다. --action 플래그가 필요합니다.
  • 기본적으로 방화벽 규칙은 자동으로 만들어지고 적용되지만 이 동작을 변경할 수 있습니다.
    • --disabled--no-disabled를 모두 생략하면 방화벽 규칙이 만들어지고 적용됩니다.
    • --disabled 방화벽 규칙을 만들되 적용하지 않으려면 이 플래그를 추가합니다. 방화벽 규칙을 업데이트해서 사용하도록 설정할 때까지 방화벽 규칙은 사용 중지된 상태로 유지됩니다.
    • --no-disabled 방화벽 규칙을 적용하려면 이 플래그를 추가합니다.
  • (베타) 규칙을 만들거나 업데이트할 때 방화벽 규칙 로깅을 사용 설정할 수 있습니다. 방화벽 규칙 로깅을 사용하면 방화벽 규칙의 영향을 감사, 확인, 분석할 수 있습니다. 자세한 내용은 방화벽 규칙 로깅을 참조하세요.

방화벽 규칙 업데이트

이름, 네트워크, 일치 시 작업, 트래픽 방향을 제외한 방화벽 규칙의 모든 구성요소를 수정할 수 있습니다.

이름, 네트워크, 작업, 방향 구성요소를 변경해야 하는 경우 규칙을 삭제하고 새 규칙을 생성해야 합니다.

콘솔

  1. Google Cloud Platform Console의 방화벽 규칙 페이지로 이동합니다.
    방화벽 규칙 페이지로 이동
  2. 수정하려는 방화벽 규칙을 클릭합니다.
  3. 수정을 클릭합니다.
  4. 편집 가능한 구성요소를 필요에 맞게 수정합니다.

    지정된 프로토콜 및 포트 필드에서 세미콜론으로 구분된 목록을 사용하여 여러 프로토콜을 지정합니다.

  5. 저장을 클릭합니다.

gcloud

방화벽 규칙을 업데이트하기 위한 gcloud 명령어:

gcloud compute firewall-rules update [NAME] \
    [--priority=[PRIORITY]] \
    [--description=[DESCRIPTION]] \
    [--target-tags=[[TAG],…]] \
    [--target-service-accounts=[IAM Service Account] \
    [--source-ranges=[[CIDR_RANGE],…]] \
    [--source-tags=[[TAG],…]] \
    [--source-service-accounts=[IAM Service Account] \
    [--destination-ranges=[CIDR_RANGE,…]] \
    [--rules=[[PROTOCOL][:PORT[-PORT]],…]] \
    [--disabled | --no-disabled]
    [--enable-logging | --no-enable-logging] (requires `gcloud beta`)

각 플래그에 대한 설명은 방화벽 규칙 만들기와 동일합니다. 각 항목에 대한 자세한 내용은 SDK 참조 문서에서 볼 수 있습니다.

VPC 네트워크의 방화벽 규칙 나열

콘솔

프로젝트에서 모든 네트워크의 모든 방화벽 규칙을 표시하려면 다음 안내를 따르세요.

특정 네트워크의 방화벽 규칙을 표시하려면 다음 안내를 따르세요.

  1. Google Cloud Platform Console의 VPC 네트워크 페이지로 이동합니다.
    VPC 네트워크 페이지로 이동
  2. VPC 네트워크의 이름을 클릭하여 세부정보 페이지로 이동합니다.
  3. 네트워크 세부정보 페이지에서 방화벽 규칙 탭을 클릭합니다.

gcloud

다음 명령어는 지정된 네트워크([NETWORK_NAME])의 정렬된 방화벽 규칙 목록을 생성합니다.

gcloud compute firewall-rules list --filter network=[NETWORK_NAME] \
    --sort-by priority \
    --format="table(
        name,
        network,
        direction,
        priority,
        sourceRanges.list():label=[SRC_RANGES],
        destinationRanges.list():label=[DEST_RANGES],
        allowed[].map().firewall_rule().list():label=ALLOW,
        denied[].map().firewall_rule().list():label=DENY,
        sourceTags.list():label=[SRC_TAGS],
        targetTags.list():label=[TARGET_TAGS]
        )"

VM 인스턴스의 네트워크 인터페이스에 대한 방화벽 규칙 나열

각 네트워크 인터페이스에 대해 GCP Console은 인터페이스에 적용되는 모든 방화벽 규칙과 실제로 인터페이스에서 사용 중인 방화벽 규칙을 나열합니다. 방화벽 규칙은 다른 규칙을 마스킹할 수 있으므로 인터페이스에 적용되는 일부 규칙이 실제로 인터페이스에서 사용되지 않을 수 있습니다.

방화벽 규칙은 규칙의 대상 매개변수를 통해 VM 인스턴스에 연결되고 적용됩니다. 적용되는 모든 규칙을 보고 특정 규칙이 인터페이스에 적용되는지 여부를 확인할 수 있습니다.

VM 인스턴스의 특정 네트워크 인터페이스에 적용되는 모든 방화벽 규칙을 보려면 다음 단계를 따르세요.

  1. Google Cloud Platform Console에서 VM 인스턴스 페이지로 이동하여 보려는 인스턴스를 찾습니다.
    VM 인스턴스 페이지로 이동
  2. 인스턴스의 추가 작업 메뉴()에서 네트워크 세부정보 보기를 선택합니다.
  3. 인스턴스에 여러 네트워크 인터페이스가 있는 경우 네트워크 인터페이스 세부정보 섹션에서 보려는 네트워크 인터페이스를 선택합니다.
  4. 방화벽 규칙 탭을 클릭하여 규칙 이름에 따라 정렬된 네트워크 인터페이스에 적용되는 모든 규칙을 확인합니다.

네트워크 인터페이스에 적용되는 규칙 중 일부는 사용되지 않을 수 있습니다. 더 구체적인 범위 또는 우선순위가 더 높은 규칙이 일부 규칙을 재정의할 수 있습니다. 사용 중인 규칙을 보고 인스턴스에 대해 열려 있거나 닫혀 있는 IP 범위, 프로토콜, 포트를 빠르게 확인할 수 있습니다.

VM 인스턴스의 특정 네트워크 인터페이스에서 사용 중인 규칙을 보려면 다음 단계를 따르세요.

  1. Google Cloud Platform Console에서 VM 인스턴스 페이지로 이동하여 보려는 인스턴스를 찾습니다.
    VM 인스턴스 페이지로 이동
  2. 인스턴스의 추가 작업 메뉴()에서 네트워크 세부정보 보기를 선택합니다.
  3. 인스턴스에 여러 네트워크 인터페이스가 있는 경우 네트워크 인터페이스 세부정보 섹션에서 보려는 네트워크 인터페이스를 선택합니다.
  4. 네트워크 분석 섹션에서 수신 분석 또는 송신 분석 탭을 선택합니다.
  5. 가장 구체적인 IP 주소 범위부터 순서대로 정렬된 표를 보고 특정 IP 주소를 주고받는 트래픽이 허용되는지 확인합니다.

방화벽 규칙 세부정보 보기

방화벽 규칙을 검사하여 규칙의 이름, 관련 네트워크, 규칙이 사용 설정 상태인지 사용 중지 상태인지를 포함한 구성요소를 볼 수 있습니다.

콘솔

  1. 방화벽 규칙을 나열합니다. 모든 규칙 목록을 보거나 특정 네트워크의 규칙만 볼 수 있습니다.
  2. 규칙을 클릭하여 확인합니다.

gcloud

다음 명령어는 개별 방화벽 규칙을 설명합니다. [FIREWALL_RULE_NAME]을 방화벽 규칙의 이름으로 바꿉니다. 방화벽 규칙 이름은 프로젝트에서 고유하므로 기존 규칙을 설명할 때 네트워크를 지정할 필요는 없습니다.

gcloud compute firewall-rules describe [FIREWALL_RULE_NAME]

방화벽 규칙 삭제

콘솔

  1. 방화벽 규칙을 나열합니다. 모든 규칙 목록을 보거나 특정 네트워크의 규칙만 볼 수 있습니다.
  2. 삭제할 규칙을 클릭합니다.
  3. 삭제를 클릭합니다.
  4. 삭제를 다시 클릭하여 확인합니다.

gcloud

다음 명령어는 방화벽 규칙을 삭제합니다. [FIREWALL_RULE_NAME]을 삭제할 규칙의 이름으로 바꿉니다.

gcloud compute firewall-rules delete [FIREWALL_RULE_NAME]

방화벽 규칙 모니터링

방화벽 규칙에 로깅을 사용 설정하여 어떤 규칙이 어떤 트래픽을 허용 또는 차단하는지 확인할 수 있습니다. 자세한 내용은 방화벽 규칙 로깅 사용을 참조하세요.

구성 예

아래 다이어그램은 방화벽 구성의 예를 보여 줍니다. 시나리오에는 다음이 포함된 my-network가 사용됩니다.

  • 서브넷 subnet1, IP 범위 10.240.10.0/24
  • 서브넷 subnet2, IP 범위 192.168.1.0/24
  • webserver 태그가 지정되고 내부 IP가 192.168.1.2subnet2의 인스턴스 vm1
  • database 태그가 지정되고 내부 IP가 192.168.1.3subnet2의 인스턴스 vm2
샘플 네트워크 구성(확대하려면 클릭)
샘플 네트워크 구성(확대하려면 클릭)

예 1: subnet1의 포트 80에 수신되는 연결을 제외한 모든 수신 TCP 연결 거부

이 예에서는 subnet1의 포트 80을 대상으로 하는 연결을 제외한 모든 수신 TCP 연결을 거부하는 방화벽 규칙 모음을 만듭니다.

  1. webserver 태그가 지정된 인스턴스에 대한 모든 수신 TCP 트래픽을 거부하는 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create deny-subnet1-webserver-access \
        --network my-network \
        --action deny \
        --direction ingress \
        --rules tcp \
        --source-ranges 0.0.0.0/0 \
        --priority 1000 \
        --target-tags webserver
    
  2. subnet1(10.240.10.0/24)의 모든 IP에서 webserver 태그가 지정된 인스턴스의 TCP 포트 80에 액세스하도록 허용하는 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create vm1-allow-ingress-tcp-port80-from-subnet1 \
        --network my-network \
        --action allow \
        --direction ingress \
        --rules tcp:80 \
        --source-ranges 10.240.10.0/24 \
        --priority 50 \
        --target-tags webserver
    

예 2: vm1의 포트 80에 대한 연결을 제외한 모든 송신 TCP 연결 거부

  1. 모든 송신 TCP 트래픽을 거부하는 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create deny-all-access \
        --network my-network \
        --action deny \
        --direction egress \
        --rules tcp \
        --destination-ranges 0.0.0.0/0 \
        --priority 1000
    
  2. vm1 포트 80을 대상으로 하는 TCP 트래픽을 허용하는 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create vm1-allow-egress-tcp-port80-to-vm1 \
        --network my-network \
        --action allow \
        --direction egress \
        --rules tcp:80 \
        --destination-ranges 192.168.10.2/32 \
        --priority 60
    

예 3: 외부 호스트의 포트 443에 대한 송신 TCP 연결 허용

webserver 태그가 지정된 인스턴스에서 샘플 외부 IP 주소 192.0.2.5의 포트 443으로 송신 TCP 트래픽을 보내도록 허용하는 방화벽 규칙을 만듭니다.

gcloud compute firewall-rules create vm1-allow-egress-tcp-port443-to-192-0-2-5 \
    --network my-network \
    --action allow \
    --direction egress \
    --rules tcp:443 \
    --destination-ranges 192.0.2.5/32 \
    --priority 70 \
    --target-tags webserver

예 4: vm2에서 vm1로 SSH 연결 허용

database 태그가 지정된 인스턴스(vm2)의 SSH 트래픽이 webserver 태그가 지정된 인스턴스(vm1)에 도달하도록 허용하는 방화벽 규칙을 만듭니다.

gcloud compute firewall-rules create vm1-allow-ingress-tcp-ssh-from-vm2 \
    --network my-network \
    --action allow \
    --direction ingress \
    --rules tcp:22 \
    --source-tags database \
    --priority 80 \
    --target-tags webserver

예 5: 서비스 계정을 사용하여 웹 서버에서 데이터베이스로 TCP:1443 허용

서비스 계정과 역할에 대한 자세한 내용은 서비스 계정에 역할 부여를 참조하세요.

아래 다이어그램의 시나리오를 고려하세요. 이 시나리오에는 템플릿을 통해 자동 확장되는 웹 서버 애플리케이션 my-sa-web 및 데이터베이스 애플리케이션 'my-sa-db'라는 두 개의 애플리케이션이 있습니다. 보안 관리자가 my-sa-web에서 my-sa-db로 가는 포트 1443의 TCP 흐름을 허용하고자 합니다.

서비스 계정과 함께 방화벽 규칙 사용(확대하려면 클릭)
서비스 계정과 함께 방화벽 규칙 사용(확대하려면 클릭)

서비스 계정 만들기를 포함한 구성 단계는 다음과 같습니다.

  1. 프로젝트 편집자 또는 프로젝트 소유자가 my-sa-webmy-sa-db라는 서비스 계정을 만듭니다.

    gcloud iam service-accounts create my-sa-web \
        --display-name "webserver service account"
    
    gcloud iam service-accounts create my-sa-db \
        --display-name "database service account"
    
  2. 프로젝트 소유자가 IAM 정책을 설정하여 웹 서버 개발자 web-dev@example.com에게 서비스 계정 my-sa-webserviceAccountUser 역할을 할당합니다.

    gcloud iam service-accounts add-iam-policy-binding \
       my-sa-web@my-project.iam.gserviceaccount.com \
       --member='user:web-dev@example.com' \
       --role='roles/iam.serviceAccountUser'
    
  3. 프로젝트 소유자가 IAM 정책을 설정하여 데이터베이스 개발자 'db-dev@example.com'에게 서비스 계정 my-sa-dbserviceAccountUser 역할을 할당합니다.

    gcloud iam service-accounts add-iam-policy-binding \
       my-sa-db@my-project.iam.gserviceaccount.com \
       --member='user:db-dev@example.com' \
       --role='roles/iam.serviceAccountUser'
    
  4. 인스턴스 관리자 역할을 부여받은 개발자 web-dev@example.com은 웹 서버 인스턴스 템플릿을 만들고 인스턴스가 서비스 계정 my-sa-web으로 실행되도록 승인합니다.

    gcloud compute instance-templates create [INSTANCE_TEMPLATE_NAME]  \
        --service-account my-sa-web@my-project-123.iam.gserviceaccount.com
    
  5. 인스턴스 관리자 역할을 부여받은 개발자 db-dev@example.com은 데이터베이스 인스턴스 템플릿을 만들고 인스턴스가 서비스 계정 my-sa-db로 실행되도록 승인합니다.

    gcloud compute instance-templates create [INSTANCE_TEMPLATE_NAME] \
        --service-account my-sa-db@my-project-123.iam.gserviceaccount.com
    
  6. 보안 관리자는 서비스 계정을 사용하여 방화벽 규칙을 만들어 서비스 계정 my-sa-web에서 서비스 계정 my-sa-db로 가는 트래픽 TCP:1443을 허용합니다.

    gcloud compute firewall-rules create [NAME] \
        --network network_a \
        --allow TCP:1443 \
        --source-service-accounts my-sa-web@my-project.iam.gserviceaccount.com \
        --target-service-accounts my-sa-db@my-project.iam.gserviceaccount.com
    

문제해결

방화벽 규칙을 만들거나 업데이트할 때의 오류 메시지

다음 오류 메시지 중 하나가 표시될 수 있습니다.

  • Should not specify destination range for ingress direction.

    대상 범위는 수신 방화벽 규칙의 유효한 매개변수가 아닙니다. egress의 방향이 구체적으로 지정되지 않는 한 방화벽 규칙은 수신 규칙으로 간주합니다. 방향을 지정하지 않는 규칙을 만드는 경우 대상 범위를 허용하지 않는 수신 규칙으로 만들어집니다. 또한, 소스 범위는 송신 규칙의 유효한 매개변수가 아닙니다.

  • Firewall direction cannot be changed once created.

    기존 방화벽 규칙의 방향을 변경할 수 없습니다. 올바른 매개변수로 새 규칙을 만든 다음 기존 규칙을 삭제해야 합니다.

  • Firewall traffic control action cannot be changed once created.

    기존 방화벽 규칙의 작업을 변경할 수 없습니다. 올바른 매개변수로 새 규칙을 만든 다음 기존 규칙을 삭제해야 합니다.

  • Service accounts must be valid RFC 822 email addresses. 방화벽 규칙에 지정된 서비스 계정은 RFC 822에 따라 형식이 지정된 이메일 주소여야 합니다.

    gcloud compute firewall-rules create bad --allow tcp --source-service-accounts invalid-email
    

    Creating firewall...failed.
    ERROR: (gcloud.compute.firewall-rules.create) Could not fetch resource:

    • Invalid value for field 'resource.sourceServiceAccounts[0]': 'invalid-email'. Service accounts must be valid RFC 822 email addresses.
  • ServiceAccounts and Tags are mutually exclusive and can't be combined in the same firewall rule. 같은 규칙에서 서비스 계정과 태그를 모두 지정할 수는 없습니다.

    gcloud compute firewall-rules create bad --allow tcp --source-service-accounts test@google.com --target-tags target
    

    Creating firewall...failed.
     ERROR: (gcloud.compute.firewall-rules.create) Could not fetch resource:

    • ServiceAccounts and Tags are mutually exclusive and can't be combined in the same firewall rule.
  • VM 인스턴스에 연결할 수 없음

    VM 인스턴스에 연결할 수 없는 경우 방화벽 규칙을 확인하세요.

    1. 다른 VM 인스턴스에서 연결을 시작하는 경우 그 인스턴스의 송신 방화벽 규칙을 나열합니다.

      gcloud compute firewall-rules list --filter network=[NETWORK_NAME] \
          --filter EGRESS \
          --sort-by priority \
          --format="table(
              name,
              network,
              direction,
              priority,
              sourceRanges.list():label=SRC_RANGES,
              destinationRanges.list():label=DEST_RANGES,
              allowed[].map().firewall_rule().list():label=ALLOW,
              denied[].map().firewall_rule().list():label=DENY,
              sourceTags.list():label=SRC_TAGS,
              sourceServiceAccounts.list():label=SRC_SVC_ACCT,
              targetTags.list():label=TARGET_TAGS,
              targetServiceAccounts.list():label=TARGET_SVC_ACCT
              )"
      
    2. 대상 IP가 송신 규칙에서 거부되는지 확인합니다. 우선순위가 가장 높은 규칙(우선순위 번호가 가장 작음)이 우선순위가 낮은 규칙보다 우선합니다. 두 규칙의 우선순위가 같은 경우 거부 규칙이 우선합니다.

    3. 수신 방화벽 규칙에서 대상 VM 인스턴스가 포함된 네트워크를 확인합니다.

      gcloud compute firewall-rules list --filter network=[NETWORK_NAME] \
          --filter INGRESS \
          --sort-by priority \
          --format="table(
              name,
              network,
              direction,
              priority,
              sourceRanges.list():label=SRC_RANGES,
              destinationRanges.list():label=DEST_RANGES,
              allowed[].map().firewall_rule().list():label=ALLOW,
              denied[].map().firewall_rule().list():label=DENY,
              sourceTags.list():label=SRC_TAGS,
              sourceServiceAccounts.list():label=SRC_SVC_ACCT,
              targetTags.list():label=TARGET_TAGS,
              targetServiceAccounts.list():label=TARGET_SVC_ACCT
              )"
      

      샘플 출력. 출력은 방화벽 규칙 목록에 따라 달라집니다.

      NAME                    NETWORK  DIRECTION  PRIORITY  SRC_RANGES    DEST_RANGES  ALLOW                         DENY  SRC_TAGS  SRC_SVC_ACCT      TARGET_TAGS  TARGET_SVC_ACCT
      default-allow-icmp      default  INGRESS    65534     0.0.0.0/0                  icmp
      default-allow-internal  default  INGRESS    65534     10.128.0.0/9               tcp:0-65535,udp:0-65535,icmp
      default-allow-rdp       default  INGRESS    65534     0.0.0.0/0                  tcp:3389
      default-allow-ssh       default  INGRESS    65534     0.0.0.0/0                  tcp:22
      firewall-with-sa        default  INGRESS    1000                                 tcp:10000                                     test1@google.com               target@google.com
      

    방화벽 규칙이 사용 설정되었는가, 아니면 사용 중지되었는가?

    방화벽이 사용 설정되었는지, 아니면 사용 중지되었는지 보려면 방화벽 규칙 세부정보를 참조하세요.

    Google Cloud Platform Console시행 아래에서 Enabled 또는 Disabled를 찾습니다.

    gcloud 명령줄 도구 출력에서 disabled 필드를 찾습니다. disabled:false인 경우 규칙이 사용 설정되어 시행되고 있는 것입니다. disabled: true인 경우 규칙이 사용 중지된 것입니다.

    VM 인스턴스에 적용되는 규칙

    tcp:1433을 통해 10.1.2.3의 데이터베이스 서버로 트래픽을 허용하는 새 방화벽 규칙을 VPC 네트워크에 추가한다고 가정합니다. 이 규칙을 만든 후 특정 인스턴스에서 규칙이 올바르게 적용되고 있는지 확인할 수 있습니다. 자세한 내용은 VM 인스턴스의 네트워크 인터페이스에 대한 방화벽 규칙 나열을 참조하세요.

    다음 예를 보면 콘솔은 이 VM 인스턴스의 송신 분석 탭에 database-access 규칙을 나열하여 포트 1433에서 10.1.2.3 송신 트래픽이 허용됨을 나타냅니다. 10.1.0.0/16 범위의 다른 송신 트래픽은 deny-database-subnet 방화벽 규칙으로 인해 차단되었습니다.

    VM 인스턴스에 허용된 송신 트래픽(확대하려면 클릭)
    VM 인스턴스에 허용된 송신 트래픽(확대하려면 클릭)

    다음 단계

    이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

    다음에 대한 의견 보내기...