인그레스 및 이그레스 규칙을 사용한 안전한 데이터 교환

보안 데이터 교환 인그레스/이그레스 설정을 통해 서비스 경계로 구분된 클라이언트와 리소스에 대한 액세스를 허용합니다. 액세스는 인그레스 규칙과 이그레스 규칙으로 정의됩니다.

인그레스 규칙과 이그레스 규칙에 대한 개요는 인그레스 및 이그레스 규칙을 참조하세요.

인그레스 및 이그레스 규칙 정책을 적용하는 방법은 인그레스 및 이그레스 정책 구성을 참조하세요.

안전한 데이터 교환 사용 사례의 구성 예시

이 섹션에는 다음과 같은 안전한 데이터 교환 사용 사례 예시가 포함되어 있습니다.

  1. 경계 외부에 있는 Google Cloud 리소스에 대한 액세스 허용
  2. VPC 서비스 제어를 사용하는 두 조직 간에 Pub/Sub를 통한 공유
  3. PHI, 익명처리된 데이터 세그먼트, 파트너 조직
  4. 타사 Compute Engine 디스크 이미지
  5. 경계 외부의 VPC 네트워크에서 BigQuery 데이터 세트에 액세스하도록 비공개 액세스 허용
  6. 경계 외부의 VPC 네트워크에서 Cloud Storage 버킷에 로드(쓰기)하도록 비공개 액세스 허용
  7. 여러 경계의 프로젝트가 다른 경계의 로그를 공유하도록 허용

경계 외부에 있는 Google Cloud 리소스에 대한 액세스 허용

한 경계에서 이그레스

gcloud로 경계를 나열하여 찾은 다음과 같은 경계를 정의했다고 가정하겠습니다.

name: accessPolicies/222/servicePerimeters/Example
status:
  resources:
  - projects/111
  restrictedServices:
  - bigquery.googleapis.com
  - containerregistry.googleapis.com
title: Example

이제 다른 조직에 있는 999 프로젝트의 Cloud Storage 버킷에 대한 읽기 액세스 권한을 부여하려고 합니다. 다음과 같은 이그레스 규칙을 정의하고 gcs.yaml로 저장합니다.

echo """
- egressTo:
    operations:
      - serviceName: storage.googleapis.com
        methodSelectors:
        - method: google.storage.objects.get
    resources:
    - projects/999
  egressFrom:
    identityType: ANY_IDENTITY
""" > gcs.yaml

다음 명령어를 실행하여 이그레스 규칙을 적용합니다.

gcloud beta access-context-manager perimeters update Example --set-egress-policies=gcs.yaml

VPC 서비스 제어를 사용하는 두 조직 간에 Pub/Sub를 통한 공유

한 경계에서 이그레스하고 다른 경계로 인그레스

이 예시에서는 VPC 서비스 제어를 사용하는 Org1과 Or2라는 두 조직이 Pub/Sub 주제를 통해 데이터를 공유하려고 합니다.

gcloud로 경계를 나열하여 찾은 다음과 같은 경계를 정의했다고 가정하겠습니다.

# Org 1 Perimeter Definition
name: accessPolicies/222/servicePerimeters/Example1
status:
  resources:
  - projects/111
  restrictedServices:
  - pubsub.googleapis.com
title: Example1

# Org 2 Perimeter Definition
name: accessPolicies/333/servicePerimeters/Example2
status:
  resources:
  - projects/222
  restrictedServices:
  - pubsub.googleapis.com
title: Example2

이 교환을 사용 설정하려면 Org1에서 구독을 허용하는 이그레스 규칙을 정의해야 합니다.

# Org1: Org1's perimeter must allow a Pub/Sub subscription to project 222.

echo """
- egressTo:
    operations:
    - serviceName: pubsub.googleapis.com
      methodSelectors:
      - method: Subscriber.CreateSubscription
    resources:
    - projects/222
  egressFrom:
    identityType: ANY_IDENTITY
""" > org1egress.yaml

Org2는 구독을 허용하는 이에 상응한 인그레스 규칙을 정의해야 합니다.

# Org 2: Org2's perimeter must allow a Pub/Sub subscription from network project 111 in Org1.

echo """
- ingressFrom:
    identityType: ANY_IDENTITY
    sources:
    - resource: projects/111
  ingressTo:
    operations:
    - serviceName: pubsub.googleapis.com
      methodSelectors:
      - method: Subscriber.CreateSubscription
""" > org2ingress.yaml

다음 명령어를 실행하여 인그레스 규칙과 이그레스 규칙을 적용합니다.

gcloud beta access-context-manager perimeters update Example2 1--set-egress-policies=org1egress.yaml
gcloud beta access-context-manager perimeters update Example1 1--set-ingress-policies=org2ingress.yaml

PHI, 익명처리된 데이터 세그먼트, 파트너 조직

경계로 인그레스하고 경계 외부로 이그레스

이 예시에서는 PHI(보호 건강 정보) 데이터 세그먼트의 경계를 정의하고 익명처리된 데이터 세그먼트 주위에 두 번째 경계를 정의합니다. 파트너 조직과 익명처리된 데이터를 공유하고 PHI 세그먼트에서 익명처리된 데이터 세그먼트의 데이터를 조작할 수 있도록 설정하려고 합니다.

gcloud로 경계를 나열하여 찾은 다음과 같은 두 경계를 정의했다고 가정하겠습니다.

# PhiPerimeter
name: accessPolicies/222/servicePerimeters/PhiPerimeter
status:
  resources:
  - projects/111
  restrictedServices:
  - storage.googleapis.com
  - bigquery.googleapis.com
  vpcAccessibleServices:
    enableRestriction: true
    allowedServices:
    - RESTRICTED_SERVICES
title: PhiPerimeter
# AnonPerimeter
name: accessPolicies/222/servicePerimeters/AnonPerimeter
status:
  resources:
  - projects/222
  restrictedServices:
  - storage.googleapis.com
  vpcAccessibleServices:
    enableRestriction: true
    allowedServices:
    - RESTRICTED_SERVICES
title: AnonPerimeter

또한 파트너 조직 프로젝트가 999라고 가정합니다. 다음과 같은 방향 정책 규칙을 정의합니다.

# Anon Perimeter

echo """
- ingressFrom:
    identityType: ANY_IDENTITY
    sources:
    - resource: projects/111
  ingressTo:
    operations:
    - serviceName: storage.googleapis.com
      methodSelectors:
      - method: google.storage.Write
      - method: google.storage.objects.create
""" > anoningress.yaml

echo """
- egressTo:
    operations:
    - serviceName: storage.googleapis.com
      methodSelectors:
      - method: google.storage.Write
      - method: google.storage.objects.create
    resources:
    - projects/999
  egressFrom:
    identityType: ANY_IDENTITY
""" > anonegress.yaml
# PHI Perimeter

echo """
- egressTo:
    operations:
    - serviceName: storage.googleapis.com
      methodSelectors:
      - method: \"*\"
    resources:
    - projects/222
  egressFrom:
    identityType: ANY_IDENTITY
""" > phiegress.yaml

다음 명령어를 실행하여 이그레스 규칙을 적용합니다.

gcloud beta access-context-manager perimeters update AnonPerimeter --set-ingress-policies=anoningress.yaml --set-egress-policies=anonegress.yaml
gcloud beta access-context-manager perimeters update PhiPerimeter --set-egress-policies=phiegress.yaml

타사 Compute Engine 디스크 이미지

이미지 프로젝트로 이그레스

이 예시에서는 모든 경계 외부에 있는 타사 이미지 프로젝트에서 Compute Engine 디스크 이미지를 사용할 수 있도록 승인합니다.

gcloud로 경계를 나열하여 찾은 다음과 같은 경계를 정의했다고 가정하겠습니다.

name: accessPolicies/222/servicePerimeters/Example
status:
  resources:
  - projects/111
  - projects/222
  restrictedServices:
  - compute.googleapis.com
  - containerregistry.googleapis.com
title: Example

이제 다른 조직에 있는 999 프로젝트의 디스크 이미지에 대한 읽기 액세스 권한을 부여하려고 합니다. 다음과 같은 이그레스 규칙을 정의합니다.

echo """
- egressTo:
    operations:
    - serviceName: compute.googleapis.com
      methodSelectors:
      - method: InstancesService.Insert
    resources:
    - projects/999
  egressFrom:
    identityType: ANY_IDENTITY
""" > compute.yaml

다음 명령어를 실행하여 이그레스 규칙을 적용합니다.

gcloud beta access-context-manager perimeters update Example --set-egress-policies=compute.yaml

경계 외부의 VPC 네트워크에서 BigQuery 데이터 세트에 액세스하도록 비공개 액세스 허용

이미지 프로젝트로 이그레스

이 예시에서는 예시 1과 동일한 경계가 있다고 가정합니다.

name: accessPolicies/222/servicePerimeters/Example
status:
  resources:
  - projects/111
  restrictedServices:
  - bigquery.googleapis.com
  - containerregistry.googleapis.com
title: Example

목표는 여러 파트너의 경계 외부에 있는 VPC 네트워크에서 액세스할 수 있도록 허용하는 것입니다. 인그레스 규칙을 정의하면 목표를 달성할 수 있습니다.

echo """
- ingressFrom:
    identityType: ANY_IDENTITY
    sources:
    - resource: projects/888
    - resource: projects/999
  ingressTo:
    operations:
    - serviceName: bigquery.googleapis.com
      methodSelectors:
      - method: \"*\"

""" > partneringress.yaml

다음 명령어를 실행하여 인그레스 규칙을 적용합니다.

gcloud beta access-context-manager perimeters update Example --set-ingress-policies=partneringress.yaml

경계 외부의 VPC 네트워크에서 Cloud Storage 버킷에 로드(쓰기)하도록 비공개 액세스 허용

이 예시에서는 예시 1과 동일한 경계가 있다고 가정합니다.

name: accessPolicies/222/servicePerimeters/Example
status:
  resources:
  - projects/111
  restrictedServices:
  - storage.googleapis.com
  - containerregistry.googleapis.com
title: Example

목표는 파트너가 데이터를 경계로 로드할 수 있도록 경계 외부에 있는 VPC 네트워크의 액세스를 허용하는 것입니다. 인그레스 규칙을 정의하면 목표를 달성할 수 있습니다.

echo """
- ingressFrom:
    identityType: ANY_IDENTITY
    sources:
    - resource: projects/222
  ingressTo:
    operations:
    - serviceName: storage.googleapis.com
      methodSelectors:
      - method: google.storage.objects.create
""" > partneringress.yaml

다음 명령어를 실행하여 인그레스 규칙을 적용합니다.

gcloud beta access-context-manager perimeters update Example --set-ingress-policies=partneringress.yaml

여러 경계의 프로젝트가 다른 경계의 로그를 공유하도록 허용

이 사용 사례의 기업에는 Google Cloud 배포 전체의 로깅 데이터 수집을 위해 공유되는 프로젝트가 있습니다. 서로 다른 여러 VPC 서비스 제어 경계의 데이터를 자체 경계 내에 있는 공유 로그 프로젝트에 로깅할 수 있어야 합니다. 로그 프로젝트가 로그 자체가 아닌 다른 리소스에는 액세스할 수 없어야 합니다.

gcloud로 경계를 나열하여 찾은 다음과 같은 세 경계를 정의했다고 가정하겠습니다.

# Sensitive 1
name: accessPolicies/222/servicePerimeters/Sensitive1
status:
  resources:
  - projects/111
  restrictedServices:
  - bigquery.googleapis.com
  - containerregistry.googleapis.com
  - logging.googleapis.com
  vpcAccessibleServices:
    enableRestriction: true
    allowedServices:
    - RESTRICTED_SERVICES
title: Sensitive Data 1
# Sensitive 2
name: accessPolicies/222/servicePerimeters/Sensitive2
status:
  resources:
  - projects/222
  restrictedServices:
  - bigquery.googleapis.com
  - containerregistry.googleapis.com
  - logging.googleapis.com
  vpcAccessibleServices:
    enableRestriction: true
    allowedServices:
    - RESTRICTED_SERVICES
title: Sensitive Data 2
#Logs
name: accessPolicies/222/servicePerimeters/Logs
status:
  resources:
  - projects/777
  restrictedServices:
  - logging.googleapis.com
  vpcAccessibleServices:
    enableRestriction: true
    allowedServices:
    - RESTRICTED_SERVICES
title: Logs Perimeter

Sensitive1 및 Sensitive2에서 Logs에 로그를 작성할 수 있도록 하려면 다음 명령어를 사용해야 합니다.

echo """
- egressTo:
    operations:
    - serviceName: logging.googleapis.com
      methodsSelectors:
      - method: LoggingServiceV2.WriteLogEntries
      - method: LoggingService.WriteLogEntries
    resources:
    - projects/999
  egressFrom:
    identityType: ANY_IDENTITY
""" > logsegress.yaml

다음 명령어를 실행하여 이그레스 규칙을 적용합니다.

gcloud beta access-context-manager perimeters update Sensitive1 --set-egress-policies=logsegress.yaml
gcloud beta access-context-manager perimeters update Sensitive2 --set-egress-policies=logsegress.yaml

로그 경계에 작성해야 하는 다른 민감한 정보 경계에도 유사한 구성을 지정할 수 있습니다.