אבטחת API באמצעות דרישה של מפתחות API

הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.

לעיון במסמכי התיעוד של Apigee Edge

סרטון: כדאי לצפות בסרטון הקצר הזה שמציג את הנושא של אבטחת ה-API.

מה תלמדו

במדריך הזה נסביר איך:

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

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

כששולחים בקשה מאפליקציה ל-proxy ל-API שהוגדר לאמת מפתח API, האפליקציה צריכה לספק מפתח תקין. בזמן הריצה, המדיניות Verify API Key (אימות מפתח API) בודקת שמפתח ה-API שסופק:

  • חוקי
  • לא בוטלה
  • תואם למפתח ה-API של מוצר ה-API שחושף את המשאבים המבוקשים

אם המפתח תקין, הבקשה מאושרת. אם המפתח לא תקין, הבקשה תיכשל בגלל בעיה בהרשאה.

יצירת proxy ל-API

כדי ליצור proxy ל-API באמצעות ממשק המשתמש של Apigee:

  1. במסוף Google Cloud , נכנסים לדף Apigee > Proxy development > API proxies.

    מעבר לשרתי proxy ל-API

  2. בוחרים את הארגון בבורר הפרויקטים בחלונית Google Cloud. שם הארגון זהה לשם הפרויקט בענן של Google.
  3. לוחצים על ‎+ Create.
  4. בחלונית Create a proxy (יצירת שרת proxy), בקטע Proxy template (תבנית שרת proxy), בוחרים באפשרות Reverse proxy (Most common) (שרת proxy הפוך (הנפוץ ביותר)). שרת proxy הפוך מנתב תנועה נכנסת לשירות לקצה העורפי.
  5. מגדירים את ה-Proxy באופן הבא:
    שם ערך
    שם שרת ה-Proxy helloworld_apikey
    נתיב בסיסי

    /helloapikey

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

    תיאור hello world protected by API key
    יעד (API קיים)

    http://mocktarget.apigee.net

    ההגדרה הזו מגדירה את כתובת ה-URL של היעד שאליו Apigee שולח בקשה לשרת ה-proxy של ה-API. היעד הזה מחזיר רק תשובה פשוטה: Hello, Guest!.

  6. לוחצים על הבא.
  7. פריסה (אופציונלי). משאירים את השדות האלה ריקים.
  8. לוחצים על יצירה.
  9. מערכת Apigee יוצרת את ה-proxy החדש ומציגה את סיכום פרטי ה-proxy בחלונית Proxy summary.

צפייה במדיניות

כדי לראות את המדיניות:

  1. בחלונית סיכום ה-proxy של ה-proxy‏ helloworld_apikey, לוחצים על הכרטיסייה פיתוח.
  2. בתפריט Policies (מדיניות), לוחצים על Add policy (הוספת מדיניות).
  3. בחלונית Create policy, בקטע Security, בוחרים באפשרות Verify API Key.
  4. בחלונית Verify API Key (אימות מפתח API), ממלאים את שדות החובה בקטעים Name (שם) ו-Display name (שם לתצוגה) באמצעות הערכים הבאים:
    • שם: מזינים שם למדיניות. לדוגמה, VerifyAPIKey.
    • שם לתצוגה: מזינים את שם המדיניות לשימוש בממשק המשתמש. לדוגמה, Verify API Key.
  5. לוחצים על יצירה.
  6. לוחצים על כדי להוסיף עוד מדיניות.
  7. בחלונית יצירת מדיניות, בקטע גישור, בוחרים באפשרות הקצאת הודעה.
  8. בחלונית Assign Message (הקצאת הודעה), ממלאים את שדות החובה בקטעים Name (שם) ו-Display name (שם לתצוגה) באמצעות הערכים הבאים:
    • שם: מזינים שם למדיניות. לדוגמה, AssignMessage.
    • שם לתצוגה: מזינים את שם המדיניות לשימוש בממשק המשתמש. לדוגמה, Assign Message.
  9. לוחצים על יצירה.
  10. הרכיב <APIKey> בקוד ה-XML שבהמשך מציין את המיקום של מפתח ה-API בבקשה הנכנסת. כברירת מחדל, המדיניות מאחזרת את המפתח מפרמטר של שאילתה בשם apikey בבקשת ה-HTTP.
    <APIKey ref="request.queryparam.apikey" />

    השם apikey הוא שרירותי ויכול להיות כל מאפיין שמכיל את מפתח ה-API.

  11. מעדכנים את התוכן של המדיניות הקצאת הודעה כך שיכלול את הטקסט הבא:
  12. <AssignMessage async="false" continueOnError="false" enabled="true" name="remove-query-param-apikey">
        <DisplayName>Remove Query Param apikey</DisplayName>
        <Remove>
            <QueryParams>
                <QueryParam name="apikey"/>
            </QueryParams>
        </Remove>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
  13. מוסיפים את מדיניות VerifyApiKey ואת מדיניות Remove Query Param apikey.
    1. בתפריט Proxy endpoints (נקודות קצה של שרת proxy), לוחצים על Preflow (זרימת נתונים לפני העיבוד).
    2. בחלונית Request של כלי העריכה החזותי, לוחצים על Add policy step.
    3. בחלונית Add policy step (הוספת שלב מדיניות), בוחרים באפשרות Verify API Key (אימות מפתח API).
    4. לוחצים על הוספה.
    5. בחלונית Request של כלי העריכה החזותי, לוחצים על Add policy step.
    6. בחלונית Add policy step (הוספת שלב מדיניות), בוחרים באפשרות Remove Query Param apikey (הסרת פרמטר שאילתה apikey).
    7. לוחצים על הוספה.
  14. לוחצים על Save.
  15. פריסת ה-Proxy בסביבה:
    1. לוחצים על פריסה.
    2. בוחרים גרסה וסביבה.
    3. לוחצים על פריסה.
  16. כדי לבדוק את השינויים, שולחים קריאה ל-API כמו שמתואר במאמר שליחת קריאה ל-API.

ניסיון לשלוח קריאה ל-API

בשלב הזה, תבצעו קריאה מוצלחת ל-API ישירות לשירות היעד, ואז תבצעו קריאה לא מוצלחת ל-proxy ל-API כדי לראות איך המדיניות מגנה עליו.

  1. הצלחה

    בדפדפן אינטרנט, עוברים לכתובת הבאה. זהו שירות היעד שאליו מוגדר שרת ה-proxy של ה-API להעביר את הבקשה, אבל בשלב הזה תפנו אליו ישירות:

    http://mocktarget.apigee.net

    אמורה להתקבל התגובה הבאה: Hello, Guest!

  2. Failure

    עכשיו מנסים להתקשר ל-proxy ל-API:

    curl -v -k https://YOUR_ENV_GROUP_HOSTNAME/helloapikey

    כאשר YOUR ENV_GROUP_HOSTNAME הוא שם המארח של קבוצת הסביבות. אפשר לעיין במאמר בנושא איתור שם המארח של קבוצת הסביבות.

    בלי המדיניות Verify API Key, הקריאה הזו תחזיר את אותה תשובה כמו הקריאה הקודמת. אבל במקרה הזה, אמורה להתקבל תגובת השגיאה הבאה:

    {"fault":{"faultstring":"Failed to resolve API Key variable request.queryparam.apikey","detail":{"errorcode":"steps.oauth.v2.FailedToResolveAPIKey"}}}

    כלומר, בצורה נכונה, לא העברת מפתח API תקין (כפרמטר של שאילתה).

בשלבים הבאים תקבלו את מפתח ה-API הנדרש.

הוספת מוצר API

כדי להוסיף מוצר API באמצעות ממשק המשתמש של Apigee:

  1. במסוף Google Cloud , נכנסים לדף Distribution > API products:

    לדף API products

  2. לוחצים על +יצירה.
  3. מזינים את פרטי המוצר של מוצר ה-API.
    שדה תיאור
    שם השם הפנימי של מוצר ה-API. אל תציינו תווים מיוחדים בשם.
    הערה: אי אפשר לערוך את השם אחרי שיוצרים את מוצר ה-API.
    השם המוצג השם המוצג של מוצר ה-API. השם המוצג משמש בממשק המשתמש, ואפשר לערוך אותו בכל שלב. אם לא מציינים ערך, נעשה שימוש בערך Name. השדה הזה מתמלא אוטומטית באמצעות הערך של שם. אפשר לערוך או למחוק את התוכן שלו. השם המוצג יכול לכלול תווים מיוחדים.
    תיאור תיאור של מוצר ה-API.
    סביבה סביבות שלמוצר ה-API תהיה גישה אליהן. לדוגמה, test או prod.
    גישה בוחרים באפשרות ציבורי.
    אישור אוטומטי של בקשות גישה הפעלת אישור אוטומטי של בקשות למפתחות למוצר ה-API הזה מכל אפליקציה.
    מכסה אפשר להתעלם מההודעה הזו במדריך הזה.
    היקפי הרשאות מותרים של OAuth אפשר להתעלם מההודעה הזו במדריך הזה.
  4. בקטע פעולות, לוחצים על הוספת פעולה.
  5. בשדה API Proxy, בוחרים את שרת ה-proxy ל-API שיצרתם.
  6. בשדה נתיב מזינים '/'. מתעלמים מהשדות האחרים.
  7. לוחצים על שמירה כדי לשמור את הפעולה.
  8. לוחצים על שמירה כדי לשמור את מוצר ה-API.

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

הוספת מפתח ואפליקציה לארגון

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

יצירת מפתח

כדי ליצור מפתח באמצעות ממשק המשתמש של Apigee:

  1. במסוף Google Cloud , נכנסים לדף הפצה > מפתחים:

    מעבר אל 'מפתחים'

  2. לוחצים על ‎+ Create.
  3. בחלון הוספת מפתח, מזינים את הפרטים הבאים:
    שדה ערך
    שם פרטי Keyser
    שם משפחה Soze
    אימייל keyser@example.com
    שם משתמש keyser
  4. לוחצים על הוספה.

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

רישום אפליקציה

כדי לרשום אפליקציה למפתחים באמצעות ממשק המשתמש של Apigee:

  1. במסוף Google Cloud , נכנסים לדף Distribution > Apps:

    מעבר אל 'אפליקציות'

  2. לוחצים על ‎+ Create.
  3. בחלון יצירת אפליקציה, מזינים את הפרטים הבאים:
    שדה ערך
    שם האפליקציה מזינים: keyser_app
    שם לתצוגה מזינים: keyser_app
    מפתח בוחרים באפשרות: Keyser Soze (keyser@example.com)
    כתובת URL של שיחה חוזרת להשאיר ריק
    Notes להשאיר ריק
  4. בקטע 'פרטי כניסה', לוחצים על הוספת פרטי כניסה.
  5. בוחרים באפשרות אף פעם. תוקף פרטי הכניסה לאפליקציה הזו לא יפוג לעולם.
  6. לוחצים על הוספת מוצרים.
  7. בוחרים את המוצר שיצרתם.
  8. לוחצים על הוספה.
  9. לוחצים על יצירה.

מידע נוסף על רישום אפליקציה זמין במאמר בנושא רישום אפליקציה.

קבלת מפתח ה-API

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

  1. במסוף Google Cloud , נכנסים לדף Apigee > Distribution > Apps.

    מעבר אל 'אפליקציות'

  2. בוחרים את האפליקציה הרצויה מרשימת האפליקציות.
  3. בדף View app, בקטע Credentials, לוחצים על לצד השדה Key. שימו לב שהמפתח משויך למוצר שיצרתם.
  4. לוחצים על העתקה. תשתמשו במפתח הזה בשלב הבא.

שליחת קריאה ל-API עם מפתח

עכשיו, כשיש לכם מפתח API, אתם יכולים להשתמש בו כדי להפעיל את proxy ל-API. מדביקים את מפתח ה-API כפי שמוצג, כפרמטר של שאילתה. מוודאים שאין רווחים מיותרים בפרמטר של השאילתה.

curl -v -k https://YOUR_ENV_GROUP_HOSTNAME/helloapikey?apikey=YOUR_API_KEY

עכשיו, כשמפעילים את ה-proxy ל-API, אמורה להתקבל התשובה הבאה: Hello, Guest!

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

הערה: באופן כללי, לא מומלץ להעביר מפתח API כפרמטר של שאילתה. כדאי להעביר אותו בכותרת ה-HTTP.

שיטה מומלצת: העברת המפתח בכותרת HTTP

בשלב הזה, תשנו את ה-proxy כך שיחפש את מפתח ה-API בכותרת שנקראת x-apikey.

  1. במסוף Google Cloud , נכנסים לדף Proxy development > API proxies.
  2. מעבר לשרתי proxy ל-API

  3. בוחרים את השרת הרצוי מתוך רשימת השרתים.
  4. בדף פרטי ה-Proxy, לוחצים על פיתוח.
  5. משנים את ה-XML של המדיניות כדי שהמדיניות תחפש בכותרת ולא בפרמטר של השאילתה:
  6. <APIKey ref="request.header.x-apikey"/>
  7. לוחצים על שמירה כדי לשמור את השינויים.
  8. לוחצים על פריסה.
  9. בוחרים גרסה וסביבה.
  10. לוחצים על פריסה.
  11. מבצעים את הקריאה הבאה ל-API באמצעות cURL כדי להעביר את מפתח ה-API ככותרת בשם x-apikey. אל תשכחו להחליף את שם הארגון.

    curl -v -H "x-apikey: YOUR_API_KEY" http://YOUR_ENV_GROUP_HOSTNAME/helloapikey

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

<Remove>
  <Headers>
      <Header name="x-apikey"/>
  </Headers>
</Remove>

נושאים קשורים

הנה כמה נושאים שקשורים למוצרי API ולמפתחות API:

הגנה על API כוללת לרוב אמצעי אבטחה נוספים כמו OAuth, פרוטוקול פתוח שמחליף פרטי כניסה (כמו שם משתמש וסיסמה) באסימוני גישה. אסימוני גישה הם מחרוזות ארוכות ואקראיות שאפשר להעביר דרך צינור של הודעות, כולל מאפליקציה לאפליקציה, בלי לפגוע בפרטי הכניסה המקוריים.

סקירה כללית של נושאים שקשורים לאבטחה זמינה במאמר בנושא אבטחת שרת proxy.