מדריך למתחילים: אבטחת תעבורת נתונים לשירות באמצעות Google Cloud המסוף

בדף הזה מוסבר איך לפרוס API ב-API Gateway כדי לאבטח את תעבורת הנתונים לשירות לקצה העורפי.

פועלים לפי השלבים כדי לפרוס API חדש לגישה לשירות לקצה העורפי בפונקציות Cloud Run באמצעות מסוף Google Cloud . במדריך למתחילים הזה מוסבר גם איך להשתמש במפתח API כדי להגן על הבק-אנד מפני גישה לא מורשית.

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

  1. נכנסים לדף API Gateway במסוף Google Cloud .

    ל-API Gateway

  2. כדי להשתמש ב-API Gateway, צריך להפעיל את שירותי Google הבאים:

    שם כותרת
    apigateway.googleapis.com API Gateway API
    servicemanagement.googleapis.com Service Management API
    servicecontrol.googleapis.com Service Control API

    אם לא הפעלתם בעבר את השירותים האלה בפרויקט שבחרתם, תתבקשו לעשות זאת.

  3. מוודאים שהחיוב מופעל בפרויקט.

    איך מפעילים את החיוב

פריסת קצה עורפי של API

‫API Gateway נמצא לפני שירות קצה עורפי שמוטמע ומטפל בכל הבקשות הנכנסות. במדריך למתחילים הזה, API Gateway מעביר קריאות נכנסות אל קצה עורפי של פונקציית Cloud Run בשם helloGET, שמכיל את פונקציית Node.js שמוצגת בהמשך.

const functions = require('@google-cloud/functions-framework');

// Register an HTTP function with the Functions Framework that will be executed
// when you make an HTTP request to the deployed function's endpoint.
functions.http('helloGET', (req, res) => {
  res.send('Hello World!');
});

פועלים לפי השלבים במאמר מדריך למתחילים: שימוש ב-Google Cloud CLI כדי להוריד את קוד הדוגמה של פונקציות Cloud Run ולפרוס את שירות לקצה העורפי של פונקציית Cloud Run.

פועלים לפי השלבים במאמר מדריך למתחילים: שימוש ב-Google Cloud CLI כדי להוריד את קוד הדוגמה של פונקציות Cloud Run ולפרוס את שירות לקצה העורפי של פונקציית Cloud Run. האדמין יצטרך להעניק תפקידים נוספים לחשבון שלכם ולחשבון השירות של Cloud Build, כמו ��מתואר בתחילת העבודה המהירה הזו.

מעתיקים את כתובת ה-URL של השירות שמוצגת כשפורסים את פונקציית Cloud Run. תצטרכו אותו בשלב הבא, כשתיצרו את הגדרות ה-API.

יצירת הגדרת API

‫API Gateway משתמש בהגדרת API כדי לנתב קריאות לשירות לקצה העורפי. אפשר להשתמש במפרט OpenAPI שמכיל תוספים מיוחדים כדי להגדיר את ההתנהגות של API Gateway. פרטים נוספים על תוספי OpenAPI נתמכים זמינים במאמרים הבאים:

מפרט OpenAPI במדריך למתחילים הזה כולל הוראות ניתוב ל-backend של פונקציית Cloud Run:

OpenAPI 2.0

# openapi-functions.yaml
swagger: '2.0'
info:
  title: API_ID optional-string
  description: Sample API on API Gateway with a Google Cloud Functions backend
  version: 1.0.0
schemes:
  - https
produces:
  - application/json
paths:
  /hello:
    get:
      summary: Greet a user
      operationId: hello
      x-google-backend:
        address: SERVICE_URL/helloGET
      responses:
        '200':
          description: A successful response
          schema:
            type: string

‫OpenAPI 3.x

# openapi-functions.yaml
openapi: 3.0.4
info:
  title: API_ID optional-string
  description: Sample API on API Gateway with a Google Cloud Functions backend
  version: 1.0.0
# Define reusable components in x-google-api-management
x-google-api-management:
  backends:
    functions_backend:
      address: SERVICE_URL/helloGET
      pathTranslation: APPEND_PATH_TO_ADDRESS
      protocol: "http/1.1"
# Apply the backend configuration by referencing it by name. Set at the root so this applies to all operations unless overridden.
x-google-backend: functions_backend
paths:
  /hello:
    get:
      summary: Greet a user
      operationId: hello
      responses:
        '200':
          description: A successful response
          content:
            application/json:
              schema:
                type: string

משתמשים במפרט הזה של OpenAPI כדי להגדיר את ה-API:

  1. משורת הפקודה, יוצרים קובץ חדש בשם openapi-functions.yaml.

  2. מעתיקים את התוכן של מפרט OpenAPI שמוצג בדוגמה הקודמת ומדביקים אותו בקובץ החדש שיצרתם.

  3. עורכים את הקובץ באופן הבא:

    1. בשדה title, מחליפים את API_ID בשם של ה-API (שיוצרים בשלב הבא) ואת optional-string בתיאור קצר לפי בחירתכם. הערך של השדה הזה משמש ליצירת מפתחות API שמעניקים גישה ל-API ה��ה. הנחיות למתן שמות למזהי API מפורטות במאמר בנושא דרישות למזהי API.
    2. בשדה address, מחליפים את SERVICE_URL בכתובת ה-URL שבה פועל שירות לקצה העורפי של פונקציית Cloud Run, שהעתקתם בשלב הקודם.

יצירת שער

עכשיו אפשר ליצור ולפרוס שער ב-API Gateway.

  1. פותחים את הדף API Gateway במסוף Google Cloud .

    ל-API Gateway

  2. לוחצים על יצירת שער.

  3. בקטע API:

    1. בתפריט הנפתח Select an API (בחירת API), בוחרים ליצור API חדש או בוחרים API קיים. במדריך הזה, בוחרים באפשרות Create a new API (יצירת API חדש).
    2. מזינים את שם התצוגה של ה-API.
    3. מזינים את מזהה ה-API של ה-API.
    4. (אופציונלי) מוסיפים תוויות ל-API בפורמט key:value. כדי להוסיף יותר מתווית אחת, לוחצים על הוספת תווית ומזינים ערכים נוספים.
  4. בקטע API Config (הגדרת API):

    1. בוחרים ליצור הגדרת API חדשה או בוחרים הגדרת API קיימת מהתפריט הנפתח Select a Config (בחירת הגדרה). במדריך הזה, בוחרים באפשרות Create a new API config (יצירת הגדרת API חדשה).
    2. משתמשים בדפדפן הקבצים כדי להעלות את openapi-functions.yaml שמשמש להגדרת ה-API.
    3. מזינים שם תצוגה להגדרת ה-API.
    4. בוחרים חשבון שירות מהרשימה הנפתחת. חשבון השירות שתבחרו ישמש כזהות עבור API Gateway. אם חשבון השירות לא מופיע בתפריט הנפתח, כדאי לעיין במאמר הגדרת חשבון שירות כדי לוודא שחשבון השירות מופעל בפרויקט.

    5. (אופציונלי) מוסיפים תוויות להגדרת ה-API בפורמט key:value. כדי להוסיף יותר מתווית אחת, לוחצים על הוספת תווית ומזינים ערכים נוספים.

  5. בקטע פרטי השער:

    1. מזינים את השם המוצג של השער. כתובת ה-URL לשער נוצרת באופן אוטומטי.
    2. בוחרים את המיקום של השער מהתפריט הנפתח.
    3. (אופציונלי) מוסיפים תוויות לשער בפורמט מפתח:ערך. כדי להוסיף יותר מתווית אחת, לוחצים על הוספת תווית ומזינים ערכים נוספים.
  6. לוחצים על יצירת שער.

הפעולה הזו פורסת את הגדרות ה-API בשער חדש שנוצר. פריסת הגדרת API בשער מגדירה כתובת URL חיצונית שלקוחות API יכולים להשתמש בה כדי לגשת ל-API.

השלמת הפעולה עשויה להימשך כמה דקות. כדי לבדוק את הסטטוס של תהליך היצירה והפריסה, לוחצים על סמל ההתראה בסרגל הניווט הראשי כדי להציג התראה על הסטטוס, כמו שמוצג בתמונה הבאה:

לוח ההתראות להתראות על סטטוס

אחרי שההגדרה תושלם בהצלחה, תוכלו לראות את הפרטים של שער ��תשלום בדף הנחיתה של שער התשלום.

ל-API Gateway

רושמים את כתובת ה-URL של השער. תשתמשו בו כדי לבדוק את הפריסה בשלב הבא.

בדיקת פריסת ה-API

עכשיו אפשר לשלוח בקשות ל-API באמצעות כתובת ה-URL שנוצרה כשפרסתם את השער.

בדפדפן, מזינים את כתובת ה-URL הבאה, כאשר:

  • GATEWAY_URL מציין את כתובת ה-URL של השער שפרסתם.
  • hello הוא הנתיב שצוין בהגדרת ה-API.
https://GATEWAY_URL/hello

לדוגמה:

https://my-gateway-a12bcd345e67f89g0h.uc.gateway.dev/hello

ההודעה Hello World! אמורה להופיע בדפדפן.

יצרתם ופרסתם בהצלחה API Gateway.

אבטחת הגישה באמצעות מפתח API

כדי לאבטח את הגישה לקצה העורפי של ה-API באמצעות מפתח API:

  1. יוצרים מפתח API שמשויך לפרויקט.
  2. יוצרים ומפעילים הגדרת API חדשה כדי לאבטח את הגישה ל-API באמצעות מפתחות API.
  3. בדיקת מפתח ה-API

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

יצירה של מפתח API

אם עדיין אין לכם מפתח API שמשויך לפרויקט Google Cloud שבו אתם משתמשים במדריך הזה, תוכלו להוסיף אותו כמו שמתואר במאמר יצירת מפתח API.

מעתיקים את מחרוזת המפתח שמוחזרת ומוודאים שהיא מאובטחת. זהו ערך המפתח שבו תשתמשו כשבודקים את מפתח ה-API.

יצירה ופריסה של הגדרת API חדשה

כדי ליצור ולפרוס הגדרת API חדשה שמאבטחת את הגישה ל-API באמצעות מפתחות API:

  1. מפעילים את השירות:
    1. במסוף Google Cloud , נכנסים אל APIs & Services > Library.
    2. בסרגל החיפוש, מזינים את שם השירות המנוהל של ה-API שיצרתם. אפשר למצוא את הערך הזה בעמודת Managed Service של ה-API בדף הנחיתה של ממשקי ה-API. לדוגמה:
      my-api-123abc456def1.apigateway.my-project.cloud.goog
    3. בדף הנחיתה של השירות, לוחצים על הפעלה.
  2. משנים את מפרט ה-OpenAPI שמשמש ליצירת הגדרות ה-API כך שיכלול הוראות לאכיפת מדיניות אבטחה של אימות מפתח API על כל התנועה. מוסיפים את security type ואת securitySchemes כמו שמוצג:

    OpenAPI 2.0

      # openapi2-functions.yaml
      swagger: '2.0'
      info:
        title: API_ID optional-string
        description: Sample API on API Gateway with a Google Cloud Functions backend
        version: 1.0.0
      schemes:
        - https
      produces:
        - application/json
      paths:
        /hello:
          get:
            summary: Greet a user
            operationId: hello
            x-google-backend:
              address: SERVICE_URL/helloGET
            security:
            - api_key: []
            responses:
              '200':
                description: A successful response
                schema:
                  type: string
      securityDefinitions:
        # This section configures basic authentication with an API key.
        api_key:
          type: "apiKey"
          name: "key"
          in: "query"

    ההגדרה securityDefinition קובעת שמפתח API נדרש כדי לגשת ל-API, ושהמפתח מועבר כפרמטר של שאילתה בשם key כשמבקשים גישה לכל הנתיבים שמוגדרים במפרט.

    ‫OpenAPI 3.x

    # openapi-functions.yaml
    openapi: 3.0.4
    info:
      title: API_ID optional-string
      description: Sample API on API Gateway with a Google Cloud Functions backend
      version: 1.0.0
    # Define reusable components in x-google-api-management
    x-google-api-management:
      backends:
        functions_backend:
          address: SERVICE_URL/helloGET
          pathTranslation: APPEND_PATH_TO_ADDRESS
          protocol: "http/1.1"
    # Apply the backend configuration by referencing it by name. Set at the root so this applies to all operations unless overridden.
    x-google-backend: functions_backend
    components:
    # This section configures basic authentication with an API key.
      securitySchemes:
        google_api_key:
          type: apiKey
          name: x-api-key
          in: header
    security:
      - google_api_key: []
    paths:
      /hello:
        get:
          summary: Greet a user
          operationId: hello
          responses:
            '200':
              description: A successful response
              content:
                application/json:
                  schema:
                    type: string

    ההגדרה securitySchemes קובעת שמפתח API נדרש כדי לגשת ל-API, ושהמפתח מועבר כפרמטר של שאילתה בשם key כשמבקשים גישה לכל הנתיבים שמוגדרים במפרט.

  3. יוצרים ומפעילים הגדרת API חדשה בשער הקיים:
    1. עוברים לדף הנחיתה של שערים.

      ל-API Gateway

    2. בוחרים את השער מהרשימה כדי לראות את הפרטים.
    3. לוחצים על עריכה כדי לפתוח את חלונית ההגדרות של השער.
    4. בקטע API config (הגדרת ה-API):
      1. בתפריט הנפתח שזמין, בוחרים בא��שרות Create a new API config (יצירת הגדרת API חדשה).
      2. מעלים את מפרט OpenAPI ששיניתם באמצעות דפדפן הקבצים.
      3. מזינים את השם המוצג של הגדרת ה-API החדשה.
      4. בוחרים חשבון שירות מהרשימה הנפתחת. חשבון השירות שתבחרו ישמש כזהות של API Gateway.
      5. (אופציונלי) מוסיפים תוויות להגדרת ה-API באמצעות פורמט של מפתח/ערך. כדי להוסיף יותר מתווית אחת, לוחצים על הוספת תווית ומזינים ערכים נוספים.
    5. לוחצים על עדכון.

בדיקת מפתח ה-API

אחרי שיוצרים את ה-API ששונה ומפעילים אותו, מנסים לשלוח אליו בקשה.

בדפדפן, מזינים את כתובת ה-URL הבאה, כאשר:

  • GATEWAY_URL מציין את כתובת ה-URL של השער שפרסתם.
  • hello הוא הנתיב שצוין בהגדרת ה-API.
https://GATEWAY_URL/hello

אמורה להופיע השגיאה הבאה:

UNAUTHENTICATED:Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.

עכשיו, בדפדפן, מזינים את כתובת ה-URL הבאה, כאשר:

  • GATEWAY_URL מציין את כתובת ה-URL של השער שפרסתם.
  • hello הוא הנתיב שצוין בהגדרת ה-API.
  • API_KEY מציין את הערך של מפתח ה-API שיצרתם בקטע יצירת מפתח API.
https://GATEWAY_URL/hello?key=API_KEY

עכשיו אמור להופיע הסמל Hello World! בדפדפן.

כל הכבוד! הצלחתם להגן על קצה העורפי של ה-API באמצעות API Gateway. עכשיו אפשר להתחיל לצרף לקוחות API חדשים על ידי יצירת מפתחות API נוספים.

מעקב אחר פעילות API

  1. אפשר לראות את הגרפים של הפעילות ב-API בדף API Gateway במסוףGoogle Cloud . לוחצים על ה-API כדי לראות את תרשימי הפעילות שלו בדף סקירה כללית. יכול להיות שיעברו כמה דקות עד שהבקשות יופיעו בתרשימים.

  2. מעיינים ביומני הבקשות של ה-API בדף Logs Explorer. קישור לדף Logs Explorer נמצא בדף API Gateway API במסוףGoogle Cloud .

    ל-API Gateway

    בדף API Gateway APIs:

    1. בוחרים את ה-API שרוצים לראות.
    2. לוחצים על הכרטיסייה פרטים.
    3. לוחצים על הקישור בקטע יומנים.

הסרת המשאבים

כדי להימנע מחיובים בחשבון על המשאבים שבהם השתמשתם במדריך למתחילים הזה, אתם יכולים: Google Cloud

אפשר גם למחוק את Google Cloud הפרויקט שבו השתמשתם במדריך הזה.

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