פרוטוקול SSH מאפשר ליצור חיבור מאובטח ואינטראקטיבי של מעטפת למכונות שלכם שמריצות קונטיינרים. כך מקבלים גישה ישירה למערכת הקבצים של הקונטיינר ולסביבת זמן הריצה, ויכולים לבדוק את משאבי המערכת, לאמת את ההגדרות ולפתור בעיות.
SSH for Cloud Run מוסיף אוטומטית את קובצי ה-sshd הנדרשים למערכת הקבצים של הקונטיינר. הקבצים הבינאריים האלה נגישים רק למשך סשן ה-SSH, והם מוסרים בסיום הסשן. המערכת מתעלמת מהגדרות SSH קיימות, כולל רשומות /etc/passwd, לטובת הגדרות שמנוהלות על ידי Google.
הודעות זכויות יוצרים של קוד פתוח מצד שלישי עבור תלות SSH שמנוהלות על ידי Google מועלות בתוך הקונטיינר כשמתבצעת הפעלה של SSH בנתיב הבא: /usr/share/licenses/google_ssh/THIRD_PARTY_NOTICES.
מגבלות
ההגבלות הבאות חלות על SSH:
- פרוטוקול SSH זמין רק לשירותים שפועלים בסביבה מהדור השני של Cloud Run ובמופעים של Cloud Run.
- כשמשתמשים ב-SSH, מפתחות המארח בתמונה נמחקים. המפתחות יישארו דרוסים גם אחרי שהסשן של SSH יסתיים, עד שמפעילים מחדש את מופע השירות.
- Windows: אין תמיכה ב-PuTTY. משתמשים בלקוח OpenSSH.
- כשמשתמשים ב-SSH, צריך לנקוט אמצעי זהירות נוספים כדי לאבטח את הקונטיינר. כדאי להשתמש בשיטות מומלצות לאבטחה, כמו הרצת קוד האפליקציה כמשתמש לא-בסיסי.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
מפעילים את Cloud Run Admin API, Cloud Resource Manager API, Identity-Aware Proxy API ו-Cloud OS Login API:
gcloud services enable run.googleapis.com \ iap.googleapis.com \ oslogin.googleapis.com
- מתקינים ומפעילים את ה-CLI של gcloud.
-
מעדכנים את הרכיבים:
gcloud components update
-
Windows: מוודאים שמותקן לקוח OpenSSH.
בדרך כלל לקוח OpenSSH מותקן כברירת מחדל ב-Windows 10 ובגרסאות חדשות יותר. אם הוא לא מותקן, אפשר להתקין אותו על ידי הפעלת הפקודה הבאה ב-PowerShell כאדמין:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
מידע נוסף זמין במאמר בנושא התקנת OpenSSH.
- מעיינים בדף המחירון של Cloud Run. כדי ליצור הערכת עלויות בהתאם לשימוש החזוי, אתם יכולים להיעזר במחשבון התמחור. חיוב על SSH לפי בייטים של תעבורת נתונים יוצאת (egress) ברשת.
-
אם בפרויקט שלכם נעשה שימוש ב-VPC Service Controls (VPC-SC), חשוב לדעת שתהליך המנהור בודק את
iaptunnel.googleapis.comכשם השירות, ולא אתrun.googleapis.com.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות להשלמת השלבים האלה, אתם צריכים לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
- משתמש בחשבון שירות (
roles/iam.serviceAccountUser) בחשבון השירות - גישת Root ל-SSH ב-Cloud Run (
roles/run.sshRoot) בשירות - Cloud Run Viewer (
roles/run.viewer) on the service - משתמש מנהרה באבטחת IAP (
roles/iap.tunnelResourceAccessor) בשירות - Cloud Run Developer (
roles/run.developer) on the service - Logs View Accessor (
roles/logging.viewAccessor) בפרויקט - Browser (
roles/browser) בפרויקט - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) on the project - אדמין מדיניות IAP (
roles/iap.admin) בפרויקט לפעולות ניהול IAP
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
אם אתם לא חברים בארגון שהפרויקט שייך אליו, Cloud Run חוסם את גישת ה-SSH. כדי לקבל גישת SSH, צריך להוסיף את התפקיד roles/compute.osLoginExternalUser או להשתמש בתפקיד מותאם אישית עם ההרשאה compute.oslogin.updateExternalUser.
כדי להגביל את התפקיד 'משתמש מנהרה באבטחת IAP' לשירות או למופע ספציפיים של Cloud Run, מריצים את הפקודה הבאה:
לשירות ספציפי
gcloud beta iap tcp add-iam-policy-binding \
--resource-type=cloud-run \
--service=SERVICE \
--region=REGION \
--member=MEMBER \
--role=roles/iap.tunnelResourceAccessor
מחליפים את מה שכתוב בשדות הבאים:
-
SERVICE: השם של השירות. -
REGION: האזור שבו השירות שלכם נפרס. -
MEMBER: הזהות שרוצים להעניק לה גישה.
למופע ספציפי
gcloud beta iap tcp add-iam-policy-binding \
--resource-type=cloud-run \
--instance=INSTANCE \
--region=REGION \
--member=MEMBER \
--role=roles/iap.tunnelResourceAccessor
מחליפים את מה שכתוב בשדות הבאים:
-
INSTANCE: השם של המכונה. -
REGION: האזור שבו השירות שלכם נפרס. -
MEMBER: הזהות שרוצים להעניק לה גישה.
במאמר הגדרת מדיניות גישה ל-IAP מוסבר איך להעניק את ההרשאה roles/iap.tunnelResourceAccessor ברמת הפרויקט והאזור.
שימוש ב-SSH עם שירותי Cloud Run
מגדירים גישת SSH ברמת השירות ומתחברים לשירות באמצעות SSH.
הגדרת גישת SSH ברמת השירות
אפשר לאפשר גישת בדיקה לשירות ספציפי באמצעות ה-CLI של gcloud או YAML:
gcloud
כדי להפעיל גישה בשירות קיים, משתמשים בפקודה הבאה:
gcloud beta run services update SERVICE --ssh
אפשר גם לאפשר גישת בדיקה לשירות באמצעות הדגל --ssh כשפורסים את השירות.
YAML
אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, מורידים את הגדרות ה-YAML שלו:
gcloud run services describe SERVICE --format export > service.yaml
בדוגמה הבאה מופיעה הגדרת ה-YAML:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE labels: cloud.googleapis.com/location: REGION annotations: run.googleapis.com/ssh-enabled: "true" run.googleapis.com/launch-stage: BETA spec: template: spec: containers: image: IMAGE_URLמחליפים את מה שכתוב בשדות הבאים:
-
SERVICE: השם של שירות Cloud Run. -
REGION: האזור Google Cloud , לדוגמה,us-central1. -
IMAGE_URL: הפניה לקובץ אימג' בקונטיינר, לדוגמה,us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, צריך ליצור מראש את המאגר REPO_NAME. כתובת ה-URL היא בפורמטLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
-
יוצרים או מעדכנים את השירות באמצעות הפקודה הבאה:
gcloud run services replace service.yaml
אם קיים קובץ
service.yaml, הפקודהgcloud run services replaceמשתמשת בו כברירת מחדל.
אפשר להשבית את הגישה ל-SSH לפי שירות באמצעות ה-CLI של gcloud או YAML:
gcloud
כדי להשבית את הגישה לשירות, משתמשים בפקודה הבאה:
gcloud beta run services update SERVICE --no-ssh
YAML
אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, מורידים את הגדרות ה-YAML שלו:
gcloud run services describe SERVICE --format export > service.yaml
בדוגמה הבאה מופיעה הגדרת ה-YAML:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE labels: cloud.googleapis.com/location: REGION annotations: run.googleapis.com/ssh-enabled: "false" run.googleapis.com/launch-stage: BETA spec: template: spec: containers: image: IMAGE_URLמחליפים את מה שכתוב בשדות הבאים:
-
SERVICE: השם של שירות Cloud Run. -
REGION: האזור Google Cloud , לדוגמה,us-central1. -
IMAGE_URL: הפניה לקובץ אימג' בקונטיינר, לדוגמה,us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, צריך ליצור מראש את המאגר REPO_NAME. כתובת ה-URL היא בפורמטLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
-
יוצרים או מעדכנים את השירות באמצעות הפקודה הבאה:
gcloud run services replace service.yaml
אם קיים קובץ
service.yaml, הפקודהgcloud run services replaceמשתמשת בו כברירת מחדל.
התחברות לשירות באמצעות SSH
כדי להתחבר לשירות באמצעות SSH, משתמשים ב-CLI של gcloud:
כדי להתחבר לשירות באמצעות SSH, משתמשים בפקודה הבאה של Google Cloud CLI:
gcloud beta run services ssh SERVICE --region=REGION --project=PROJECT_ID
מחליפים את מה שכתוב בשדות הבאים:
-
SERVICE: השם של השירות. -
REGION: האזור שבו השירות שלכם נפרס.
PROJECT_ID: מזהה הפרויקט ב- Google Cloud .אם תתבקשו להזין ביטוי סיסמה למפתח ה-SSH, תוכלו להשאיר אותו ריק. עם זאת, אם מזינים ביטוי גישה, חשוב להשתמש באותו ביטוי גישה לכל סשן SSH עתידי מאותה סביבת עבודה.
אם סיימתם את סשן ה-SSH בהצלחה, תוצג ב-Cloud Run ההודעה הבאה:
Project: my-project Region:REGIONService: busybox Revision: busybox-REVISION Instance: INSTANCE-ID Container: busybox-1 Image: IMAGEכדי לסיים את סשן ה-SSH, מקלידים
exit. כל השינויים שביצעתם במאגר התגים יישמרו כל עוד מאגר התגים פעיל. יציאה מהסשן לא תגרום להפעלה מחדש של הקונטיינר או להפסקת הפעולה שלו.
ציון מופע שירות
כדי להתחבר למופע שירות ספציפי באמצעות SSH, משתמשים ב-Google Cloud CLI.
כדי להתחבר למופע של שירות Cloud Run באמצעות SSH, משתמשים בפקודה הבאה של Google Cloud CLI:
gcloud beta run services ssh SERVICE --region=REGION --project=PROJECT_ID --instance=INSTANCE_ID
מחליפים את מה שכתוב בשדות הבאים:
-
SERVICE: השם של השירות. -
REGION: האזור שבו השירות שלכם נפרס. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
INSTANCE_ID: מזהה המכונה. כדי למצוא את מזהה מופע השירות, עוברים לדף Logs בקטע Observability. מזהה המכונה מופיע בשדהlabelsשל רשומה ביומן. לא ניתן למצוא את מזהה המופע אם מסיימים את המופע הספציפי לפני שמתחברים אליו.
ציון שינוי
כדי להתחבר לגרסה ספציפית באמצעות SSH, משתמשים ב-Google Cloud CLI.
כדי להתחבר לגרסה של שירות Cloud Run באמצעות SSH, משתמשים בפקודה הבאה של Google Cloud CLI:
gcloud beta run services ssh SERVICE --region=REGION --project=PROJECT_ID --revision=REVISION
מחליפים את מה שכתוב בשדות הבאים:
-
SERVICE: השם של השירות. -
REGION: האזור שבו השירות שלכם נפרס. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
REVISION: השם של הגרסה.
שימוש ב-SSH עם מכונות Cloud Run
מגדירים גישת SSH ברמת המכונה ומתחברים למכונה באמצעות SSH.
הגדרת גישת SSH ברמת המכונה
ה-SSH מופעל כברירת מחדל במופעים.
אפשר להשבית את הגישה באמצעות SSH לכל מכונה וירטואלית בנפרד באמצעות ה-CLI של gcloud או YAML:
gcloud
כדי להשבית את הגישה למופע, משתמשים בפקודה הבאה:
gcloud beta run instances update INSTANCE --no-ssh
YAML
אם אתם יוצרים מופע חדש, דלגו על השלב הזה. אם אתם מעדכנים מופע קיים, אתם צריכים להוריד את הגדרת ה-YAML שלו:
gcloud beta run instances describe INSTANCE --format export > instance.yaml
בדוגמה הבאה מופיעה הגדרת ה-YAML:
apiVersion: run.googleapis.com/v1 kind: Instance metadata: name: INSTANCE labels: cloud.googleapis.com/location: REGION annotations: run.googleapis.com/ssh-enabled: "false" run.googleapis.com/launch-stage: BETA spec: containers: image: IMAGE_URLמחליפים את מה שכתוב בשדות הבאים:
-
INSTANCE: השם של מופע Cloud Run. -
REGION: האזור Google Cloud , לדוגמה,us-central1. -
IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר, למשלus-docker.pkg.dev/cloudrun/container/hello:latest.
-
יוצרים או מעדכנים את המכונה באמצעות הפקודה הבאה:
gcloud beta run instances replace instance.yaml
אפשר לאפשר גישת בדיקה במופע ספציפי באמצעות ה-CLI של gcloud או YAML.
gcloud
כדי להפעיל גישה במכונה קיימת, משתמשים בפקודה הבאה:
gcloud beta run instances update INSTANCE --ssh
אפשר גם לאפשר גישת בדיקה למכונה באמצעות הדגל --ssh כשפורסים את המכונה.
YAML
אם אתם יוצרים מופע חדש, דלגו על השלב הזה. אם אתם מעדכנים מופע קיים, אתם צריכים להוריד את הגדרת ה-YAML שלו:
gcloud beta run instances describe INSTANCE --format export > instance.yaml
בדוגמה הבאה מופיעה הגדרת ה-YAML:
apiVersion: run.googleapis.com/v1 kind: Instance metadata: name: INSTANCE labels: cloud.googleapis.com/location: REGION annotations: run.googleapis.com/ssh-enabled: "true" run.googleapis.com/launch-stage: BETA spec: containers: image: IMAGE_URLמחליפים את מה שכתוב בשדות הבאים:
-
INSTANCE: השם של מופע Cloud Run. -
REGION: האזור Google Cloud , לדוגמה,us-central1. -
IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר, למשלus-docker.pkg.dev/cloudrun/container/hello:latest.
-
יוצרים או מעדכנים את המכונה באמצעות הפקודה הבאה:
gcloud beta run instances replace instance.yaml
התחברות למכונה באמצעות SSH
כדי להתחבר למופע באמצעות SSH, משתמשים בפקודה הבאה של Google Cloud CLI:
gcloud beta run instances ssh INSTANCE --region=REGION --project=PROJECT_ID
מחליפים את מה שכתוב בשדות הבאים:
-
INSTANCE: השם של המכונה. -
REGION: האזור שבו השירות שלכם נפרס. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
אם תתבקשו להזין ביטוי סיסמה למפתח ה-SSH, תוכלו להשאיר אותו ריק. עם זאת, אם מזינים ביטוי גישה, חשוב להשתמש באותו ביטוי גישה לכל סשן SSH עתידי מאותה סביבת עבודה.
אם סיימתם את סשן ה-SSH בהצלחה, תוצג ב-Cloud Run ההודעה הבאה:
Project: my-project
Region: REGION
Instance: INSTANCE
Revision: REVISION
Container: CONTAINER
Image: IMAGE
כדי לסיים את סשן ה-SSH, מקלידים exit.
שימוש בלקוח OpenSSH כדי להתחבר
כדי להשתמש בלקוח OpenSSH להתחברות:
- מריצים את הפקודה
gcloud beta run services sshבשירות היעד. - מתחילים את מנהרת ה-SSH ויוצרים את האישור.
מוסיפים את השורות הבאות להגדרות ה-SSH:
Host cloud-run-ssh HostName cloud-run-default User root IdentityFile /Users/USER/.ssh/google_compute_engine CertificateFile /Users/USER/.ssh/google_compute_engine_cert/PROJECT_ID_REGION_SERVICE-cert.pub CheckHostIP no HashKnownHosts no HostKeyAlias cloud-run-default IdentitiesOnly yes StrictHostKeyChecking no UserKnownHostsFile /dev/null ProxyUseFdpass no ProxyCommand /usr/local/bin/python3 -S /Users/USER/google-cloud-sdk/lib/gcloud.py alpha run start-iap-tunnel --project_number=PROJECT_NUMBER --project_id=PROJECT_ID --workload_type=service --deployment_name=SERVICE --region=REGIONמחליפים את מה שכתוב בשדות הבאים:
-
USER: שם המשתמש במחשב המקומי. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
PROJECT_NUMBER: מספר הפרויקט ב- Google Cloud . -
REGION: האזור שבו השירות שלכם נפרס. -
SERVICE: השם של השירות.
אם ה-CLI של gcloud מותקן בתיקייה אחרת, יכול להיות שתצטרכו לעדכן את המיקום בשורה האחרונה.
-
מריצים את הפקודה הבאה:
ssh cloud-run-ssh
התוקף של אישור ה-SSH יפוג אחרי חמש דקות. אם תנסו ליצור חיבור SSH עם השירות אחרי חמש דקות, תצטרכו להריץ מחדש את הפקודה gcloud beta run services ssh כדי ליצור מחדש את האישור.
יומני גישה ל-SSH
כדי לתעד יומני ביקורת לניהול מפתחות SSH, צריך להפעיל יומני ביקורת ל-Cloud OS Login API. איך צופים ביומני ביקורת של OS Login כדי לגשת ליומני SSH של משאבי Cloud Run, צריכה להיות לכם גישה ליומני הביקורת ב-Cloud של הפרויקט הזה.
בדוגמה הבאה מוצגת שאילתה לחיפוש בכל שירותי Cloud Run מהיום הקודם:
gcloud logging read '
logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access" AND
protoPayload.serviceName="oslogin.googleapis.com" AND
protoPayload.request.instance:"run.googleapis.com"
' --project=PROJECT_ID \
--freshness=1d \
--format="table(timestamp, protoPayload.authenticationInfo.principalSubject:label=USER, protoPayload.request.instance:label=CLOUD_RUN_SERVICE)"
אבטחה ושליטה בגישת SSH
אתם יכולים לקבוע מי יכול להשתמש ב-SSH ואיך הוא מוגבל בסביבה שלכם.
השבתת גישת SSH באמצעות מדיניות ארגונית
כדי להגדיר מדיניות ארגון להשבתת SSH, משתמשים באילוץ מותאם אישית שמגביל את ההפעלה של גישת ניפוי באגים באמצעות SSH בשירותי Cloud Run.
המאמרים הבאים
- מידע נוסף על פתרון בעיות ב-Cloud Run
- מידע נוסף על פתרון בעיות בשירותי Cloud Run
- מידע על בעיות ידועות ב-Cloud Run