בדף הזה מוסבר איך להגדיר ולהשתמש בהעברת TCP של שרת Proxy לאימות זהויות (IAP) עם כתובת IP או שם מארח בסביבת Google Cloud או בסביבה שאינהGoogle Cloud .
סקירה כללית
אתם יכולים להשתמש ב-Google Cloud CLI כדי ליצור מנהרות למשאבים באמצעות כתובת IP פרטית או שם מארח של משאב. אם יש לכם משאבים חיצוניים בסביבות שאינןGoogle Cloud שמחוברים ל- Google Cloud באמצעות Cloud Interconnect או VPN, אתם יכולים להשתמש בהעברת TCP של IAP עם המשאבים האלה.
לפני שמתחילים
אם אתם צריכים ליצור מנהור למשאבים מחוץ ל- Google Cloud, אתם צריכים להגדיר קישוריות היברידית. נדרשת קישוריות היברידית כדי לחבר את המשאבים החיצוניים שאינםGoogle Cloud אלGoogle Cloud. מידע נוסף זמין במאמרי העזרה בנושא Cloud Interconnect או Cloud VPN.
הנתב בענן צריך לפרסם את טווח כתובות ה-IP של IAP-TCP 35.235.240.0/20, כדי שיעדי התנועה ישלחו את תנועת התגובה בחזרה דרך Cloud VPN או Cloud Interconnect ולא דרך האינטרנט. אם אין לכם את ההגדרה הזו, לא תוכלו ליצור מנהרות למשאבים חיצוניים לפרויקט Google Cloud .
כדי להגדיר את נתב הענן כך שיפרסם את טווח כתובות ה-IP של IAP-TCP 35.235.240.0/20, פועלים לפי ההוראות במאמר בנושא פרסום של טווחי כתובות IP מותאמים אישית.
בקטעים הבאים מופיעות דוגמאות ל-Google Cloud CLI לביצוע המשימות. מידע על אינטראקציה עם קבוצות של יעדים באמצעות ממשקי ה-API זמין במאמר REST Resource: projects.iap_tunnel.locations.destGroups.
יצירת קבוצת יעדים למנהרה
כשמגדירים מנהרה, מציינים קבוצת יעד של מנהרה שתשמש לבדיקות הרשאות. קבוצות של יעדי מנהרות מייצגות משאבים שיש להם את אותן הגבלות גישה למנהרות. אפשר ליצור כמה קבוצות יעד שרוצים, ולכל אחת מהן להוסיף כמה טווחי כתובות IP או שמות דומיין שמוגדרים במלואם (FQDN) שרוצים. קבוצות היעדים יכולות לחפוף זו לזו כדי לאפשר גמישות רבה יותר.
כשיוצרים קבוצת יעדים, צריך לציין אזור. כדי לקבל את התוצאות הטובות ביותר, האזור שאתם מציינים צריך להיות זהה למיקום של משאבי היעד. לדוגמה, אם המשאבים מחוברים באמצעות VPN, צריך להשתמש באזור של שער ה-VPN.
כדי ליצור קבוצת יעדים, צריך לקבל את ההרשאה iap.tunnelDestGroups.create, שאפשר להעניק באמצעות התפקיד iap.tunnelDestGroupEditor. במאמר הקצאת תפקיד יחיד במסמכי ה-IAM מוסבר איך מקצים תפקיד יחיד.
המסוף
עוברים אל דף הרכישות מתוך האפליקציה ובוחרים פרויקט אם לא נבחר פרויקט.
בכרטיסייה SSH and TCP resources (משאבי SSH ו-TCP), לוחצים על Create destination group (יצירת קבוצת יעדים).
מזינים שם לקבוצה. שם הקבוצה יכול להכיל רק אותיות קטנות (a-z) ומקפים (-).
מהרשימה הנפתחת, בוחרים את האזור שבו רוצים ליצור את קבוצת היעדים.
בקטע כתובת IP, לוחצים על הוספת שורה ומזינים את כתובות ה-IP או את שמות הדומיין המלאים (FQDN) של המשאבים.
טווח כתובות IP מורכב מטווחים שמופרדים בפסיקים באמצעות סימון CIDR, למשל
10.1.2.0/24,172.0.0.0/8.רשימת FQDN היא רשימה של שמות מארחים שמופרדים בפסיקים, כמו
*.internal.company.com. אפשר להשתמש בתווים כלליים לחיפוש עם רשומת ה-FQDN.לוחצים על יצירת קבוצת יעדים.
gcloud
gcloud iap tcp dest-groups createYOUR_GROUP_NAME\ --region=REGION\ --ip-range-list=IP_RANGE_LIST\ --fqdn-list=FQDN_LIST
מחליפים את מה שכתוב בשדות הבאים:
-
YOUR_GROUP_NAME: שם הקבוצה. שם הקבוצה יכול להכיל רק אותיות קטנות (a-z) ומקפים (-). -
REGION: האזור שבו רוצים ליצור את קבוצת היעדים, למשלus-central1. -
IP_RANGE_LIST: אופציונלי. רשימת טווחי כתובות ה-IP, שמורכבת מטווחים מופרדים בפסיקים באמצעות סימון CIDR, כמו10.1.2.0/24,172.0.0.0/8. -
FQDN_LIST: אופציונלי. רשימת ה-FQDN היא רשימה של שמות מארחים שמופרדים בפסיקים, כמו*.internal.company.com. אם רשומה של FQDN כוללת קידומת של wildcard, היא תתאים לכל שם מארח עם הסיומת שצוינה. אחרת, נדרשת התאמה מדויקת. אם בקשה תואמת לטווח כתובות IP או ל-FQDN כלשהו, היא נחשבת להתאמה.
אם אתם לא בטוחים אילו קבוצות כבר קיימות, מריצים את הפקודה הבאה כדי להציג את הקבוצות:
gcloud iap tcp dest-groups list \
--region=REGION
ניהול קבוצות של יעדי מנהרות
אתם יכולים לראות את הפרטים של קבוצת היעד, לשנות אותה ולהסיר אותה.
המסוף
עוברים אל דף ה-IAP ולוחצים על הכרטיסייה SSH ומשאבי TCP.
כדי לראות את הפרטים של קבוצת יעדים, לוחצים על השם של קבוצת היעדים.
כדי לשנות קבוצת יעדים, בוחרים את קבוצת היעדים ולוחצים על סמל העיפרון כדי לפתוח את החלונית עריכת קבוצת יעדים. אפשר גם למחוק את קבוצת היעד מהחלונית הזו.
כדי להסיר קבוצת יעדים, בוחרים את קבוצת היעדים ולוחצים על סמל פח האשפה.
gcloud
לפרטים על ניהול קבוצות של יעדים באמצעות ה-CLI של gcloud, אפשר לעיין במאמר בנושא פקודות gcloud של קבוצות יעדים.
הגדרת הרשאות למנהרה
כדי ליצור מנהרה, צריכה להיות לכם הרשאת iap.tunnelDestGroups.accessViaIAP בקבוצת היעד הרלוונטית. אפשר להעניק את ההרשאה באמצעות התפקיד iap.tunnelResourceAccessor.
כדי להגדיר הרשאות בקבוצות היעד, צריך את ההרשאה iap.tunnelDestGroups.setIamPolicy, שאפשר להעניק באמצעות התפקיד iap.admin.
המסוף
עוברים אל דף ה-IAP.
בכרטיסייה SSH and TCP resources (משאבי SSH ו-TCP), בוחרים את קבוצת היעד שרוצים להגדיר לה הרשאות.
בחלונית שנפתחת, לוחצים על Add principal ומזינים את כתובת האימייל של המשתמש.
בקטע Assign roles, בוחרים תפקיד להקצאה לחשבון הראשי.
לוחצים על Save.
gcloud
gcloud iap tcp dest-groups add-iam-policy-binding \ --member=MEMBER \ --role=ROLE \ --dest-group=GROUP_NAME \ --region=REGION
מחליפים את מה שכתוב בשדות הבאים:
MEMBER: כתובת האימייל של המשתמש, למשל
user:exampleuser@company.com.ROLE: תפקיד ה-IAP הנדרש,
roles/iap.tunnelResourceAccessor.GROUP_NAME: שם קבוצת היעד.
REGION: שם האזור, למשל
us-central1.
הסבר על השימוש במנהרות
יש שלוש פקודות של ה-CLI של gcloud שאפשר להשתמש בהן כשעובדים עם IAP-TCP: start-iap-tunnel, ssh ו-scp.
פקודות ה-TCP של IAP עודכנו כדי לתמוך במנהור מבוסס-IP ומבוסס-FQDN. כדי לעבור לכתובת IP או ל-FQDN, מבצעים את הפעולות הבאות כשמשתמשים בפקודות:
- מציינים כתובת IP או FQDN במקום שם המופע.
- במקום זאת, צריך להשתמש ב-
--region.--zone - משתמשים ב-
--dest-groupכדי לציין את קבוצת היעד שבה רוצים להשתמש. - משתמשים ב-
--networkכדי לציין את השם של רשת ה-VPC שבה רוצים להשתמש.
כתובת ה-IP שאתם מציינים צריכה להיות כתובת ה-IP הפרטית של היעד.
אי אפשר להשתמש ב-IAP-TCP עם כתובות IP ציבוריות. אם משתמשים ב-FQDN, הוא חייב להוביל לכתובת ה-IP הפרטית של היעד. חשוב לזכור שרזולוציית השמות מתבצעת מתוך רשת ה-VPC שאתם מציינים, ולא מתוך הרשת של הלקוח. לדוגמה, אם מנסים ליצור מנהרה ל-vm.corp.company.com, השלב שבו vm.corp.company.com מומר לכתובת IP מתרחש בהקשר של רשת ה-VPC.
האזור שאתם מציינים חייב להיות זהה לאזור של קבוצת היעד.
הרשת שאתם מציינים צריכה להיות זהה לשם של רשת ה-VPC שיש לה גישה ליעד. שם רשת אופייני הוא default. אפשר לראות את רשימת שמות הרשתות בדף 'רשתות VPC' ב Google Cloud מסוף, או לאחזר את רשימת שמות הרשתות באמצעות הפעלת הפקודה הבאה:
gcloud compute networks list --format='value(name)'
דוגמאות
בדוגמאות הבאות נעשה שימוש בכתובת IP לדוגמה 172.16.1.2. בכל פקודה אפשר להשתמש גם ב-FQDN (לדוגמה, example.internal.company.com) במקום בכתובת ה-IP.
דוגמה ל-SSH
כדי להתחיל סשן SSH ל-172.16.1.2, מריצים את הפקודה הבאה:
gcloud compute ssh 172.16.1.2 \
--region=us-central1 \
--dest-group=DESTINATION_GROUP_NAME \
--network=default \
--tunnel-through-iap
מחליפים את DESTINATION_GROUP_NAME בשם קבוצת היעד.
שימו לב: --plain משתמע, ולכן לא מתבצע ניסיון לנהל ולדחוף מפתחות SSH באופן אוטומטי כשמשתמשים בכתובת IP.
אם מקבלים את השגיאה Permission denied (publickey), סימן שהפקודה לא מצאה את הקובץ שמכיל את מפתחות ה-SSH. כדי לפתור את הבעיה, מוסיפים את הנתיב לקובץ שמכיל את מפתחות ה-SSH הפרטיים כפרמטר לפקודת ה-SSH, כמו בדוגמה הבאה:
gcloud compute ssh 172.16.1.2 \
--region=us-central1 \
--dest-group=DESTINATION_GROUP_NAME \
--network=default \
--tunnel-through-iap \
-- -i ~/.ssh/google_compute_engine
מחליפים את DESTINATION_GROUP_NAME בשם קבוצת היעד.
אם רוצים להיכנס בתור משתמש ספציפי, משתמשים בפורמט USER@IP במקום לציין רק את כתובת ה-IP:
gcloud compute ssh user@172.16.1.2 \
--region=us-central1 \
--dest-group=DESTINATION_GROUP_NAME \
--network=default \
--tunnel-through-iap
אם החשבון מוגן באמצעות סיסמה, צריך להזין סיסמה. אם החשבון מוגן על ידי זוג מפתחות SSH פרטיים או ציבוריים, צריך לציין אותם באמצעות הדגל -- -i כמו שמתואר למעלה.
דוגמה למנהרה
כדי ליצור מנהרה ליציאת TCP אחרת, משתמשים בפקודה start-iap-tunnel.
כדי ליצור מנהרה מ-localhost:8022 ליציאה 172.16.1.2:8085, מריצים את הפקודה הבאה:
gcloud compute start-iap-tunnel 172.16.1.2 8085 \
--local-host-port=localhost:8022 \
--region=us-central1 \
--dest-group=DESTINATION_GROUP_NAME \
--network=default
שימו לב: במקרה הזה, מכונת היעד צריכה להאזין ליציאה 8085.
אחרי שיוצרים מנהרה, אפשר להשתמש בכל כלי, כמו PuTTY, כדי ליצור חיבור.
דוגמה ל-SCP
כדי להעתיק קובץ אל 172.16.1.2 באמצעות SCP, מריצים את הפקודה הבאה:
gcloud compute scp file.txt 172.16.1.2:~/ \
--region=us-central1 \
--dest-group=DESTINATION_GROUP_NAME \
--network=default \
--tunnel-through-iap
שימו לב: --plain משתמע, ולכן לא מתבצע ניסיון לנהל ולדחוף מפתחות SSH באופן אוטומטי כשמשתמשים בכתובת IP.
דוגמה ל-SSH ProxyCommand
כדי להשתמש בפקודה כ-ProxyCommand שתמיד יוצרת מנהור ל-172.16.1.2, מוסיפים רשומה להגדרות ~/.ssh/config או להגדרות מקבילות, כמו בדוגמה הבאה:
Host example
ProxyCommand gcloud compute start-iap-tunnel 172.16.1.2 '%p' --region=us-central1 --dest-group=DESTINATION_GROUP_NAME --network=default --verbosity=warning
הפקודה ProxyCommand נכנסת לתוקף כשמריצים את הפקודה הבאה: ssh example
אפשר גם להגדיר את ProxyCommand לטיפול בשמות מארחים רבים, כמו בדוגמה הבאה:
Host *.internal.company.com
ProxyCommand gcloud compute start-iap-tunnel '%h' '%p' --region=us-central1 --dest-group=DESTINATION_GROUP_NAME --network=default --verbosity=warning
הפקודה ProxyCommand נכנסת לתוקף כשמריצים את הפקודה הבאה: ssh example.internal.company.com