透過輸入和輸出規則的安全資料交換

本文說明安全資料交換的常見用途,以及允許用戶端和資源在 service perimeter 之間存取的設定範例。

如需輸入和輸出規則總覽,請參閱「輸入和輸出規則」。

如需如何設定輸入和輸出規則政策的操作說明,請參閱「設定輸入和輸出政策」。

安全資料交換用途的設定範例

本節提供範例用途,說明如何在 service perimeter 之間安全地交換資料。

存取 perimeter 外部的 Google Cloud 資源

下圖顯示 service perimeter 內部的 Compute Engine 資源需要存取 perimeter 外部的 Cloud Storage 資源:

從一個 perimeter 輸出

假設您已定義下列 perimeter:

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

您需要授予不同組織中 project 999 的 Cloud Storage bucket 讀取權限。接著,請在檔案中定義下列輸出規則,並將檔案儲存為 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

如要進一步瞭解 gcloud access-context-manager perimeters update 指令,請參閱「gcloud access-context-manager perimeter 更新」。

在兩個使用 VPC Service Controls 的組織之間,透過 Pub/Sub 共用資料

下圖顯示兩個組織 Org1Org2,這兩個組織使用 VPC Service Controls,並透過 Pub/Sub 主題共用資料:

從一個 perimeter 輸出,並輸入至另一個 perimeter

假設您已定義下列 perimeter:

# 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 必須定義下列輸出規則,允許訂閱並將檔案儲存為 org1egress.yaml

# 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 必須定義對應的「輸入規則」,允許訂閱並將檔案儲存為 org2ingress.yaml

# 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
    resources:
    - \"*\"
""" > 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) 資料區隔周圍的 perimeter、去識別化資料區隔周圍的第二個 perimeter,以及個別的合作夥伴組織。PHI 區隔可以操控去識別化資料區隔中的資料,並與合作夥伴組織分享去識別化資料區隔中的資料。

輸入至 perimeter 和從 perimeter 輸出

您想定義輸入和輸出規則,以便與合作夥伴組織共用去識別化資料,並允許 PHI 區隔操控去識別化資料區隔中的資料。

假設您已定義下列 perimeter:

# 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
    resources:
    - \"*\"
""" > 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 磁碟映像檔的存取權

下圖顯示 service perimeter 內的 Compute Engine 資源需要存取 perimeter 外的第三方映像檔專案中的 Compute Engine 磁碟映像檔:

輸出至映像檔專案

假設您已定義下列 perimeter:

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

您現在需要授予 project 999 中磁碟映像檔的讀取權限,該映像檔位於不同組織。接著,在檔案中定義下列輸出規則,並將檔案儲存為 compute.yaml

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

允許從 perimeter 外部的虛擬私有雲網路進行私人存取,藉此讀取 BigQuery 資料集

下圖顯示 perimeter 外部的多個合作夥伴虛擬私有雲網路,需要從 perimeter 內部的 BigQuery 資源讀取資料:

輸出至映像檔專案

您可以假設您使用的 perimeter 與範例 1 相同:

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

您的目標是允許來自各個合作夥伴 perimeter 外部虛擬私有雲網路的讀取權限,在檔案中定義下列輸入規則,然後將檔案儲存為 partneringress.yaml

echo """
- ingressFrom:
    identityType: ANY_IDENTITY
    sources:
    - resource: projects/888
    - resource: projects/999
  ingressTo:
    operations:
    - serviceName: bigquery.googleapis.com
      methodSelectors:
      - permission: bigquery.datasets.get
      - permission: bigquery.tables.list
      - permission: bigquery.tables.get
      - permission: bigquery.tables.getData
      - permission: bigquery.jobs.create
    resources:
    - \"*\"

""" > partneringress.yaml

執行下列指令,套用輸入規則:

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

為提供更多彈性及控管,BigQuery 使用 - permission: methodSelectors,而非大多數服務使用的 - method: methodSelectors。單一 BigQuery 方法 (RunQuery) 可對多種不同資源執行不同作業,而與權限模型保持一致,可提供更多彈性和控管。

允許從 perimeter 外部的虛擬私有雲網路進行私人存取,將資料載入 Cloud Storage bucket (寫入)

您可以假設您使用的 perimeter 與範例 1 相同:

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

您的目標是允許從 perimeter 外部的虛擬私有雲網路存取,讓合作夥伴能夠將資料寫入 perimeter 內部的 bucket。定義輸入規則,並將檔案儲存為 partneringress.yaml

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

執行下列指令,套用輸入規則:

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

允許來自多個 perimeter 的專案共用記錄,在獨立 perimeter 中共用記錄

在本用途中,假設企業有一個共用專案,可從整個 Google Cloud 部署作業收集記錄資料。企業必須能夠將多個不同 VPC Service Controls perimeter 的資料記錄到共用記錄專案 (位於專屬 perimeter內)。記錄專案不應存取記錄以外的任何資源。

假設您已定義下列三個 perimeter:

# 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

如要允許 Sensitive1Sensitive2 將記錄寫入記錄 perimeter,請在檔案中定義下列輸出規則,並將檔案儲存為 logsegress.yaml

echo """
- egressTo:
    operations:
    - serviceName: logging.googleapis.com
      methodSelectors:
      - method: LoggingServiceV2.WriteLogEntries
      - method: LoggingService.WriteLogEntries
    resources:
    - projects/777
  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

對於需要寫入記錄 perimeter 的任何其他機密資料 perimeter,都可以指定類似的設定。

後續步驟