בדף הזה מוסבר איך להשתמש ב-SSH כדי להתחבר לשירותי Cloud Run באמצעות העברת TCP של Identity-Aware Proxy (IAP).
אבטחת חיבורי SSH באמצעות IAP מאפשרת לכם לנפות באגים במקרים ספציפיים של מכולות בסביבה מאובטחת.
לפני שמתחילים
- חשוב לוודא ששירות Cloud Run פועל בסביבת הפעלה מהדור השני וכולל את כל כלי הניפוי באגים שצריך כדי להריץ פקודות אחרי ההתחברות. מידע נוסף זמין במאמר בנושא סביבות הפעלה.
כדי לוודא שאתם משתמשים בגרסה העדכנית ביותר של Google Cloud CLI, מריצים את הפקודה הבאה:
gcloud components updateמפעילים בפרויקט את Cloud Run, Cloud Resource Manager API, Cloud OS Login API ו-Identity-Aware Proxy APIs.
כדי להפעיל את ממשקי ה-API, מריצים את הפקודה הבאה:
gcloud services enable \ cloudresourcemanager.googleapis.com \ oslogin.googleapis.com \ iap.googleapis.com \ run.googleapis.com
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות להגדרת כללי מדיניות ולחיבור לעומסי עבודה, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
-
הגדרת כללי מדיניות:
- אדמין מדיניות IAP (
roles/iap.admin) בפרויקט - אדמין Cloud Run (
roles/run.admin) בפרויקט
- אדמין מדיניות IAP (
-
התחברות לעומסי עבודה:
- משתמש בחשבון שירות (
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) בשירות - Logs View Accessor (
roles/logging.viewAccessor) בפרויקט - Browser (
roles/browser) בפרויקט - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) on the project
- משתמש בחשבון שירות (
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
מגבלות
ל-SSH ל-Cloud Run יש את המגבלות הבאות:
- יש תמיכה רק בשירותים ובמופעים של Cloud Run.
- בשירותים, יש תמיכה רק בסביבת ההפעלה מהדור השני.
- אין תמיכה במשימות של Cloud Run.
- אין תמיכה במאגרי עובדים.
- כשמשתמשים ב-SSH, מפתחות המארח בתמונה נמחקים. המפתחות יישארו דרוסים גם אחרי שהסשן של SSH יסתיים, עד להפעלה מחדש של השירות.
- Windows: אין תמיכה ב-PuTTY. משתמשים בלקוח OpenSSH.
הגדרת מדיניות הרשאות גישה ב-IAP
אפשר לנהל את הגישה למשאבי Cloud Run ברמת הפרויקט, האזור או השירות באמצעות ה-CLI של gcloud או API בארכיטקטורת REST של IAP.
אפשר להגדיר כללי מדיניות למזהי Cloud Identity API הבאים:
- Cloud Identity: לדוגמה,
user:EMAIL@example.com - איחוד שירותי אימות הזהות של כוח עבודה: לדוגמה:
principal://iam.googleapis.com/locations/global/workforcePools/<var>POOL_ID</var>/subject/<var>SUBJECT_ATTRIBUTE_VALUE</var>
מידע נוסף ודוגמאות לסוגי חשבונות משתמשים מופיעים ברשימת מזהי חשבונות משתמשים.
עדכון שירות Cloud Run קיים
כדי לעדכן את השירות ולהפעיל SSH, מריצים את הפקודה הבאה:
gcloud beta run services update \
SERVICE_NAME \
--ssh
מחליפים את SERVICE_NAME בשם של שירות Cloud Run. אפשר לפרוס שירות Cloud Run על ידי הוספת --ssh אל gcloud beta run deploy.
איך נותנים גישה לכל המשאבים של Cloud Run בפרויקט
כדי לנהל את הגישה לכל המשאבים בפרויקט, צריך להחיל את הקישור למדיניות IAM ברמת הפרויקט.
gcloud
מריצים את הפקודה הבאה:
gcloud beta iap tcp add-iam-policy-binding \
--member='USER' \
--role='roles/iap.tunnelResourceAccessor' \
--resource-type=cloud-run
מחליפים את USER במזהה החשבון הראשי של המשתמש, לדוגמה, user:user@example.com או החשבון הראשי של איחוד הזהויות של כוח העבודה.
API בארכיטקטורת REST
שליחת בקשת POST לנקודת הקצה של מדיניות הפרויקט:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"policy": {
"bindings": [
{
"role": "roles/iap.tunnelResourceAccessor",
"members": ["USER"]
}
]
}
}' \
"https://iap.googleapis.com/v1/projects/\
PROJECT_NUMBER/iap_tunnel/cloudRun:setIamPolicy"
מחליפים את מה שכתוב בשדות הבאים:
-
USER: מזהה חשבון המשתמש של המשתמש. -
PROJECT_NUMBER: מספר הפרויקט Google Cloudשבו מתארחים המשאבים.
מתן גישה לכל משאבי Cloud Run במיקום ספציפי
כדי להגביל את הגישה לכל המשאבים באזור מסוים (לדוגמה, us-central1), צריך להחיל את הקישור של מדיניות ההרשאות ברמת המיקום.
gcloud
מריצים את הפקודה הבאה:
gcloud beta iap tcp add-iam-policy-binding \
--member='USER' \
--role='roles/iap.tunnelResourceAccessor' \
--resource-type=cloud-run \
--region=LOCATION
מחליפים את מה שכתוב בשדות הבאים:
-
USER: מזהה חשבון המשתמש של המשתמש. -
LOCATION: Google Cloud האזור שבו המשאבים נפרסים (לדוגמה,us-central1).
API בארכיטקטורת REST
שליחת בקשת POST לנקודת הקצה של מדיניות המיקום:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"policy": {
"bindings": [
{
"role": "roles/iap.tunnelResourceAccessor",
"members": ["USER"]
}
]
}
}' \
"https://iap.googleapis.com/v1/projects/\
PROJECT_NUMBER/iap_tunnel/cloudRun/locations/\
LOCATION:setIamPolicy"
מחליפים את מה שכתוב בשדות הבאים:
-
USER: מזהה חשבון המשתמש של המשתמש -
PROJECT_NUMBER: מספר הפרויקט Google Cloud -
LOCATION: האזור Google Cloud
הענקת גישה לשירות ספציפי של Cloud Run
כדי להגביל את הגישה לשירות יחיד עם שם בפרויקט, צריך להחיל את מדיניות הקישור ברמת השירות.
gcloud
מריצים את הפקודה הבאה:
gcloud beta iap tcp add-iam-policy-binding \
--member='USER' \
--role='roles/iap.tunnelResourceAccessor' \
--resource-type=cloud-run \
--service=SERVICE_NAME \
--region=LOCATION
מחליפים את מה שכתוב בשדות הבאים:
-
USER: מזהה חשבון המשתמש של המשתמש SERVICE_NAME: השם של הלוגיקה של השירות שאליו רוצים להתחבר-
LOCATION: האזור Google Cloud שבו השירות נפרס
API בארכיטקטורת REST
שליחת בקשת POST לנקודת הקצה של מדיניות השירות:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"policy": {
"bindings": [
{
"role": "roles/iap.tunnelResourceAccessor",
"members": ["USER"]
}
]
}
}' \
"https://iap.googleapis.com/v1/projects/\
PROJECT_NUMBER/iap_tunnel/cloudRun/locations/\
LOCATION/services/\
SERVICE_NAME:setIamPolicy"
מחליפים את מה שכתוב בשדות הבאים:
-
USER: מזהה חשבון המשתמש של המשתמש -
PROJECT_NUMBER: מספר Google Cloud הפרויקט -
LOCATION: האזור Google Cloud SERVICE_NAME: שם השירות
התחברות באמצעות SSH
כדי ליצור מנהרת SSH למשאב Cloud Run, צריך להשתמש ב-CLI של gcloud.
התחברות לשירות
מריצים את הפקודה הבאה:
gcloud beta run services ssh SERVICE_NAME \
--region=LOCATION \
--project=PROJECT_ID
מחליפים את מה שכתוב בשדות הבאים:
SERVICE_NAME: השם של השירות שאליו רוצים להתחבר-
LOCATION: Google Cloud האזור שבו נמצא השירות -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud
יציאה מהסשן
כדי לסיים את סשן ה-SSH, מקלידים exit.
כל השינויים שתבצעו בקונטיינר יישארו בתוקף רק כל עוד הקונטיינר פעיל. יציאה מהסשן לא מפסיקה או מפעילה מחדש את הקונטיינר באופן אוטומטי.
שימוש בלקוח OpenSSH מקומי
כדי להשתמש בלקוח OpenSSH מקומי לחיבורים:
כדי ליצור את מנהרת ה-SSH וליצור את האישור הנדרש, מריצים את הפקודה הבאה:
gcloud beta run services ssh SERVICE_NAME \ --region=LOCATION \ --project=PROJECT_IDמחליפים את מה שכתוב בשדות הבאים:
SERVICE_NAME: שם השירות-
LOCATION: האזור Google Cloud -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud
מוסיפים את קוד ההגדרה הבא לקובץ
~/.ssh/configהמקומי:Host cloud-run-ssh HostName cloud-run-default User root IdentityFile ~/.ssh/google_compute_engine CertificateFile ~/.ssh/google_compute_engine_cert/PROJECT_ID_LOCATION_SERVICE_NAME-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 ~/google-cloud-sdk/lib/gcloud.py beta run start-iap-tunnel --project_number=PROJECT_NUMBER --project_id=PROJECT_ID --workload_type=service --deployment_name=SERVICE_NAME --region=LOCATIONאם נתיב ההתקנה של
gcloudשונה, צריך לעדכן את הקידומת בנתיבProxyCommand.מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud -
LOCATION: האזור Google Cloud SERVICE_NAME: שם השירות-
PROJECT_NUMBER: מספר הפרויקט ב- Google Cloud
-
מתחברים לשירות באמצעות OpenSSH:
ssh cloud-run-ssh