חתימת V4 היא תהליך שמאפשר ליצור חתימות לאימות בבקשות API בפורמט XML ב-Cloud Storage. בדף הזה נסביר איך להשתמש ב-Google Cloud CLI ובספריות הלקוח של Cloud Storage כדי ליצור כתובות URL חתומות באמצעות פרטי כניסה של חשבון שירות. כתובות URL חתומות מאפשרות גישת קריאה או כתיבה לזמן מוגבל למשאב ספציפי של Cloud Storage. כדי ליצור תוכנית משלכם ליצירת כתובות URL חתומות, קראו במקום זאת את המאמר תהליך חתימה V4 באמצעות תוכנית משלכם.
החתימה מאמתת את הפרמטרים של מחרוזת השאילתה שכלולים בכתובת URL חתומה V4. אם בקשה שמשתמשת בכתובת URL חתומה כוללת פרמטר שאילתה שלא היה חלק מהחתימה, הבקשה תיכשל. כך אפשר להשתמש בפרמטרים כמו response-content-disposition כדי לשנות את מטא-הנתונים של האובייקט בבקשות מאומתות מסוג GET.
לפני שמתחילים
לפני שמבצעים את המשימות בדף הזה, צריך לבצע את השלבים הבאים:
מפעילים את Service Account Credentials API.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק 'שימוש בשירות'' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםיצירה של חשבון שירות. אם כבר יש לכם חשבון שירות שבו אתם רוצים להשתמש כדי לחתום על כתובות URL, אתם יכולים לדלג על השלב הזה.
מתן הרשאה מספקת לחשבון השירות כדי שהוא יוכל לבצע את הבקשה שנשלחת מכתובת ה-URL החתומה. לדוגמה, אם כתובת ה-URL החתומה מאפשרת למשתמש לקרוא נתוני אובייקטים, לחשבון השירות צריכה להיות הרשאה לקרוא את נתוני האובייקטים.
כדי לבצע את המשימות שמתוארות במדריך הזה, צריך לבקש מהאדמין להקצות לחשבון השירות אחד מתפקידי ה-IAM הבאים:
משתמש באובייקטים באחסון (
roles/storage.objectUser): משתמשים בתפקיד הזה כדי ליצור כתובות URL חתומות להעלאה ולהורדה של אובייקטים. ההרשאה הזו נדרשת גם אם כתובת ה-URL החתומה יכולה להחליף אובייקט קיים.צפייה באובייקטים באחסון (
roles/storage.objectViewer): משתמשים בתפקיד הזה אם רוצים ליצור רק כתובות URL חתומות להורדת אובייקטים.יצירת אובייקטים של אחסון (
roles/storage.objectCreator): משתמשים בתפקיד הזה אם רוצים ליצור רק כתובות URL חתומות להעלאת אובייקטים, והאובייקט המועלה לא יחליף אובייקט קיים בקטגוריה.
התפקידים המוגדרים מראש האלה כוללים את ההרשאות שנדרשות ליצירת כתובות URL חתומות להורדה ולהעלאה של אובייקטים. כדי לראות את ההרשאות הנדרשות, מרחיבים את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
-
storage.objects.get(לא נדרש אם רוצים רק להעלות אובייקטים) -
storage.objects.create(לא נדרש אם רוצים רק להוריד אובייקטים) -
storage.objects.delete(לא נדרש אם לא צריך להחליף אובייקטים בהעלאה)
יכול להיות שתוכלו לקבל את ההרשאות האלה גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים. במאמר תפקידי IAM ל-Cloud Storage מפורטים התפקידים השונים וההרשאות שמשויכות אליהם.
יש לכם הרשאה מספקת לחתום על בלובים באמצעות חשבון השירות. צריך לבקש מהאדמין להקצות את התפקיד 'יצירת אסימונים בחשבון שירות' (
roles/iam.serviceAccountTokenCreator).אם משתמשים בפרטי כניסה של משתמש לצורך אימות, צריך להיות הגורם הראשי שהתפקיד הזה הוקצה לו, והתפקיד צריך להיות מוענק בחשבון השירות שישמש ליצירת כתובות ה-URL החתומות.
אם משתמשים בחשבון שירות שמצורף למופע של Compute לצורך אימות, חשבון השירות צריך להיות חשבון המשתמש של התפקיד הזה כדי להתחזות לעצמו, והתפקיד הזה צריך להיות מוקצה בפרויקט שמכיל את חשבון השירות.
התפקיד המוגדר מראש הזה מכיל את ההרשאה שנדרשת כדי לחתום על בלובים באמצעות חשבון שירות. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
iam.serviceAccounts.signBlob
יכול להיות שתוכלו לקבל את ההרשאה הזו גם באמצעות תפקידים בהתאמה אישית או תפקידים אחרים שהוגדרו מראש. במאמר תפקידי IAM ל-Cloud Storage מפורטים התפקידים השונים וההרשאות שמשויכות אליהם.
במאמר ניהול הגישה לפרויקטים מופיעות הוראות להקצאת תפקידים בפרויקטים.
יצירת כתובת URL חתומה כדי להוריד אובייקט
כדי ליצור כתובת URL חתומה שיכולה לקבל אובייקט מקטגוריה:
שורת הפקודה
משתמשים בפקודה
gcloud storage sign-url. לדוגמה, הפקודה הבאה יוצרת כתובת URL חתומה שמאפשרת למשתמשים להוריד אובייקט למשך 10 דקות:gcloud storage sign-url gs://BUCKET_NAME/OBJECT_NAME --impersonate-service-account=SERVICE_ACCOUNT_EMAIL --duration=10m
כאשר:
BUCKET_NAMEהוא השם של הקטגוריה שבה האובייקט נמצא. לדוגמה,example-bucket.
OBJECT_NAMEהוא שם האובייקט להורדה. לדוגמה,cat.jpeg.
SERVICE_ACCOUNT_EMAILהיא כתובת האימייל של חשבון שירות שהמפתח שלו ישמש לחתימה. לדוגמה:signed-url-account@my-project.s3ns.iam.gserviceaccount.com.
אם הפעולה בוצעה ללא שגיאות, התגובה אמורה להיראות כך:
--- expiration: '2023-07-14 23:19:35' http_verb: GET resource: gs://example-bucket/cat.jpeg signed_url: https://storage.s3nsapis.fr/example-bucket/cat.jpeg? x-goog-signature=11ae9c61ca84dd0bec319f7d52a38029e5873caa2eeced0568 ef96076258cfc1a925a9683cc907d210036b61af9e06a13bf4a15b15fab3916669b e2f4c9f66ea6be822bec5858af519a6da705415b5768721197be213103fa09b8a18 8a143be77a24351517ff208a2c62cfebb78040daf1f953907080bd98f9462739d11 1355b1d9bcf54705b862f37392c031fde0d52add1a4d3bbb98a22e8b7023f6a1623 2e0a2dd56e524d410624d28663e557fafaf4ba0a04290a1066f894713857b429258 d14f056066c7622baf114c124e645688e19b4df3c4a7925f580693c93fa9c1dae7f dff0edff7259c72f3f0eadc5a9f9f556c83c9c8dc02ee3af8d20ab634bad&x-goog -algorithm=GOOG4-RSA-SHA256&x-goog-credential=signed-url-account%40 my-project.s3ns.iam.gserviceaccount.com%2F20230714%2Fus%2Fstorage%2Fgoog 4_request&x-goog-date=20230714T221935Z&x-goog-expires=600&x-goog-si gnedheaders=host
כל אחד יכול להשתמש בכתובת ה-URL הזו כדי לגשת למשאב המשויך (במקרה הזה
cat.jpeg) למשך פרק הזמן שהוגדר (במקרה הזה 10 דקות).
ספריות לקוח
C++
למידע נוסף, קראו את מאמרי העזרה של Cloud Storage C++ API.
כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
C#
למידע נוסף, קראו את מאמרי העזרה של Cloud Storage C# API.
כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Go
למידע נוסף, קראו את מאמרי העזרה של Cloud Storage Go API.
כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Java
למידע נוסף, קראו את מאמרי העזרה של Cloud Storage Java API.
כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Node.js
למידע נוסף, קראו את מאמרי העזרה של Cloud Storage Node.js API.
כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
PHP
למידע נוסף, קראו את מאמרי העזרה של Cloud Storage PHP API.
כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Python
למידע נוסף, קראו את מאמרי העזרה של Cloud Storage Python API.
כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Ruby
למידע נוסף, קראו את מאמרי העזרה של Cloud Storage Ruby API.
כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Rust
יצירת כתובת URL חתומה כדי להעלות אובייקט
כדי ליצור כתובת URL חתומה שיכולה להעלות אובייקט לקטגוריה:
שורת הפקודה
משתמשים בפקודה
gcloud storage sign-url. לדוגמה, הפקודה הבאה יוצרת כתובת URL חתומה שמאפשרת למשתמשים להעלות קובץ למשך שעה אחת:gcloud storage sign-url gs://BUCKET_NAME/OBJECT_NAME --impersonate-service-account=SERVICE_ACCOUNT_EMAIL --http-verb=PUT --duration=1h --headers=content-type=CONTENT_TYPE
BUCKET_NAMEהוא שם הקטגוריה שאליה מעלים את האובייקט. למשל,example-bucket.
OBJECT_NAMEהוא השם שצריך להקצות לאובייקט שמעלים. לדוגמה,cat.png.
SERVICE_ACCOUNT_EMAILהיא כתובת האימייל של חשבון שירות שהמפתח שלו ישמש לחתימה. לדוגמה:signed-url-account@my-project.s3ns.iam.gserviceaccount.com.
CONTENT_TYPEהוא סוג התוכן של האובייקט שמעלים. לדוגמה,image/png.
אם הפעולה בוצעה ללא שגיאות, התגובה אמורה להיראות כך:
--- expiration: '2023-07-14 23:35:47' http_verb: PUT resource: gs://example-bucket/cat.png signed_url: https://storage.s3nsapis.fr/example-bucket/cat.png? x-goog-signature=2f670a686102963e0574f3c1a3b4d29ee4aa406c1528d42d2 30195d17fef73834b254314de7d7990afd48538a84b66f20010e7ecd90a900490e 6119b7e56a912f71c8d64285c40e86f31b8fec51cf8c7a61ded81de3cedac9c1ca b92474b7371740fdac20b2d8d092b15396f79443bbde954a4174ed11aef6c2cf5f a4d72a84ff60fd6003ed0a505b0e40b6207ddbaec2a15778f715c3ec7537a1b14f b6661b2abaa5736f1670a412ca7e2555c830591f0595c01ff95af7f2206abe2e27 41948c16d4bd4c7cbb25f41277ece59236c06e00ca6c63ae2eb3efc22c216bb24c e1b8b3801d07fd3a7ed3f2df3db6e59c6fc3cc76a002335dd936efd0237cf584e3 6&x-goog-algorithm=GOOG4-RSA-SHA256&x-goog-credential=signed-url-a ccount%40my-project.s3ns.iam.gserviceaccount.com%2F20230714%2Fus%2Fstor age%2Fgoog4_request&x-goog-date=20230714T223547Z&x-goog-expires=36 00&x-goog-signedheaders=content-type%3Bhost
כל אחד יכול להשתמש בכתובת ה-URL הזו כדי להעלות משאב (במקרה הזה
cat.png) לקטגוריית Cloud Storage שצוינה, למשך פרק הזמן שהוגדר (במקרה הזה, שעה אחת).
ספריות לקוח
C++
למידע נוסף, קראו את מאמרי העזרה של Cloud Storage C++ API.
כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
C#
למידע נוסף, קראו את מאמרי העזרה של Cloud Storage C# API.
כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Go
למידע נוסף, קראו את מאמרי העזרה של Cloud Storage Go API.
כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Java
למידע נוסף, קראו את מאמרי העזרה של Cloud Storage Java API.
כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Node.js
למידע נוסף, קראו את מאמרי העזרה של Cloud Storage Node.js API.
כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
PHP
למידע נוסף, קראו את מאמרי העזרה של Cloud Storage PHP API.
כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Python
למידע נוסף, קראו את מאמרי העזרה של Cloud Storage Python API.
כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Ruby
למידע נוסף, קראו את מאמרי העזרה של Cloud Storage Ruby API.
כדי לבצע אימות ב-Cloud Storage, אתם צריכים להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.
Rust
מגבלות
אין תמיכה בפרטי כניסה ל-HMAC כשמשתמשים בכלים של Cloud Storage ליצירת כתובות URL חתומות.