קבלת פרטי כניסה ל-TLS: דוגמה

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

איפה אפשר להשתמש בפרטי הכניסה האלה

צריך לספק פרטי כניסה ל-TLS עבור שני שערים של Istio ingress שנחשפים מחוץ לאשכול:

שער דרישה ל-TLS
שער כניסה של MART נדרש זוג מפתחות/אישור TLS מאושר.
שער כניסה בזמן ריצה אפשר להשתמש בזוג מפתחות/אישור עם חתימה עצמית או בפרטי כניסה מורשים של TLS.
אפשר לעיין גם במאמר בנושא חיבורים חיצוניים.

דרישות

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

הגדרת Cloud DNS

כדי לקבל אישורי TLS מורשים, צריך שיהיה לכם שם דומיין שעומד בדרישות. בשלבים הבאים מוסבר איך להשתמש ב-Google Cloud DNS כדי לקבל שם דומיין ולנהל את שרתי הדומיין.
  1. פותחים את מסוף Google Cloud ונכנסים לחשבון שיצרתם בשלב 1: יצירת חשבון Google Cloud.
  2. בוחרים את הפרויקט שיצרתם בשלב 2: יצירת פרויקט ב-GCP.
  3. מפעילים את Cloud DNS API. איך מפעילים ממשקי API
  4. יוצרים שתי כתובות IP סטטיות:
    • אם אתם משתמשים ב-GKE, פועלים לפי ההוראות במאמר שמירת כתובת IP חיצונית סטטית כדי ליצור שתי כתובות IP סטטיות. אתם יכולים לתת לכתובות כל שם שתרצו, לדוגמה: apigee-hybrid-mart ו-apigee-hybrid-runtime. בסיום, יהיו לכם שני מספרי IP שתוכלו להשתמש בהם בהגדרת האשכול בשלב הבא. לדוגמה: 35.225.131.189 ו-34.66.75.196
    • אם אתם משתמשים ב-Anthos GKE, אתם צריכים ליצור שתי כתובות IP סטטיות לפי ההוראות שב מסמכי התיעוד של Anthos GKE.
  5. יוצרים אזור ציבורי מנוהל. הוראות מפורטות זמינות במאמר בנושא יצירת אזור ציבורי מנוהל.
  6. מקבלים את כתובת ה-IP החיצונית שהוזמנה עבור apigee-hybrid-mart.
  7. יוצרים קבוצת רשומות לנקודת הקצה של MART. מזינים את כתובת ה-IP החיצונית שקיבלתם בשלב הקודם ומוסיפים קידומת לשם הדומיין, כמו mart. הוראות מפורטות מופיעות במאמר בנושא יצירת רשומה חדשה.

  8. מקבלים את כתובת ה-IP החיצונית שהזמנתם עבור apigee-hybrid-runtime.
  9. יוצרים קבוצת רשומות לנקודת הקצה של תעבורת הנתונים הנכנסת (ingress) של Istio. זו הכתובת ליצירת קריאות API לשער ההיברידי. מזינים את כתובת ה-IP החיצונית שקיבלתם בשלב הקודם ומוסיפים קידומת לשם הדומיין, כמו apitest. הוראות מפורטות זמינות במאמר בנושא יצירת רשומה חדשה.

  10. מעתיקים את נתוני רשומת ה-DNS, כמו בדוגמה הבאה:

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

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

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

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

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

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

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

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

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

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

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

    מערכת GCP יוצרת חשבון שירות חדש ומציגה את התצוגה הרשאות של חשבון שירות. אפשר להשתמש בתצוגה הזו כדי להקצות תפקיד לחשבון השירות החדש.

  7. לוחצים על הרשימה הנפתחת Select a role.
  8. בוחרים בתפקיד Project Owner.
  9. לוחצים על Continue.
  10. לוחצים על סיום.
  11. ב-GCP Console, בוחרים באפשרות 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.pem  README

  17. מעתיקים את הקבצים fullchain.pem ו-privkey.pem למחשב המקומי.
  18. מעדכנים את קובץ ההחלפות כך שיצביע על האישור ועל המפתח הפרטי. בשביל hostAliases, משתמשים בשם ה-DNS שיצרתם קודם לכן.

    לדוגמה:

    ...
    envs:
      - name: test
        serviceAccountPaths:
          synchronizer: "your_keypath/synchronizer-manager-service-account.json
          udca: "your_keypath/analytic-agent-service-account.json
    
    virtualhosts:
      - name: default
        hostAliases: ["apitest.apigee-hybrid-docs.net"]
        sslCertPath: "$HOME/hybrid/apigee-hybrid-setup/tls/fullchain.pem"
        sslKeyPath: "$HOME/hybrid/apigee-hybrid-setup/tls/privkey.pem"
        routingRules:
          - env: test
    
    mart:
      nodeSelector:
        key: cloud.google.com/gke-nodepool
        value: apigee-runtime
      sslCertPath: "$HOME/hybrid/apigee-hybrid-setup/tls/fullchain.pem"
      sslKeyPath: "$HOME/hybrid/apigee-hybrid-setup/tls/privkey.pem"
      replicaCountMin: 1
      replicaCountMax: 1
      hostAlias: "mart.apigee-hybrid-docs.net"
  19. מחילים את השינויים:

    אם שיניתם את ההגדרה של mart, צריך להחיל את השינויים:

    apigeectl apply -f your_overrides_file -c mart

    אם שיניתם את ההגדרה של envs, צריך להחיל את השינויים:

    apigeectl apply -f your_overrides_file -c runtime
  20. בדיקת ההגדרות

    פורסים ובודקים proxy ל-API, כמו שמוסבר במאמר יצירה ופריסה של proxy חדש ל-API.