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

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

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

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

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

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

存取 perimeter 外部的 Cloud de Confiance by S3NS 資源

下圖顯示 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 中共用記錄

在本用途中,假設企業有一個共用專案,可從整個 Cloud de Confiance 部署作業收集記錄資料。企業必須能夠將多個不同 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,都可以指定類似的設定。

後續步驟