Cloud Dataflow 보안 및 권한

Cloud Dataflow 파이프라인은 Cloud Dataflow 관리형 서비스를 사용하여 로컬로 실행(소규모 데이터세트에 대한 테스트 수행 시)하거나 관리형 Google Cloud Platform(GCP) 리소스에서 실행할 수 있습니다. 로컬 또는 클라우드에서 실행 중인 파이프라인 및 작업자는 권한 시스템을 사용하여 파이프라인 파일 및 리소스에 대한 보안 액세스를 유지합니다. Cloud Dataflow 권한은 파이프라인 리소스에 액세스하는 데 사용되는 역할에 따라 지정됩니다. 이 섹션에서는 로컬 및 클라우드 파이프라인과 관련된 역할 및 권한, 기본 설정, 프로젝트 권한 확인 방법을 설명합니다.

시작하기 전에

플랫폼 개요에서 Google Cloud Platform 프로젝트 식별자에 대해 알아보세요. 식별자에는 프로젝트 이름, 프로젝트 ID, 프로젝트 번호가 포함됩니다.

로컬 파이프라인의 보안 및 권한

Google Cloud Platform 계정

로컬로 실행하면 Apache Beam 파이프라인은 gcloud 명령줄 도구 실행 파일로 구성된 GCP 계정으로 실행됩니다. 따라서 로컬에서 실행되는 Apache Beam SDK 작업은 GCP 계정에서 액세스할 수 있는 파일 및 리소스에 액세스할 수 있습니다.

선택한 GCP 계정을 기본값으로 표시하려면 gcloud config list 명령어를 실행합니다.

참고: 로컬 파이프라인은 로컬 파일과 같은 로컬 대상이나 Cloud Storage 또는 BigQuery와 같은 클라우드 대상으로 데이터를 출력할 수 있습니다. 로컬에서 실행되는 파이프라인이 Cloud Storage와 같은 클라우드 기반 리소스에 파일을 쓰는 경우 GCP 계정 사용자 인증 정보와 gcloud 명령줄 도구 기본값으로 구성된 GCP 프로젝트를 사용합니다. GCP 계정 사용자 인증 정보를 인증하는 방법에 대한 자세한 내용은 현지 언어로 된 빠른 시작을 참조하세요.

Google Cloud Platform에서 파이프라인의 보안 및 권한

파이프라인을 실행하면 Cloud Dataflow는 Cloud Dataflow 서비스 계정과 컨트롤러 서비스 계정 등 두 가지 서비스 계정을 사용하여 보안 및 권한을 관리합니다. Cloud Dataflow 서비스는 작업 생성 요청의 일부로 Cloud Dataflow 서비스 계정을 사용하고(예: 프로젝트 할당량 확인 및 사용자 대신 작업자 인스턴스 생성) 실행 중인 작업을 관리합니다. 작업자 인스턴스는 사용자가 작업을 제출한 후 컨트롤러 서비스 계정을 사용하여 입력 및 출력 리소스에 액세스합니다.

Cloud Dataflow 서비스 계정

Cloud Dataflow 파이프라인 실행의 일환으로 Cloud Dataflow 서비스는 사용자를 대신하여 리소스를 조작합니다(예: 추가 VM 생성). Cloud Dataflow 서비스에서 파이프라인이 실행되면 서비스 계정(service-<project-number>@dataflow-service-producer-prod.iam.gserviceaccount.com)을 사용합니다. 이 계정은 Cloud Dataflow 프로젝트가 생성될 때 자동으로 생성되며, 프로젝트에서 Cloud Dataflow Service Agent 역할을 할당받고 Compute Engine 작업자 시작을 포함하여 프로젝트에서 Cloud Dataflow 작업을 실행하는 데 필요한 권한을 갖습니다. 이 계정은 Cloud Dataflow 서비스에서 단독으로 사용되며 프로젝트에 따라 다릅니다.

셸 또는 터미널에 다음 명령어를 입력하여 gcloud 명령줄 도구로 Cloud Dataflow 서비스 계정의 권한을 검토할 수 있습니다.

gcloud iam roles describe roles/dataflow.serviceAgent

GCP 서비스는 프로젝트 및 리소스에 대한 읽기/쓰기 액세스를 요구하므로 프로젝트에 자동으로 설정된 기본 권한을 변경하지 않는 것이 좋습니다. IAM 정책에서 서비스 계정 권한을 삭제해도 해당 계정은 Cloud Dataflow 서비스에서 소유하고 있으므로 계속 존재하게 됩니다. Cloud Dataflow 서비스 계정이 프로젝트 권한을 잃으면 Cloud Dataflow는 VM 시작 및 다른 관리 작업을 수행할 수 없습니다.

권장사항: Cloud Dataflow에 스테이징 버킷으로 사용할 프로젝트가 소유한 버킷을 만듭니다. 이렇게 하면 권한이 파이프라인의 실행 파일 스테이징을 위해 올바르게 자동 설정됩니다.

컨트롤러 서비스 계정

Compute Engine 인스턴스는 클라우드에서 Apache Beam SDK 작업을 실행합니다. 이러한 작업자는 프로젝트의 컨트롤러 서비스 계정을 사용하여 파이프라인의 파일 및 기타 리소스에 액세스합니다. 또한, Cloud Dataflow는 컨트롤러 서비스 계정을 사용하여 로컬 클라이언트 또는 Compute Engine 작업자에서는 실행되지 않는 '메타데이터' 작업을 수행합니다. 이러한 작업은 입력 크기를 결정하고 Cloud Storage 파일에 액세스하는 등의 작업을 수행합니다.

기본 컨트롤러 서비스 계정

기본적으로 작업자는 프로젝트의 Compute Engine 서비스 계정을 컨트롤러 서비스 계정으로 사용합니다. 이 서비스 계정(<project-number>-compute@developer.gserviceaccount.com)은 프로젝트의 Google Cloud Platform Console의 API 페이지에서 Compute Engine API를 사용 설정할 때 자동으로 만들어집니다.

또한, 프로젝트와 연결된 Compute Engine 서비스 계정은 기본적으로 프로젝트가 소유한 Cloud Storage 버킷과 리소스에 액세스할 수 있습니다. 대부분의 Compute Engine 작업자가 프로젝트 리소스에 대한 읽기/쓰기 액세스를 요구하므로 프로젝트에 자동으로 설정된 기본 권한을 변경하지 않는 것이 좋습니다.

GCP Console의 권한 페이지에서 프로젝트의 서비스 계정 목록을 확인할 수 있습니다.

사용자 관리형 컨트롤러 서비스 계정 지정

세분화된 액세스 및 제어를 통해 리소스를 생성하고 사용하려는 경우 작업 프로젝트의 서비스 계정을 사용자 관리형 컨트롤러 서비스 계정으로 사용할 수 있습니다.

사용자 관리형 서비스 계정이 없는 경우 작업과 동일한 프로젝트에 있는 서비스 계정을 생성하여 서비스 계정의 필수 IAM 역할을 설정해야 합니다. 서비스 계정에는 최소한 Dataflow 작업자 역할이 있어야 합니다. BigQuery, Cloud Pub/Sub, Cloud Storage에 대한 쓰기와 같은 작업 요구 사항에 따라 Cloud Platform 리소스를 사용하려면 서비스 계정에 추가 역할이 필요할 수 있습니다. 예를 들어 BigQuery에서 작업을 읽는 경우 서비스 계정에도 최소한 bigquery.dataViewer 역할이 있어야 합니다.

자바

파이프라인 작업을 실행할 때 --serviceAccount 옵션을 사용하여 서비스 계정을 지정합니다.--serviceAccount=my-service-account-name@<project-id>.iam.gserviceaccount.com

Python

파이프라인 작업을 실행할 때 --service_account_email 옵션을 사용하여 서비스 계정을 지정합니다.--service_account_email=my-service-account-name@<project-id>.iam.gserviceaccount.com

여러 Google Cloud Platform 프로젝트에서 Google Cloud Platform 리소스에 액세스

Apache Beam 파이프라인은 다른 GCP 프로젝트의 GCP 리소스에 액세스할 수 있습니다. 예를 들면 다음과 같습니다.

자바

  • Cloud Storage 버킷
  • BigQuery 데이터세트
  • Cloud Pub/Sub 주제와 구독
  • Cloud Datastore 데이터세트

Python

  • Cloud Storage 버킷
  • BigQuery 데이터세트
  • Cloud Datastore 데이터세트

Apache Beam 파이프라인이 프로젝트 전체에서 이러한 리소스에 액세스할 수 있게 하려면 리소스 각각의 액세스 제어 메커니즘을 사용하여 Cloud Dataflow 프로젝트의 컨트롤러 서비스 계정에 대한 액세스 권한을 명시적으로 부여해야 합니다.

Google Cloud Platform 프로젝트에서 Cloud Storage 버킷에 액세스

Cloud Dataflow 프로젝트에 다른 GCP 프로젝트가 소유한 Cloud Storage 버킷에 대한 액세스 권한을 부여하려면 버킷이 Cloud Dataflow 프로젝트의 컨트롤러 서비스 계정에 액세스할 수 있도록 설정해야 합니다. Cloud Storage 액세스 제어를 사용하여 필요한 액세스 권한을 부여할 수 있습니다.

참고: 기본 서비스 계정을 사용하지 않는 경우 권한이 IAM 설정과 일치하는지 확인하세요.

GCP Console의 IAM 및 관리자 페이지에서 Cloud Dataflow 프로젝트의 서비스 계정 목록을 확인할 수 있습니다. 계정 이름을 알면 gsutil 명령어를 실행하여 버킷과 해당 콘텐츠에 프로젝트의 서비스 계정 소유권(읽기/쓰기 권한)을 부여할 수 있습니다.

Cloud Dataflow 프로젝트 서비스 계정에 다른 프로젝트의 Cloud Storage 버킷에 대한 액세스 권한을 부여하려면 셸 또는 터미널 창에 다음 명령어를 사용합니다.gsutil acl ch -u <project-number>-compute@developer.gserviceaccount.com:OWNER gs://<bucket>

Cloud Dataflow 프로젝트 서비스 계정에 다른 프로젝트의 Cloud Storage 버킷의 기존 콘텐츠에 대한 액세스 권한을 부여하려면 셸 또는 터미널 창에 다음 명령어를 사용합니다.gsutil -m acl ch -r -u <project-number>-compute@developer.gserviceaccount.com:OWNER gs://<bucket>

참고: -m 옵션은 보다 빠르게 처리되도록 명령어를 동시에 실행하고 -r 옵션은 버킷 내의 리소스에 명령어를 반복해서 실행합니다.

이전 명령어는 기존 리소스에만 액세스 권한을 부여합니다. Cloud Dataflow 프로젝트의 서비스 계정 기본 권한을 버킷에 부여하면 버킷에 추가될 향후 리소스에 액세스할 수 있습니다.gsutil defacl ch -u <project-number>-compute@developer.gserviceaccount.com:OWNER gs://<bucket>

Google Cloud Platform 프로젝트에서 BigQuery 데이터세트에 액세스

BigQueryIO API를 사용하여 Cloud Dataflow를 사용하는 프로젝트가 아닌 다른 GCP 프로젝트가 소유한 BigQuery 데이터세트에 액세스할 수 있습니다. BigQuery 소스와 싱크가 제대로 작동하려면 다음 두 계정이 Cloud Dataflow 작업에서 읽고 쓰는 모든 BigQuery 데이터세트에 액세스할 수 있어야 합니다.

이러한 계정에 명시적으로 액세스 권한을 부여하려면 BigQuery를 구성해야 합니다. BigQuery 웹 UI 또는 BigQuery API를 사용한 BigQuery 데이터세트의 액세스 권한 부여에 대한 자세한 내용은 BigQuery 액세스 제어를 참조하세요.

예를 들어 GCP 계정이 abcde@gmail.com이고 Cloud Dataflow 작업을 실행하는 프로젝트 번호가 123456789인 경우 과 123456789-compute@developer.gserviceaccount.com 계정은 사용된 BigQuery 데이터세트에 액세스할 수 있는 권한을 부여받아야 합니다.

Google Cloud Platform 프로젝트에서 Cloud Pub/Sub 주제 및 구독에 액세스

다른 GCP 프로젝트가 소유한 Cloud Pub/Sub 주제 또는 구독에 액세스하려면 Cloud Pub/Sub의 ID 및 액세스 관리 기능을 사용하여 프로젝트 간 권한을 설정해야 합니다. Cloud Dataflow는 컨트롤러 서비스 계정을 사용하여 작업을 실행하므로 이 서비스 계정에 다른 프로젝트의 Cloud Pub/Sub 리소스에 액세스할 수 있는 권한을 부여해야 합니다.

다음 Cloud Pub/Sub 역할의 권한은 필수입니다.

  • roles/pubsub.subscriber
  • roles/pubsub.viewer

Cloud Pub/Sub의 ID 및 액세스 관리 기능에 대한 자세한 내용 및 사용 방법을 보여주는 코드 예시를 보려면 샘플 사용 사례: 프로젝트 간 통신을 참조하세요.

Google Cloud Platform 프로젝트에서 Cloud Datastore에 액세스

다른 GCP 프로젝트가 소유한 Cloud Datastore에 액세스하려면 Cloud Dataflow 프로젝트의 Compute Engine(<project-number>-compute@developer.gserviceaccount.com) 서비스 계정을 Cloud Datastore를 소유한 프로젝트의 편집자로 추가해야 합니다. 또한, https://console.cloud.google.com/project/<project-id>/apiui/apiview/datastore/overview의 두 프로젝트에서 Cloud Datastore API를 사용하도록 설정해야 합니다.

데이터 액세스 및 보안

Cloud Dataflow 서비스는 여러 보안 메커니즘을 사용하여 데이터를 안전하게 비공개로 유지합니다. 이러한 메커니즘은 다음 상황에 적용됩니다.

  • 서비스에 파이프라인을 제출하는 경우
  • 서비스가 파이프라인을 평가하는 경우
  • 파이프라인 실행 도중이나 후에 원격 분석 및 측정항목에 대한 액세스 권한을 요청하는 경우

파이프라인 제출

Google Cloud Project 권한은 Cloud Dataflow 서비스에 대한 액세스를 제어합니다. 편집 또는 소유자 권한이 부여된 프로젝트의 모든 구성원은 파이프라인을 서비스에 제출할 수 있습니다. 파이프라인을 제출하려면 gcloud 명령줄 도구를 사용하여 인증해야 합니다. 인증 후에는 HTTPS 프로토콜을 사용하여 파이프라인을 제출할 수 있습니다. GCP 계정 사용자 인증 정보를 인증하는 방법에 대한 자세한 내용은 현지 언어로 된 빠른 시작을 참조하세요.

파이프라인 평가

임시 데이터

파이프라인 평가 일환으로 임시 데이터가 생성되어 작업자 또는 Cloud Storage에 로컬로 저장될 수 있습니다. 저장 상태의 임시 데이터는 암호화되며 파이프라인이 평가된 후에는 유지되지 않습니다.

자바

기본적으로 Compute Engine VM은 작업 성공 여부와 관계없이 Cloud Dataflow 작업이 완료되면 삭제됩니다. 즉, 관련 Persistent Disk 및 여기에 저장된 모든 중간 데이터가 삭제됩니다. Cloud Storage에 저장된 중간 데이터는 Cloud Storage 경로 --stagingLocation 또는 --tempLocation의 하위 위치에서 찾을 수 있습니다. Cloud Storage 파일에 출력을 쓰는 경우 쓰기 작업이 완료되기 전에 출력 위치에 임시 파일이 생성될 수 있습니다.

Python

기본적으로 Compute Engine VM은 작업 성공 여부와 관계없이 Cloud Dataflow 작업이 완료되면 삭제됩니다. 즉, 관련 Persistent Disk 및 여기에 저장된 모든 중간 데이터가 삭제됩니다. Cloud Storage에 저장된 중간 데이터는 Cloud Storage 경로 --staging_location 또는 --temp_location의 하위 위치에서 찾을 수 있습니다. Cloud Storage 파일에 출력을 쓰는 경우 쓰기 작업이 완료되기 전에 출력 위치에 임시 파일이 생성될 수 있습니다.

로깅된 데이터

Cloud Logging에 저장된 정보는 주로 Cloud Dataflow 프로그램의 코드를 통해 생성됩니다. Cloud Dataflow 서비스는 Cloud Logging에서 경고 및 오류 데이터를 생성할 수 있지만 이러한 데이터는 서비스가 로그에 추가하는 유일한 중간 데이터입니다.

진행 중인 데이터

파이프라인 평가 중에 데이터가 전송되는 모드는 두 가지입니다.

  • 소스와 싱크에서 읽기/쓰기를 수행하는 경우
  • 데이터가 파이프라인 내에서 처리되는 동안 작업자 인스턴스 간

GCP 소스 및 싱크와의 모든 통신은 암호화되어 HTTPS를 통해 전달됩니다. 모든 내부 작업자 간의 통신은 비공개 네트워크에서 이루어지며 프로젝트의 권한 및 방화벽 규칙이 적용됩니다.

데이터 지역성

파이프라인의 논리는 개별 Compute Engine 인스턴스에서 평가됩니다. 이러한 인스턴스가 위치한 영역과 인스턴스가 통신하는 비공개 네트워크를 지정할 수 있습니다. Google 인프라에서 발생하는 보조 계산은 메타데이터(예: Cloud Storage 위치 또는 파일 크기)를 사용합니다. 데이터는 영역을 벗어나거나 보안 경계를 무너뜨리지 않습니다.

원격 분석 및 측정항목

저장 상태의 원격 분석 데이터와 관련 측정항목은 암호화되며 이 데이터에 대한 액세스는 GCP 프로젝트의 읽기 권한으로 제어됩니다.

파이프라인의 기본 클라우드 리소스에서 제공되는 보안 메커니즘을 사용하는 것이 좋습니다. 이러한 메커니즘으로는 데이터 소스 및 싱크의 데이터 보안 기능을 갖춘 BigQuery 및 Cloud Storage 등이 포함됩니다. 또한 단일 프로젝트에서 서로 다른 신뢰 수준을 혼용하지 않아야 합니다.

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

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

도움이 필요하시나요? 지원 페이지를 방문하세요.