VPC 서비스 제어 - BigQuery Data Transfer Service 보호

1. 소개

이 실습에서는 Cloud Storage에서 BigQuery 데이터 세트로 데이터를 전송하는 동안 VPC 서비스 제어를 사용하여 BigQuery Data Transfer Service를 보호하는 방법을 알아봅니다. 그런 다음 Cloud Storage를 보호하고 이 프로세스를 반복하여 Cloud Storage에서 BigQuery로 데이터를 전송합니다. Cloud Storage 보호로 인해 VPC 서비스 제어가 위반되며, 이를 해결해야 전송이 완료됩니다. 마지막으로 BigQuery도 보호한 다음 프로젝트 간에 데이터 세트를 복사하려고 시도합니다. 이 경우에도 수정해야 하는 위반이 발생합니다.

이 실습에서는 인그레스 규칙과 이그레스 규칙을 각각 사용하여 인그레스 및 이그레스 위반을 모두 수정하는 방법을 알아봅니다. 또한 액세스 수준을 사용하여 BigQuery 데이터 전송 인그레스 위반을 수정할 예정입니다. 이 Codelab의 목표는 다음과 같습니다.

  • Cloud Storage, BigQuery, BigQuery Data Transfer Service 등 다양한 서비스에서 각각 인그레스 및 이그레스 규칙을 사용하여 인그레스 및 이그레스 위반을 수정하는 방법을 알아봅니다.
  • 특정 위반이 발생한 이유를 파악합니다.

2. 리소스 설정 및 요구사항

시작하기 전에

이 Codelab에서는 다음 사항을 이미 알고 있다고 가정합니다.

설정

초기 설정은 다음과 같이 설계되었습니다.

Codelab 초기 설정 다이어그램

범위가 지정된 정책 및 일반 서비스 경계 만들기

이 Codelab에서는 project-2를 보호하는 일반 서비스 경계를 사용합니다.

경계 perimeter-2에서 BigQuery Data Transfer API를 제한합니다.

데이터 전송 서비스를 보호하는 VPC SC 구성

Cloud Storage 버킷 및 BigQuery 데이터 세트 만들기

이 Codelab의 목적상 콘텐츠와 관계없이 어떤 csv 파일도 충분합니다. 주요 제한사항은 다음을 시행하는 공동 배치 요구사항과 관련이 있습니다.

  • BigQuery 데이터 세트가 멀티 리전에 있으면 전송 중인 데이터가 포함된 Cloud Storage 버킷은 동일한 멀티 리전이나 멀티 리전 내에 포함된 위치에 있어야 합니다.
  • 데이터 세트가 한 리전에 있으면 Cloud Storage 버킷은 같은 리전에 있어야 합니다.

따라서 이 Codelab에서는 Cloud Storage 버킷과 BigQuery 데이터 세트가 모두 동일한 리전 또는 멀티 리전에 있는지 확인합니다.

프로젝트 project-1에 새 Cloud Storage 버킷 만들기

새 Cloud Storage 버킷을 만들려면 문서에 설명된 새 버킷 만들기 단계를 따르세요.

  • 버킷 이름에 버킷 이름 요구사항을 충족하는 이름을 입력합니다. 이 Codelab에서는 버킷을 codelab-bqtransfer-bucket이라고 합니다.
  • 데이터를 저장할 위치인 버킷 위치의 경우 버킷 데이터가 영구적으로 저장될 위치 유형위치를 선택합니다. 이 Codelab에서는 미국 (미국 내 여러 리전)을 사용합니다.

Cloud Storage 생성 구성

CSV 파일 만들기

로컬 머신에서 또는 Cloud Shell을 사용하여 echo 명령어를 사용하여 다음 명령어를 사용하여 샘플 CSV 파일 codelab-test-file.csv을 만들 수 있습니다.

echo "name,age" > codelab-test-file.csv; \
echo "Alice,10" >> codelab-test-file.csv; \
echo "Bob,20" >> codelab-test-file.csv; \
echo "Carol,30" >> codelab-test-file.csv; \
echo "Dan,40" >> codelab-test-file.csv; \
echo "Eve,50" >> codelab-test-file.csv; \
echo "Frank,60" >> codelab-test-file.csv; \
echo "Grace,70" >> codelab-test-file.csv; \
echo "Heidi,80" >> codelab-test-file.csv;

Cloud Storage 버킷에 CSV 파일 업로드

CSV 파일이 생성되면 다음 명령어를 실행하여 생성된 버킷에 파일 객체를 업로드합니다.

gcloud storage cp codelab-test-file.csv gs://codelab-bqtransfer-bucket

cp 명령어를 실행하여 csv 파일을 Cloud Storage에 업로드합니다.

버킷에 객체를 나열하거나 다음 명령어를 실행하여 파일이 생성된 버킷에 업로드되었는지 확인할 수 있습니다.

gcloud storage ls --recursive gs://codelab-bqtransfer-bucket/**

project-2에서 BigQuery 데이터 세트 및 테이블 만들기

  1. 이 단계에 따라 project-2 프로젝트에서 BigQuery 데이터 세트를 만듭니다.
    1. 데이터 세트 ID고유한 데이터 세트 이름을 입력합니다. 이 Codelab에서는 codelab_bqtransfer_dataset을 사용합니다.
    2. 위치 유형에서 데이터 세트의 지리적 위치를 선택합니다. 이 Codelab에서는 Cloud Storage 버킷과 동일한 위치(미국(미국의 여러 리전))를 사용합니다. BigQuery 데이터 세트 생성
  2. 이 단계에 따라 생성된 데이터 세트 codelab_bqtransfer_dataset 아래에 BigQuery 테이블을 만듭니다.
    1. 소스 섹션의 다음 항목으로 테이블 만들기 목록에서 빈 테이블을 선택합니다.
    2. 테이블 필드에 만들려는 테이블의 이름을 입력합니다. 이 Codelab에서는 codelab-bqtransfer-table라는 이름을 사용합니다.
    3. 테이블 유형 필드가 기본 테이블로 설정되어 있는지 확인합니다.
    4. 스키마 섹션에 스키마 정의를 입력합니다. 텍스트로 수정을 클릭하고 생성된 CSV 파일의 형식을 준수하는 다음 스키마를 입력하여 스키마 정보를 입력할 수 있습니다.
    [{
    "name": "name",
    "type": "STRING",
    "mode": "NULLABLE",
    "description": "The name"
    },
    {
    "name": "age",
    "type": "INTEGER",
    "mode": "NULLABLE",
    "description": "The age"
    }]
    

비용

Cloud 리소스/API를 사용하려면 프로젝트 project-2project-1에서 결제를 사용 설정해야 합니다. 이 Codelab을 마친 후 비용이 청구되지 않도록 사용한 리소스를 종료하는 것이 좋습니다.

비용이 발생하는 리소스는 BigQuery와 Cloud Storage입니다. 예상 비용은 BigQuery 가격 계산기Cloud Storage 계산기에서 확인할 수 있습니다.

3. Cloud Storage 객체에서 BigQuery 테이블로의 데이터 전송 구성

이제 Cloud Storage (project-1에 있음)에서 BigQuery (project-2에 있음)로 전송하는 Data Transfer Service (project-2)를 만들고 project-2에서 BigQuery Data Transfer Service를 보호하는 VPC Service Control을 설정해 보겠습니다. BigQuery 및 Cloud Storage를 보호하지 않고 BigQuery Data Transfer Service만 보호하면 사용자는 데이터 전송만 만들고 관리할 수 있습니다(예: 데이터 전송 수동 시작).

Cloud Storage에서 데이터 전송 설정

데이터 전송을 만들려면 다음 단계를 따르세요.

  1. project-2Google Cloud 콘솔의 BigQuery 페이지로 이동합니다.
  2. 데이터 전송을 클릭합니다.

Data Transfer Service 페이지의 VPC SC 위반

데이터 전송 페이지에 액세스하는 동안 위반사항 조사

Google Cloud 콘솔에서 VPC 서비스 제어 고유 식별자를 확인할 수 있습니다. 동일한 식별자를 사용하여 로그를 필터링하고 위반 세부정보를 식별합니다 (OBSERVED_VPCSC_DENIAL_UNIQUE_ID를 관찰된 거부 ID로 바꿉니다).

protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
protoPayload.metadata.vpcServiceControlsUniqueId="OBSERVED_VPCSC_DENIAL_UNIQUE_ID"

감지된 위반사항은 NO_MATCHING_ACCESS_LEVEL이며 다음과 유사한 세부정보가 있는 인그레스 위반입니다.

ingressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
targetResource: "projects/[PROJECT2_NUMBER]"
}]
violationReason: "NO_MATCHING_ACCESS_LEVEL"
callerIp: "USER_PUBLIC_IP_ADDRESS"
resource: {
labels: {
method: "google.cloud.bigquery.datatransfer.v1.DataTransferService.ListTransferConfigs"
project_id: "project-2"
service: "bigquerydatatransfer.googleapis.com"
}
type: "audited_resource"
}

데이터 전송 페이지에 액세스하면 구성된 데이터 전송을 나열하려고 시도하므로 ListTransferConfigs 메서드가 위반됩니다.

bigquerydatatransfer.googleapis.com 서비스의 위반사항 수정

액세스 수준 또는 인그레스 규칙을 사용하여 인그레스 위반을 수정할 수 있습니다. 이 Codelab에서는 bigquerydatatransfer.googleapis.com 서비스 및 모든 메서드에 대한 액세스를 허용하는 거부된 사용자 ID로 구성된 인그레스 규칙을 사용해 보겠습니다.

데이터 전송 방법을 허용하는 인그레스 규칙

인그레스 규칙이 적용되면 데이터 전송 페이지에 문제 없이 액세스할 수 있습니다.

Cloud Storage에서 데이터 전송 설정 재개

이전 단계에서 데이터 전송 페이지 (데이터 전송을 클릭한 후)에서 다음 단계를 계속 진행합니다.

  1. + 전송 만들기를 클릭합니다.
  2. 소스 유형 섹션의 소스에서 Google Cloud Storage를 선택합니다.
  3. 전송 구성 이름 섹션의 표시 이름에 전송 이름(예: Codelab Transfer)을 입력합니다.
  4. 일정 옵션 섹션에서 다음을 수행합니다.
    1. 반복 빈도(예: 15분)를 선택합니다.
    2. 지금 시작을 선택해야 합니다. 그러지 않으면 구성된 반복 빈도 후에만 데이터 전송이 시작됩니다.
  5. 대상 설정 섹션의 대상 데이터 세트에서 데이터를 저장하기 위해 만든 데이터 세트를 선택합니다. codelab_bqtransfer_dataset
  6. 데이터 소스 세부정보 섹션에서
    1. 대상 테이블에 대상 테이블 이름을 입력합니다. 대상 테이블은 테이블 이름 지정 규칙을 따라야 합니다. 이 Codelab에서는 앞에서 만든 테이블 codelab-bqtransfer-table을 사용합니다.
    2. Cloud Storage URICloud Storage URI를 입력합니다. 이 Codelab에서는 만든 버킷과 파일(codelab-bqtransfer-bucket/codelab-test-file.csv)을 사용합니다.
    3. 쓰기 환경설정의 경우 APPEND를 유지하거나 MIRROR를 선택합니다.
    4. 전송 후 파일을 삭제하도록 선택하지 마세요. 동일한 파일을 여러 번 재사용하기 때문입니다. 하지만 여러 파일을 사용하고 전송 후 소스 파일을 삭제할 수 있습니다.)
    5. 파일 형식에서 CSV를 선택합니다.
    6. 전송 옵션CSV에서 쉼표(",")를 필드 구분 기호로 입력합니다.
  7. 서비스 계정 메뉴에서 Google Cloud 프로젝트와 연결된 서비스 계정의 서비스 계정을 선택합니다.
    1. 선택한 서비스 계정에는 스토리지 버킷을 호스팅하는 프로젝트의 Cloud Storage(이 Codelab에서는 project-1)에 대한 필수 권한이 있어야 합니다.
    2. 이 Codelab에서는 project-2에서 만든 서비스 계정을 codelab-sa@project-2.iam.gserviceaccount.com로 사용합니다.
  8. 저장을 클릭합니다.

일정 옵션으로 지금 시작을 선택했으므로 저장을 선택하는 즉시 첫 번째 전송이 시작됩니다.

데이터 전송 서비스 상태 확인

구성된 데이터 전송의 상태를 확인하려면 다음 단계를 따르세요.

Data Transfer Service 작업

Codelab Transfer (표시 이름 아래)를 클릭하면 지금까지 실행된 모든 실행 목록이 표시됩니다.

Data Transfer Service 실행 세부정보

수동으로 트리거된 데이터 전송과 예약된 데이터 전송 모두 VPC 서비스 제어 위반 없이 데이터 전송 실행이 완료되어야 합니다. 수동으로 트리거된 전송만 수동으로 전송을 시작하는 주 구성원에 대한 액세스를 허용하는 인그레스 규칙이 필요합니다.

4. 수동으로 트리거된 데이터 전송의 IP 주소 제한

현재 구성된 인그레스 규칙을 사용하면 구성된 ID가 모든 IP 주소에서 데이터 전송을 수동으로 트리거할 수 있습니다.

액세스 수준을 사용하면 VPC 서비스 제어에서 특정 API 요청 속성별로 허용된 액세스를 제한할 수 있습니다. 특히 다음과 같은 속성이 있습니다.

  • IP 서브네트워크: 요청이 특정 IP 주소에서 들어오는지 확인합니다.
  • 지역: IP 주소의 위치정보에 따라 특정 지역에서 요청이 발생했는지 확인합니다.
  • 주 구성원: 요청이 특정 계정에서 들어오는지 확인합니다.
  • 기기 정책: 요청이 특정 요구사항을 충족하는 기기에서 전송되었는지 확인합니다.

이미 구성된 인그레스 규칙과 함께 이러한 속성의 확인을 적용하려면 원하는 속성을 허용하는 액세스 수준을 만든 다음 생성된 액세스 수준을 인그레스 규칙의 소스로 추가해야 합니다.

사용자 IP 주소별로 VPC SC로 보호되는 액세스 이 다이어그램은 세 가지 시나리오에서 두 사용자 (user@example.comuser2@example.com)가 시작한 액세스를 보여줍니다. VPC 서비스 제어에서 소스 (인그레스 액세스 수준)와 ID 속성을 모두 일치해야 하는 AND 조건으로 평가하는 방식을 보여줍니다.

  1. user@example.com 사용자의 IP 주소와 사용자 계정이 인그레스 규칙의 구성과 일치하므로 액세스 수준에서 허용하는 IP 주소에서 액세스하려고 할 때 액세스가 허용됩니다.
  2. 사용자 user@example.com의 계정이 인그레스 규칙에 구성된 계정임에도 불구하고 IP 주소가 허용된 IP 주소와 일치하지 않으면 액세스가 차단됩니다.
  3. 사용자 user2@example.com의 계정이 인그레스 규칙에서 허용되지 않으므로 허용된 IP 주소에서 액세스하려고 시도해도 액세스가 차단됩니다.

액세스 수준 생성

IP 주소별로 액세스를 제한하는 액세스 수준을 만들려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 Access Context Manager 페이지를 엽니다.
    • 메시지가 표시되면 codelab-folder 폴더를 선택합니다.
  2. Access Context Manager 페이지 상단에서 액세스 수준 만들기를 클릭합니다.
  3. 새 액세스 수준 창에서 새 액세스 수준에 제목을 지정합니다. 이 Codelab에서는 project_2_al이라고 칭합니다.
  4. 조건 섹션에서 IP 서브네트워크 앞에 있는 +를 클릭합니다.
  5. IP 서브네트워크 상자에서 공개 IP를 선택합니다.

인그레스 규칙에 액세스 수준 추가

인그레스 규칙 내에서 액세스 수준은 sources 필드 아래에서 참조되며, 이 필드는 인그레스 규칙 참조에 설명된 대로 필수 필드입니다. 리소스에 대한 인그레스를 허용하기 위해 VPC 서비스 제어는 sourcesidentityType 속성을 AND 조건으로 평가합니다. 인그레스 규칙은 데이터 전송 구성에 지정된 서비스 계정이 아닌 데이터 전송을 수동으로 트리거하는 주 구성원의 ID를 사용합니다.

액세스 수준으로 구성된 인그레스 규칙

IP 주소별 액세스를 제한하는 구성으로 전송 다시 실행

적용된 구성의 효과를 평가하려면 다음 시나리오를 사용하여 전송을 다시 트리거합니다.

  • 인그레스 규칙에서 참조하는 액세스 수준에서 허용되는 범위의 IP 주소를 사용합니다.
  • 구성에서 허용되지 않는 IP 주소 사용

허용된 IP 주소에서 액세스하면 성공하지만 허용되지 않는 IP 주소에서 액세스하면 실패하고 VPC 서비스 제어 위반이 발생합니다.

다른 IP 주소를 사용하여 테스트하는 간단한 방법은 Google Cloud 콘솔을 사용하는 동안 할당된 IP 주소를 허용한 다음 Cloud Shell을 사용하는 동안 테스트하는 것입니다.

Cloud Shell에서 다음 명령어를 실행하여 RUN_TIME 및 RESOURCE_NAME을 모두 바꿔 수동으로 전송을 트리거합니다.

bq mk \
  --transfer_run \
  --run_time='RUN_TIME' \
  RESOURCE_NAME

예를 들어 다음 샘플 명령어는 1234567890 프로젝트의 전송 12345678-90ab-cdef-ghij-klmnopqrstuv 구성을 즉시 실행합니다.

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ");
bq mk \
  --transfer_run \
  --run_time=$NOW \
  projects/1234567890/locations/us/transferConfigs/12345678-90ab-cdef-ghij-klmnopqrstuv

IP 주소가 허용되지 않으므로 예상대로 관찰된 출력에는 VPC 서비스 제어 위반이 표시됩니다.

허용되지 않는 IP 주소에서 발생한 VPC SC 위반

DataTransferService.StartManualTransferRuns 메서드에서 위반이 관찰되었습니다.

ingressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
targetResource: "projects/[PROJECT2_NUMBER]"
targetResourcePermissions: [0: "vpcsc.permissions.unavailable"]
}]
violationReason: "RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER"
resource: {
labels: {
method: "google.cloud.bigquery.datatransfer.v1.DataTransferService.StartManualTransferRuns"
project_id: "project-2"
service: "bigquerydatatransfer.googleapis.com"
}
type: "audited_resource"
}
severity: "ERROR"

5. Cloud Storage 서비스를 보호하면서 데이터 전송 시작

Cloud Storage에서 BigQuery로 전송할 것이므로 VPC 서비스 제어로 보호되는 서비스에 Cloud Storage를 추가하고 전송이 계속 성공적으로 이루어지는지 확인해 보겠습니다.

perimeter-2 구성에서 BigQuery Data Transfer API와 함께 Cloud Storage API를 제한된 서비스 중 하나로 추가합니다.

Cloud Storage를 보호하는 VPC SC 구성

Cloud Storage API를 보호한 후 다음으로 예약된 데이터 전송을 기다리거나 다음 단계에 따라 전송을 수동으로 트리거합니다.

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
  2. 데이터 전송을 클릭합니다.
  3. 목록에서 전송을 선택합니다. 이 Codelab에서는 Codelab Transfer 전송을 사용합니다.
  4. 지금 이전 실행을 클릭합니다.
  5. 확인을 클릭합니다.

다른 전송이 시작됩니다. 페이지를 새로고침해야 할 수도 있습니다. 이번에는 VPC 서비스 제어 위반으로 인해 전송이 실패합니다.

BigQuery 데이터 세트 복사로 인한 VPC SC 위반

Cloud Storage VPC 서비스 제어 위반 조사

전송 요약에 표시된 vpcServiceControlsUniqueIdentifier를 사용하여 감사 로그를 필터링합니다.

감지된 위반사항은 다음 세부정보가 포함된 RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER 이그레스 위반입니다.

  • 주 구성원은 데이터 전송 서비스에 구성된 서비스 계정입니다. 수동으로 트리거했거나 예약된 데이터 전송을 실행했는지와 관계없이 거부된 주 구성원은 동일합니다.
  • 영향을 받는 서비스는 Cloud Storage입니다.
  • 요청 소스는 데이터 전송 서비스가 구성된 프로젝트인 project-2입니다.
  • 대상 프로젝트는 Cloud Storage 객체가 있는 프로젝트입니다. project-1
principalEmail: "codelab-sa@project-2.iam.gserviceaccount.com"
egressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
source: "projects/[PROJECT2_NUMBER]"
sourceType: "Resource"
targetResource: "projects/[PROJECT1_NUMBER]"
targetResourcePermissions: [0: "storage.objects.get"]
}]
labels: {
method: "google.storage.objects.get"
project_id: "project-2"
service: "storage.googleapis.com"
}

Cloud Storage 이그레스 위반 수정

이그레스 위반을 수정하려면 거부된 서비스 계정에서 Cloud Storage 객체가 있는 프로젝트로의 트래픽을 허용하는 이그레스 규칙을 사용해야 합니다.

Codelab 서비스 계정을 허용하는 이그레스 규칙

서비스 경계 perimeter-2를 수정한 후 이 프로세스를 반복하여 이전을 다시 트리거합니다. 전송에 오류가 표시되지 않습니다.

이그레스 규칙을 구성한 후 데이터 전송 실행에 관한 세부정보입니다.

6. BigQuery 데이터 세트를 project-2에서 project-1로 복사

project-1의 Cloud Storage 버킷에서 project-2의 BigQuery 데이터 세트로 데이터를 전송할 수 있는지 확인한 후 BigQuery API가 VPC 서비스 제어로 보호되는 동안 project-2에서 project-1BigQuery 데이터 세트를 복사해 보겠습니다.

데이터 세트를 만들고 복사하려면 bq 도구를 사용하는 bq mk 명령어를 사용합니다.

project-1에서 대상 데이터 세트 만들기

데이터 세트를 복사하기 전에 먼저 대상 데이터 세트를 만들어야 합니다. 대상 데이터 세트를 만들려면 다음 명령어를 실행하면 됩니다. 이 명령어는 project-1 프로젝트에 us를 위치로 사용하여 copied_dataset라는 데이터 세트를 만듭니다.

bq mk \
  --dataset \
  --location=us \
  project-1:copied_dataset

VPC 서비스 제어를 사용하여 project-2의 BigQuery 서비스 보호

경계 perimeter-2의 구성을 수정하고 BigQuery Data TransferCloud Storage 서비스와 함께 BigQuery API를 보호된 서비스로 추가합니다.

Cloud Storage API를 보호하도록 구성된 VPC SC

데이터 세트 사본 시작

데이터 세트를 복사하려면 다음 bq mk 명령어를 실행합니다. 이 명령어는 project-2 프로젝트의 데이터 세트 codelab_bqtransfer_datasetproject-1의 데이터 세트 copied_dataset로 복사하고 데이터 세트 콘텐츠가 있는 경우 덮어씁니다.

bq mk \
  --transfer_config \
  --project_id=project-1 \
  --target_dataset=copied_dataset \
  --data_source=cross_region_copy \
  --display_name='Dataset from project-2 to project-1' \
  --params='{
     "source_dataset_id":"codelab_bqtransfer_dataset",
     "source_project_id":"project-2",
     "overwrite_destination_table":"true"
     }'

명령어가 성공적으로 실행됩니다. 그동안 전송 구성이 생성되어 데이터 세트 복사 작업이 시작됩니다. 데이터 세트 자체를 복사하면 VPC 서비스 제어 위반으로 인해 실패합니다.

해당하는 VPC 서비스 제어 위반 세부정보를 찾으려면 다음 로그 쿼리를 사용하여 project-2 (소스 데이터 세트 프로젝트)의 로그를 확인하세요. 로그 쿼리는 BigQuery 서비스 및 복사 중인 데이터 세트의 리소스 이름 (codelab_bqtransfer_dataset)의 로그를 필터링합니다.

resource.labels.service="bigquery.googleapis.com"
protoPayload.metadata.resourceNames:"datasets/codelab_bqtransfer_dataset"

감지된 VPC 서비스 제어 위반은 project-2에서 project-1로의 이그레스 위반입니다.

egressViolations: [
  0: {
   servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
   source: "projects/[PROJECT-2-NUMBER]"
   sourceType: "Resource"
   targetResource: "projects/[PROJECT-1-NUMBER]"
   targetResourcePermissions: [
     0: "bigquery.transfers.update"
     1: "bigquery.transfers.get"
     2: "bigquery.jobs.create"
     ]
   }
]
method: "bigquery.tables.getData"
service: "bigquery.googleapis.com"

모든 BigQuery 위반사항을 수정하고 데이터 세트 복사를 다시 시작합니다.

이그레스 위반을 해결하려면 거부된 주 구성원을 허용하는 이그레스 규칙을 만들어야 합니다. 거부된 주 구성원은 mk 명령어를 실행하는 주 구성원입니다.

모든 BigQuery 메서드에 대한 액세스를 허용하는 이그레스 규칙

이그레스 규칙이 적용되면 퍼리미터 perimeter-2에서 동일한 명령어를 실행하여 데이터 세트를 복사합니다. 이번에는 VPC 서비스 제어 위반 없이 데이터 세트를 성공적으로 복사합니다.

7. 삭제

서비스를 사용하지 않을 때 VPC 서비스 제어를 사용하는 데 별도의 비용이 청구되지는 않지만 이 실습에서 사용한 설정을 정리하는 것이 좋습니다. 비용이 청구되지 않도록 VM 인스턴스 또는 Cloud 프로젝트를 삭제할 수도 있습니다. Cloud 프로젝트를 삭제하면 해당 프로젝트 내에서 사용되는 모든 리소스에 대한 청구가 중단됩니다.

  • Cloud Storage 버킷을 삭제하려면 다음 단계를 완료하세요.
    • Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.
    • 삭제할 버킷의 체크박스를 선택한 다음 삭제를 클릭합니다.
    • 표시되는 오버레이 창에서 버킷과 콘텐츠를 삭제할 것인지 확인합니다. Cloud Storage 버킷 삭제
  • BigQuery 데이터 세트를 삭제하려면 다음 단계를 완료하세요.
    • Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
    • 탐색기 창에서 프로젝트를 확장하고 데이터 세트를 선택합니다.
    • 점 3개로 된 메뉴를 펼치고 삭제를 클릭합니다.
    • 데이터 세트 삭제 대화상자의 필드에 delete를 입력한 후 삭제를 클릭합니다. BigQuery 데이터 세트 삭제
  • 서비스 경계를 삭제하려면 다음 단계를 완료하세요.
    • Google Cloud 콘솔에서 보안을 선택한 다음 액세스 정책 범위가 지정된 수준(이 경우 폴더 수준)에서 VPC 서비스 제어를 선택합니다.
    • VPC 서비스 제어 페이지에서 삭제하려는 경계에 해당하는 표 행에서 Delete Icon를 선택합니다.
  • 액세스 수준을 삭제하려면 다음 단계를 완료하세요.
    • Google Cloud 콘솔에서 폴더 범위에서 Access Context Manager 페이지를 엽니다.
    • 그리드에서 삭제할 액세스 수준의 행을 찾은 다음 점 3개로 된 메뉴를 선택하고 삭제를 선택합니다.
  • 프로젝트를 종료하려면 다음 단계를 완료하세요.
    • Google Cloud 콘솔에서 삭제하려는 프로젝트의 IAM 및 관리자 설정 페이지로 이동합니다.
    • IAM 및 관리자 설정 페이지에서 종료를 선택합니다.
    • 프로젝트 ID를 입력하고 무시하고 종료를 선택합니다.

8. 축하합니다.

이 Codelab에서는 VPC 서비스 제어 경계를 만들고, 적용하고, 문제를 해결했습니다.

자세히 알아보기

다음 시나리오도 살펴볼 수 있습니다.

  • BigQuery, BigQuery Data Transfer Service, Cloud Storage도 보호하는 다른 경계에서 project-1를 추가합니다.
  • 다른 지원되는 소스에서 BigQuery 데이터 전송을 실행합니다.
  • 위치나 기기 정책과 같은 다른 속성으로 사용자 액세스를 제한합니다.

라이선스

이 작업물은 Creative Commons Attribution 2.0 일반 라이선스에 따라 사용이 허가되었습니다.