אבטחת חילופי נתונים באמצעות כללים לתעבורת נתונים נכנסת (ingress) ויוצאת (egress)

במסמך הזה מתוארים תרחישי שימוש נפוצים להחלפת נתונים מאובטחת ודוגמאות להגדרות שמאפשרות גישה בין לקוחות למשאבים שמופרדים על ידי גבולות שירות.

סקירה כללית על כללים לתעבורת נתונים נכנסת ויוצאת מופיעה במאמר כללים לתעבורת נתונים נכנסת ויוצאת.

הוראות להגדרת מדיניות של כללים לתעבורת נתונים נכנסת (ingress) ויוצאת (egress) מופיעות במאמר הגדרת מדיניות לתעבורת נתונים נכנסת ויוצאת.

דוגמאות להגדרות של תרחישי שימוש בהחלפת נתונים מאובטחת

בקטע הזה מופיעות דוגמאות לתרחישי שימוש בהחלפת נתונים בצורה מאובטחת בין אזורי אבטחה.

גישה למשאב Google Cloud מחוץ ל-perimeter

בתרשים הבא מוצג משאב של Compute Engine בתוך גבולות גזרה לשירות שנדרשת לו גישה למשאב של Cloud Storage שנמצא מחוץ לגבולות הגזרה:

יציאה ממתחם אחד

נניח שהגדרתם את גבולות הגזרה הבאים:

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

צריך לתת הרשאת קריאה לקטגוריה של Cloud Storage ב-project 999, שנמצאת בארגון אחר. אחר כך מגדירים את כלל תעבורת הנתונים היוצאת (egress) הבא בקובץ ושומרים את הקובץ בשם 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 perimeters update.

שיתוף נתונים באמצעות Pub/Sub בין שני ארגונים שמשתמשים ב-VPC Service Controls

בתרשים הבא מוצגים שני ארגונים, Org1 ו-Org2, שמשתמשים ב-VPC Service Controls ומשתפים נתונים באמצעות נושא Pub/Sub:

תעבורת נתונים יוצאת (egress) מהיקף אחד ותעבורת נתונים נכנסת (ingress) להיקף אחר

נניח שהגדרתם את הגבולות הבאים:

# 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 חייב להגדיר את כלל תעבורת הנתונים היוצאת (egress) הבא שמאפשר את המינוי ולשמור את הקובץ בתור 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), גבולות גזרה שני סביב פלח נתונים שעבר אנונימיזציה וארגון שותף נפרד. פלח הנתונים של ה-PHI יכול לשנות את הנתונים בפלח הנתונים האנונימי, והנתונים מפלח הנתונים האנונימי משותפים עם ארגון השותף.

תעבורת נתונים נכנסת (ingress) לגבולות הגזרה ותעבורת נתונים יוצאת (egress) מגבולות הגזרה

אתם רוצים להגדיר כללי תעבורת נתונים נכנסת (ingress) ותעבורת נתונים יוצאת (egress) שיאפשרו שיתוף של נתונים אנונימיים עם הארגון השותף, ויאפשרו לפלח ה-PHI שלכם לבצע מניפולציה בנתונים בפלח הנתונים האנונימיים.

נניח שהגדרתם את הגבולות הבאים:

# 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. אפשר להגדיר את הכללים הבאים לתעבורת נתונים נכנסת (ingress) ויוצאת (egress):

# 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

בתרשים הבא מוצג משאב של Compute Engine בתוך גבולות גזרה לשירות שנדרשת בו גישה לקובץ אימג' של דיסק של Compute Engine בפרויקט תמונות של צד שלישי שנמצא מחוץ לגבולות גזרה:

יציאה לפרויקט תמונות

נניח שהגדרתם את גבולות הגזרה הבאים:

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

קריאת מערך נתונים ב-BigQuery על ידי מתן גישה פרטית מרשת VPC מחוץ להיקף

בתרשים הבא מוצגות כמה רשתות VPC של שותפים מחוץ לגבולות גזרה שצריכות לקרוא ממשאב BigQuery בתוך גבולות גזרה:

יציאה לפרויקט תמונות

אפשר להניח שאתם משתמשים באותו היקף כמו בדוגמה 1:

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

המטרה היא לאפשר גישת קריאה מרשת VPC מחוץ לגבולות הגזרה של שותפים שונים. מגדירים את כלל ה-Ingress הבא בקובץ ושומרים את הקובץ בשם 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) יכולה לפעול בדרכים שונות על כמה משאבים שונים, והתאמה למודל ההרשאות מאפשרת גמישות ושליטה רבות יותר.

טעינה לקטגוריה של Cloud Storage (כתיבה) על ידי מתן גישה פרטית מרשת VPC מחוץ להיקף

אפשר להניח שאתם משתמשים באותו היקף כמו בדוגמה 1:

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

המטרה היא לאפשר גישה מרשת VPC מחוץ לגבולות הגזרה כדי לאפשר לשותף לכתוב נתונים לקטגוריה בתוך גבולות הגזרה. מגדירים כלל כניסה ושומרים את הקובץ בשם 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

שיתוף יומנים בגבולות גזרה נפרדים על ידי מתן הרשאה לפרויקטים מכמה גבולות גזרה לשתף יומנים

בתרחיש השימוש הזה, נניח שיש לארגון פרויקט משותף לאיסוף נתוני יומן מכל הפריסה שלו. Google Cloud הארגון צריך להיות מסוגל לרשום ביומן נתונים מכמה מתחמי אבטחה שונים של VPC Service Controls בפרויקט היומנים המשותף, שנמצא במתחם אבטחה משלו. לפרויקט היומנים לא צריכה להיות גישה למשאבים אחרים מלבד היומנים.

נניח שהגדרתם את שלושת ההיקפים הבאים:

# 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 לכתוב רישומים בגבולות הגזרה של הרישומים, מגדירים את כלל תעבורת הנתונים היוצאת (egress) הבא בקובץ ושומרים את הקובץ בשם 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

מריצים את הפקודות הבאות כדי להחיל את כללי תעבורת הנתונים היוצאת (egress):

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

אפשר לציין הגדרה דומה לכל גבולות גזרה אחרים של מידע אישי רגיש שצריך לכתוב לרישומים של גבולות הגזרה.

המאמרים הבאים