1. نظرة عامة
ستعدّل الخطوات التلقائية لنشر خدمة على Cloud Run لتحسين الأمان، ثم ستتعرّف على كيفية الوصول إلى التطبيق الذي تم نشره بطريقة آمنة. التطبيق هو "خدمة تسجيل الشركاء" لتطبيق Cymbal Eats، ويتم استخدامه من قِبل الشركات التي تعمل مع Cymbal Eats لمعالجة طلبات الطعام.
ما ستتعلمه
من خلال إجراء بعض التغييرات الصغيرة على الخطوات التلقائية الأساسية لنشر تطبيق على Cloud Run، يمكنك زيادة مستوى أمانه بشكل كبير. ستأخذ تطبيقًا حاليًا وتعليمات النشر وتغيّر خطوات النشر لتحسين أمان التطبيق الذي تم نشره.
ستظهر لك بعد ذلك كيفية منح الإذن بالوصول إلى التطبيق وتقديم الطلبات المصرَّح بها.
لا يهدف هذا المستند إلى تقديم نظرة شاملة على أمان نشر التطبيقات، بل إلى استعراض التغييرات التي يمكنك إجراؤها على جميع عمليات نشر التطبيقات المستقبلية والتي ستؤدي إلى تحسين أمانها بأقل جهد ممكن.
2. الإعداد والمتطلبات
إعداد البيئة بوتيرة ذاتية
- سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.



- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديله في أي وقت.
- رقم تعريف المشروع هو معرّف فريد في جميع مشاريع Google Cloud ولا يمكن تغييره بعد ضبطه. تنشئ Cloud Console تلقائيًا سلسلة فريدة، ولا يهمّك عادةً ما هي. في معظم دروس البرمجة، عليك الرجوع إلى رقم تعريف المشروع (يتم تحديده عادةً على أنّه
PROJECT_ID). إذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. يمكنك بدلاً من ذلك تجربة اسم مستخدم من اختيارك لمعرفة ما إذا كان متاحًا. لا يمكن تغيير هذا الخيار بعد هذه الخطوة وسيظل ساريًا طوال مدة المشروع. - للعلم، هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات عن كل هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس التطبيقي حول الترميز الكثير من المال، إن لم تكلفك شيئًا على الإطلاق. لإيقاف الموارد كي لا يتم تحصيل رسوم منك بعد هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع بأكمله. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.
تفعيل Cloud Shell
- من Cloud Console، انقر على تفعيل Cloud Shell
.

إذا لم يسبق لك بدء Cloud Shell، ستظهر لك شاشة وسيطة (الجزء السفلي غير المرئي من الصفحة) توضّح ماهيته. في هذه الحالة، انقر على متابعة (ولن تظهر لك مرة أخرى). في ما يلي الشكل الذي ستظهر به هذه الشاشة لمرة واحدة:

يستغرق توفير Cloud Shell والاتصال به بضع لحظات فقط.

يتم تحميل هذا الجهاز الافتراضي بجميع أدوات التطوير التي تحتاج إليها. توفّر هذه الخدمة دليلًا رئيسيًا دائمًا بسعة 5 غيغابايت وتعمل في Google Cloud، ما يؤدي إلى تحسين أداء الشبكة والمصادقة بشكل كبير. يمكن إنجاز معظم العمل في هذا الدرس التطبيقي حول الترميز، إن لم يكن كله، باستخدام متصفّح أو جهاز Chromebook فقط.
بعد الاتصال بـ Cloud Shell، من المفترض أن يظهر لك أنّه تم إثبات هويتك وأنّه تم ضبط المشروع على رقم تعريف مشروعك.
- نفِّذ الأمر التالي في Cloud Shell للتأكّد من إكمال عملية المصادقة:
gcloud auth list
ناتج الأمر
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- نفِّذ الأمر التالي في Cloud Shell للتأكّد من أنّ أمر gcloud يعرف مشروعك:
gcloud config list project
ناتج الأمر
[core] project = <PROJECT_ID>
إذا لم يكن كذلك، يمكنك تعيينه من خلال هذا الأمر:
gcloud config set project <PROJECT_ID>
ناتج الأمر
Updated property [core/project].
إعداد البيئة
ستنفّذ الأوامر في سطر أوامر Cloud Shell لهذا الدرس التطبيقي. يمكنك عادةً نسخ الأوامر ولصقها كما هي، ولكن في بعض الحالات، عليك تغيير قيم العناصر النائبة إلى القيم الصحيحة.
- اضبط متغيّر بيئة على رقم تعريف المشروع لاستخدامه في الأوامر اللاحقة:
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export SERVICE_NAME=partner-registration-service
- فعِّل واجهة برمجة التطبيقات لخدمة Cloud Run التي ستشغّل تطبيقك، وواجهة برمجة التطبيقات Firestore التي ستوفّر تخزين البيانات المستنِدة إلى تنسيق NoSQL، وواجهة برمجة التطبيقات Cloud Build التي سيستخدمها أمر النشر، وArtifact Registry التي سيتم استخدامها للاحتفاظ بحاوية التطبيق عند إنشائها:
gcloud services enable \
run.googleapis.com \
firestore.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com
- ابدأ بإعداد قاعدة بيانات Firestore في "الوضع الأصلي". يستخدم هذا الأمر واجهة برمجة التطبيقات App Engine، لذا يجب تفعيلها أولاً.
يجب أن يحدّد الأمر منطقة لخدمة App Engine، ولن نستخدمها ولكن يجب إنشاؤها لأسباب سابقة، ومنطقة لقاعدة البيانات. سنستخدم us-central لخدمة App Engine، وnam5 لقاعدة البيانات، علمًا بأنّ nam5 هو الموقع الجغرافي المتعدّد المناطق في الولايات المتحدة. تزيد المواقع الجغرافية المتعدّدة المناطق من توفّر قاعدة البيانات ومتانتها.
gcloud services enable appengine.googleapis.com
gcloud app create --region=us-central
gcloud firestore databases create --region=nam5
- استنساخ مستودع التطبيق النموذجي والانتقال إلى الدليل
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git
cd cymbal-eats/partner-registration-service
3- مراجعة ملف README
افتح المحرّر واطّلِع على الملفات التي يتألف منها التطبيق. اعرض ملف README.md الذي يوضّح الخطوات اللازمة لنشر هذا التطبيق. قد تتضمّن بعض هذه الخطوات قرارات أمان ضمنية أو صريحة يجب أخذها في الاعتبار. ستغيّر بعض هذه الخيارات لتحسين أمان تطبيقك الذي تم نشره، كما هو موضّح هنا:
الخطوة 3: تنفيذ npm install
من المهم معرفة مصدر أي برامج تابعة لجهات خارجية مستخدَمة في أحد التطبيقات وسلامتها، إذ إنّ إدارة أمان سلسلة توريد البرامج أمر مهم عند إنشاء أي برنامج، وليس فقط التطبيقات التي يتم نشرها على Cloud Run. ركّز هذا الدرس التطبيقي على عملية النشر، لذا لم يتناول هذا المجال، ولكن يمكنك البحث في الموضوع بشكل منفصل.
الخطوتان 4 و5 - تعديل deploy.sh وتشغيله
تؤدي هذه الخطوات إلى نشر التطبيق على Cloud Run مع ترك معظم الخيارات على الإعدادات التلقائية. ستعدّل هذه الخطوة لجعل عملية النشر أكثر أمانًا بطريقتَين رئيسيتَين:
- لا تسمح بالوصول بدون مصادقة. قد يكون من الملائم السماح بذلك لتجربة الميزات أثناء الاستكشاف، ولكن هذه خدمة ويب مخصّصة للاستخدام من قِبل الشركاء التجاريين، ويجب أن يتم دائمًا إثبات هوية المستخدمين.
- حدِّد أنّه يجب أن يستخدم التطبيق حساب خدمة مخصّصًا يتضمّن الأذونات المميّزة الضرورية فقط، بدلاً من حساب تلقائي من المحتمل أن يتيح الوصول إلى المزيد من واجهات برمجة التطبيقات والموارد أكثر من اللازم. يُعرف ذلك باسم مبدأ الحدّ الأدنى من الأذونات المميّزة، وهو مفهوم أساسي لأمان التطبيقات.
الخطوات من 6 إلى 11: تقديم طلبات ويب نموذجية للتحقّق من السلوك الصحيح
بما أنّ عملية نشر التطبيق تتطلّب الآن المصادقة، يجب أن تتضمّن هذه الطلبات الآن إثباتًا لهوية مقدّم الطلب. بدلاً من تعديل هذه الملفات، ستُرسل الطلبات مباشرةً من سطر الأوامر.
4. نشر الخدمة بأمان
تم تحديد تغييران مطلوبان في النص البرمجي deploy.sh: عدم السماح بالوصول بدون مصادقة، واستخدام حساب خدمة مخصّص بأقل امتيازات.
عليك إنشاء حساب خدمة جديد أولاً، ثم تعديل النص البرمجي deploy.sh للإشارة إلى حساب الخدمة هذا ومنع الوصول غير المصادق عليه، ثم نشر الخدمة من خلال تشغيل النص البرمجي المعدَّل قبل أن نتمكّن من تشغيل النص البرمجي المعدَّل deploy.sh.
إنشاء حساب خدمة ومنحه إذن الوصول اللازم إلى Firestore/Datastore
gcloud iam service-accounts create partner-sa
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:partner-sa@${PROJECT_ID}.iam.gserviceaccount.com" \
--role=roles/datastore.user
تعديل deploy.sh
عدِّل الملف deploy.sh ليتم حظر الوصول غير المصادق عليه (--no-allow-unauthenticated)، ولتحديد حساب الخدمة الجديد (--service-account) للتطبيق الذي تم نشره. عدِّل GOOGLE_PROJECT_ID ليكون رقم تعريف مشروعك.
ستحذف السطرين الأول والثاني، وستغيّر ثلاثة أسطر أخرى كما هو موضّح أدناه.
gcloud run deploy $SERVICE_NAME \
--source . \
--platform managed \
--region ${REGION} \
--no-allow-unauthenticated \
--project=$PROJECT_ID \
--service-account=partner-sa@${PROJECT_ID}.iam.gserviceaccount.com
تفعيل الخدمة
من سطر الأوامر، شغِّل النص البرمجي deploy.sh:
./deploy.sh
عند اكتمال عملية النشر، سيعرض السطر الأخير من ناتج الأمر عنوان URL الخاص بالخدمة للتطبيق الجديد. احفظ عنوان URL في متغيّر بيئة:
export SERVICE_URL=<URL from last line of command output>
الآن، حاوِل استرداد طلب من التطبيق باستخدام أداة curl:
curl -i -X GET $SERVICE_URL/partners
يوجّه الخيار -i للأمر curl إلى تضمين عناوين الاستجابة في الناتج. يجب أن يكون السطر الأول من الناتج كما يلي:
HTTP/2 403
تم نشر التطبيق مع خيار عدم السماح بالطلبات غير المصادَق عليها. لا يحتوي أمر curl هذا على أي معلومات مصادقة، لذا يرفضه Cloud Run. لا يتم تشغيل التطبيق الفعلي الذي تم نشره أو تلقّي أي بيانات من هذا الطلب.
5- تقديم طلبات مصادقة
يتم استدعاء التطبيق الذي تم نشره من خلال تقديم طلبات على الويب، ويجب الآن مصادقة هذه الطلبات لكي يسمح بها Cloud Run. تتم مصادقة طلبات الويب من خلال تضمين عنوان Authorization بالتنسيق التالي:
Authorization: Bearer identity-token
الرمز المميز للهوية هو سلسلة مشفّرة وموقّعة تشفيرًا ومكوّنة من أحرف ورموز، ويتم إصدارها من خلال موفّر مصادقة موثوق به. في هذه الحالة، يجب تقديم رمز مميّز صالح وغير منتهي الصلاحية صادر عن Google.
تقديم طلب بصفتك صاحب حساب المستخدم
يمكن لأداة سطر الأوامر في Google Cloud توفير رمز مميّز للمستخدم التلقائي الذي تمّت مصادقته. نفِّذ الأمر التالي للحصول على رمز مميّز للهوية خاص بحسابك واحفظه في متغيّر البيئة ID_TOKEN:
export ID_TOKEN=$(gcloud auth print-identity-token)
تكون رموز التعريف الصادرة عن Google صالحة لمدة ساعة واحدة تلقائيًا. نفِّذ أمر curl التالي لتقديم الطلب الذي تم رفضه سابقًا لأنّه لم يكن مصرحًا به. سيتضمّن هذا الأمر العنوان المطلوب:
curl -i -X GET $SERVICE_URL/partners \
-H "Authorization: Bearer $ID_TOKEN"
يجب أن تبدأ نتيجة الأمر بـ HTTP/2 200، ما يشير إلى أنّ الطلب مقبول ويتم تنفيذه. (إذا انتظرت لمدة ساعة وحاولت تنفيذ هذا الطلب مرة أخرى، سيتعذّر ذلك لأنّ صلاحية الرمز المميز ستكون قد انتهت). يظهر نص الردّ في نهاية الناتج، بعد سطر فارغ:
{"status":"success","data":[]}
ما مِن شركاء حتى الآن.
سجِّل الشركاء باستخدام نموذج بيانات JSON في الدليل مع الأمرَين curl:
curl -X POST \
-H "Authorization: Bearer $ID_TOKEN" \
-H "Content-Type: application/json" \
-d "@example-partner.json" \
$SERVICE_URL/partner
و
curl -X POST \
-H "Authorization: Bearer $ID_TOKEN" \
-H "Content-Type: application/json" \
-d "@example-partner2.json" \
$SERVICE_URL/partner
كرِّر طلب GET السابق للاطّلاع على جميع الشركاء المسجّلين الآن:
curl -i -X GET $SERVICE_URL/partners \
-H "Authorization: Bearer $ID_TOKEN"
من المفترض أن تظهر لك بيانات JSON تتضمّن محتوًى أكثر بكثير، ما يوفّر معلومات عن الشريكَين المسجَّلَين.
تقديم طلب بصفتك صاحب حساب غير مصرّح به
نجح الطلب الذي تمّت المصادقة عليه في الخطوة الأخيرة ليس فقط لأنّه تمّت المصادقة عليه، ولكن أيضًا لأنّه تمّ منح المستخدم الذي تمّت المصادقة عليه (حسابك) الإذن. وهذا يعني أنّ الحساب كان لديه إذن بتشغيل التطبيق، ولكن لن يكون لدى جميع الحسابات التي تمّت مصادقتها الإذن بذلك.
تم منح الإذن للحساب التلقائي المستخدَم في الطلب السابق لأنّه الحساب الذي أنشأ المشروع الذي يحتوي على التطبيق، وبشكلٍ تلقائي، منح هذا الحساب الإذن بتنفيذ أي تطبيقات Cloud Run في الحساب. ويمكن إبطال هذا الإذن إذا لزم الأمر، وهو أمر مرغوب فيه في تطبيق متاح للجميع. بدلاً من ذلك، عليك إنشاء حساب خدمة جديد بدون أي امتيازات أو أدوار مخصّصة له واستخدامه لمحاولة الوصول إلى التطبيق الذي تم نشره.
- أنشئ حساب خدمة باسم
tester.
gcloud iam service-accounts create tester
- ستحصل على رمز مميّز للهوية لهذا الحساب الجديد بالطريقة نفسها التي حصلت بها على رمز مميّز لحسابك التلقائي في وقت سابق. ومع ذلك، يتطلّب ذلك أن يكون لحسابك التلقائي إذن بانتحال هوية حسابات الخدمة. امنح حسابك هذا الإذن.
export USER_EMAIL=$(gcloud config list account --format "value(core.account)")
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="user:$USER_EMAIL" \
--role=roles/iam.serviceAccountTokenCreator
- الآن، نفِّذ الأمر التالي لحفظ رمز مميّز لهوية هذا الحساب الجديد في متغيّر البيئة TEST_IDENTITY. إذا عرض الأمر رسالة خطأ، انتظِر دقيقة أو اثنتين وأعِد المحاولة.
export TEST_TOKEN=$( \
gcloud auth print-identity-token \
--impersonate-service-account \
"tester@$PROJECT_ID.iam.gserviceaccount.com" \
)
- أرسِل طلب الويب الذي تمت المصادقة عليه كما كان من قبل، ولكن باستخدام رمز التعريف هذا:
curl -i -X GET $SERVICE_URL/partners \
-H "Authorization: Bearer $TEST_TOKEN"
سيبدأ ناتج الأمر مرة أخرى بـ HTTP/2 403 لأنّ الطلب، على الرغم من أنّه مصادق عليه، ليس مخوّلاً. لا يملك حساب الخدمة الجديد الإذن بتشغيل هذا التطبيق.
تفويض حساب
يجب أن يكون لدى المستخدم أو حساب الخدمة دور "مستدعي Cloud Run" في إحدى خدمات Cloud Run لإرسال طلبات إليها. امنح حساب خدمة المختبِر هذا الدور باستخدام الأمر:
export REGION=us-central1
gcloud run services add-iam-policy-binding ${SERVICE_NAME} \
--member="serviceAccount:tester@$PROJECT_ID.iam.gserviceaccount.com" \
--role=roles/run.invoker \
--region=${REGION}
بعد الانتظار لمدة دقيقة أو دقيقتَين حتى يتم تعديل الدور الجديد، كرِّر الطلب الذي تمّت المصادقة عليه. احفظ TEST_TOKEN جديدًا إذا مرّت ساعة أو أكثر منذ حفظه لأول مرة.
curl -i -X GET $SERVICE_URL/partners \
-H "Authorization: Bearer $TEST_TOKEN"
يبدأ ناتج الأمر الآن بالرمز HTTP/1.1 200 OK ويتضمّن السطر الأخير استجابة JSON. قبلت خدمة Cloud Run هذا الطلب وعالجه التطبيق.
6. مصادقة البرامج مقابل مصادقة المستخدمين
استخدمت الطلبات التي تمّت المصادقة عليها حتى الآن أداة سطر الأوامر curl. هناك أدوات ولغات برمجة أخرى كان من الممكن استخدامها بدلاً من ذلك. ومع ذلك، لا يمكن تقديم طلبات Cloud Run مصادَق عليها باستخدام متصفّح ويب يتضمّن صفحات ويب عادية. إذا نقر المستخدم على رابط أو على زر لإرسال نموذج في صفحة ويب، لن يضيف المتصفّح العنوان Authorization المطلوب من Cloud Run للطلبات التي تمت مصادقتها.
آلية المصادقة المضمّنة في Cloud Run مخصّصة للاستخدام من قِبل البرامج، وليس من قِبل المستخدمين النهائيين.
ملاحظة:
يمكن أن يستضيف Cloud Run تطبيقات ويب موجّهة للمستخدمين، ولكن يجب أن تضبط هذه الأنواع من التطبيقات Cloud Run للسماح بالطلبات غير المصادَق عليها من متصفّحات الويب الخاصة بالمستخدمين. إذا كانت التطبيقات تتطلّب مصادقة المستخدم، يجب أن يتعامل التطبيق معها بدلاً من طلب ذلك من Cloud Run. يمكن للتطبيق تنفيذ ذلك بالطرق نفسها التي تستخدمها تطبيقات الويب خارج Cloud Run، ولكنّ كيفية تنفيذ ذلك لا تندرج ضمن نطاق هذا الدرس العملي.
ربما لاحظت أنّ الردود على طلبات المثال حتى الآن كانت عبارة عن عناصر JSON، وليس صفحات ويب. ويرجع ذلك إلى أنّ خدمة تسجيل الشركاء هذه مخصّصة للاستخدام في البرامج، وتُعدّ JSON نموذجًا مناسبًا لها. بعد ذلك، ستكتب برنامجًا وتشغّله لاستهلاك هذه البيانات واستخدامها.
الطلبات المصادق عليها من برنامج Python
يمكن لأحد البرامج تقديم طلبات مصادَق عليها إلى تطبيق Cloud Run آمن من خلال طلبات ويب HTTP عادية، ولكن مع تضمين عنوان Authorization. التحدي الجديد الوحيد الذي تواجهه هذه البرامج هو الحصول على رمز مميّز صالح وغير منتهية صلاحيته لتضمينه في هذا العنوان. ستتحقّق خدمة Cloud Run من صحة الرمز المميّز باستخدام خدمة Cloud Identity and Access Management (IAM) من Google Cloud، لذا يجب أن تصدر هيئة معترف بها من IAM الرمز المميّز وتوقّعه. تتوفّر مكتبات برامج العميل بلغات عديدة يمكن للبرامج استخدامها لطلب إصدار رمز مميّز. مكتبة البرامج التي سيستخدمها هذا المثال هي مكتبة Python google.auth. تتوفّر العديد من مكتبات Python لإجراء طلبات الويب بشكل عام، ويستخدم هذا المثال الوحدة الشائعة requests.
الخطوة الأولى هي تثبيت مكتبتَي البرامج:
pip install google-auth
pip install requests
في ما يلي رمز Python لطلب رمز مميّز للهوية للمستخدم التلقائي:
credentials, _ = google.auth.default()
credentials.refresh(google.auth.transport.requests.Request())
identity_token = credentials.id_token
إذا كنت تستخدم واجهة سطر أوامر مثل Cloud Shell أو واجهة سطر الأوامر العادية على جهاز الكمبيوتر الخاص بك، سيكون المستخدم التلقائي هو أي مستخدم تمت مصادقته داخل هذه الواجهة. في Cloud Shell، يكون هذا الحساب عادةً هو حساب المستخدم الذي سجّل الدخول إلى Google. في حالات أخرى، يكون هذا الحساب هو الحساب الذي تمّت المصادقة عليه باستخدام الأمر gcloud auth login أو أي أمر آخر من أوامر gcloud. إذا لم يسجّل المستخدم الدخول مطلقًا، لن يكون هناك مستخدم تلقائي وسيتعذّر تنفيذ هذا الرمز.
بالنسبة إلى برنامج يقدّم طلبات إلى برنامج آخر، لا يُنصح عمومًا باستخدام هوية شخص، بل هوية البرنامج الذي يقدّم الطلب. هذا هو الغرض من حسابات الخدمة. لقد نشرت خدمة Cloud Run باستخدام حساب خدمة مخصّص يوفّر هوية الخدمة التي تستخدمها عند تقديم طلبات إلى واجهة برمجة التطبيقات، مثل Cloud Firestore. عند تشغيل برنامج على إحدى منصات Google Cloud، ستستخدم مكتبات البرامج تلقائيًا حساب الخدمة المخصّص لها كإعداد تلقائي للهوية، وبالتالي سيعمل رمز البرنامج نفسه في كلتا الحالتين.
في ما يلي رمز Python لتقديم طلب مع إضافة عنوان التفويض:
auth_header = {"Authorization": "Bearer " + identity_token}
response = requests.get(url, headers=auth_header)
سينفّذ برنامج Python الكامل التالي طلبًا مصادقًا عليه إلى خدمة Cloud Run لاسترداد جميع الشركاء المسجّلين ثم طباعة أسمائهم وأرقام التعريف المخصّصة لهم. انسخ الأمر أدناه ونفِّذه لحفظ هذا الرمز في الملف print_partners.py.
cat > ./print_partners.py << EOF
def print_partners():
import google.auth
import google.auth.transport.requests
import requests
credentials, _ = google.auth.default()
credentials.refresh(google.auth.transport.requests.Request())
identity_token = credentials.id_token
auth_header = {"Authorization": "Bearer " + identity_token}
response = requests.get("${SERVICE_URL}/partners", headers=auth_header)
parsed_response = response.json()
partners = parsed_response["data"]
for partner in partners:
print(f"{partner['partnerId']}: {partner['name']}")
print_partners()
EOF
سيتم تشغيل هذا البرنامج باستخدام أمر shell. عليك أولاً إثبات هويتك كمستخدم تلقائي، حتى يتمكّن البرنامج من استخدام بيانات الاعتماد هذه. نفِّذ أمر gcloud auth أدناه:
gcloud auth application-default login
اتّبِع التعليمات لإكمال عملية تسجيل الدخول. بعد ذلك، شغِّل البرنامج من سطر الأوامر:
python print_partners.py
سيبدو الناتج على النحو التالي:
10102: Zippy food delivery
67292: Foodful
وصل طلب البرنامج إلى خدمة Cloud Run لأنّه تمّت مصادقته باستخدام هويتك، وأنت مالك هذا المشروع وبالتالي لديك الإذن بتشغيله تلقائيًا. من الشائع أن يتم تشغيل هذا البرنامج تحت هوية حساب خدمة. عند تشغيلها على معظم منتجات Google Cloud، مثل Cloud Run أو App Engine، ستكون الهوية التلقائية هي حساب خدمة وسيتم استخدامها بدلاً من حساب شخصي.
7. تهانينا!
تهانينا، لقد أكملت درس البرمجة.
الخطوة التالية:
استكشِف دروسًا تطبيقية أخرى حول Cymbal Eats:
- تشغيل Cloud Workflows باستخدام Eventarc
- بدء معالجة الأحداث من Cloud Storage
- الاتصال بخدمة Private CloudSQL من Cloud Run
- الاتصال بقواعد البيانات المُدارة بالكامل من Cloud Run
- تأمين التطبيقات التي لا تستخدم خوادم من خلال خدمة Identity-Aware Proxy (IAP)
- تشغيل مهام Cloud Run باستخدام Cloud Scheduler
- تأمين حركة بيانات الدخول في Cloud Run
- الاتصال بـ AlloyDB الخاص من GKE Autopilot
تَنظيم
لتجنُّب تحمّل رسوم في حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا البرنامج التعليمي، احذف المشروع الذي يحتوي على الموارد أو احتفظ بالمشروع واحذف الموارد الفردية.
حذف المشروع
أسهل طريقة لإيقاف الفوترة هي حذف المشروع الذي أنشأته لتنفيذ البرنامج التعليمي.