۱. مقدمه
سیاستهای امنیتی Google Cloud Armor Edge به شما امکان میدهد دسترسی به اشیاء ذخیره شده در Google Cloud CDN و Google Cloud Storage را محدود کنید. از جمله دلایل انجام این کار میتوان به اطمینان از عدم دسترسی کاربران شما به اشیاء موجود در مخازن ذخیرهسازی از مناطق جغرافیایی محدود یا اطمینان از فیلتر کردن توزیع رسانه شما در مناطقی که مجوز انجام این کار را دارید، اشاره کرد.
در این آزمایش، یک سطل GCS ایجاد میکنیم، یک تصویر را در آن آپلود میکنیم، آن را به یک متعادلکننده بار متصل میکنیم و سپس سیاستهای Cloud CDN و Edge Security را روی آن فعال میکنیم.
آنچه یاد خواهید گرفت
- نحوه راهاندازی یک سطل ذخیرهسازی ابری با محتوای قابل ذخیرهسازی در حافظه پنهان
- نحوه ایجاد یک سیاست امنیتی Edge برای محافظت از محتوا
- چگونه تأیید کنیم که سیاست امنیتی Edge مطابق انتظار کار میکند؟
آنچه نیاز دارید
- آشنایی اولیه با شبکه و HTTP
- دانش پایه خط فرمان یونیکس/لینوکس
۲. تنظیمات و الزامات
تنظیم محیط خودتنظیم
- وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .



- نام پروژه ، نام نمایشی برای شرکتکنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمیشود و شما میتوانید آن را در هر زمانی بهروزرسانی کنید.
- شناسه پروژه باید در تمام پروژههای گوگل کلود منحصر به فرد باشد و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید میکند؛ معمولاً برای شما مهم نیست که چیست. در اکثر آزمایشگاههای کد، باید به شناسه پروژه ارجاع دهید (و معمولاً با نام
PROJECT_IDشناخته میشود)، بنابراین اگر آن را دوست ندارید، یک شناسه تصادفی دیگر ایجاد کنید، یا میتوانید شناسه خودتان را امتحان کنید و ببینید آیا در دسترس است یا خیر. سپس پس از ایجاد پروژه، آن "منجمد" میشود. - یک مقدار سوم هم وجود دارد، شماره پروژه که برخی از APIها از آن استفاده میکنند. برای اطلاعات بیشتر در مورد هر سه این مقادیر به مستندات مراجعه کنید.
- در مرحله بعد، برای استفاده از منابع/APIهای ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد، اگر اصلاً هزینهای نداشته باشد، هزینه زیادی نخواهد داشت. برای خاموش کردن منابع به طوری که پس از این آموزش متحمل پرداخت صورتحساب نشوید، دستورالعملهای «پاکسازی» موجود در انتهای آزمایشگاه کد را دنبال کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
شروع پوسته ابری
اگرچه میتوان از راه دور و از طریق لپتاپ، گوگل کلود را مدیریت کرد، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا میشود، استفاده خواهید کرد.
از کنسول GCP روی آیکون Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

آمادهسازی و اتصال به محیط فقط چند لحظه طول میکشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:

این ماشین مجازی مجهز به تمام ابزارهای توسعه مورد نیاز شماست. این ماشین یک دایرکتوری خانگی دائمی ۵ گیگابایتی ارائه میدهد و روی فضای ابری گوگل اجرا میشود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود میبخشد. تمام کارهای شما در این آزمایشگاه را میتوان به سادگی با یک مرورگر انجام داد.
قبل از اینکه شروع کنی
داخل Cloud Shell، مطمئن شوید که شناسه پروژه شما تنظیم شده است
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] PROJECT_ID=[YOUR-PROJECT-NAME] echo $PROJECT_ID
فعال کردن APIها
فعال کردن تمام سرویسهای لازم
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
۳. یک فضای ذخیرهسازی ابری ایجاد کنید
در کنسول ابری، به منوی ناوبری > فضای ذخیرهسازی ابری > مرورگر بروید. روی ایجاد سطل کلیک کنید:

قوانین نامگذاری سطل:
- اطلاعات حساس را در نام سطل قرار ندهید، زیرا فضای نام سطل سراسری و قابل مشاهده برای عموم است.
- نام سطلها باید فقط شامل حروف کوچک، اعداد، خط تیره (-)، زیرخط (_) و نقطه (.) باشد. نامهای حاوی نقطه نیاز به تأیید دارند.
- نام سطلها باید با یک عدد یا حرف شروع و تمام شود.
- نامهای باکت باید شامل ۳ تا ۶۳ کاراکتر باشند. نامهایی که شامل نقطه هستند میتوانند تا ۲۲۲ کاراکتر داشته باشند، اما هر جزء جدا شده با نقطه نمیتواند بیش از ۶۳ کاراکتر باشد.
- نام باکتها را نمیتوان به صورت آدرس IP با نمادگذاری نقطهای-دهدهی نمایش داد (برای مثال، ۱۹۲.۱۶۸.۵.۴).
- نام سطلها نمیتواند با پیشوند "goog" شروع شود.
- نام سطلها نمیتواند شامل «google» یا غلطهای املایی نزدیک به «google» باشد.
- همچنین، برای رعایت DNS و سازگاریهای آینده، نباید از زیرخط (_) استفاده کنید یا نقطه را در مجاورت نقطه یا خط تیره دیگری قرار دهید. برای مثال، ".." یا "-." یا ".-" در نامهای DNS معتبر نیستند.
روی ادامه کلیک کنید.
نوع مکان: منطقه
مکان: منطقهای دور از خودتان را انتخاب کنید
روی ادامه کلیک کنید.
کلاس ذخیرهسازی پیشفرض: استاندارد
روی ادامه کلیک کنید.
تیک گزینهی «اجبار به جلوگیری از دسترسی عمومی در این سطل» در بخش «جلوگیری از دسترسی عمومی» را بردارید .
در قسمت کنترل دسترسی، گزینهی Fine Grained را انتخاب کنید.
روی ادامه کلیک کنید.
پس از پیکربندی سطل خود، روی CREATE کلیک کنید:
همین است - شما همین الان یک سطل ذخیرهسازی ابری ایجاد کردهاید!
۴. یک شیء را در سطل خود بارگذاری کنید
حالا یک شیء را در یک سطل بارگذاری کنید.
ابتدا، این تصویر را در یک نمونه موقت در Cloud Shell دانلود کنید. در مثال زیر از تصویر گوگل از صفحه اصلی گوگل استفاده شده است.
از پوسته ابری
wget --output-document google.png https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png
از دستور gsutil cp برای آپلود تصویر از محلی که آن را ذخیره کردهاید به باکتی که ایجاد کردهاید استفاده کنید:
از پوسته ابری
gsutil cp google.png gs://YOUR-BUCKET-NAME
حالا تصویر دانلود شده را حذف کنید:
از پوسته ابری
rm google.png
شیء خود را پیدا کنید و روی سه نقطه در سمت راست کلیک کنید و مجوزها را برای عمومی شدن ویرایش کنید.


۵. ایجاد یک متعادلکننده بار
در مرحله بعد، یک متعادلکننده بار HTTP ایجاد خواهیم کرد.
به بخش شبکه >> سرویسهای شبکه >> متعادلسازی بار >> ایجاد متعادلکننده بار >> متعادلکننده بار HTTP >> اینترنت به ماشینهای مجازی من >> متعادلکننده بار HTTP(S) کلاسیک بروید
ابتدا، برای متعادلکنندهی بار (load balancer) که ایجاد خواهید کرد، یک نام انتخاب کنید.
ایجاد سطل پشتی
یک باکت بکاند جدید ایجاد کنید که همان باکتی باشد که همین الان ایجاد کردهاید و گزینهی Enabled CDN and Cache Static Content را انتخاب کنید. روی Create کلیک کنید.

ایجاد قوانین میزبان و مسیر
به بخش Host and path rules در سمت چپ بروید. ما از یک host/path rule ساده استفاده خواهیم کرد و هر درخواستی را به bucket ارسال خواهیم کرد.

ایجاد پیکربندی frontend
پیکربندی frontend را انتخاب کنید. برای پیکربندی frontend ما از HTTP (اگرچه HTTPS نیز در صورت داشتن گواهینامه کار میکند) و یک آدرس IP موقت استفاده خواهیم کرد و مطمئن شوید که شبکه سطح بالا را انتخاب کردهاید.

روی ایجاد کلیک کنید
دریافت IP متعادل کننده بار
با کلیک روی نام متعادلکننده بار در لیست متعادلکنندههای بار برای پروژه خود، IP متعادلکننده بار را از کنسول دریافت کنید.

پرس و جو از متعادل کننده بار
بعد از چند دقیقه، سعی کنید از متعادلکننده بار، شیء آپلود شده را جستجو کنید. به آدرس IP متعادلکننده بار و نام تصویر نیاز خواهید داشت. ساختار دستور به این صورت است:
از ترمینال
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png
خروجی
armanrye-macbookpro% curl -svo /dev/null http://34.98.81.123/google.png * Trying 34.98.81.123... * TCP_NODELAY set * Connected to 34.98.81.123 (34.98.81.123) port 80 (#0) > GET /google.png HTTP/1.1 > Host: YOUR_IP > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 OK < X-GUploader-UploadID: ADPycdtoILI76KVsvBvdVGvSfzaxys1m3zYqCepBrmJxAI48ni24cWCRIdNu-53PX3DS6iycxp6xwFbMpwtcHHZQUQmEBxAgng < Expires: Mon, 13 Dec 2021 22:58:26 GMT < Date: Mon, 13 Dec 2021 21:58:26 GMT < Cache-Control: public, max-age=3600 < Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT < ETag: "8f9327db2597fa57d2f42b4a6c5a9855" < x-goog-generation: 1639431957957903 < x-goog-metageneration: 2 < x-goog-stored-content-encoding: identity < x-goog-stored-content-length: 5969 < Content-Type: image/png < x-goog-hash: crc32c=TeiHTA== < x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ== < x-goog-storage-class: STANDARD < Accept-Ranges: bytes < Content-Length: 5969 < Server: UploadServer
تأیید کنید که محتوای شما از طریق CDN یا مانیتورینگ متعادلسازی بار (Load Balancing Monitoring) از CDN ارائه میشود. باید بتوانید به نسبت بازدید ۱۰۰٪ نزدیک شوید. اگر نیاز به اجرای چند کوئری دارید، میتوانید موارد زیر را انجام دهید.
از ترمینال
#for i in `seq 1 50`; do curl http://%loadbalncer-IP%/google.png; done
تأیید محتوای ارائه شده توسط Cloud CDN
با رفتن به Network Services >> CDN، تأیید کنید که از CDN ترافیک ارائه میدهید.

۶. شیء را از GCS حذف کنید
حالا که حافظه پنهان پر شده است، بیایید شیء را از سطل حذف کنیم، و تأکید میکنیم که ما این سیاست را روی حافظه پنهان اعمال میکنیم و نه روی backend.
به فضای ذخیرهسازی ابری بروید >> %bucket name% >> objects
تصویر را انتخاب کنید و آن را حذف کنید.

۷. برای کش CDN خود، سیاست امنیتی Edge ایجاد کنید
به بخش امنیت شبکه >> ابر زره بروید و روی ایجاد خطمشی کلیک کنید.
موارد زیر را انتخاب کنید
نوع سیاست: سیاست امنیتی لبه
اقدام پیشفرض: رد کردن



این سیاست را روی مخزن بکاند خود اعمال کنید.
۸. اعتبارسنجی سیاست امنیتی Edge
اکنون که یک سیاست امنیتی اج (Edge Security Policy) در جلوی باکت بکاند خود ایجاد کردهایم، بیایید اعتبارسنجی کنیم که مطابق انتظار کار میکند.
بررسی سیاست امنیتی
بعد از گذشت چند دقیقه، میتوانید بررسی کنید که آیا Cloud Armor Policy در حال اجرا است یا خیر. اجرای دستور زیر از طریق خط فرمان، خطای ۴۰۳ را به شما نشان میدهد.
از ترمینال
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png
خروجی
curl -svo /dev/null http://34.98.81.123/google.png * Trying 34.98.81.123... * TCP_NODELAY set * Connected to 34.98.81.123 (34.98.81.123) port 80 (#0) > GET /google.png HTTP/1.1 > Host: YOUR_IP > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 403 Forbidden < X-GUploader-UploadID: ADPycdtS6FtJOGIsiWYDrAAE8VFeQuNutcvbGoQe2t8EZxsuspVtmCjyiTv_P3CNktroHMOGFXkTCfG-Jj-rUO60ZGPpEbpqcw < Content-Type: application/xml; charset=UTF-8 < Content-Length: 111 < Date: Mon, 13 Dec 2021 23:09:35 GMT < Expires: Mon, 13 Dec 2021 23:09:35 GMT < Cache-Control: private, max-age=0 < Server: UploadServer <
لاگها را بررسی کنید
در مرحله بعد، میتوانید لاگها را بررسی کنید تا سیاست امنیتی اعمالشده در لبه را مشاهده کنید. به Operations >> Logging >> Logs Explorer بروید.
قطعه کد زیر را در کوئری وارد کنید و روی اجرا کلیک کنید

resource.type:(http_load_balancer) AND jsonPayload.enforcedEdgeSecurityPolicy.name:(%SECURITY_POLICY_NAME%)
به پاسخ ۴۰۳ و سیاست امنیتی اعمال شده توجه کنید

حذف سیاست امنیتی
سیاست امنیتی را حذف کنید و شیء را از حافظه پنهان جستجو کنید.
به Network Security >> Cloud Armor >> %POLICY NAME% >> targets بروید و سطل هدف را حذف کنید.

تأیید حذف خطمشی
بعد از گذشت چند دقیقه، یک curl دیگر به منبع موجود در مخزن ذخیرهسازی ارسال کنید. این بار پاسخ ۲۰۰ دریافت خواهید کرد.
از ترمینال
curl -svo /dev/null http://LOAD_BALANCER_IP/google.png
خروجی
armanrye-macbookpro% curl -svo /dev/null http://34.98.81.123/google.png
* Trying 34.98.81.123...
* TCP_NODELAY set
* Connected to 34.98.81.123 (34.98.81.123) port 80 (#0)
> GET /google.png HTTP/1.1
> Host: YOUR_IP
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< X-GUploader-UploadID: ADPycdtI7f49P3MSuZSZ8vl6RwfwmnIDJ59EeSKp7UPvLPawdaiRHXiNWLtseQTxUxceWOvSLvpYmT3pWVkV4qeIP7M
< Date: Mon, 13 Dec 2021 23:06:46 GMT
< Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT
< ETag: "8f9327db2597fa57d2f42b4a6c5a9855"
< x-goog-generation: 1639431957957903
< x-goog-metageneration: 2
< x-goog-stored-content-encoding: identity
< x-goog-stored-content-length: 5969
< Content-Type: image/png
< x-goog-hash: crc32c=TeiHTA==
< x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ==
< x-goog-storage-class: STANDARD
< Accept-Ranges: bytes
< Content-Length: 5969
< Server: UploadServer
< Age: 1621
< Cache-Control: public,max-age=3600
<
{ [775 bytes data]
* Connection #0 to host 34.98.81.123 left intact
* Closing connection 0
تبریک! شما این آزمایش مربوط به سیاستهای امنیتی Cloud Armor Edge را به پایان رساندید.
©2020 Google LLC تمامی حقوق محفوظ است. گوگل و لوگوی گوگل علائم تجاری Google LLC هستند. سایر نامهای شرکتها و محصولات ممکن است علائم تجاری شرکتهای مربوطه باشند که با آنها مرتبط هستند.
۹. تمیز کردن آزمایشگاه
به Network Security >> Cloud Armor >> %POLICY NAME% بروید و گزینه delete را انتخاب کنید.

به فضای ذخیرهسازی ابری بروید، سطلی که ایجاد کردهاید را انتخاب کنید و روی حذف کلیک کنید.

به Networking >> Network services >> Load Balancing بروید. متعادلکنندهی بار (load balancer) که ایجاد کردهاید را انتخاب کنید و روی حذف کلیک کنید.

۱۰. تبریک میگویم!
شما مرحله Defending Edge Cache را با Codelab مربوط به Cloud Armor به پایان رساندید!
آنچه ما پوشش دادهایم
- نحوه تنظیم یک سطل ذخیرهسازی ابری و متعادلکننده بار ابری مرتبط
- نحوه ایجاد یک سیاست امنیتی Cloud Armor Edge
- چگونه تأیید کنیم که سیاست امنیتی Edge طبق برنامه کار میکند.
مراحل بعدی
- سعی کنید یک سیاست امنیتی Edge را با یک ضربه حافظه پنهان از یک منبع موتور محاسباتی تنظیم کنید.