אפשר לחבר את Cloud Build למופע של Secure Source Manager Private Service Connect באמצעות מאגרי Cloud Build פרטיים. החיבור הזה הוא חלופה מורכבת יותר לשימוש ב-Developer Connect. אם אתם לא רוצים לחשוף נקודת קצה של proxy ל-git, אתם יכולים להשתמש בגישה שמתוארת במדריך הזה.
לפני שמתחילים
- יצירת מופע של Secure Source Manager עם Private Service Connect.
- אם הגדרתם בעבר את נקודות הקצה של מכונת Private Service Connect, תצטרכו לנתק אותן. כדי לשחרר את נקודות הקצה, פועלים לפי ההוראות במאמר שחרור כתובת IPv4 או IPv6 פנימית סטטית.
-
מפעילים את ממשקי ה-API של Cloud Build, Service Networking ו-Compute Engine.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידים
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לחיבור Cloud Build למופע של Private Service Connect Secure Source Manager, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד אדמין של Access Context Manager (roles/accesscontextmanager.policyAdmin) בארגון.
הגדרת חשבון השירות
כדי לפעול בהתאם לעיקרון ההרשאות המינימליות ב-Cloud Build, אתם יכולים להגדיר את Cloud Build כך שישתמש בחשבון שירות עם הרשאות שמספיקות להרצת build.
אם לא מציינים חשבון שירות, יכול להיות שמערכת Cloud Build תבחר באופן אוטומטי חשבון שירות כדי להפעיל בשמכם את גרסאות ה-build. יכול להיות שלחשבון השירות הזה יש הרשאות רחבות מדי לתרחיש השימוש שלכם, כמו גישה למופע Secure Source Manager ולכל המאגרים בפרויקט.
אם אין לכם חשבון שירות שאתם רוצים להשתמש בו, אתם צריכים ליצור חשבון שירות.
-
במסוף Google Cloud , עוברים לדף settings Secure Source Manager Permissions:
בכרטיסייה Service account permissions, בוחרים את חשבון השירות שרוצים להשתמש בו כחשבון השירות של Cloud Build.
אפשר גם לבחור באפשרות Set as preferred service account (הגדרת חשבון השירות המועדף) כדי שאחרי זה, כשתיצרו טריגרים חדשים, חשבון השירות יאוכלס מראש.
הענקת ההרשאות הנדרשות לחשבון השירות
מקצים לחשבון השירות את התפקידים הנדרשים ב-Cloud Build לתרחיש השימוש שלכם. במאמר הגדרת גישה ל-Cloud Build מוסבר אילו תפקידים ב-Cloud Build נדרשים לפעולות שונות ב-Cloud Build.
כדי לתת לחשבון השירות הרשאות לאחזור אישור ה-CA, מריצים את הפקודה הבאה.
gcloud projects add-iam-policy-binding CA_PROJECT_ID \ --member=serviceAccount:SA_EMAIL \ --role=roles/privateca.auditor \ --condition=Noneמחליפים את מה שכתוב בשדות הבאים:
-
CA_PROJECT_ID: עם מזהה הפרויקט של פרויקט מאגר רשויות האישורים. -
SA_EMAIL: עם כתובת האימייל של חשבון השירות שהגדרתם כחשבון השירות של Cloud Build.
-
כדי לתת לחשבון השירות הרשאות גישה למופע של Secure Source Manager, מריצים את הפקודה הבאה.
gcloud projects add-iam-policy-binding INSTANCE_PROJECT_ID \ --member=serviceAccount:SA_EMAIL \ --role=roles/securesourcemanager.instanceAccessor \ --condition=Noneכדי לתת לחשבון השירות הרשאות קריאה ממאגרי Secure Source Manager, מריצים את הפקודה הבאה.
gcloud projects add-iam-policy-binding INSTANCE_PROJECT_ID \ --member=serviceAccount:SA_EMAIL \ --role=roles/securesourcemanager.repoReader \ --condition=None
הגדרת יומני בנייה
כשמציינים חשבון שירות משלכם לבנייה, צריך לאחסן את יומני הבנייה ב-Cloud Logging או בקטגוריה של Cloud Storage שנוצרה על ידי המשתמש. אי אפשר לאחסן את היומנים בדלי היומנים שמוגדר כברירת מחדל.
כדי לאחסן יומני build ב-Cloud Logging, צריך להעניק לחשבון השירות ב-Cloud Build את התפקיד Logs Writer (roles/logging.logWriter).
מידע נוסף על הגדרת יומני ה-build זמין במאמר הגדרת חשבונות שירות שצוינו על ידי המשתמש.
יצירת תחום DNS פרטי ב-Cloud DNS
כדי ליצור תחום DNS פרטי מנוהל ב-Cloud DNS, מריצים את הפקודה הבאה.
gcloud dns managed-zones create ZONE_NAME \
--project=PROJECT_ID \
--description=DESCRIPTION \
--dns-name="INSTANCE_LOCATION.p.sourcemanager.dev." \
--visibility="private" \
--networks="https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK"
מחליפים את מה שכתוב בשדות הבאים:
-
ZONE_NAME: עם השם שרוצים לתת לאזור המנוהל. -
PROJECT_ID: עם מזהה הפרויקט של Google Cloud הפרויקט שרוצים להשתמש בו לאזור Cloud DNS. -
DESCRIPTION: עם תיאור של האזור. -
INSTANCE_LOCATION: עם המיקום שבו רוצים ליצור את מופע Secure Source Manager.
מידע נוסף על אזורי DNS פרטיים מנוהלים ב-Cloud DNS זמין במאמר סקירה כללית של Cloud DNS.
הגדרת רשת הענן הווירטואלי הפרטי (VPC)
משריינים טווח כתובות IP שרוצים להשתמש בו כדי ליצור קשר בין ה-VPC של Secure Source Manager לבין המאגר הפרטי של Cloud Build.
gcloud compute addresses create CB_PEER_RANGE \ --global \ --purpose=VPC_PEERING \ --prefix-length=24 \ --description="IP range for peering with Cloud Build private pool" \ --network=NETWORK \ --project=INSTANCE_PROJECT_IDמחליפים את מה שכתוב בשדות הבאים:
-
CB_PEER_RANGE: עם השם של הכתובת שרוצים ליצור. -
NETWORK: עם משאב הרשת שבו צריך לשריין את הכתובות. אם אתם משתמשים ברשת ברירת המחדל, הערך הואdefault. -
INSTANCE_PROJECT_ID: עם מזהה פרויקט המופע של Private Service Connect.
-
כדי ליצור חיבור Peering בין רשתות VPC עם
servicenetworking.googleapis.com, מריצים את הפקודה הבאה.gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=CB_PEER_RANGE \ --network=NETWORK \ --project=INSTANCE_PROJECT_IDכדי ליצור דומיין DNS עם שותפות לצורך חיבור ל-Cloud Build, מריצים את הפקודה הבאה.
gcloud services peered-dns-domains create DNS_PEERING_DOMAIN \ --network=NETWORK \ --project=INSTANCE_PROJECT_ID \ --dns-suffix=INSTANCE_LOCATION.p.sourcemanager.dev.מחליפים את מה שכתוב בשדות הבאים:
-
DNS_PEERING_DOMAIN: עם השם של דומיין ה-DNS המקושר שאתם יוצרים.
צריך לשתף באופן מפורש אזורי DNS פרטיים. מידע נוסף על שיתוף של אזורי DNS פרטיים זמין במאמר שיתוף של אזורי DNS פרטיים עם ספקי שירותים.
-
כדי לייצא נתיבי רשת ל-Cloud Build, מריצים את הפקודה הבאה.
gcloud compute networks peerings update servicenetworking-googleapis-com \ --network=NETWORK \ --export-custom-routes \ --no-export-subnet-routes-with-public-ip \ --project=INSTANCE_PROJECT_IDכדי ליצור את המאגר הפרטי של Cloud Build באותו פרויקט Google Cloudשבו נמצא מופע Private Service Connect, מריצים את הפקודה הבאה.
gcloud builds worker-pools create PRIVATE_POOL_ID \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATION \ --peered-network=projects/INSTANCE_PROJECT_ID/global/networks/NETWORK \ --worker-disk-size=100 \ --no-public-egressכאשר
PRIVATE_POOL_IDהוא השם של המאגר הפרטי שאתם יוצרים. השם צריך להיות באורך של 1 עד 63 תווים, והתווים התקפים הם[a-zA-Z0-9_-]+.כדי ליצור קבוצה של נקודות קצה ברשת (NEG) מסוג Private Service Connect עבור נקודת הקצה של HTTP, מריצים את הפקודה הבאה:
gcloud compute network-endpoint-groups create HTTP_NEG_NAME \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATION \ --network-endpoint-type=PRIVATE_SERVICE_CONNECT \ --psc-target-service=HTTP_PSC \ --network=NETWORK --subnet=SUBNETכאשר:
-
HTTP_NEG_NAMEהוא השם של קבוצת ה-NEG שרוצים ליצור עבור נקודת הקצה של HTTP. -
HTTP_PSCהוא הערך של נקודת הקצה של Private Service Connect ב-HTTP.
-
כדי ליצור NEG של Private Service Connect לנקודת הקצה של SSH, מריצים את הפקודה הבאה:
gcloud compute network-endpoint-groups create SSH_NEG_NAME \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATION \ --network-endpoint-type=PRIVATE_SERVICE_CONNECT \ --psc-target-service=SSH_PSC \ --network=NETWORK --subnet=SUBNETכאשר:
-
SSH_NEG_NAMEהוא השם של ה-NEG שרוצים ליצור לנקודת הקצה של SSH. -
SSH_PSCהוא הערך של נקודת הקצה של Private Service Connect ל-SSH.
-
הגדרת מאזן עומסים פנימי (ILB) לשרת proxy
אי אפשר לגשת לנקודות קצה (endpoints) מרשתות VPC מקושרות. כדי לגשת לנקודות הקצה של Secure Source Manager, צריך להגדיר מאזן עומסים פנימי (ILB) ברמה 4 לכל נקודת קצה. מידע נוסף על גישה לשירותים שפורסמו דרך נקודות קצה זמין במאמר מידע על גישה לשירותים שפורסמו דרך נקודות קצה.
כדי ליצור רשת משנה רק ל-proxy עבור מאזני עומסים פנימיים, מריצים את הפקודה הבאה.
gcloud compute networks subnets create ILB_PROXY_SUBNET_NAME \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE \ --region=INSTANCE_LOCATION \ --network=NETWORK \ --range=CIDR_RANGE \ --project=INSTANCE_PROJECT_IDכאשר:
-
ILB_PROXY_SUBNET_NAMEהוא שם תת-הרשת שרוצים ליצור. -
CIDR_RANGEהוא טווח כתובות ה-IP הראשי של רשת המשנה. צריך להשתמש במסכה של רשת משנה באורך של26לכל היותר, כדי שיהיו לפחות 64 כתובות IP זמינות לשרתי proxy באזור. האורך המומלץ של מסיכת רשת המשנה הוא/23. מידע נוסף על רשתות משנה ל-proxy בלבד זמין במאמר בנושא רשתות משנה ל-proxy בלבד למאזני עומסים מבוססי Envoy.
-
כדי ליצור איזון עומסים ברמה 4 (L4) עבור קבוצת נקודות הקצה של הרשת (NEG) של חיבור HTTP, מריצים את הפקודה הבאה.
gcloud compute backend-services create HTTP_PROXY_ILB \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATION \ --load-balancing-scheme=INTERNAL_MANAGEDכאשר
HTTP_PROXY_ILBהוא השם של איזון העומסים הפנימי שרוצים ליצור עבור נקודת הקצה של HTTP.כדי ליצור איזון עומסים פנימי (ILB) ברמה 4 עבור קבוצת נקודות הקצה של SSH, מריצים את הפקודה הבאה.
gcloud compute backend-services create SSH_PROXY_ILB \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATION \ --load-balancing-scheme=INTERNAL_MANAGEDכאשר
SSH_PROXY_ILBהוא השם של איזון העומסים הפנימי שרוצים ליצור עבור נקודת הקצה של SSH.
רישום של Private Service Connect NEG כקצה עורפי של מאזני העומסים הפנימיים
כדי לרשום את ה-NEG של HTTP, מריצים את הפקודה הבאה.
gcloud compute backend-services add-backend HTTP_PROXY_ILB \ --network-endpoint-group=HTTP_NEG_NAME \ --network-endpoint-group-region=INSTANCE_LOCATION \ --project=INSTANCE_PROJECT_IDכדי לרשום את ה-NEG של SSH, מריצים את הפקודה הבאה.
gcloud compute backend-services add-backend SSH_PROXY_ILB \ --network-endpoint-group=SSH_NEG_NAME \ --network-endpoint-group-region=INSTANCE_LOCATION \ --project=INSTANCE_PROJECT_ID
יצירת שרתי proxy של TCP ביעד למאזני העומסים הפנימיים
כדי ליצור שרת proxy של TCP ליעד עבור איזון העומסים של HTTP, מריצים את הפקודה הבאה.
gcloud compute target-tcp-proxies create ILB_HTTP_TCP_TARGET_PROXY \ --backend-service=HTTP_PROXY_ILB \ --region=INSTANCE_LOCATION \ --project=INSTANCE_PROJECT_IDכאשר
ILB_HTTP_TCP_TARGET_PROXYהוא שם ה-TCP Proxy של היעד שרוצים ליצור עבור איזון העומסים של HTTP.כדי ליצור שרת proxy של TCP יעד עבור מאזן העומסים הפנימי של SSH, מריצים את הפקודה הבאה.
gcloud compute target-tcp-proxies create ILB_SSH_TCP_TARGET_PROXY \ --backend-service=SSH_PROXY_ILB \ --region=INSTANCE_LOCATION \ --project=INSTANCE_PROJECT_IDכאשר
ILB_SSH_TP_TARGET_PROXYהוא השם של פרוקסי TCP היעד שאתם יוצרים עבור SSH ILB.
יצירת כללי העברה לניתוב תנועה אל מאזני העומסים של ILB
כדי ליצור כלל העברה לניתוב תעבורה אל איזון העומסים של HTTP, מריצים את הפקודה הבאה.
gcloud compute forwarding-rules create HTTP_PROXY_FORWARD \ --project=INSTANCE_PROJECT_ID \ --ports 443 \ --target-tcp-proxy=ILB_HTTP_TCP_TARGET_PROXY \ --target-tcp-proxy-region=INSTANCE_LOCATION \ --network-tier PREMIUM \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=NETWORK \ --subnet=SUBNET \ --subnet-region=INSTANCE_LOCATIONכאשר
HTTP_PROXY_FORWARDהוא השם של כלל ההעברה שאתם יוצרים.כדי ליצור כלל העברה לניתוב תעבורה אל מאזן העומסים הפנימי של SSH, מריצים את הפקודה הבאה.
gcloud compute forwarding-rules create SSH_PROXY_FORWARD \ --project=INSTANCE_PROJECT_ID \ --ports 22 \ --target-tcp-proxy=ILB_SSH_TCP_TARGET_PROXY \ --target-tcp-proxy-region=INSTANCE_LOCATION \ --network-tier PREMIUM \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=NETWORK \ --subnet=SUBNET \ --subnet-region=INSTANCE_LOCATIONכאשר
SSH_PROXY_FORWARDהוא השם של כלל ההעברה שאתם יוצרים.
יצירת רשומות DNS פרטיות
אחרי שמגדירים את כללי ההעברה, צריך לרשום רשומות DNS בתחום DNS הפרטי של Cloud DNS לכל אחד משמות המארחים של המופע.
כדי לקבל את כתובת ה-IP של כלל העברת ה-HTTP, מריצים את הפקודה הבאה.
gcloud compute forwarding-rules describe HTTP_PROXY_FORWARD \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATIONכאשר
HTTP_PROXY_FORWARDהוא השם שנתתם לכלל ההעברה עבור HTTP.כדי לרשום את שם המארח של ה-API, מריצים את הפקודה הבאה.
gcloud dns record-sets create INSTANCE_ID-INSTANCE_PROJECT_NUMBER-api.INSTANCE_LOCATION.p.sourcemanager.dev. \ --project=INSTANCE_PROJECT_ID \ --zone=ZONE_NAME \ --type=A \ --ttl=300 \ --rrdatas=HTTP_LB_IPמחליפים את מה שכתוב בשדות הבאים:
-
INSTANCE_ID: עם מזהה המופע. -
INSTANCE_PROJECT_NUMBER: עם מספר הפרויקט של המופע ב- Google Cloud. -
INSTANCE_LOCATION: עם האזור של המכונה. -
INSTANCE_PROJECT_ID: עם מזהה הפרויקט של מופע Google Cloud. -
ZONE_NAME: השם שנתתם לאזור המנוהל. -
HTTP_LB_IP: הוא הפלט שלgcloud compute forwarding-rules describe HTTP_PROXY_FORWARD.
-
כדי לרשום את שם המארח של Git HTTP, מריצים את הפקודה הבאה.
gcloud dns record-sets create INSTANCE_ID-INSTANCE_PROJECT_NUMBER-git.INSTANCE_LOCATION.p.sourcemanager.dev. \ --project=INSTANCE_PROJECT_ID \ --zone=ZONE_NAME \ --type=A \ --ttl=300 \ --rrdatas=HTTP_LB_IPכדי לרשום את שם המארח של ה-HTML לממשק האינטרנט, מריצים את הפקודה הבאה.
gcloud dns record-sets create INSTANCE_ID-INSTANCE_PROJECT_NUMBER.INSTANCE_LOCATION.p.sourcemanager.dev.\ --project=INSTANCE_PROJECT_ID \ --zone=ZONE_NAME \ --type=A \ --ttl=300 \ --rrdatas=HTTP_LB_IPכדי לקבל את כתובת ה-IP של כלל העברת הנתונים של SSH, מריצים את הפקודה הבאה.
gcloud compute forwarding-rules describe SSH_PROXY_FORWARD \ --project=INSTANCE_PROJECT_ID \ --region=INSTANCE_LOCATIONכאשר
SSH_PROXY_FORWARDהוא השם שנתתם לכלל ההעברה ל-SSH.כדי לרשום את שם המארח של Git SSH, מריצים את הפקודה הבאה.
gcloud dns record-sets create INSTANCE_ID-INSTANCE_PROJECT_NUMBER-ssh.INSTANCE_LOCATION.p.sourcemanager.dev. \ --project=INSTANCE_PROJECT_ID \ --zone=ZONE_NAME \ --type=A \ --ttl=300 \ --rrdatas=SSH_LB_IPכאשר
SSH_LB_IPהוא הפלט שלgcloud compute forwarding-rules describe SSH_PROXY_FORWARD.
יצירת מאגר במופע
אתם יכולים להשתמש ביעד מבוצר (bastion host) כדי לגשת למאגר וליצור אותו במופע של Private Service Connect.
יוצרים מכונה וירטואלית של יעד מבוצר (bastion host) עם
cloud-platformהיקף על ידי ביצוע ההוראות במאמר יצירת מכונה וירטואלית של יעד מבוצר (bastion host).כדי ליצור מאגר, מריצים את הפקודה הבאה.
curl \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://INSTANCE_ID-PROJECT_NUMBER-api.INSTANCE_LOCATION.p.sourcemanager.dev/v1/projects/PROJECT_NUMBER/locations/INSTANCE_LOCATION/repositories?repository_id=REPOSITORY_ID \ -d '{}'מחליפים את מה שכתוב בשדות הבאים:
-
INSTANCE_ID: עם השם של מופע Secure Source Manager. -
PROJECT_NUMBER: עם מספר הפרויקט של המופע ב- Google Cloud . -
INSTANCE_LOCATION: עם המיקום של המכונה. -
REPOSITORY_ID: השם שרוצים לתת למאגר.
מאגר נוצר במופע Private Service Connect.
-
בדיקת הגישה ל-Secure Source Manager מ-Cloud Build
כדי לוודא שהכול פועל כמו שצריך, אפשר להשתמש בקובץ התצורה הבא של build כדי לבדוק את הקישוריות ולשלוף קוד מקור מ-Secure Source Manager. קובץ הגדרות ה-build מניח שאתם משתמשים ב-Cloud Logging כדי לאחסן את יומני ה-build. אם אתם משתמשים בקטגוריה של Cloud Storage שנוצרה על ידי משתמש, תוכלו לקרוא את המאמר הפעלת בנייה באמצעות קובץ הגדרות כדי לקבל הוראות לעריכת קובץ הגדרות הבנייה.
לפני שמשתמשים בקובץ ה-YAML הבא, מחליפים את הערכים הבאים:
-
CA_POOL_NAME: שם מאגר רשויות האישורים שבו השתמשתם כשנוצר מופע Private Service Connect. -
CA_PROJECT_ID: עם הפרויקט שבו השתמשתם כדי ליצור את מאגר רשויות האישורים. Google Cloud -
INSTANCE_LOCATION: עם המיקום של המכונה. -
INSTANCE_ID: בשם המופע שלכם. -
INSTANCE_PROJECT_NUMBER: עם מספר הפרויקט של המופע ב- Google Cloud . -
REPOSITORY_ID: עם השם שנתתם למאגר. -
SA_PROJECT_ID: עם מזהה הפרויקט של חשבון השירות שבו אתם משתמשים ב-Cloud Build. -
SERVICE_ACCOUNTמחליפים בכתובת האימייל של חשבון השירות שבו אתם משתמשים עם Cloud Build.
steps:
- name: gcr.io/cloud-builders/gcloud
args:
- privateca
- pools
- get-ca-certs
- CA_POOL_NAME
- '--project'
- CA_PROJECT_ID
- '--location'
- INSTANCE_LOCATION
- '--output-file=cacert.pem'
- name: gcr.io/cloud-builders/git
args:
- config
- '--global'
- 'credential.https://INSTANCE_ID-INSTANCE_PROJECT_NUMBER-git.INSTANCE_LOCATION.p.sourcemanager.dev.helper'
- gcloud.sh
- name: gcr.io/cloud-builders/git
args:
- config
- '--global'
- http.sslCAInfo
- cacert.pem
- name: gcr.io/cloud-builders/git
env:
- GIT_TRACE=1
- GIT_CURL_VERBOSE=1
args:
- clone
- >-
https://INSTANCE_ID-INSTANCE_PROJECT_NUMBER-git.INSTANCE_LOCATION.p.sourcemanager.dev/INSTANCE_PROJECT_ID/REPOSITORY_ID
- https-clone
serviceAccount: 'projects/SA_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT'
options:
logging: CLOUD_LOGGING_ONLY
המאמרים הבאים
- כדי לבצע אוטומציה של גרסאות build מ-Secure Source Manager, פועלים לפי ההוראות במאמר בנושא יצירת קובץ טריגרים.