이 문서에서는 다음 태스크를 완료하는 방법을 설명합니다.
- 인터넷에 액세스할 수 있도록 Dataflow 가상 머신(VM) 인스턴스 구성
- 태그를 사용하여 작업자 VM 네트워킹을 보호하기
- Dataflow 작업과 연결된 네트워크에 대한 방화벽 규칙 정의
이 문서를 이해하려면 Google Cloud Platform 네트워크에 대한 기본 지식이 필요합니다. Dataflow 작업에 대해 네트워크를 정의하려면 네트워크 및 서브네트워크 지정을 참조하세요. 네트워킹 문제를 해결하는 방법은 Dataflow 네트워킹 문제 해결을 참조하세요.
Dataflow용 Google Cloud API에 액세스
Dataflow 작업자 가상 머신(VM)이Google Cloud API 및 서비스에 연결되어야 합니다. 종속 Google Cloud 엔드포인트 집합은 시간이 경과함에 따라 변경될 수 있지만 모두 VPC 서비스 제어를 지원합니다. 다음 방법 중 하나를 사용하여 Google Cloud API에 대한 액세스를 구성합니다.
- 비공개 Google 액세스를 구성합니다. 비공개 Google 액세스를 사용하면 내부 IP 주소만 있는 VM에서 Google Cloud 및 서비스의 IP 주소에 액세스할 수 있습니다. 
- Private Service Connect 엔드포인트 IP 주소를 구성하여 Google Cloud API 및 서비스에 액세스합니다. 
- 외부 IP 주소를 사용하여 작업자 VM을 구성합니다. 
기본적으로 방화벽 규칙과 DNS 구성은Google Cloud API에 대한 액세스를 허용합니다. 그러나 VPC 서비스 제어를 사용하는 경우와 같이 Google Cloud API 하위 집합에 대한 액세스를 적극적으로 제한하고 있을 수 있습니다.
이 경우 최소한 restricted.googleapis.com에 대한 액세스 권한을 제공합니다. Private Service Connect를 사용하는 경우 vpc-sc 번들에 대한 액세스 권한을 제공합니다.
private.googleapis.com과 같이 더 허용적인 도메인에 대한 액세스 권한을 제공하면 필요한 기능도 제공됩니다.
지정된 도메인을 통해 필요한 Google Cloud API에 대한 액세스를 허용하려면 환경이 다음 요구사항을 충족해야 합니다.
- 방화벽 규칙은 선택한 도메인의 모든 주소 범위로의 이그레스를 허용해야 합니다. 
- DNS에서 - *.googleapis.com를 선택한 도메인으로 확인해야 합니다.
예를 들어 방화벽 규칙이 이그레스를 restricted.googleapis.com 주소 범위로 제한하는 경우 *.googleapis.com은 해당 범위 내 주소로 확인되어야 합니다.
자세한 내용은 googleapis.com의 DNS 구성을 참조하세요.
마찬가지로 Private Service Connect를 사용하는 경우 최소한 vpc-sc 번들의 모든 서비스에 액세스할 수 있도록 googleapis.com 기본 도메인의 DNS 레코드를 만들어야 합니다.
Dataflow 인터넷 액세스
사용 사례에 따라 VM이 Google Cloud Platform 외부의 리소스에 액세스해야 할 수도 있습니다. 다음 방법 중 하나를 사용하여 Dataflow의 인터넷 액세스를 구성합니다.
- 인터넷 액세스 요구사항을 충족하도록 외부 IP 주소를 사용하여 작업자 VM을 구성합니다. 
- 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 작업은 다음 장소에 있는 리소스에만 액세스할 수 있습니다.
- 동일한 VPC 네트워크의 다른 인스턴스
- 공유 VPC 네트워크
- VPC 네트워크 피어링을 사용 설정한 네트워크
외부 IP 주소 없이도 계속 관리 및 모니터링 작업을 수행할 수 있습니다. 이전 목록에 나열된 옵션을 통해 SSH를 사용하여 작업자에 액세스할 수 있습니다. 하지만 파이프라인이 인터넷에 액세스할 수 없고 인터넷 호스트가 Dataflow 작업자에 액세스할 수 없습니다.
외부 IP 주소를 사용하지 않으면 데이터 처리 인프라 보안을 더욱 강화할 수 있습니다. Google Cloud프로젝트 할당량에서 소비되는 외부 IP 주소 수를 줄일 수도 있습니다.
외부 IP 주소를 사용 중지하면 Dataflow 작업이 인터넷에 액세스해야 하는 Google Cloud 외부에 있는 API 및 서비스에 액세스할 수 없습니다.
외부 IP 주소를 사용 중지하려면 다음 중 하나를 수행합니다.
자바
- 네트워크 또는 서브네트워크에서 비공개 Google 액세스를 사용 설정합니다.
- Dataflow 작업의 파라미터에서 --usePublicIps=false및--network=NETWORK-NAME(또는--subnetwork=SUBNETWORK-NAME)를 지정합니다.선택에 따라 다음 중 하나를 바꿉니다. - NETWORK-NAME: Compute Engine 네트워크의 이름
- SUBNETWORK-NAME: Compute Engine 서브네트워크의 이름
 
Python
- 모든 Python 패키지 종속 항목을 스테이징하려면 Apache Beam 파이프라인 종속 항목 안내를 참조하세요.
- 네트워크 또는 서브네트워크에서 비공개 Google 액세스를 사용 설정합니다.
- 
  Dataflow 작업의 파라미터에서 --no_use_public_ips및--network=NETWORK(또는--subnetwork=SUBNETWORK)를 지정합니다.선택에 따라 다음 중 하나를 바꿉니다. - NETWORK-NAME: Compute Engine 네트워크의 이름
- SUBNETWORK-NAME: Compute Engine 서브네트워크의 이름
 
Go
- 네트워크 또는 서브네트워크에서 비공개 Google 액세스를 사용 설정합니다.
- 
  Dataflow 작업의 파라미터에서 --no_use_public_ips및--network=NETWORK(또는--subnetwork=SUBNETWORK)를 지정합니다.선택에 따라 다음 중 하나를 바꿉니다. - NETWORK-NAME: Compute Engine 네트워크의 이름
- SUBNETWORK-NAME: Compute Engine 서브네트워크의 이름
 
태그를 사용하여 작업자 VM 네트워킹 보안
태그를 사용하면 특정 VM 인스턴스에 네트워크 방화벽 규칙을 적용할 수 있습니다. Dataflow 작업을 실행할 때 작업을 실행하는 Dataflow 작업자 VM의 태그를 지정할 수 있습니다. 그러면 이러한 태그의 방화벽 규칙이 Dataflow 작업자 VM에 적용됩니다.
Dataflow는 VM 네트워킹에 대해 두 가지 유형의 태그를 지원합니다.
Dataflow에서 보안 태그 사용
보안 태그(Identity and Access Management(IAM) 관리 태그라고도 함)는 Resource Manager에서 만들고 관리하는 키-값 쌍입니다. 네트워크 태그와 달리 보안 태그는 IAM을 사용한 액세스 제어를 지원합니다.
네트워크 태그 대신 보안 태그를 사용하면 다음과 같은 이점이 있습니다.
- 보안 태그는 승인되지 않은 태그 수정 및 그로 인한 원치 않는 방화벽 규칙 변경을 방지합니다. 
- 전역 및 리전 네트워크 방화벽 정책은 보안 태그를 지원합니다. 보안 태그를 사용하면 여러 방화벽 규칙을 그룹화하고 동시에 업데이트할 수 있으며, 업데이트는 IAM 액세스 제어에 의해 관리됩니다. 
- 보안 태그는 Google Cloud Platform 계층 구조의 상위 리소스에서 상속되므로 조직 수준과 같은 상위 수준에서 태그를 정의할 수 있습니다. 자세한 내용은 태그 상속을 참고하세요. 
- 보안 태그를 사용하면 인그레스 방화벽 규칙에 VPC 네트워크 피어링을 사용하여 연결된 VPC 네트워크의 소스를 포함할 수 있습니다. Dataflow 작업의 경우 방화벽 규칙에 작업자 VM 네트워크와 피어링된 VPC 네트워크의 소스가 모두 포함될 수 있습니다. 
보안 태그와 네트워크 태그의 차이점에 대한 자세한 내용은 태그와 네트워크 태그 비교를 참조하세요.
Dataflow 작업에 보안 태그를 적용하려면 다음 단계를 따르세요.
- 방화벽 정책의 보안 태그를 구성합니다. 자세한 내용은 보안 태그 구성을 참고하세요. 
- 리소스(태그 값)에 대한 Dataflow 서비스 계정에 태그 사용자 역할( - roles/resourcemanager.tagUser)을 부여합니다. 필요한 권한에 대한 자세한 내용은 리소스에서 태그 관리를 참고하세요.
- Dataflow 작업을 만들 때 다음 형식으로 - use_vm_tags서비스 옵션을 사용합니다.
자바
--dataflowServiceOptions=use_vm_tags=tagKeys/KEY1:tagValues/VALUE1;tagKeys/KEY2:tagValues/VALUE2
Python
--dataflow_service_options=use_vm_tags=tagKeys/KEY1:tagValues/VALUE1;tagKeys/KEY2:tagValues/VALUE2
Go
--dataflow_service_options=use_vm_tags=tagKeys/KEY1:tagValues/VALUE1;tagKeys/KEY2:tagValues/VALUE2
gcloud
gcloud dataflow jobs run 명령어를 additional-experiments 옵션과 함께 사용합니다. Flex 템플릿을 사용하는 경우 gcloud dataflow flex-template run 명령어를 사용합니다.
--additional-experiments=use_vm_tags=tagKeys/KEY1:tagValues/VALUE1;tagKeys/KEY2:tagValues/VALUE2
Dataflow에서 네트워크 태그 사용
네트워크 태그는 방화벽 규칙에 설정하고 Compute Engine VM에 연결할 수 있는 텍스트 속성입니다. 보안 태그와 달리 네트워크 태그는 텍스트 문자열이며 Resource Manager에서 관리하는 리소스가 아닙니다.
Dataflow 작업에 네트워크 태그를 적용하려면 다음과 같이 use_network_tags 실험을 사용합니다.
자바
--dataflowServiceOptions=use_network_tags=TAG_NAME
Python
--dataflow_service_options=use_network_tags=TAG_NAME
Go
--dataflow_service_options=use_network_tags=TAG_NAME
gcloud
gcloud dataflow jobs run 명령어를 additional-experiments 옵션과 함께 사용합니다. Flex 템플릿을 사용하는 경우 gcloud dataflow flex-template run 명령어를 사용합니다.
--additional-experiments=use_network_tags=TAG_NAME
네트워크 태그를 지정하면 기본 네트워크 태그 Dataflow도 Flex 템플릿 런처 VM에 추가됩니다.
TAG_NAME을 태그의 이름으로 바꿉니다. 태그를 두 개 이상 추가하는 경우 TAG_NAME_1;TAG_NAME_2;TAG_NAME_3;... 형식처럼 세미콜론(;)을 사용하여 각 태그를 구분합니다.
작업이 시작된 후에는 작업에 네트워크 태그를 추가할 수 없습니다.
Dataflow는 항상 생성된 모든 작업자 VM에 기본 네트워크 태그 dataflow를 추가합니다.
네트워크 태그에 적용되는 한도를 참고하세요.
Dataflow 방화벽 규칙
방화벽 규칙을 사용하면 VM에 대해 트래픽을 허용하거나 거부할 수 있습니다. Dataflow 작업이 Dataflow Shuffle 또는 Streaming Engine을 사용하는 경우 방화벽 규칙에서 Google Cloud API에 대한 액세스를 허용하는지만 확인하면 됩니다.
그렇지 않으면 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 포트 12345 및 12346에서 허가하는 인그레스 허용 규칙을 만들 수 있습니다.
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 포트 12345 및 12346에서 같은 태그가 있는 다른 VM으로의 트래픽 이동을 허용하는 이그레스 허용 규칙을 만들 수 있습니다.
gcloud compute firewall-rules create FIREWALL_RULE_NAME_EGRESS \
    --network=NETWORK \
    --action=allow \
    --direction=egress \
    --target-tags=CUSTOM_TAG \
    --source-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를 실행하여 네트워크 구성과 활동을 볼 수 있습니다. 자세한 내용은 Linux Foundation 위키의 iproute2 페이지를 참조하세요.
내부 IP 주소만 있는 작업자 VM에 연결해야 하는 경우에는 내부 전용 VM의 연결 옵션 선택을 참조하세요.
다음 단계
- 연결 테스트 알아보기 연결 테스트는 네트워크 엔드포인트 간 연결을 확인할 수 있게 해주는 진단 도구입니다.
- 연결 테스트 만들기 및 실행