אישור לקוח תקף צריך להציג שרשרת מהימנה שמובילה חזרה לישות עוגן אמינה במאגר האישורים. בדף הזה מוסבר איך ליצור שרשרת אמון משלכם באמצעות אישור הבסיס של רשות אישורים פרטית (CA) שנמצאת בשליטתכם. בהגדרה הזו, רשות ה-CA הפרטית נוצרת באמצעות Certificate Authority Service.
אחרי שמקבלים את אישור הבסיס של ה-CA הפרטי, במסמך הזה מפורט התהליך להעלאת האישור למאגר אישורים של משאב Certificate Manager TrustConfig. לאחר מכן מקשרים את הגדרת האמון למשאב אימות הלקוח (ServerTLSPolicy) ומצרפים את משאב אימות הלקוח למשאב פרוקסי ה-HTTPS של מאזן העומסים.
לפני שמתחילים
- כדאי לעיין בסקירה הכללית על TLS בו-זמני.
- מומלץ לעיין במדריך בנושא ניהול הגדרות אמון.
מתקינים את Google Cloud CLI. סקירה כללית מלאה של הכלי זמינה במאמר סקירה כללית על ה-CLI של gcloud. אפשר למצוא פקודות שקשורות לאיזון עומסים בהפניית API וב-CLI של gcloud.
אם לא הפעלתם את ה-CLI של gcloud בעבר, קודם מריצים את הפקודה
gcloud initכדי לבצע אימות.מומלץ לעיין במדריך בנושא יצירת מאגר של רשויות אישורים.
אם אתם משתמשים במאזן עומסים גלובלי חיצוני של אפליקציות (ALB) או במאזן עומסים קלאסי של אפליקציות (ALB), ודאו שהגדרתם מאזן עומסים עם אחד מהקצוות העורפיים הנתמכים הבאים:
- קצוות עורפיים של קבוצת מכונות וירטואליות
- קטגוריות של Cloud Storage (נתמך רק אם יש לפחות שירות לקצה העורפי אחד שמצורף גם למאזן העומסים, בנוסף לקטגוריית קצה עורפי)
- Cloud Run, App Engine או פונקציות Cloud Run
- קישוריות היברידית
אם אתם משתמשים במאזן עומסים חיצוני אזורי של אפליקציות (ALB), במאזן עומסים פנימי של אפליקציות (ALB) בין אזורים או במאזן עומסים פנימי אזורי של אפליקציות (ALB), ודאו שהגדרתם מאזן עומסים עם אחד מהקצוות העורפיים הנתמכים הבאים:
- קצוות עורפיים של קבוצת מכונות וירטואליות
- Cloud Run
- קישוריות היברידית
הרשאות
כדי לקבל את ההרשאות שדרושות להשלמת המדריך הזה, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:
-
כדי ליצור משאבי איזון עומסים כמו
TargetHTTPProxy: Compute Load Balancer Admin (roles/compute.loadBalancerAdmin) -
כדי להשתמש במשאבים של Certificate Manager:
בעלים של Certificate Manager (
roles/certificatemanager.owner) -
כדי ליצור רכיבי אבטחה ורשת:
אדמין של רשת מחשוב (
roles/compute.networkAdmin) ואדמין לענייני אבטחה של מחשוב (roles/compute.securityAdmin) -
כדי ליצור פרויקט (אופציונלי):
יצירת פרויקטים (
roles/resourcemanager.projectCreator)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
קבלת האישור של רשות האישורים הבסיסית
ל-CA הבסיסי יש אישור עם חתימה עצמית שצריך להוסיף למאגר האישורים המהימנים. האישור של רשות האישורים הבסיסית נמצא בראש שרשרת האישורים.
כדי לקבל את האישור של רשות האישורים הבסיסית, צריך קודם ליצור מאגר רשויות אישורים, שהוא ריק כשהוא נוצר. לאחר מכן צריך ליצור רשות אישורי בסיס ולהוסיף אותה למאגר רשויות האישורים. רשות אישורי הבסיס ומאגר רשויות האישורים נוצרים באמצעות Certificate Authority Service, כמו שמתואר בשלבים הבאים.
כדי ליצור מאגר של רשויות אישורים, משתמשים בפקודה
gcloud privateca pools create:gcloud privateca pools create CA_POOL \ --location=us-central1
מחליפים את
CA_POOLבמזהה או בשם של מאגר רשויות האישורים הראשי.כדי ליצור רשות אישורי בסיס ולהוסיף אותה למאגר רשויות האישורים, משתמשים בפקודה
gcloud privateca roots create:gcloud privateca roots create CA_ROOT \ --pool=CA_POOL \ --subject="CN=my-ca, O=Test LLC" \ --location=us-central1
מחליפים את מה שכתוב בשדות הבאים:
-
CA_ROOT: המזהה או השם של רשות הבסיס להנפקת אישורים. -
CA_POOL: המזהה או השם של מאגר CA האב.
-
מחלצים את האישור בקידוד PEM שמזהה את רשות האישורים הבסיסית.
gcloud privateca roots describe CA_ROOT \ --pool=CA_POOL \ --location=us-central1 \ --format='value(pemCaCertificates)' > root.cert
מחליפים את מה שכתוב בשדות הבאים:
-
CA_ROOT: המזהה או השם של רשות האישורים הפרטית. -
CA_POOL: המזהה או השם של מאגר CA האב.
צריך להעלות את אישור הבסיס (
root.cert) למאגר האישורים. השלב הזה יבוצע בקטע הבא.-
למידע נוסף על שימוש ב-Certificate Authority Service כדי ליצור מאגר CA ו-CA בסיסי:
עיצוב אישור ה-CA הבסיסי
כדי לכלול את אישור הבסיס במאגר אישורים, צריך לעצב את האישור לשורה אחת ולאחסן אותו במשתנה סביבה, כדי שאפשר יהיה להפנות אליו בקובץ ה-YAML של הגדרת המהימנות.
export ROOT=$(cat root.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
יצירה של משאב להגדרת אמון
הגדרת אמון היא משאב שמייצג את התצורה של תשתית המפתח הציבורי (PKI) שלכם ב-Certificate Manager.
כדי ליצור משאב של הגדרת אמון, מבצעים את השלבים הבאים:
המסוף
נכנסים לדף Certificate Manager במסוף Google Cloud .
בכרטיסייה Trust Configs, לוחצים על Add Trust Config.
מזינים שם להגדרה.
בקטע מיקום, בוחרים באפשרות גלובלי או אזורי.
המיקום מציין איפה מאוחסן משאב הגדרות האמון. למאזני עומסים גלובליים חיצוניים של אפליקציות (ALB), למאזני עומסים קלאסיים של אפליקציות (ALB) ולמאזני עומסים פנימיים של אפליקציות (ALB) חוצי-אזורים, צריך ליצור משאב גלובלי של הגדרת אמון. עבור מאזני עומסים חיצוניים אזוריים של אפליקציות (ALB) ומאזני עומסים פנימיים אזוריים של אפליקציות (ALB), צריך ליצור משאב של הגדרת אמון אזורית.
אם בחרתם באפשרות אזורי, בוחרים את האזור.
בקטע מאגר אישורים, לוחצים על ישות עוגן אמינה ומעלים את קובץ האישור בקידוד PEM, או מעתיקים את תוכן האישור.
לוחצים על הוספה.
לוחצים על יצירה.
מוודאים שמשאב ההגדרות החדש של אמון מופיע ברשימת ההגדרות.
gcloud
יוצרים קובץ YAML של הגדרות אמון (
trust_config.yaml) שמציין את הפרמטרים של הגדרות האמון. בדוגמה הזו, משאב הגדרות האמון הוא מאגר אמון עם עוגן אמון יחיד שמייצג אישור בסיס. אישור הבסיס הזה נוצר באמצעות רשות CA פרטית.cat << EOF > trust_config.yaml name: TRUST_CONFIG_NAME trustStores: - trustAnchors: - pemCertificate: "${ROOT?}" EOFכדי לייבא את קובץ ה-YAML של הגדרות האמון, משתמשים בפקודה
gcloud certificate-manager trust-configs import:גלובלי
במאזני עומסים גלובליים חיצוניים של אפליקציות, במאזני עומסים של אפליקציות בגרסה הקלאסית ובמאזני עומסים פנימיים של אפליקציות חוצי-אזורים, מציינים
globalכמיקום שבו מאוחסן משאב הגדרות האמון.gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \ --source=trust_config.yaml \ --location=globalמחליפים את מה שכתוב בשדות הבאים:
-
TRUST_CONFIG_NAME: השם של משאב הגדרות האמון.
אזורי
במאזני עומסים אזוריים חיצוניים של אפליקציות ובמאזני עומסים אזוריים פנימיים של אפליקציות, מציינים את האזור שבו מאוחסן משאב הגדרת האמון.
gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \ --source=trust_config.yaml \ --location=LOCATIONמחליפים את מה שכתוב בשדות הבאים:
-
TRUST_CONFIG_NAME: השם של משאב הגדרות האמון. -
LOCATION: האזור שבו מאוחסן משאב הגדרות האמון. מיקום ברירת המחדל הואglobal.
-
יצירת משאב לאימות לקוח
משאב של אימות לקוח (נקרא גם ServerTLSPolicy) מאפשר לכם לציין את מצב ה-TLS בצד השרת ואת משאב הגדרות האמון שבו יש להשתמש כשמאמתים אישורים של לקוחות. כשלקוח מציג למאזן העומסים אישור לא תקין או לא מציג אישור בכלל, ההגדרה clientValidationMode מציינת איך לטפל בחיבור של הלקוח. מידע נוסף זמין במאמר בנושא מצבי אימות של לקוח mTLS.
- כשהמדיניות
clientValidationModeמוגדרת כ-ALLOW_INVALID_OR_MISSING_CLIENT_CERT, כל הבקשות מועברות לעורף גם אם האימות נכשל או שחסר אישור לקוח. - כשהערך של
clientValidationModeהואREJECT_INVALID, רק בקשות שמספקות אישור לקוח שאפשר לאמת מול משאבTrustConfigמועברות אל ה-Backend.
כדי ליצור משאב של אימות לקוח (ServerTlsPolicy):
המסוף
נכנסים לדף Authentication Configuration במסוף Google Cloud .
בכרטיסייה Client Authentication (אימות לקוח), לוחצים על Create (יצירה).
מזינים שם למשאב אימות הלקוח.
בקטע מיקום, בוחרים באפשרות גלובלי או אזורי.
למאזני עומסים גלובליים חיצוניים של אפליקציות (ALB), למאזני עומסים קלאסיים של אפליקציות (ALB) ולמאזני עומסים פנימיים של אפליקציות (ALB) בין אזורים, צריך להגדיר את המיקום כגלובלי. למאזני עומסים חיצוניים אזוריים של אפליקציות ולמאזני עומסים פנימיים אזוריים של אפליקציות, צריך להגדיר את המיקום לאזור שבו מאזן העומסים מוגדר.
ב-Client Authentication mode, בוחרים באפשרות איזון עומסים.
בוחרים מצב אימות לקוח.
בוחרים את משאב הגדרת האמון שיצרתם קודם.
אופציונלי: לוחצים על קוד מקביל כדי לראות את הגדרת Terraform של המשאב הזה.
לוחצים על יצירה.
מוודאים שמוצג אימות הלקוח (ServerTlsPolicy).
gcloud
בהתאם לאופן שבו רוצים לטפל בחיבור, בוחרים באחת מהאפשרויות הבאות כדי להגדיר את משאב אימות הלקוח (
ServerTlsPolicy) בפורמט YAML.אפשרות 1: הערך של
clientValidationModeמוגדר ל-ALLOW_INVALID_OR_MISSING_CLIENT_CERT.גלובלי
עבור מאזני עומסים גלובליים חיצוניים של אפליקציות, מאזני עומסים קלאסיים של אפליקציות ומאזני עומסים פנימיים של אפליקציות חוצי-אזורים, יוצרים קובץ YAML שמציין באופן הצהרתי את מצב האימות של הלקוח ואת משאב התצורה הגלובלי של האמון:
cat << EOF > server_tls_policy.yaml name: SERVER_TLS_POLICY_NAME mtlsPolicy: clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME EOFאזורי
עבור מאזני עומסים חיצוניים אזוריים של אפליקציות ומאזני עומסים פנימיים אזוריים של אפליקציות, יוצרים קובץ YAML שמציין באופן הצהרתי את מצב האימות של הלקוח ואת משאב ההגדרה של האמון האזורי:
cat << EOF > server_tls_policy.yaml name: SERVER_TLS_POLICY_NAME mtlsPolicy: clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME EOFאפשרות 2: הערך של
clientValidationModeמוגדר ל-REJECT_INVALID.גלובלי
עבור מאזני עומסים גלובליים חיצוניים של אפליקציות, מאזני עומסים קלאסיים של אפליקציות ומאזני עומסים פנימיים של אפליקציות חוצי-אזורים, יוצרים קובץ YAML שמציין באופן הצהרתי את מצב האימות של הלקוח ואת משאב התצורה הגלובלי של אמון:
cat << EOF > server_tls_policy.yaml name: SERVER_TLS_POLICY_NAME mtlsPolicy: clientValidationMode: REJECT_INVALID clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME EOFאזורי
עבור מאזני עומסים חיצוניים אזוריים של אפליקציות ומאזני עומסים פנימיים אזוריים של אפליקציות, יוצרים קובץ YAML שמציין באופן הצהרתי את מצב האימות של הלקוח ואת משאב ההגדרה של האמון האזורי:
cat << EOF > server_tls_policy.yaml name: SERVER_TLS_POLICY_NAME mtlsPolicy: clientValidationMode: REJECT_INVALID clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME EOFמחליפים את מה שכתוב בשדות הבאים:
SERVER_TLS_POLICY_NAME: השם של משאב אימות הלקוח (ServerTlsPolicy).
PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
LOCATION: במאזני עומסים גלובליים חיצוניים של אפליקציות (ALB), במאזני עומסים קלאסיים של אפליקציות (ALB) ובמאזני עומסים פנימיים של אפליקציות (ALB) בין אזורים, משתמשים ב-global. במאזן עומסים חיצוני אזורי של אפליקציות (ALB) או במאזן עומסים פנימי אזורי של אפליקציות (ALB), משתמשים באזור שבו הגדרתם את מאזן העומסים.
TRUST_CONFIG_NAME: השם של משאב הגדרות האמון שיצרתם קודם.
כדי לייבא את משאב
ServerTlsPolicyשל אימות הלקוח, משתמשים בפקודהgcloud network-security server-tls-policies import:גלובלי
במאזני עומסים גלובליים חיצוניים של אפליקציות (ALB), במאזני עומסים קלאסיים של אפליקציות (ALB) ובמאזני עומסים פנימיים של אפליקציות (ALB) חוצי-אזורים, מגדירים את הדגל
--locationלערךglobal.gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \ --source=server_tls_policy.yaml \ --location=global
מחליפים את מה שכתוב בשדות הבאים:
SERVER_TLS_POLICY_NAME: השם של משאב אימות הלקוח (ServerTlsPolicy).אזורי
במאזני עומסים חיצוניים אזוריים של אפליקציות (ALB) ובמאזני עומסים פנימיים אזוריים של אפליקציות (ALB), צריך להגדיר את הדגל
--locationלאזור שבו מאזן העומסים מוגדר.gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \ --source=server_tls_policy.yaml \ --location=LOCATION
מחליפים את מה שכתוב בשדות הבאים:
SERVER_TLS_POLICY_NAME: השם של משאב אימות הלקוח (ServerTlsPolicy).אופציונלי: כדי להציג רשימה של כל המשאבים של אימות לקוח (
ServerTlsPolicies), משתמשים בפקודהgcloud network-security server-tls-policies list:gcloud network-security server-tls-policies list \ --location=LOCATION
מחליפים את מה שכתוב בשדות הבאים:
LOCATION: במאזני עומסים גלובליים חיצוניים של אפליקציות, במאזני עומסים קלאסיים של אפליקציות ובמאזני עומסים פנימיים של אפליקציות בין אזורים, משתמשים ב-global. במאזן עומסים חיצוני אזורי של אפליקציות (ALB) או במאזן עומסים פנימי אזורי של אפליקציות (ALB), משתמשים באזור שבו הגדרתם את מאזן העומסים.
צירוף משאב אימות הלקוח למאזן העומסים
כדי שאימות TLS בו-זמני (mTLS) יפעל, אחרי שמגדירים את מאזן העומסים צריך לצרף את משאב אימות הלקוח (ServerTLSPolicy) למשאב ה-proxy של HTTPS שמשמש כיעד של מאזן העומסים.
המסוף
נכנסים לדף Load balancing במסוף Google Cloud .
ברשימת מאזני העומסים, בוחרים את מאזן העומסים שאליו רוצים לצרף את משאב אימות הלקוח (
ServerTLSPolicy).לוחצים על עריכה.
בקטע Frontend configuration של חזית אתרים מסוג HTTPS, מרחיבים את הקטע Show Advanced features.
ברשימה Client Authentication, בוחרים את משאב Client Authentication.
לוחצים על סיום.
לוחצים על עדכון.
gcloud
כדי להציג את כל משאבי ה-HTTPS proxy בפרויקט, משתמשים בפקודה
gcloud compute target-https-proxies list:gcloud compute target-https-proxies list
רושמים את השם של שרת ה-proxy של היעד מסוג HTTPS כדי לצרף אליו את המשאב
ServerTLSPolicy. השם הזה נקראTARGET_HTTPS_PROXY_NAMEבשלבים הבאים.כדי לייצא את ההגדרה של שרת proxy של HTTPS ליעד לקובץ, משתמשים בפקודה
gcloud compute target-https-proxies export.גלובלי
gcloud compute target-https-proxies export TARGET_HTTPS_PROXY_NAME \ --destination=TARGET_PROXY_FILENAME \ --globalמחליפים את מה שכתוב בשדות הבאים:
-
TARGET_HTTPS_PROXY_NAME: השם של שרת ה-proxy של היעד. -
TARGET_PROXY_FILENAME: השם של קובץ התצורה של ה-proxy של היעד בפורמט YAML. לדוגמה,mtls_target_proxy.yaml.
אזורי
gcloud compute target-https-proxies export TARGET_HTTPS_PROXY_NAME \ --destination=TARGET_PROXY_FILENAME \ --region=REGIONמחליפים את מה שכתוב בשדות הבאים:
-
TARGET_HTTPS_PROXY_NAME: השם של שרת ה-proxy של היעד. -
TARGET_PROXY_FILENAME: השם של קובץ התצורה של ה-proxy של היעד בפורמט YAML. לדוגמה,mtls_target_proxy.yaml. -
REGION: האזור שבו הגדרתם את מאזן העומסים.
-
כדי להציג את כל המשאבים של Client Authentication (
ServerTlsPolicy), משתמשים בפקודהgcloud network-security server-tls-policies list:gcloud network-security server-tls-policies list \ --location=LOCATIONמחליפים את מה שכתוב בשדות הבאים:
LOCATION: במאזן עומסים פנימי אזורי של אפליקציות, במאזן עומסים גלובלי חיצוני של אפליקציות או במאזן עומסים קלאסי של אפליקציות, משתמשים ב-global. במאזן עומסים חיצוני אזורי של אפליקציות (ALB) או במאזן עומסים פנימי אזורי של אפליקציות (ALB), צריך להשתמש באזור שבו הגדרתם את מאזן העומסים.רושמים את השם של משאב אימות הלקוח (
ServerTLSPolicy) כדי להגדיר mTLS. השם הזה נקראSERVER_TLS_POLICY_NAMEבשלב הבא.מוסיפים את אימות הלקוח (
ServerTlsPolicy) ל-Proxy של יעד HTTPS.echo "serverTlsPolicy: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/LOCATION/serverTlsPolicies/SERVER_TLS_POLICY_NAME" >> TARGET_PROXY_FILENAME
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
LOCATION: במאזני עומסים גלובליים חיצוניים של אפליקציות, במאזני עומסים קלאסיים של אפליקציות ובמאזני עומסים פנימיים של אפליקציות בין אזורים, משתמשים ב-global. במאזן עומסים חיצוני אזורי של אפליקציות (ALB) או במאזן עומסים פנימי אזורי של אפליקציות (ALB), צריך להשתמש באזור שבו הגדרתם את מאזן העומסים. -
SERVER_TLS_POLICY_NAME: השם של משאב אימות הלקוח (ServerTLSPolicy). -
TARGET_PROXY_FILENAME: השם של קובץ התצורה של שרת ה-proxy של היעד בפורמט YAML.
-
כדי לייבא את התצורה של שרת proxy של HTTPS ליעד מקובץ, משתמשים בפקודה
gcloud compute target-https-proxies import.גלובלי
gcloud compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \ --source=TARGET_PROXY_FILENAME \ --globalמחליפים את מה שכתוב בשדות הבאים:
-
TARGET_HTTPS_PROXY_NAME: השם של שרת ה-proxy של היעד. -
TARGET_PROXY_FILENAME: השם של קובץ התצורה של ה-proxy של היעד בפורמט YAML. לדוגמה,mtls_target_proxy.yaml.
אזורי
gcloud compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \ --source=TARGET_PROXY_FILENAME \ --region=REGIONמחליפים את מה שכתוב בשדות הבאים:
-
TARGET_HTTPS_PROXY_NAME: השם של שרת ה-proxy של היעד. -
TARGET_PROXY_FILENAME: השם של קובץ התצורה של שרת ה-proxy של היעד בפורמט YAML. לדוגמה,mtls_target_proxy.yaml. -
REGION: האזור שבו הגדרתם את מאזן העומסים.
-
הוספת כותרות מותאמות אישית של mTLS
כשמפעילים mTLS, אפשר להעביר מידע על חיבור mTLS באמצעות כותרות מותאמות אישית. אפשר גם להפעיל רישום ביומן כדי שתקלות בחיבור mTLS יתועדו ביומנים.
הוספת כותרות מותאמות אישית של mTLS לשירותי קצה עורפי
במאזני עומסים גלובליים חיצוניים של אפליקציות או במאזני עומסים קלאסיים של אפליקציות, אפשר להשתמש ב כותרות בהתאמה אישית כדי להעביר מידע על חיבור mTLS אל שירותי בק-אנד.
כדי לראות את רשימת כל שירותי ה-Backend בפרויקט, משתמשים בפקודה
gcloud compute backend-services list:gcloud compute backend-services list
כדאי לרשום את השם של שירות הקצה העורפי כדי להפעיל כותרות בהתאמה אישית ורישום ביומן. השם הזה נקרא
BACKEND_SERVICEבשלב הבא.כדי לעדכן את שירות לקצה העורפי, משתמשים בפקודה
gcloud compute backend-services update:gcloud compute backend-services update BACKEND_SERVICE \ --global \ --enable-logging \ --logging-sample-rate=1 \ --custom-request-header='X-Client-Cert-Present:{client_cert_present}' \ --custom-request-header='X-Client-Cert-Chain-Verified:{client_cert_chain_verified}' \ --custom-request-header='X-Client-Cert-Error:{client_cert_error}' \ --custom-request-header='X-Client-Cert-Hash:{client_cert_sha256_fingerprint}' \ --custom-request-header='X-Client-Cert-Serial-Number:{client_cert_serial_number}' \ --custom-request-header='X-Client-Cert-SPIFFE:{client_cert_spiffe_id}' \ --custom-request-header='X-Client-Cert-URI-SANs:{client_cert_uri_sans}' \ --custom-request-header='X-Client-Cert-DNSName-SANs:{client_cert_dnsname_sans}' \ --custom-request-header='X-Client-Cert-Valid-Not-Before:{client_cert_valid_not_before}' \ --custom-request-header='X-Client-Cert-Valid-Not-After:{client_cert_valid_not_after}'
הוספת כותרות מותאמות אישית של mTLS למפת URL
במאזן עומסים פנימי של אפליקציות (ALB) בין אזורים, במאזן עומסים חיצוני אזורי של אפליקציות (ALB) או במאזן עומסים פנימי אזורי של אפליקציות (ALB), אפשר להשתמש ב כותרות בהתאמה אישית כדי להעביר מידע על חיבור mTLS אל מפת URL.
כדי להציג את כל מיפויי כתובות ה-URL בפרויקט, משתמשים
בפקודה gcloud compute url-maps list:
gcloud compute url-maps list
כדי להפעיל כותרות בהתאמה אישית ורישום ביומן, צריך לשים לב לשם של מפת ה-URL.
השם הזה נקרא URL_MAP_NAME בשלב הבא.
גלובלי
כדי לערוך את מפת URL של מאזן עומסים פנימי של אפליקציות שפועל בכמה אזורים, משתמשים בפקודה gcloud compute
url-maps edit:
gcloud compute url-maps edit URL_MAP_NAME --global
בהמשך מופיעה דוגמה לקובץ YAML שמראה איך להשתמש במשתנים בכותרות של בקשות בהתאמה אישית (requestHeadersToAdd). אפשר להשתמש באותם משתנים כדי לשלוח כותרות של תשובות בהתאמה אישית (responseHeadersToAdd).
headerAction:
requestHeadersToAdd:
- headerName: "X-Client-Cert-Present"
headerValue: "{client_cert_present}"
- headerName: "X-Client-Cert-Chain-Verified"
headerValue: "{client_cert_chain_verified}"
- headerName: "X-Client-Cert-Error"
headerValue: "{client_cert_error}"
- headerName: "X-Client-Cert-Hash"
headerValue: "{client_cert_sha256_fingerprint}"
- headerName: "X-Client-Cert-Serial-Number"
headerValue: "{client_cert_serial_number}"
- headerName: "X-Client-Cert-SPIFFE"
headerValue: "{client_cert_spiffe_id}"
- headerName: "X-Client-Cert-URI-SANs"
headerValue: "{client_cert_uri_sans}"
- headerName: "X-Client-Cert-DNSName-SANs"
headerValue: "{client_cert_dnsname_sans}"
- headerName: "X-Client-Cert-Valid-Not-Before"
headerValue: "{client_cert_valid_not_before}"
- headerName: "X-Client-Cert-Valid-Not-After"
headerValue: "{client_cert_valid_not_after}"
- headerName: "X-Client-Cert-Issuer-Dn"
headerValue: "{client_cert_issuer_dn}"
- headerName: "X-Client-Cert-Subject-Dn"
headerValue: "{client_cert_subject_dn}"
- headerName: "X-Client-Cert-Leaf"
headerValue: "{client_cert_leaf}"
- headerName: "X-Client-Cert-Chain"
headerValue: "{client_cert_chain}"
אזורי
כדי לערוך את מפת URL עבור מאזן עומסים חיצוני אזורי של אפליקציות או מאזן עומסים פנימי אזורי של אפליקציות, השתמשו בפקודה gcloud compute
url-maps edit:
gcloud compute url-maps edit URL_MAP_NAME --region=REGION
בהמשך מופיעה דוגמה לקובץ YAML שמראה איך להשתמש במשתנים בכותרות של בקשות בהתאמה אישית (requestHeadersToAdd). אפשר להשתמש באותם משתנים כדי לשלוח כותרות של תשובות בהתאמה אישית (responseHeadersToAdd).
defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
name: regional-lb-map
region: region/REGION
headerAction:
requestHeadersToAdd:
- headerName: "X-Client-Cert-Present"
headerValue: "{client_cert_present}"
- headerName: "X-Client-Cert-Chain-Verified"
headerValue: "{client_cert_chain_verified}"
- headerName: "X-Client-Cert-Error"
headerValue: "{client_cert_error}"
- headerName: "X-Client-Cert-Hash"
headerValue: "{client_cert_sha256_fingerprint}"
- headerName: "X-Client-Cert-Serial-Number"
headerValue: "{client_cert_serial_number}"
- headerName: "X-Client-Cert-SPIFFE"
headerValue: "{client_cert_spiffe_id}"
- headerName: "X-Client-Cert-URI-SANs"
headerValue: "{client_cert_uri_sans}"
- headerName: "X-Client-Cert-DNSName-SANs"
headerValue: "{client_cert_dnsname_sans}"
- headerName: "X-Client-Cert-Valid-Not-Before"
headerValue: "{client_cert_valid_not_before}"
- headerName: "X-Client-Cert-Valid-Not-After"
headerValue: "{client_cert_valid_not_after}"
- headerName: "X-Client-Cert-Issuer-Dn"
headerValue: "{client_cert_issuer_dn}"
- headerName: "X-Client-Cert-Subject-Dn"
headerValue: "{client_cert_subject_dn}"
- headerName: "X-Client-Cert-Leaf"
headerValue: "{client_cert_leaf}"
- headerName: "X-Client-Cert-Chain"
headerValue: "{client_cert_chain}"
קבלת אישור לקוח באמצעות CSR
בקטע הזה מוסברת אפשרות הגדרה נוספת ליצירת אישור לקוח (עלה) שחתום על ידי אישור רשות האישורים הבסיסית.
כדי לקבל אישור לקוח, צריך ליצור בקשת חתימה על אישור (CSR) ולשלוח אותה למאגר רשויות האישורים.
יוצרים קובץ תצורה של OpenSSL כדי ליצור את בקשת החתימה (CSR) לאישור הלקוח.
קובץ התצורה הבא (
client.config) מכיל את הקטע[extension_requirements], שמציין את התוספים של X.509 שייכללו ב-CSR. מידע נוסף על הדרישות לגבי אישורי לקוח זמין במאמר דרישות לגבי אישורים.cat > client.config << EOF [req] default_bits = 2048 req_extensions = extension_requirements distinguished_name = dn_requirements prompt = no [extension_requirements] basicConstraints = critical, CA:FALSE keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = clientAuth [dn_requirements] countryName = US stateOrProvinceName = California localityName = San Francisco 0.organizationName = example organizationalUnitName = test commonName = test.example.com emailAddress = test@example.com EOFמריצים את הפקודה
opensslהבאה כדי ליצור בקשת חתימה על אישור (CSR,csr.pem) ומפתח פרטי תואם (key.pem).openssl req -newkey rsa:2048 -nodes \ -config client.config \ -keyout key.pem \ -out csr.pemמריצים את הפקודה
gcloud privateca certificates createהבאה כדי לשלוח את בקשת החתימה (CSR) ולבקש את אישור הלקוח X.509 ממאגר רשויות האישורים.gcloud privateca certificates create \ --issuer-pool CA_POOL \ --issuer-location=us-central1 \ --csr csr.pem \ --cert-output-file CERT_FILENAMEמחליפים את מה שכתוב בשדות הבאים:
-
CA_POOL: המזהה או השם של מאגר רשויות האישורים. -
CERT_FILENAME: קובץ שרשרת האישורים בקידוד PEM, מסודר מעלה לשורש.
-
שליחת בקשת HTTPS מאובטחת לכתובת ה-IP של מאזן העומסים באמצעות אישור SSL בצד הלקוח. הלקוח מציג את האישור שלו כדי לאמת את עצמו מול מאזן העומסים.
curl -v --key key.pem --cert CERT_FILENAME https://IP_ADDRESS
מחליפים את מה שכתוב בשדות הבאים:
-
CERT_FILENAME: קובץ שרשרת האישורים בקידוד PEM, שמסודר מהעלה לשורש. -
IP_ADDRESS: כתובת ה-IP של מאזן העומסים.
-