יצירת הסוד עם מפתח משותף מראש (PSK)

בדף הזה מוסבר איך ליצור מפתח ששותף מראש (PSK) ולהשתמש בו כדי ליצור סוד אימות.

‫PSK הוא סיסמה סודית משותפת שמשמשת לאימות ולהצפנה של התקשורת בין שני מכשירים. זהו סוג של הצפנה סימטרית.

לפני שמתחילים

כדי ליצור סוד, צריך את התפקידים הנדרשים לניהול זהויות והרשאות גישה:

  • אדמין של VPN: יש לו הרשאות קריאה וכתיבה בכל המשאבים שקשורים ל-VPN. בקשו ממנהל חשבון ארגוני ב-IAM להקצות לכם את התפקיד 'אדמין VPN' (vpn-admin).
  • צפייה ב-VPN: הרשאות קריאה בכל המשאבים שקשורים ל-VPN. בקשו ממנהל חשבון ארגוני ב-IAM להקצות לכם את התפקיד "צפייה ב-VPN"‏ (vpn-viewer).
  • מידע נוסף זמין במאמר הגדרות תפקידים.

יצירת PSK

כדי ליצור מפתח חזק ששותף מראש באורך 32 תווים, אפשר להשתמש בשיטות הבאות.

OpenSSL

מידע נוסף על OpenSSL זמין בכתובת https://www.openssl.org/. במערכת Linux או macOS, מריצים את פקודת OpenSSL הבאה:

openssl rand -base64 24

/dev/urandom

במערכת Linux או macOS, אפשר גם להשתמש ב-/dev/urandom כמקור פסאודו-אקראי כדי ליצור מפתח ששותף מראש:

  • ב-Linux או ב-macOS, שולחים את הקלט האקראי אל base64:

    head -c 24 /dev/urandom | base64
    
  • מעבירים את הקלט האקראי דרך פונקציית גיבוב (hash), כמו sha256:

    • ב-Linux:

      head -c 4096 /dev/urandom | sha256sum | cut -b1-32
      
    • ב-macOS:

      head -c 4096 /dev/urandom | openssl sha256 | cut -b1-32
      

JavaScript

אפשר ליצור את המפתח ששותף מראש ישירות במסמך באמצעות JavaScript עם W3C Web Cryptography API. מידע נוסף זמין בכתובת https://www.w3.org/TR/WebCryptoAPI/#Crypto-method-getRandomValues

ה-API הזה משתמש ב-method‏ Crypto.getRandomValues() שמפורטת כאן: https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues, שמספקת דרך קריפטוגרפית תקינה ליצירת מפתח משותף מראש.

הקוד הבא יוצר מערך של 24 בייטים אקראיים, ואז מקודד את הבייטים האלה ב-base64 כדי ליצור מחרוזת אקראית של 32 תווים:

  var a = new Uint8Array(24);
  window.crypto.getRandomValues(a);

  console.log(btoa(String.fromCharCode.apply(null, a)));

יצירת הסוד

יוצרים סוד עם מפתח PSK במרחב השמות של הפלטפורמה:

kubectl --kubeconfig MANAGEMENT_API_SERVER create secret -n platform generic PSK_NAME --from-literal=psk=PSK

מחליפים את מה שכתוב בשדות הבאים:

  • ‫MANAGEMENT_API_SERVER: הנתיב של kubeconfig לשרת ה-API האזורי. אם עדיין לא יצרתם קובץ kubeconfig לשרת ה-API באזור היעד, קראו את הפרטים בקטע כניסה.
  • ‫PSK_NAME: השם של מפתח ה-PSK.
  • ‫PSK: הערך של מפתח ה-PSK.

המאמרים הבאים