שימוש באימות של Google

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

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

במאמר הזה מוסבר איך להגדיר ולפרוס proxy ל-API שמוגדר להשתמש באימות של Google.

מבוא

‫Apigee תומך בשימוש באסימוני OAuth של Google או באסימוני OpenID Connect לאימות מול שירותי Google כמו Cloud Logging ו-Secret Manager ושירותים בהתאמה אישית שפועלים במוצרים מסוימים של Google Cloud , כמו Cloud Functions ו-Cloud Run.

כדי להשתמש בתכונה הזו, צריך להגדיר את רכיב ה-XML‏ <Authentication> באחד מההקשרים הבאים:

  • כללי מדיניות של AssignMessage
  • מדיניות ServiceCallout
  • ExternalCallout policies
  • הגדרות TargetEndpoint

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

אפשרויות להגדרת proxy ל-API

בקטע הזה מוסבר איפה אפשר להשתמש ברכיב ה-XML‏ <Authentication> כדי להפעיל אימות באמצעות אסימון OAuth של Google או OpenID Connect:

אפשרות הגדרה תיאור
‫AssignMessage policy המדיניות AssignMessage מאפשרת להוסיף את הכותרות שנדרשות לאימות ב-Google ולהחדרת אסימונים. לפרטים נוספים ולדוגמאות לשימוש, אפשר לעיין במאמר בנושא מדיניות AssignMessage.
‫ServiceCallout policy בעזרת המדיניות ServiceCallout אפשר להפעיל שירותים פנימיים או חיצוניים אחרים מתוך proxy ל-API. לדוגמה, ServiceCallout יכול לקרוא לשירותים חיצוניים של Google או לשירותים בהתאמה אישית שמתארחים בשרתים. לפרטים על השימוש ולדוגמאות, אפשר לעיין במאמר בנושא מדיניות ServiceCallout.
ExternalCallout policy המדיניות ExternalCallout מאפשרת לשלוח בקשות gRPC לשרת gRPC כדי להטמיע התנהגות מותאמת אישית שלא נתמכת על ידי מדיניות Apigee. פרטים ודוגמאות לשימוש מופיעים במאמר בנושא מדיניות ExternalCallout.
TargetEndpoint מציינים שירות Google או שירות בהתאמה אישית שמתארח כנקודת קצה של יעד proxy ל-API. פרטים ודוגמאות לשימוש מופיעים במאמר חומר עזר בנושא הגדרת שרת proxy של API.

ההקשרים הנתמכים של אסימון אימות של Google

לרכיב <Authentication> יש שתי הגדרות של רכיבי משנה: <GoogleAccessToken> או <GoogleIDToken>. בטבלה הבאה מוצגים ההקשרים שבהם הרכיבים האלה נתמכים:

בשימוש ב GoogleAccessToken GoogleIDToken
מדיניות AssignMessage נתמך נתמך
מדיניות ServiceCallout נתמך נתמך
ExternalCallout policy לא נתמך נתמך
TargetEndpoint נתמך נתמך

שלבי הפריסה

בקטע הזה מוסבר איך לפרוס proxy ל-API שמשתמש באימות של Google כדי לקרוא לשירותי Google ממוקדים או לשירותים מותאמים אישית שמתארחים ב-Google Cloud. אנחנו מסבירים את שלבי הפריסה של Apigee ושל Apigee Hybrid בנפרד.

פריסה ב-Apigee

בשלבים הבאים מוסבר איך לפרוס proxy ל-API ב-Apigee, כשהשרת מוגדר לבצע קריאות מאומתות לשירותי Google או לשירותים מותאמים אישית שמתארחים ב-Google. השלבים מבוססים על ההנחה שכבר יצרתם את ה-proxy, ושהוא כולל רכיב <Authentication> באחד מההקשרים הנתמכים שמופיעים ברשימה.

  1. יוצרים חשבון שירות של Google באותו פרויקט Google Cloud שבו נוצר הארגון שלכם ב-Apigee. כשפורסים proxy ל-API שמוגדר להשתמש באימות של Google, צריך לספק את השם של חשבון השירות הזה. אסימוני ה-OAuth שנוצרים ייצגו את חשבון השירות. אפשר ליצור את חשבון השירות במסוף Google Cloud או באמצעות הפקודה gcloud. איך יוצרים ומנהלים חשבונות שירות
  2. נותנים למשתמש שיבצע את הפריסה (הפורס) את ההרשאה iam.serviceAccounts.actAs בחשבון השירות. מידע נוסף זמין במאמר מידע על הרשאות בחשבון שירות.
    gcloud iam service-accounts add-iam-policy-binding \
    SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --member="MEMBER" \
      --role="roles/iam.serviceAccountUser"
    
  3. כאשר:

    • PROJECT_ID: מזהה הפרויקט. המזהה זהה לשם הארגון.
    • SA_NAME: השם שסיפקתם כשיוצרים את חשבון השירות.
    • MEMBER: החבר שאליו רוצים להוסיף את הקישור. הפורמט צריך להיות user|group|serviceAccount:email או domain:domain.
  4. נותנים לחשבון השירות את ההרשאות שנדרשות כדי לתקשר עם שירותי Google שהוגדרו כיעדים. לדוגמה, אם רוצים לקרוא לשירות Google Logging, חשבון השירות הזה צריך לכלול את ההרשאות הנדרשות כדי לתקשר עם השירות הזה. מידע נוסף זמין במאמר הסבר על תפקידים.
  5. לפני שמפעילים proxy ל-API שהוגדר לשימוש באימות של Google, צריך:
    • השם של חשבון השירות שיצרתם קודם. לדוגמה: SA_NAME@PROJECT_ID.iam.gserviceaccount.com
    • למשתמש שמבצע את הפריסה (הפורס), צריכה להיות הרשאת iam.serviceAccounts.actAs בחשבון השירות, או שצריך להעניק לו אותה. מידע נוסף זמין במאמר הענקה, שינוי וביטול גישה למשאבים.
  6. פורסים את ה-proxy ל-API שמכיל את הגדרות האימות של Google שהטמעתם. אפשר להשתמש בממשק המשתמש או ב-API של Apigee כדי לפרוס את ה-proxy. מידע נוסף זמין במאמר פריסת proxy ל-API.
    • אם משתמשים בממשק המשתמש, תתבקשו לציין שם של חשבון שירות. משתמשים בשם של חשבון השירות של הפרוקסי שיצרתם בשלב 1. לדוגמה: SA_NAME@PROJECT_ID.iam.gserviceaccount.com.

    • אם אתם מעדיפים לפרוס את ה-proxy באמצעות Apigee deployment API, הנה דוגמה לפקודת cURL שבה תוכלו להשתמש. שימו לב שהפקודה כוללת שם של חשבון שירות כפרמטר של שאילתה. זה השם של חשבון השירות שיצרתם בשלב 1:
      curl -H "Authorization: Bearer $TOKEN" \
      "https://apigee.googleapis.com/v1/organizations/ORG_NAME/environments/ENV_NAME/apis/apiproxy/revisions/2/deployments?serviceAccount=SA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
      -H "Content-Type: application/json" -X POST

      כאשר:

      • TOKEN: טוקן OAuth שצריך לקבל בתמורה לפרטי הכניסה שלכם ב-Google. פרטים נוספים זמינים במאמר בנושא קבלת אסימון גישה מסוג OAuth 2.0.
      • ORG_NAME: שם הארגון שלכם ב-Apigee.
      • ENV_NAME: השם של הסביבה שבה רוצים לפרוס את proxy ל-API.
      • SA_NAME: השם שסיפקתם כשפתחתם את חשבון השירות.
      • PROJECT_ID: מזהה הפרויקט ב- Google Cloud (זהה לשם הארגון).
  7. בסיום הפריסה, בודקים את ה-proxy ל-API כדי לוודא ששירות Google מחזיר את התגובה הצפויה.

פריסה ב-Apigee Hybrid

בשלבים הבאים מוסבר איך לפרוס ב-Apigee Hybrid פרוקסי של API שהוגדר לבצע קריאות מאומתות לשירותי Google. השלבים מבוססים על ההנחה שכבר יצרתם את ה-proxy, ושהוא כולל רכיב <Authentication> באחד מההקשרים הנתמכים שמופיעים ברשימה.

  1. יוצרים חשבון שירות ומפתח לרכיב runtime של Apigee hybrid באמצעות אחת מהשיטות הבאות:
  2. פותחים את הקובץ overrides.yaml ומציינים את הנתיב לקובץ המפתח של חשבון השירות לכל סביבה שנדרשת בה יכולת אימות של Google:
    envs:
      - name: "ENVIRONMENT_NAME"
        serviceAccountPaths:
          runtime: "KEY_FILE_PATH"

    לדוגמה:

    envs:
      - name: "test"
        serviceAccountPaths:
          runtime: "./service_accounts/my_runtime_sa.json"
  3. מחילים את קובץ הביטולים על האשכול באמצעות Helm:
    helm upgrade ENV_NAME apigee-env/ \
      --namespace APIGEE_NAMESPACE \
      --set env=ENV_NAME \
      --atomic \
      -f overrides.yaml
  4. יוצרים חשבון שירות שני, שנקרא לו חשבון השירות proxy. חשבון השירות הזה צריך להיות באותו פרויקט ב- Google Cloudשבו השתמשתם כדי ליצור את הארגון שלכם ב-Apigee. כשפורסים proxy של API שמוגדר להשתמש באימות של Google, צריך לספק את כתובת האימייל של חשבון השירות הזה. אסימוני ה-OAuth שנוצרים ייצגו את חשבון השירות.
  5. נותנים למשתמש שיבצע את הפריסה (הפורס) את ההרשאה iam.serviceAccounts.actAs בחשבון השירות. מידע נוסף זמין במאמר מידע על הרשאות בחשבון שירות.
    gcloud iam service-accounts add-iam-policy-binding \
    SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --member="MEMBER" \
      --role="roles/iam.serviceAccountUser"
    
  6. כאשר:

    • PROJECT_ID: מזהה הפרויקט. המזהה זהה לשם הארגון.
    • SA_NAME: השם שציינתם כשיצרתם את חשבון השירות.
    • MEMBER: החבר שאליו רוצים להוסיף את הקישור. הפורמט צריך להיות user|group|serviceAccount:email או domain:domain.
  7. נותנים לחשבון השירות של הפרוקסי את ההרשאות שנדרשות כדי לתקשר עם שירותי Google שהוגדרו כיעדים. לדוגמה, אם רוצים לקרוא לשירות Google Logging, חשבון השירות הזה צריך לכלול את ההרשאות הנדרשות כדי לתקשר עם השירות הזה. מידע נוסף זמין במאמר הסבר על תפקידים.
  8. מוודאים שלסביבת זמן הריצה יש אפשרות להתחזות לחשבון השירות של ה-proxy. כדי לספק את היכולת הזו, מעניקים לחשבון השירות של זמן הריצה את התפקיד iam.serviceAccountTokenCreator בחשבון השירות של ה-proxy. אפשר גם לקרוא את המאמר מידע על הרשאות של חשבון שירות. לדוגמה:
    gcloud iam service-accounts add-iam-policy-binding \
    PROXY_SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --member=serviceAccount:RUNTIME_SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --role=roles/iam.serviceAccountTokenCreator
    

    כאשר:

    • PROJECT_ID: מזהה הפרויקט. המזהה זהה לשם הארגון. שימו לב שלא הייתם צריכים להשתמש בפרויקט שמשויך לארגון כדי ליצור את חשבון השירות של זמן הריצה. חשוב לוודא שמשתמשים במזהי הפרויקט הנכונים בפקודה הזו.
    • PROXY_SA_NAME: המזהה של חשבון השירות של ה-proxy.
    • RUNTIME_SA_NAME: המזהה של חשבון השירות של זמן הריצה.
  9. לפני שמפעילים proxy ל-API שהוגדר לשימוש באימות של Google, צריך:
    • השם של חשבון השירות של הפרוקסי שיצרתם קודם. לדוגמה: PROXY_SA_NAME@PROJECT_ID.iam.gserviceaccount.com
    • למשתמש שמבצע את הפריסה צריכה להיות כבר ההרשאה iam.serviceAccounts.actAs בפרויקט Google Cloud שבו מוקצה ארגון Apigee, או שצריך להעניק לו את ההרשאה הזו. מידע נוסף זמין במאמר הענקה, שינוי וביטול גישה למשאבים.
  10. פורסים את ה-proxy ל-API שמכיל את הגדרות האימות של Google שהטמעתם. אפשר להשתמש בממשק המשתמש או ב-API של Apigee כדי לפרוס את ה-proxy. מידע נוסף זמין במאמר פריסת proxy ל-API.
    • אם משתמשים בממשק המשתמש, תתבקשו לציין שם של חשבון שירות. משתמשים בשם של חשבון השירות של הפרוקסי שיצרתם קודם. לדוגמה: PROXY_SA_NAME@PROJECT_ID.iam.gserviceaccount.com.

    • אם אתם מעדיפים לפרוס את ה-proxy באמצעות Apigee deployment API, הנה דוגמה לפקודת cURL שבה תוכלו להשתמש. שימו לב שהפקודה כוללת שם של חשבון שירות כפרמטר של שאילתה. זה השם של חשבון השירות של ה-proxy:
      curl -H "Authorization: Bearer $TOKEN" \
      "https://apigee.googleapis.com/v1/organizations/ORG_NAME/environments/ENV_NAME/apis/apiproxy/revisions/2/deployments?serviceAccount=PROXY_SA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
      -H "Content-Type: application/json" -X POST

      כאשר:

      • TOKEN: טוקן OAuth שצריך לקבל בתמורה לפרטי הכניסה שלכם ב-Google. פרטים נוספים זמינים במאמר בנושא קבלת אסימון גישה מסוג OAuth 2.0.
      • ORG_NAME: שם הארגון שלכם ב-Apigee.
      • ENV_NAME: השם של הסביבה שבה רוצים לפרוס את proxy ל-API.
      • PROXY_SA_NAME: השם של חשבון השירות של הפרוקסי.
      • PROJECT_ID: מזהה הפרויקט ב- Google Cloud (זהה לשם הארגון).
  11. בסיום הפריסה, בודקים את ה-proxy ל-API כדי לוודא ששירות Google מחזיר את התגובה הצפויה.

מידע על הרשאות של חשבון שירות

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

חשבון שירות חובה עבור תיאור
בשם אחרים ‫Apigee ו-Apigee Hybrid

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

  • צריך ליצור אותו באותו פרויקט Google Cloud שבו נמצא הארגון שלכם ב-Apigee.
  • למשתמש שמבצע את הפריסה (הפורס), צריכה להיות ההרשאה iam.serviceAccounts.actAs בחשבון השירות של ה-proxy, או שצריך להעניק לו אותה.
  • צריך לכלול את ההרשאות שנדרשות כדי לתקשר עם שירותי Google ספציפיים. לדוגמה, אם רוצים לקרוא לשירות Google Logging, חשבון השירות הזה צריך לכלול את ההרשאות הנדרשות כדי לתקשר עם השירות הזה. מידע נוסף זמין במאמר הסבר על תפקידים.
  • כשפורסים את ה-proxy שמשתמש באימות Google, צריך לציין את השם של חשבון השירות.
זמן ריצה Apigee Hybrid בלבד

מאפשר לסביבת זמן הריצה של Apigee ליצור טוקנים לאימות בשירותי Google שנדרשים על ידי proxy ל-API. חשבון השירות הזה "מתחזה" לחשבון השירות הספציפי של ה-proxy כדי לבצע קריאות מאומתות בשמו.

  • כדי להתחזות לחשבון השירות של הפרוקסי וליצור אסימונים, צריך להעניק לחשבון השירות של זמן הריצה את התפקיד roles/iam.serviceAccountTokenCreator בחשבון השירות של הפרוקסי. ניהול הגישה לחשבונות שירות