במסמך הזה מוסבר איך למנוע ממשתמשים לגשת למכונות וירטואליות (VM) על ידי הסרה וחסימה של מפתחות SSH מהמכונות הווירטואליות.
לפני שמתחילים
-
אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות.
אימות הוא תהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Google Cloud . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים הבאות:
צריך לבחור את הכרטיסייה הרלוונטית לאופן שבו תכננתם להשתמש בדוגמאות בדף הזה:
המסוף
כשמשתמשים במסוף Google Cloud כדי לגשת לשירותים ולממשקי ה-API, לא צריך להגדיר אימות. Google Cloud
gcloud
-
התקינו את ה-CLI של Google Cloud. אחר כך, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:
gcloud initאם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
- הגדרת אזור ותחום כברירת מחדל
REST
כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של API בארכיטקטורת REST שבדף הזה, צריך להשתמש בפרטי הכניסה שאתם נותנים ל-CLI של gcloud.
התקינו את ה-CLI של Google Cloud.
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
מידע נוסף מופיע במאמר אימות לשימוש ב-REST במסמכי האימות של Google Cloud .
הסרת מפתחות SSH
אפשר להסיר מפתחות SSH ממכונות וירטואליות שמשתמשות ב-OS Login ומממכונות וירטואליות שמשתמשות במפתחות SSH שמבוססים על מטא-נתונים.הסרת מפתחות SSH ממכונות וירטואליות שמשתמשות ב-OS Login
מכונות וירטואליות שמשתמשות ב-OS Login מקבלות מפתחות SSH שמשויכים לחשבון Google שלכם. אתם יכולים להסיר מפתח SSH ציבורי מחשבון המשתמש שלכם באמצעות Google Cloud CLI או OS Login API. אדמינים בארגון יכולים להסיר מפתחות SSH מחשבונות משתמשים באמצעות Directory API. מערכת Compute Engine מסירה באופן אוטומטי מחשבון Google שלכם מפתחות שתוקפם פג.
gcloud
כדי להסיר מפתח ציבורי SSH מהחשבון:
אם אתם לא יודעים איזה מפתח אתם רוצים להסיר, מריצים את הפקודה
gcloud compute os-login describe-profileכדי לראות את כל המפתחות שמשויכים לחשבון שלכם:gcloud compute os-login describe-profile
מעתיקים את הערך
fingerprintשל המפתח שרוצים למחוק.מסירים את המפתח מהחשבון באמצעות הפקודה
gcloud compute os-login ssh-keys remove:gcloud compute os-login ssh-keys remove --key=KEY
מחליפים את הערך
KEYבמפתח הציבורי SSH שרוצים להסיר, או בטביעת האצבע של מפתח ה-OS Login שרוצים להסיר.
REST
כדי להסיר מפתח ציבורי SSH מהחשבון:
אם אתם לא יודעים איזה מפתח אתם רוצים להסיר, אתם יכולים להשתמש בשיטה
users.getLoginProfileכדי לראות את כל המפתחות שמשויכים לחשבון שלכם:GET https://oslogin.googleapis.com/v1/users/ACCOUNT_EMAIL/loginProfile
מחליפים את
ACCOUNT_EMAILבכתובת האימייל שמשויכת לחשבון.מעתיקים את הערך
fingerprintשל המפתח שרוצים למחוק.מסירים את המפתח מהחשבון באמצעות ה-method
users.sshPublicKeys.delete:DELETE https://oslogin.googleapis.com/v1/users/ACCOUNT_EMAIL/sshPublicKeys/FINGERPRINT
מחליפים את מה שכתוב בשדות הבאים:
-
ACCOUNT_EMAIL: כתובת האימייל שמשויכת לחשבון שלכם -
FINGERPRINT: טביעת האצבע מסוג SHA-256 של המפתח שרוצים להסיר
-
הסרת מפתחות SSH ממכונות וירטואליות שמשתמשות במפתחות שמבוססים על מטא-נתונים
אפשר להסיר מפתח SSH ציבורי מהמטא-נתונים של הפרויקט או המכונה באמצעות מסוףGoogle Cloud , ה-CLI של gcloud או Compute Engine API.
אחרי שמסירים את המפתח האחרון ממטא-נתונים של משתמש מסוים, או אחרי שתוקף המפתח האחרון במטא-נתונים של משתמש מסוים פג, מערכת Compute Engine מוחקת את הקובץ ~/.ssh/authorized_keys של המשתמש במכונה הווירטואלית.
הסרת מפתח ציבורי ממטא-נתונים של פרויקט
כדי להסיר גישה לכל מכונות ה-VM בפרויקט, מסירים מפתח SSH ציבורי מהמטא-נתונים של הפרויקט.
כשמסירים מפתח ממטא-נתונים באמצעות ה-CLI של gcloud ו-Compute Engine API, צריך לאחזר את רשימת המפתחות הקיימים, לערוך את רשימת המפתחות כדי להסיר את המפתחות הלא רצויים, ולהחליף את המפתחות הישנים ברשימת המפתחות שרוצים לשמור, כמו שמוסבר בקטע הבא.
המסוף
כדי להסיר מפתח ציבורי SSH ממטא-נתונים של פרויקט באמצעות מסוףGoogle Cloud :
נכנסים לדף Metadata במסוף Google Cloud .
לוחצים על הכרטיסייה מפתחות SSH.
לוחצים על עריכה בחלק העליון של הדף.
מנווטים למפתח ה-SSH שרוצים להסיר ולוחצים על לחצן המחיקה לצד מפתח ה-SSH.
חוזרים על השלב הזה לכל מפתח SSH שרוצים להסיר.
לוחצים על Save.
gcloud
כדי להסיר מפתח ציבורי SSH ממטא-נתונים של פרויקט באמצעות ה-CLI של gcloud, מבצעים את הפעולות הבאות:
מריצים את הפקודה
gcloud compute project-info describeכדי לקבל את המטא-נתונים של הפרויקט:gcloud compute project-info describe
הפלט אמור להיראות כך:
... metadata: ...
- key: ssh-keysvalue: |- cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF baklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"} ...מעתיקים את ערך המטא-נתונים
ssh-keys.יוצרים ופותחים קובץ טקסט חדש בתחנת העבודה.
בקובץ, מדביקים את רשימת מפתחות ה-SSH שהעתקתם, ואז מוחקים את המפתחות שרוצים להסיר מהמטא-נתונים של הפרויקט.
שומרים את הקובץ וסוגרים אותו.
מריצים את הפקודה
gcloud compute project-info add-metadataכדי להגדיר את הערךssh-keysברמת הפרויקט:gcloud compute project-info add-metadata --metadata-from-file=ssh-keys=KEY_FILE
מחליפים את
KEY_FILEבאחד מהערכים הבאים:- הנתיב לקובץ שיצרתם בשלב הקודם, אם בפרויקט היו מפתחות SSH קיימים
- הנתיב לקובץ של מפתח ה-SSH הציבורי החדש, אם בפרויקט לא היו מפתחות SSH קיימים
REST
כדי להסיר מפתח ציבורי SSH ממטא-נתונים של פרויקט באמצעות Compute Engine API:
משתמשים בשיטה
projects.getכדי לקבל את הערכיםfingerprintו-ssh-keysממטא-נתונים.GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
מחליפים את
PROJECT_IDבמזהה הפרויקט.התגובה אמורה להיראות כך:
... "fingerprint": "utgYE_XWtE8=", "items": [ { "key": "ssh-keys", "value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}" } ] ...מעתיקים את רשימת הערכים של מפתחות ה-SSH ומוחקים את המפתחות שרוצים להסיר.
משתמשים ב-
projects.setCommonInstanceMetadataכדי להסיר את מפתחות ה-SSH.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/setCommonInstanceMetadata { "items": [ { "key": "ssh-keys", "value": "EXISTING_SSH_KEYS" } ] "fingerprint": "FINGERPRINT" }מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט -
EXISTING_SSH_KEYS: רשימת מפתחות ה-SSH שרוצים לשמור -
FINGERPRINT: הערך שלfingerprintמהתגובה לבקשתprojects.get
-
הסרה של מפתח SSH ציבורי ממטא-נתונים של מכונה
כדי להסיר גישה למכונה וירטואלית אחת, מסירים מפתח SSH ציבורי ממטא-נתונים של מכונה.
כשמסירים מפתח ממטא-נתונים באמצעות ה-CLI של gcloud ו-Compute Engine API, צריך לאחזר את רשימת המפתחות הקיימים, לערוך את רשימת המפתחות כדי להסיר את המפתחות הלא רצויים, ולהחליף את המפתחות הישנים ברשימת המפתחות שרוצים לשמור, כמו שמוסבר בקטע הבא.
המסוף
כדי להסיר מפתח ציבורי SSH ממטא-נתונים של מכונה באמצעות מסוףGoogle Cloud , מבצעים את השלבים הבאים:
נכנסים לדף VM instances במסוף Google Cloud .
לוחצים על שם המכונה הווירטואלית שרוצים להסיר ממנה מפתח.
לוחצים על Edit.
בקטע SSH Keys (מפתחות SSH), לוחצים על Show and edit (הצגה ועריכה). הקטע מתרחב ומוצגים בו כל המפתחות הציבוריים של SSH ברמת המופע.
לוחצים על לחצן המחיקה לצד מפתח ה-SSH שרוצים להסיר.
חוזרים על השלב הזה לכל מפתח SSH שרוצים להסיר.
לוחצים על Save.
gcloud
כדי להסיר מפתח SSH ציבורי ממטא-נתונים של מכונה באמצעות ה-CLI של gcloud, מבצעים את הפעולות הבאות:
מריצים את הפקודה
gcloud compute instances describeכדי לקבל את המטא-נתונים של מכונת ה-VM:gcloud compute instances describe VM_NAME
מחליפים את VM_NAME בשם של המכונה הווירטואלית שרוצים להוסיף או להסיר ממנה מפתחות SSH ציבוריים.
הפלט אמור להיראות כך:
... metadata: ...
- key: ssh-keysvalue: |- cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF baklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"} ...מעתיקים את ערך המטא-נתונים
ssh-keys.יוצרים ופותחים קובץ טקסט חדש בתחנת העבודה המקומית.
בקובץ, מדביקים את רשימת מפתחות ה-SSH שהעתקתם, ואז מסירים את המפתחות שרוצים למחוק.
שומרים את הקובץ וסוגרים אותו.
מריצים את הפקודה
gcloud compute project-info add-metadataכדי להגדיר את הערךssh-keysברמת הפרויקט:gcloud compute instances add-metadata VM_NAME --metadata-from-file ssh-keys=KEY_FILE
מחליפים את מה שכתוב בשדות הבאים:
-
VM_NAME: המכונה הווירטואלית שרוצים להסיר ממנה את מפתח ה-SSH -
KEY_FILE: הנתיב לקובץ שמכיל את רשימת כל מפתחות ה-SSH של הפרויקט
-
REST
כדי להסיר מפתח ציבורי SSH ממטא-נתונים של מופע באמצעות Compute Engine API, מבצעים את הפעולות הבאות:
משתמשים בשיטה
instances.getכדי לקבל את הערכיםfingerprintו-ssh-keysממטא-נתונים.GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט -
ZONE: האזור של המכונה הווירטואלית שמוסיפים לה מפתח SSH -
VM_NAME: המכונה הווירטואלית שאליה מוסיפים מפתח SSH
התגובה אמורה להיראות כך:
... "fingerprint": "utgYE_XWtE8=", "items": [ { "key": "ssh-keys", "value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}" } ] ...-
מעתיקים את רשימת הערכים של מפתחות ה-SSH ומוחקים את המפתחות שרוצים להסיר.
משתמשים ב-
instances.setMetadataכדי להסיר את מפתחות ה-SSH.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata { "items": [ { "key": "ssh-keys", "value": "EXISTING_SSH_KEYS } ] "fingerprint": "FINGERPRINT" }מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט -
EXISTING_SSH_KEYS: הערך של מפתחssh-keysמהתגובה לבקשתprojects.get -
FINGERPRINT: הערך שלfingerprintמהתגובה לבקשתinstances.get
-
חסימת מפתחות SSH של פרויקט ממכונות וירטואליות שמשתמשות במפתחות SSH שמבוססים על מטא-נתונים
כדי למנוע ממכונות וירטואליות לקבל מפתחות SSH ששמורים במטא-נתונים של הפרויקט, אפשר לחסום את מפתחות ה-SSH של הפרויקט במכונות הווירטואליות. אפשר לחסום מפתחות SSH של פרויקט ממכונות וירטואליות כשיוצרים מכונה וירטואלית או אחרי שיוצרים מכונה וירטואלית.
חסימת מפתחות SSH של פרויקט ממכונה וירטואלית במהלך יצירת המכונה הוירטואלית
אתם יכולים לחסום מפתחות SSH של פרויקטים ממכונות וירטואליות במהלך יצירת המכונות הווירטואליות, באמצעותGoogle Cloud המסוף, ה-CLI של gcloud או Compute Engine API.
המסוף
כדי ליצור מכונה ולחסום אותה מקבלת מפתחות SSH ששמורים במטא-נתונים של הפרויקט באמצעות מסוף Google Cloud :
נכנסים לדף Create an instance במסוף Google Cloud .
כדי לחסום מפתחות SSH של פרויקט:
בתפריט הניווט, לוחצים על אבטחה.
מרחיבים את הקטע Manage access.
כדי להשבית את OS Login, מבטלים את הסימון בתיבה Control VM access through IAM permissions.
מסמנים את תיבת הסימון Block project-wide SSH keys (חסימת מפתחות SSH ברמת הפרויקט).
אופציונלי: מציינים אפשרויות הגדרה אחרות. מידע נוסף מופיע במאמר אפשרויות הגדרה במהלך יצירת מכונה.
כדי ליצור את המכונה ולהפעיל אותה, לוחצים על Create.
gcloud
כדי ליצור מכונה וירטואלית ולחסום את האפשרות לקבל מפתחות SSH ששמורים במטא-נתונים של הפרויקט באמצעות ה-CLI של gcloud, משתמשים בפקודה gcloud compute instances create:
gcloud compute instances create VM_NAME \
--metadata block-project-ssh-keys=TRUE
מחליפים את VM_NAME בשם של המכונה הווירטואלית החדשה.
REST
כדי ליצור מכונה וירטואלית ולחסום אותה מקבלת מפתחות SSH ששמורים במטא-נתונים של הפרויקט באמצעות Compute Engine, צריך ליצור בקשת POST לשיטה instances.insert:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט -
ZONE: האזור של המכונה הווירטואלית
בגוף הבקשה, מציינים את שמות המשתמשים ואת מפתחות ה-SSH הציבוריים במאפיין items:
...
{
"items": [
{
"key": "block-project-ssh-keys",
"value": TRUE
}
]
}
...
חסימת מפתחות SSH של פרויקט ממכונה וירטואלית אחרי יצירת המכונה
אחרי שיוצרים מכונות וירטואליות, אפשר לחסום את מפתחות ה-SSH של הפרויקט במכונות הווירטואליות באמצעות מסוףGoogle Cloud , ה-CLI של gcloud או Compute Engine API.
המסוף
כדי לחסום מכונות וירטואליות מקבלת חיבורים ממפתחות SSH ששמורים במטא-נתונים של הפרויקט באמצעות מסוף Google Cloud , מבצעים את הפעולות הבאות:
נכנסים לדף VM instances במסוף Google Cloud .
לוחצים על שם המכונה הווירטואלית שרוצים לחסום את מפתחות ה-SSH של הפרויקט שלה.
לוחצים על Edit.
בקטע SSH Keys (מפתחות SSH), מסמנים את תיבת הסימון Block project-wide SSH keys (חסימת מפתחות SSH ברמת הפרויקט).
כשמסיימים לערוך את הגדרת החיבור למפתחות SSH, לוחצים על שמירה.
gcloud
כדי לחסום את האפשרות של מכונות וירטואליות לקבל חיבורים ממפתחות SSH ששמורים במטא-נתונים של הפרויקט באמצעות ה-CLI של gcloud, מבצעים את הפעולות הבאות:
מריצים את הפקודה gcloud compute instances add-metadata:
gcloud compute instances add-metadata VM_NAME --metadata block-project-ssh-keys=TRUE
מחליפים את VM_NAME בשם המכונה הווירטואלית שרוצים לחסום עבורה מפתחות SSH ציבוריים ברמת הפרויקט.
REST
כדי לחסום את האפשרות של מכונות וירטואליות לקבל חיבורים ממפתחות SSH ששמורים במטא-נתונים של פרויקט באמצעות Compute Engine API, צריך לבצע את הפעולות הבאות:
משתמשים ב-method
instances.getכדי לאחזר אתfingerprintמהמטא-נתונים.GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט -
ZONE: האזור של המכונה הווירטואלית שמוסיפים לה מפתח SSH -
VM_NAME: המכונה הווירטואלית שאליה מוסיפים מפתח SSH
התגובה אמורה להיראות כך:
... "fingerprint": "utgYE_XWtE8=" ...
-
משתמשים ב-
instances.setMetadatamethod כדי להגדיר אתblock-project-ssh-keysל-TRUE:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata { "items": [ { "key": "block-project-ssh-keys", "value": TRUE } ] "fingerprint": "FINGERPRINT" }מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_IDהוא מזהה הפרויקט -
ZONEהוא האזור שבו נמצאת המכונה -
INSTANCE_NAMEהיא המכונה שבה רוצים לחסום מפתחות ברמת הפרויקט. -
FINGERPRINT: הערך שלfingerprintמהתגובה לבקשתinstances.get.
-
מה השלב הבא?
- מידע נוסף על היתרונות של שימוש ב-OS Login לניהול הרשאות גישה
- להתחבר למכונות וירטואליות באמצעות כלים של Google, כדי שלא תצטרכו לנהל את מפתחות ה-SSH שלכם.