이 문서에서는 다음 작업을 완료하는 방법을 설명합니다.
- 인터넷 액세스를 위해 Dataflow 가상 머신 (VM) 인스턴스 구성
- 네트워크 태그 만들기
- Dataflow 작업과 연결된 네트워크의 방화벽 규칙 정의
이 문서를 사용하려면 Google Cloud 네트워크에 대한 기본 지식이 필요합니다. Dataflow 작업에 대해 네트워크를 정의하려면 네트워크 및 서브네트워크 지정을 참조하세요. 네트워킹 문제를 해결하는 방법은 Dataflow 네트워킹 문제 해결을 참조하세요.
Dataflow용 Google Cloud API 액세스
Dataflow 작업자 가상 머신(VM)이 Google Cloud APIs 및 서비스에 연결되어야 합니다. 종속 Google Cloud 엔드포인트 세트는 시간이 지남에 따라 변경될 수 있지만 모두 VPC 서비스 제어를 지원합니다. 다음 방법 중 하나를 사용하여 Google Cloud API에 대한 액세스를 구성합니다.
비공개 Google 액세스를 구성합니다. 비공개 Google 액세스를 사용하면 내부 IP 주소만 있는 VM이 Google Cloud 및 서비스를 위한 IP 주소에 액세스할 수 있습니다.
Google Cloud API 및 서비스에 액세스하도록 Private Service Connect 엔드포인트 IP 주소를 구성합니다.
외부 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 외부의 리소스에 액세스해야 할 수도 있습니다. 다음 방법 중 하나를 사용하여 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 서브네트워크의 이름
선택에 따라 다음 중 하나를 바꿉니다.
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;....
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을 사용하는 경우 방화벽 규칙에서 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의 연결 옵션 선택을 참조하세요.
다음 단계
- 연결 테스트 알아보기 연결 테스트는 네트워크 엔드포인트 간 연결을 확인할 수 있게 해주는 진단 도구입니다.
- 연결 테스트 만들기 및 실행