인터넷 액세스 및 방화벽 규칙 구성

이 문서에서는 인터넷 액세스를 위해 Dataflow 가상 머신(VM) 인스턴스를 구성하고, 네트워크 태그를 만들고, Dataflow 작업과 연관된 네트워크의 방화벽 규칙을 정의하는 방법을 설명합니다.

이 문서를 사용하려면 Google Cloud 네트워크에 대한 기본 지식이 필요합니다. Dataflow 작업에 대해 네트워크를 정의하려면 네트워크 및 서브네트워크 지정을 참조하세요.

Dataflow 인터넷 액세스

Dataflow 작업자 가상 머신(VM)이 Google Cloud APIs 및 서비스에 연결되어야 합니다. 사용 사례에 따라 VM이 Google Cloud 외부의 리소스에 액세스해야 할 수도 있습니다. 다음 방법 중 하나를 사용하여 Dataflow의 인터넷 액세스를 구성합니다.

  • 인터넷 액세스 요구사항을 충족하도록 외부 IP 주소를 사용하여 작업자 VM을 구성합니다.

  • 비공개 Google 액세스를 구성합니다. 비공개 Google 액세스를 사용하면 내부 IP 주소만 있는 VM이 Google Cloud 및 서비스를 위한 IP 주소에 액세스할 수 있습니다.

  • Google Cloud API 및 서비스에 액세스하도록 Private Service Connect 엔드포인트 IP 주소를 구성합니다.

  • Cloud NAT와 같은 NAT 솔루션을 구성합니다. 이 옵션은 인터넷 액세스가 필요한 Google Cloud 외부의 API 및 서비스에 액세스하는 작업을 실행하기 위한 것입니다. 예를 들어 Python SDK 작업은 파이프라인 종속 항목을 다운로드하기 위해 Python Package Index(PyPI)에 대한 액세스 권한이 필요할 수 있습니다. 이 경우 외부 IP 주소를 사용하여 작업자 VM을 구성하거나 Cloud NAT를 구성해야 합니다. 또한 작업 제출 중에 Python 파이프라인 종속 항목을 제공할 수도 있습니다. 예를 들어 커스텀 컨테이너를 사용하여 Python 파이프라인 종속 항목을 제공할 수 있으므로 런타임 시 PyPI에 액세스할 필요가 없습니다.

    자세한 내용은 Apache Beam 문서의 Python 파이프라인 종속 항목 관리를 참조하세요.

외부 IP 주소 사용 중지

기본적으로 Dataflow 서비스는 외부 및 내부 IP 주소 모두에 작업자를 할당합니다. 외부 IP 주소를 사용 중지하면 Dataflow 파이프라인은 다음 위치에 있는 리소스에만 액세스할 수 있습니다.

외부 IP 주소 없이도 계속 관리 및 모니터링 작업을 수행할 수 있습니다. 이전 목록에 나열된 옵션을 통해 SSH를 사용하여 작업자에 액세스할 수 있습니다. 하지만 파이프라인이 인터넷에 액세스할 수 없고 인터넷 호스트가 Dataflow 작업자에 액세스할 수 없습니다.

외부 IP 주소 사용하지 않으면 데이터 처리 인프라를 보호하는 데 도움이 됩니다. 또한 Google Cloud 프로젝트 할당량에 소비되는 외부 IP 주소 수를 줄일 수 있습니다.

외부 IP 주소를 사용 중지하면 Dataflow 작업이 인터넷 액세스가 필요한 Google Cloud 외부의 API 및 서비스에 액세스할 수 없습니다.

내부 IP 주소를 사용하여 작업에 대해 인터넷 액세스를 설정하는 방법에 대한 자세한 내용은 이전 섹션을 참조하세요.

외부 IP 주소를 사용 중지하려면 다음 중 하나를 수행합니다.

자바

  1. 네트워크 또는 서브네트워크에서 비공개 Google 액세스를 사용 설정합니다.
  2. Dataflow 작업의 매개변수에서 --usePublicIps=false--network=NETWORK-NAME(또는 --subnetwork=SUBNETWORK-NAME)를 지정합니다.

    선택에 따라 다음 중 하나를 바꿉니다.

    • NETWORK-NAME: Compute Engine 네트워크의 이름
    • SUBNETWORK-NAME: Compute Engine 서브네트워크의 이름

Python

  1. 모든 Python 패키지 종속 항목을 스테이징하려면 Apache Beam 파이프라인 종속 항목 안내를 참조하세요.
  2. 네트워크 또는 서브네트워크에서 비공개 Google 액세스를 사용 설정합니다.
  3. Dataflow 작업의 매개변수에서 --no_use_public_ips--network=NETWORK(또는 --subnetwork=SUBNETWORK)를 지정합니다.
  4. 선택에 따라 다음 중 하나를 바꿉니다.

    • NETWORK-NAME: Compute Engine 네트워크의 이름
    • SUBNETWORK-NAME: Compute Engine 서브네트워크의 이름

Go

  1. 네트워크 또는 서브네트워크에서 비공개 Google 액세스를 사용 설정합니다.
  2. Dataflow 작업의 매개변수에서 --no_use_public_ips--network=NETWORK(또는 --subnetwork=SUBNETWORK)를 지정합니다.
  3. 선택에 따라 다음 중 하나를 바꿉니다.

    • NETWORK-NAME: Compute Engine 네트워크의 이름
    • SUBNETWORK-NAME: Compute Engine 서브네트워크의 이름

Dataflow의 네트워크 태그

네트워크 태그는 Compute Engine VM에 연결할 수 있는 텍스트 속성입니다. 네트워크 태그를 사용하여 VPC 네트워크 방화벽 규칙과 특정 커스텀 정적 경로를 특정 VM 인스턴스에 적용할 수 있습니다. Dataflow는 특정 Dataflow 작업을 실행하는 모든 작업자 VM에 네트워크 태그를 추가할 수 있도록 지원합니다.

네트워크 매개변수를 사용하지 않더라도 Dataflow는 항상 생성된 모든 작업자 VM에 기본 네트워크 태그 dataflow를 추가합니다.

네트워크 태그 사용 설정

작업을 만들기 위해 Dataflow 작업 템플릿을 실행할 때만 네트워크 태그를 지정할 수 있습니다. 작업이 시작된 후에는 작업에 네트워크 태그를 추가할 수 없습니다. 작업에 추가 네트워크 태그를 적용하려면 필요한 네트워크 태그를 사용하여 작업 템플릿을 다시 만들어야 합니다.

실행 환경이 자바 또는 Python인지 여부에 관계없이 파이프라인 코드에 다음을 추가합니다.

--experiments=use_network_tags=TAG-NAME

TAG-NAME을 태그의 이름으로 바꿉니다. 태그를 두 개 이상 추가하는 경우 다음 형식에 표시된 대로 세미콜론(;)을 사용하여 각 태그를 구분합니다. TAG-NAME-1;TAG-NAME-2;TAG-NAME-3;....

이 매개변수를 사용하지 않더라도 Dataflow는 항상 생성된 모든 작업자 VM에 네트워크 태그 dataflow를 추가합니다.

Flex 템플릿 VM에 네트워크 태그 사용 설정

Flex 템플릿을 사용할 때 Dataflow 작업자 VM에 네트워크 태그를 사용 설정하려면 다음 예시와 같이 --additional-experiments 옵션을 사용합니다.

--additional-experiments=use_network_tags=TAG-NAME

작업자 VM과 런처 VM 모두에 네트워크 태그를 사용 설정하려면 다음 두 가지 옵션을 사용해야 합니다.

--additional-experiments=use_network_tags=TAG-NAME
--additional-experiments=use_network_tags_for_flex_templates=TAG-NAME

TAG-NAME을 태그의 이름으로 바꿉니다. 태그를 두 개 이상 추가하는 경우 다음 형식에 표시된 대로 세미콜론(;)을 사용하여 각 태그를 구분합니다. TAG-NAME-1;TAG-NAME-2;TAG-NAME-3;....

네트워크 태그를 사용 설정한 후 태그가 파싱되고 VM에 연결됩니다.

네트워크 태그에 적용되는 한도를 참조하세요.

Dataflow 방화벽 규칙

방화벽 규칙을 사용하면 VM에 대해 트래픽을 허용하거나 거부할 수 있습니다. Dataflow 작업이 Dataflow Shuffle 또는 Streaming Engine을 사용하는 경우 방화벽 규칙을 구성할 필요가 없습니다. 그렇지 않으면 Dataflow VM이 스트리밍 작업의 경우 TCP 포트 12345에서 일괄 작업의 경우 TCP 포트 12346에서 네트워크 트래픽을 보내고 받을 수 있도록 방화벽 규칙을 구성해야 합니다. 프로젝트 소유자, 편집자, 보안 관리자가 Dataflow VM에 사용되는 VPC 네트워크에서 필요한 방화벽 규칙을 만들어야 합니다.

Dataflow의 방화벽 규칙을 구성하기 전에 다음 문서를 읽어보세요.

Dataflow에 대해 방화벽 규칙을 만들 때 Dataflow 네트워크 태그를 지정합니다. 그렇지 않으면 방화벽 규칙이 VPC 네트워크의 모든 VM에 적용됩니다.

적용 가능한 경우 계층적 방화벽 정책이 먼저 평가되고 해당 규칙이 VPC 방화벽 규칙을 선점합니다. Dataflow 작업이 계층적 방화벽 정책이 사용된 폴더 또는 조직의 일부인 프로젝트에 있는 경우 정책 수정을 위해 compute.orgFirewallPolicyAdmin 역할이 필요합니다.

파이프라인 코드를 실행할 때 커스텀 네트워크 태그를 만들지 않았으면 Dataflow VM이 기본 dataflow 태그를 사용합니다. 커스텀 네트워크 태그가 없으면 기본 dataflow 태그를 사용하여 방화벽 규칙을 만듭니다.

파이프라인 코드를 실행할 때 커스텀 네트워크 태그를 만들었으면 Dataflow VM에 이 태그가 사용됩니다. 커스텀 태그를 사용하여 방화벽 규칙을 만듭니다.

자동으로 생성된 default 네트워크 같은 일부 VPC 네트워크에는 Dataflow의 방화벽 요건을 충족하는 default-allow-internal 규칙이 포함되어 있습니다.

방화벽 인그레스 규칙 예시

인그레스 방화벽 규칙은 Dataflow VM이 서로 패킷을 수신하도록 허용합니다. 이그레스 규칙이 그러한 트래픽을 허용하더라도 인그레스 허용 방화벽 규칙을 만들어야 합니다. 그렇지 않으면 트래픽이 항상 차단됩니다.

다음 예시에서는 방화벽 인그레스 규칙이 Dataflow에 대해 생성됩니다. 여기서 모든 작업자 VM에 기본 네트워크 태그 dataflow가 포함됩니다. 프로젝트 소유자, 편집자 또는 보안 관리자는 다음 gcloud 명령어를 사용하여, 네트워크 태그 dataflow가 있는 VM에서 동일한 태그가 있는 VM으로 유입되는 트래픽을 TCP 포트 1234512346에서 허가하는 인그레스 허용 규칙을 만들 수 있습니다.

gcloud compute firewall-rules create FIREWALL_RULE_NAME_INGRESS \
    --action=allow \
    --direction=ingress \
    --network=NETWORK  \
    --target-tags=CUSTOM_TAG \
    --source-tags=CUSTOM_TAG \
    --priority=PRIORITY_NUM \
    --rules tcp:12345-12346

다음을 바꿉니다.

  • FIREWALL_RULE_NAME_INGRESS: 방화벽 규칙 이름입니다.

  • NETWORK: 작업자 VM에서 사용하는 네트워크의 이름입니다.

  • CUSTOM_TAG: 쉼표로 구분된 네트워크 태그 목록입니다.

    다음은 네트워크 태그 사용을 위한 가이드라인 목록입니다.

    • --target-tags를 생략하면 VPC 네트워크의 모든 VM에 규칙이 적용됩니다.

    • --source-tags 및 다른 모든 소스 사양을 생략할 경우 모든 소스의 트래픽이 허용됩니다.

    • 커스텀 네트워크 태그를 지정하지 않았고 Dataflow VM에 맞게 규칙을 적용하려면 dataflow를 네트워크 태그로 사용합니다.

    • 커스텀 네트워크 태그를 지정했고 Dataflow VM에 맞게 규칙을 적용하려면 커스텀 네트워크 태그를 사용합니다.

  • PRIORITY_NUM: 방화벽 규칙의 우선순위

    숫자가 낮을수록 우선순위가 높고 0이 가장 높습니다.

방화벽 이그레스 규칙 예시

이그레스 방화벽 규칙은 Dataflow VM이 서로 패킷을 전송하도록 허용합니다. 이그레스 거부 방화벽 규칙을 만든 경우 VPC 네트워크에서 커스텀 이그레스 허용 방화벽 규칙을 만들어야 할 수 있습니다.

이 예시에서는 Dataflow에 대해 방화벽 이그레스 규칙이 생성되고, 모든 작업자 VM에 dataflow의 기본 네트워크 태그가 포함됩니다. 프로젝트 소유자, 편집자 또는 보안 관리자는 다음 gcloud 명령어를 사용하여, 네트워크 태그 dataflow가 있는 VM의 TCP 포트 1234512346에서 동일 태그가 있는 다른 VM으로 트래픽을 허용하는 이그레스 허용 규칙을 만들 수 있습니다.

gcloud compute firewall-rules create FIREWALL_RULE_NAME_EGRESS \
    --network=NETWORK \
    --action=allow \
    --direction=egress \
    --target-tags=CUSTOM_TAG \
    --destination-ranges=DESTINATION-RANGES\
    --priority=PRIORITY_NUM  \
    --rules tcp:12345-12346

다음을 바꿉니다.

  • FIREWALL_RULE_NAME_EGRESS: 방화벽 규칙 이름입니다.

  • NETWORK: 작업자 VM에서 사용하는 네트워크의 이름입니다.

  • CUSTOM_TAG: 쉼표로 구분된 네트워크 태그 목록입니다.

    다음은 네트워크 태그 사용을 위한 가이드라인 목록입니다.

    • --target-tags를 생략하면 VPC 네트워크의 모든 VM에 규칙이 적용됩니다.

    • --source-tags 및 다른 모든 소스 사양을 생략할 경우 모든 소스의 트래픽이 허용됩니다.

    • 커스텀 네트워크 태그를 지정하지 않았고 Dataflow VM에 맞게 규칙을 적용하려면 dataflow를 네트워크 태그로 사용합니다.

    • 커스텀 네트워크 태그를 지정했고 Dataflow VM에 맞게 규칙을 적용하려면 커스텀 네트워크 태그를 사용합니다.

  • DESTINATION-RANGES: 쉼표로 구분된 CIDR 목록

    선택한 서브네트워크의 기본 IP 주소 범위를 포함합니다.

  • PRIORITY_NUM: 방화벽 규칙의 우선순위

    숫자가 낮을수록 우선순위가 높고 0이 가장 높습니다.

Dataflow에서 사용하는 특정 TCP 포트의 경우 프로젝트 컨테이너 매니페스트를 볼 수 있습니다. 컨테이너 매니페스트는 호스트 포트를 컨테이너에 매핑하기 위해 포트를 명시적으로 지정합니다.

작업자 VM에 대한 SSH 액세스

Dataflow는 SSH가 필요하지 않지만 문제해결에는 SSH가 사용됩니다.

작업자 VM에 외부 IP 주소가 있는 경우 Google Cloud 콘솔이나 Google Cloud CLI를 사용하여 VM에 연결할 수 있습니다. SSH를 사용하여 연결하려면 최소한 gcloud를 실행하는 시스템이나 Google Cloud 콘솔에 액세스하는 데 사용하는 웹브라우저를 실행하는 시스템의 IP 주소에서 TCP 포트 22로 들어오는 연결을 허용하는 방화벽 규칙이 있어야 합니다.

작업자 중 하나에서 SSH 세션을 열고 iproute2를 실행하여 네트워크 구성 및 활동을 볼 수 있습니다. 자세한 내용은 iproute2 페이지를 참조하십시오.

내부 IP 주소만 있는 작업자 VM에 연결해야 하는 경우에는 내부 전용 VM의 연결 옵션 선택을 참조하세요.