מדריך למתחילים: אבטחת התעבורה לשירות באמצעות ה-CLI של gcloud
בדף הזה מוסבר איך לפרוס API ב-API Gateway כדי לאבטח את תעבורת הנתונים לשירות לקצה העורפי.
כדי לפרוס API חדש כדי לגשת לשירות לקצה העורפי בפונקציות Cloud Run באמצעות Google Cloud CLI, פועלים לפי השלבים הבאים. במדריך למתחילים הזה מוסבר גם איך להשתמש במפתח API כדי להגן על הבק-אנד מפני גישה לא מורשית.
לפני שמתחילים
במסוף Google Cloud , עוברים לדף Dashboard ובוחרים פרויקט ב- Google Cloud או יוצרים אותו.
מוודאים שהחיוב מופעל בפרויקט.
מוודאים ש-Google Cloud CLI הורד והותקן במחשב.
עדכון רכיבים של
gcloud:gcloud components update
מגדירים את פרויקט ברירת המחדל. מחליפים את PROJECT_ID במזהה הפרויקט ב- Google Cloud .
gcloud config set project PROJECT_ID
הפעלת שירותים נדרשים
כדי להשתמש ב-API Gateway, צריך להפעיל את השירותים הבאים של Google Cloud :
| שם | שם השירות |
|---|---|
| API Gateway API | apigateway.googleapis.com |
| Service Management API | servicemanagement.googleapis.com |
| Service Control API | servicecontrol.googleapis.com |
כדי להפעיל את השירותים הנדרשים:
מסוף Google Cloud
במסוף Google Cloud , נכנסים לדף APIs & Services > API Library.
- בדף API Library, מזינים את שם ה-API הנדרש בסרגל החיפוש.
- בתוצאות החיפוש, בוחרים את דף ה-API.
- בדף ה-API, לוחצים על הפעלה.
- חוזרים על השלבים האלה לכל אחד מהשירותים שמפורטים בטבלה הקודמת.
Google Cloud CLI
משתמשים בפקודות הבאות כדי להפעיל את השירותים:
gcloud services enable apigateway.googleapis.comgcloud services enable servicemanagement.googleapis.comgcloud services enable servicecontrol.googleapis.com
מידע נוסף על שירותי gcloud זמין במאמר בנושא שירותי gcloud.
פריסת קצה עורפי של 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!'); });
פועלים לפי השלבים במאמר מדריך למתחילים: פריסת פונקציית Cloud Run באמצעות Google Cloud CLI כדי להוריד את קוד הדוגמה של פונקציות Cloud Run ולפרוס את שירות ה-Backend של פונקציית Cloud Run. האדמין יצטרך להעניק תפקידים נוספים לחשבון שלכם ולחשבון השירות של Cloud Build, כמו שמתואר בתחילת העבודה המהירה הזו.
מעתיקים את כתובת ה-URL של השירות שמוצגת כשפורסים את פונקציית Cloud Run. תצטרכו אותו כשתיצרו את הגדרת ה-API בשלב הבא.
יצירת API
עכשיו אפשר ליצור את ה-API ב-API Gateway.
מזינים את הפקודה הבאה, כאשר:
- API_ID מציין את השם של ה-API. הנחיות למתן שמות ל-API מופיעות במאמר בנושא דרישות לגבי מזהה API.
gcloud api-gateway apis create API_ID
לדוגמה:
gcloud api-gateway apis create my-api
- API_ID מציין את השם של ה-API. הנחיות למתן שמות ל-API מופיעות במאמר בנושא דרישות לגבי מזהה API.
אחרי שהפעולה תושלם בהצלחה, תוכלו להשתמש בפקודה הבאה כדי לראות פרטים על ה-API החדש:
gcloud api-gateway apis describe API_ID
לדוגמה:
gcloud api-gateway apis describe my-api
הפקודה הזו מחזירה את הפלט הבא:
createTime: '2020-02-29T21:52:20.297426875Z' displayName: my-api managedService: my-api-123abc456def1.apigateway.my-project.cloud.goog name: projects/my-project/locations/global/apis/my-api state: ACTIVE updateTime: '2020-02-29T21:52:20.647923711Z'
מעתיקים את הערך של המאפיין managedService. הערך הזה משמש להפעלת ה-API בשלב הבא.
יצירת הגדרת API
כדי להשתמש ב-API Gateway לניהול התנועה אל קצה העורפי של ה-API שפרסתם, צריך להגדיר את ה-API.
אפשר ליצור הגדרת 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 באמצעות ה-CLI של gcloud:
משורת הפקודה, יוצרים קובץ חדש בשם
openapi-functions.yaml.מעתיקים ומדביקים את התוכן של תיאור OpenAPI בקובץ החדש שיצרתם.
עורכים את הקובץ באופן הבא:
- בשדה
title, מחליפים את API_ID בשם ה-API ואת optional-string בתיאור קצר לבחירתכם. הערך של השדה הזה משמש ליצירת מפתחות API שמעניקים גישה ל-API הזה. - בשדה
address, מחליפים את SERVICE_URL בכתובת ה-URL שבה פועל שירות לקצה העורפי של פונקציית Cloud Run, שהעתקתם בשלב הקודם.
- בשדה
מזינים את הפקודה הבאה, כאשר:
- CONFIG_ID מציין את השם של הגדרת ה-API.
- API_ID מציין את השם של ה-API.
- API_DEFINITION מציין את שם הקובץ של מפרט OpenAPI.
- SERVICE_ACCOUNT_EMAIL מציין את חשבון השירות שמשמש לחתימה על אסימונים עבור שרתי קצה עורפיים שהוגדר להם אימות. מידע נוסף מופיע במאמר הגדרת חשבון שירות.
gcloud api-gateway api-configs create CONFIG_ID \ --api=API_ID --openapi-spec=API_DEFINITION \ --backend-auth-service-account=SERVICE_ACCOUNT_EMAIL
לדוגמה:
gcloud api-gateway api-configs create my-config \ --api=my-api --openapi-spec=openapi2-functions.yaml \ --backend-auth-service-account=0000000000000-compute@developer.gserviceaccount.com
יכול להיות שיחלפו כמה דקות עד שהפעולה תושלם, כי הגדרות ה-API מועברות למערכות במורד הזרם. יצירת הגדרת API מורכבת עשויה להימשך עד עשר דקות.
אחרי שיוצרים את הגדרת ה-API, אפשר להריץ את הפקודה הבאה כדי לראות את הפרטים שלה:
gcloud api-gateway api-configs describe CONFIG_ID \ --api=API_ID
לדוגמה:
gcloud api-gateway api-configs describe my-config \ --api=my-api
הפלט מציג את פרטי ההגדרה של ה-API, כולל השם והסטטוס, כמו בדוגמה הבאה:
createTime: '2020-02-07T18:17:01.839180746Z' displayName: my-config gatewayConfig: backendConfig: googleServiceAccount: 0000000000000-compute@developer.gserviceaccount.com name: projects/my-project/locations/global/apis/my-api/configs/my-config serviceRollout: rolloutId: 2020-02-07r0 state: ACTIVE updateTime: '2020-02-07T18:17:02.173778118Z'
יצירת שער
עכשיו פורסים את הגדרת ה-API בשער. פריסת הגדרת API בשער מגדירה כתובת URL חיצונית שלקוחות API יכולים להשתמש בה כדי לגשת ל-API.
מריצים את הפקודה הבאה כדי לפרוס את הגדרת ה-API שיצרתם ב-API Gateway:
gcloud api-gateway gateways create GATEWAY_ID \ --api=API_ID --api-config=CONFIG_ID \ --location=GCP_REGION
where:
- GATEWAY_ID מציין את שם השער.
- API_ID מציין את השם של ה-API של API Gateway שמשויך לשער הזה.
- CONFIG_ID מציין את השם של הגדרת ה-API שנפרסה בשער.
GCP_REGION הוא