השגת אישורי TLS: דוגמה

הנושא הזה מיועד כדוגמה בלבד. במאמר מוסבר איך לקבל אישור TLS מרשות האישורים (CA) Let's Encrypt. השלבים האלה מובאים בעיקר כדוגמה שאפשר לפעול לפיה אם אין לכם דרך אחרת מוכנה להשגת צמד של אישור/מפתח שאושר על ידי רשות אישורים. בדוגמה הזו נראה איך ליצור אישורים באמצעות רשות האישורים Let's Encrypt, לקוח Certbot ו-Cloud DNS של Google Cloud Platform.

איפה אפשר להשתמש באישורים האלה

צריך לספק אישורי TLS לשערי כניסה (ingress) של זמן ריצה שנחשפים מחוץ לאשכול.

אפשר לעיין גם במאמר בנושא חיבורים חיצוניים.

דרישות

תצטרכו שם דומיין שהתקבל דרך רשם שמות דומיין. אפשר לרשום שם דומיין דרך Google Domains או דרך רשם דומיינים אחר שתבחרו.

הגדרת Cloud DNS

כדי לקבל אישורי TLS מורשים, צריך שיהיה לכם שם דומיין שעומד בדרישות. בשלבים הבאים מוסבר איך להשתמש ב-Google Cloud DNS כדי לקבל שם דומיין ולנהל את שרתי הדומיין.
  1. פותחים את מסוף Google Cloud ונכנסים לחשבון.
  2. בוחרים את הפרויקט שבו מותקן Apigee Hybrid.
  3. אם עדיין לא עשיתם זאת, מפעילים את Cloud DNS API. מידע נוסף זמין במאמר בנושא הפעלת ממשקי API.
  4. יוצרים כתובת IP סטטית:
    • אם אתם משתמשים ב-GKE, פועלים לפי ההוראות במאמר הגדרת כתובות IP חיצוניות סטטיות כדי ליצור כתובות IP סטטיות שתהליכים חיצוניים יכולים להשתמש בהן כדי לתקשר עם שער הכניסה של סביבת זמן הריצה ההיברידית. אפשר לתת לכתובת כל שם שרוצים, למשל: apigee-hybrid-runtime. בסיום, תשתמשו במספר ה-IP בהגדרת האשכול בשלב הבא. לדוגמה: 34.66.75.196
    • אם אתם משתמשים ב-Google Distributed Cloud, כדי ליצור כתובת IP סטטית, צריך לפעול לפי ההוראות במאמרים תכנון כתובות IP ויצירת אשכול משתמשים.
  5. מקבלים את כתובת ה-IP החיצונית ששמרתם.
  6. יוצרים קבוצת רשומות לנקודת הכניסה של Istio בזמן הריצה. זו הכתובת לביצוע קריאות ל-API לשער ההיברידי. מזינים את כתובת ה-IP החיצונית שקיבלתם בשלב הקודם ומוסיפים קידומת לשם הדומיין, כמו example-endpoint. הוראות מפורטות מופיעות במאמר בנושא יצירת רשומה חדשה.
    1. יוצרים אזור ציבורי מנוהל. הוראות מפורטות זמינות במאמר בנושא יצירת אזור ציבורי מנוהל.
    2. יוצרים קבוצת רשומות חדשה עם:
      • שם DNS: השם של נקודת הקצה שאליה קריאות חיצוניות ל-API יתקשרו, כמו api-services או example-endpoint
      • סוג רשומת המשאבים: A
      • TTL ו-TTL Unit: מאשרים את ברירות המחדל
      • כתובת IP: כתובת ה-IP הסטטית שיצרתם.
  7. בתצוגה פרטי האזור יופיעו ארבעה שרתי DNS כנתוני NS עבור האזור החדש שלכם. מעתיקים את נתוני רשומת ה-DNS, כמו בדוגמה הבאה:

  8. חוזרים לדף הדומיין אצל הרשם (לדוגמה, Google Domains).
  9. בוחרים את הדומיין.
  10. בוחרים באפשרות DNS.
  11. בקטע Name Servers (שרתי שמות), לוחצים על Edit (עריכה).
  12. מזינים את שרתי השמות של הדומיין שהעתקתם מהדף Network Services Cloud DNS (שירותי רשת Cloud DNS). לדוגמה:

מעכשיו, רשומות ה-DNS של הדומיין ינוהלו על ידי Google Cloud DNS.

התקנה של Certbot במכונה וירטואלית

אחרי שמגדירים את Cloud DNS לניהול שרתי הדומיין, מתקינים את לקוח Certbot עם התוסף dns_google במכונה וירטואלית ב-Cloud. הלקוח מאפשר לכם לקבל אישורים מורשים לדומיין מנקודת קצה של Let's Encrypt.

  1. פותחים את מסוף Google Cloud ונכנסים לחשבון שיצרתם בשלב 1: יצירת חשבון Google Cloud.
  2. בוחרים את הפרויקט שיצרתם בשלב 2: יצירת פרויקט ב-Google Cloud.
  3. בוחרים באפשרות IAM & admin > Service accounts (‏IAM ואדמין > חשבונות שירות).

    בתצוגה Service accounts מוצגת רשימה של חשבונות השירות של הפרויקט.

  4. כדי ליצור חשבון שירות חדש, לוחצים על +Create Service Account (יצירת חשבון שירות) בחלק העליון של התצוגה.

    מוצג התצוגה פרטי חשבון השירות.

  5. בשדה Service account name, מזינים את השם של חשבון השירות.

    אופציונלי: מוסיפים תיאור בשדה תיאור חשבון השירות. התיאורים עוזרים לזכור למה משמש חשבון שירות מסוים.

  6. לוחצים על יצירה.

    מערכת Google Cloud יוצרת חשבון שירות חדש ומציגה את התצוגה Service account permissions. אפשר להשתמש בתצוגה הזו כדי להקצות תפקיד לחשבון השירות החדש.

  7. לוחצים על הרשימה הנפתחת Select a role (בחירת תפקיד).
  8. בוחרים בתפקיד Project Owner.
  9. לוחצים על Continue.
  10. לוחצים על סיום.
  11. במסוף Google Cloud , בוחרים באפשרות Compute Engine > VM Instances.
  12. יוצרים מופע של מכונה וירטואלית בשם certmanager.
  13. בקטע Boot Disk, בוחרים באפשרות CentOS7 ומזינים 20GB עבור כונן SSD קבוע.
  14. מגדירים את חשבון השירות לזה שיצרתם למעלה.
  15. מתקינים את Certbot ואת הפלאגין dns_google במכונה ומריצים את לקוח Certbot:
      sudo su -
      yum -y install yum-utils
      yum install certbot -y
      yum install certbot-dns-google -y
      certbot certonly --dns-google -d *.your_domain_name,*.your_domain_name --server https://acme-v02.api.letsencrypt.org/directory
      

    לדוגמה:

    sudo su -
    yum -y install yum-utils
    yum install certbot -y
    yum install certbot-dns-google -y
    certbot certonly --dns-google -d *.apigee-hybrid-docs.net,*.apigee-hybrid-docs.net --server https://acme-v02.api.letsencrypt.org/directory
  16. עכשיו אפשר למצוא את קובצי האישור והמפתח הפרטי המורשים בספרייה הזו: cd /etc/letsencrypt/live/your_domain_name/

    לדוגמה:

    cd /etc/letsencrypt/live/apigee-hybrid-docs.net
    ls
      cert.pem  chain.pem  fullchain.pem  privkey.key  README
  17. מעתיקים את הקבצים fullchain.pem ו-privkey.key למחשב המקומי.
  18. אופציונלי: יוצרים סוד של Kubernetes עם צמד האישור/המפתח. הוראות מפורטות מופיעות בקטע אפשרות 2: סוד של Kubernetes במאמר הגדרת TLS ו-mTLS ב-Istio Ingress.
  19. מעדכנים את קובץ ההחלפות כך שיצביע על האישור ועל המפתח הפרטי.

    לדוגמה:

    ...
    envs:
      - name: test
        serviceAccountPaths:
          synchronizer: "your_keypath/synchronizer-manager-service-account.json
          udca: "your_keypath/analytic-agent-service-account.json
    
    virtualhosts:
      - name: my-env-group
        sslCertPath: "$HOME/hybrid/apigee-hybrid-setup/tls/fullchain.pem"
        sslKeyPath: "$HOME/hybrid/apigee-hybrid-setup/tls/privkey.key"

    או אם משתמשים בסודות של Kubernetes:

    ...
    envs:
      - name: test
        serviceAccountPaths:
          synchronizer: "your_keypath/synchronizer-manager-service-account.json
          udca: "your_keypath/analytic-agent-service-account.json
    
    virtualhosts:
      - name: my-env-group
        tlsMode: SIMPLE  # Note: SIMPLE is the default, MUTUAL is also an available value.
        sslSecret: myorg-test-policy-secret"
    
    ...  
  20. החלת שינויים בהגדרות של envs:

    מריצים את הפקודה helm upgrade לכל סביבה שרוצים לעדכן.

    helm upgrade ENV_NAME apigee-env/ \
      --namespace apigee \
      --set env=ENV_NAME \
      --atomic \
    -f OVERRIDES_FILE.yaml
    
  21. בדיקת ההגדרות

    פריסה ובדיקה של שרת proxy. מידע נוסף מופיע במאמר סקירה כללית על יצירת שרת proxy ראשון של API.