מפתחות API מזהים את האפליקציה או אתר האינטרנט שלכם ב- Cloud de Confiance by S3NS. ההגבלות על מפתחות API מבטיחות שרק האפליקציות והאתרים שלכם יוכלו להשתמש במפתחות. מטעמי אבטחה, מומלץ להוסיף הגבלות שמציינות:
- אילו לקוחות או אתרים יכולים להשתמש במפתחות ה-API שלכם.
- ממשקי ה-API שאפליקציה יכולה לקרוא להם באמצעות מפתחות ה-API. Cloud de Confiance
אם לקוח משתמש במפתח API מוגבל כדי להגיש בקשה שלא עומדת בהגבלות של מפתח ה-API, הבקשה תיכשל. לדוגמה, אם מפתח API דורש שבקשות HTTP יונפקו מדומיין ספציפי, אבל מתקבלת בקשת HTTP מדומיין אחר, הבקשה תידחה עם שגיאה.
אפשר להוסיף הגבלות כשיוצרים מפתח API באמצעות method CreateKey, או להוסיף את ההגבלות אחרי יצירת המפתח באמצעות method UpdateKey. בדף הזה מתוארות ההגבלות שאפשר להוסיף למפתח API, ומוסבר איך להוסיף אותן.
הוספת הגבלות על לקוחות
הגבלות על לקוחות מציינות אילו כתובות IP, אפליקציות ואתרים יכולים להשתמש במפתח API. מוסיפים הגבלות על לקוחות בהתאם לסוג הלקוח שמבצע קריאה ל-API. אפשר לציין אחד מהסוגים הבאים של הגבלות על לקוחות:
-
browserKeyRestrictions: הגורמים המפנים מסוג HTTP (אתרים) שמורשים להשתמש במפתח. -
serverKeyRestrictions: כתובות ה-IP של המתקשרים שמורשים להשתמש במפתח. -
androidKeyRestrictions: אפליקציות ל-Android שמורשות להשתמש במפתח. iosKeyRestrictions: האפליקציות ל-iOS שמורשות להשתמש במפתח.
הוספת הגבלות על דפדפנים
בדוגמה הבאה אפשר לראות איך מפעילים את השיטה UpdateKey כדי להגביל את מפנה ה-HTTP ל-www.example.com:
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "restrictions" : { "browserKeyRestrictions": { "allowedReferrers": "www.example.com" } }, "etag": "ETAG" }' \ 'https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys/KEY_ID?updateMask=restrictions'
כשהתשובה מ-operations.get מכילה את "done": true, response מכיל את Key המעודכן עם ההגבלות.
בדוגמה הבאה אפשר לראות איך יוצרים מפתח API חדש שמאפשר רק בקשות HTTP מרשימה של כתובות URL ספציפיות.
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "displayName" : "API key with browser restrictions", "restrictions" : { "browserKeyRestrictions": { "allowedReferrers": ["www.example.com", "www.example-2.com"] } } }' \ 'https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys'
בטבלה הבאה מוצגים תרחישים לדוגמה והגבלות לדפדפנים:
| תרחיש | הגבלות |
|---|---|
| הרשאה של כל כתובת URL באתר שלכם | צריך להגדיר שתי כתובות URL ברשימה allowedReferers.
|
| הרשאה של כתובת URL ספציפית | צריך להוסיף כתובת URL עם נתיב מדויק, לדוגמה:www.example.com/pathwww.example.com/path/path
|
| הרשאה של כל כתובת URL בתת-דומיין יחיד או בדומיין ללא קידומת | צריך להגדיר שתי כתובות URL ברשימה allowedReferers כדי לתת הרשאה לדומיין בשלמותו.
|
הוספת הגבלות על שרתים
תוכלו לציין כתובת IP אחת או יותר של מבצעי הקריאות, כמו שרתי אינטרנט או משימות cron, שמורשים להשתמש במפתח ה-API. אפשר לציין את כתובות ה-IP בפורמטים הבאים:
- IPv4 (
198.51.100.1) - IPv6 (
2001:db8::1) - תת-רשת עם סימון CIDR (
198.51.100.0/24,2001:db8::/64)
בדוגמה הבאה מוצג אופן יצירת מפתח API עם רשימה של allowedIps:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "displayName" : "API key with server restrictions with IPv4, IPv6 and CIDR", "restrictions" : { "serverKeyRestrictions": { "allowedIps": ["198.51.100.1","198.51.100.0/24","2001:db8::1","2001:db8::/64"] } } }' \ 'https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys'
הוספת הגבלות על Android
אתם יכולים להגביל את השימוש במפתח API רק לאפליקציות שלכם ל-Android. כשיוצרים או מעדכנים מפתח API, צריך לספק את שם החבילה ואת טביעת האצבע של SHA-1 בגודל 20 בייט לכל אפליקציה.
לדוגמה, נניח שהפעלתם את כלי השירות keytool והוא יצר את טביעת האצבע הבאה:
Certificate fingerprint: SHA1: DA:39:A3:EE:5E:6B:4B:0D:32:55:BF:EF:95:60:18:90:AF:D8:07:09
בדוגמה הבאה אפשר לראות איך יוצרים מפתח API עם טביעת האצבע ושם החבילה של androidKeyRestrictions:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "displayName" : "API key with Android restrictions", "restrictions" : { "androidKeyRestrictions": { "allowedApplications": [ { "sha1Fingerprint": "DA:39:A3:EE:5E:6B:4B:0D:32:55:BF:EF:95:60:18:90:AF:D8:07:09", "packageName": "com.example.my.app" } ] } } }' \ 'https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys'
הוספת הגבלות ב-iOS
אתם יכולים להגביל את השימוש במפתח API רק לאפליקציות שלכם ל-iOS באמצעות מזהה החבילה של כל אפליקציה כשאתם יוצרים או מעדכנים מפתח. בדוגמה הבאה אפשר לראות איך מגדירים את iosKeyRestrictions כשיוצרים מפתח API:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "displayName" : "API key with iOS restrictions", "restrictions" : { "iosKeyRestrictions": { "allowedBundleIds": ["com.example.my.app1", "com.example.my.app2"] } } }' \ 'https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys'
הוספת הגבלות על ממשקי API
ההגבלות על ממשקי API מאפשרות לכם לציין לאילו ממשקי API אפשר לקרוא באמצעות מפתח ה-API. Cloud de Confiance by S3NS מומלץ להוסיף הגבלות על לקוחות ועל ממשקי API לכל מפתחות ה-API.
אפשר לציין שירות אחד או יותר בהגבלות על ה-API. בדוגמה הבאה מוצג איך להגביל את השימוש במפתח API חדש רק לשירותים translate.googleapis.com ו-datastore.googleapis.com:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "displayName" : "API key with API restrictions", "restrictions": { "api_targets": [ { "service": "translate.googleapis.com" }, { "service" : "datastore.googleapis.com" } ] }, }' \ 'https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys'
כדי לקבל רשימה של השירותים שמופעלים בפרויקטCloud de Confiance , משתמשים בפקודה gcloud services list.
בנוסף להגבלת השימוש במפתח ה-API לשירותים ספציפיים, אפשר גם לציין את השיטות בכל שירות כדי להגביל עוד יותר את מפתח ה-API. בדוגמה הבאה אפשר לראות איך מגבילים את המפתח הקודם רק לשיטות המותרות של translate.googleapis.com:
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "restrictions": { "api_targets": [ { "service": "translate.googleapis.com", "methods": [ "Get*", "DetectLanguage" ] }, { "service" : "datastore.googleapis.com" } ] }, "etag": "ETAG" }' \ 'https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys/KEY_ID?updateMask=restrictions'