الدرس التطبيقي حول ترميز خادم وكيل الويب الآمن من Cloud (SWP)

1. مقدمة

الخادم الوكيل الآمن للويب في السحابة الإلكترونية

إنّ Cloud SWP هي خدمة تستند إلى السحابة الإلكترونية في المقام الأول، وتوفِّر خادمًا وكيلاً آمنًا للويب لمساعدتك في تأمين حركة بيانات الويب الصادرة (HTTP/S). يمكنك ضبط برامجك على استخدام Cloud SWP بشكل صريح كخادم وكيل. يمكن أن تنشأ طلبات الويب من المصادر التالية:

  • مثيلات الأجهزة الافتراضية
  • الحاويات
  • يشير هذا المصطلح إلى بيئة بدون خادم تستخدم موصِّلاً بدون خادم.
  • أعباء العمل من خلال تبادل المعلومات بين شبكات VPC
  • أعباء العمل خارج Google Cloud المتصلة بشبكة VPN أو Cloud Interconnect

توفِّر عملية محو بيانات السحابة الإلكترونية سياسات مرنة ودقيقة استنادًا إلى الهويات وتطبيقات الويب التي تعتمِد على السحابة الإلكترونية أولاً.

المزايا

في ما يلي بعض الأمثلة على المزايا التي يمكن أن توفّرها ميزة Cloud SWP للمؤسسات:

نقل البيانات إلى Google Cloud

تساعدك ميزة Cloud SWP في نقل البيانات إلى Google Cloud مع الاحتفاظ بسياسات الأمان والمتطلبات الحالية لحركة بيانات الويب الصادرة. يمكنك تجنُّب استخدام حلول الجهات الخارجية التي تتطلب وحدة تحكُّم إدارة أخرى أو تعديل ملفات الإعداد يدويًا.

الوصول إلى خدمات ويب خارجية موثوق بها

تتيح لك خدمة Cloud SWP تطبيق سياسات وصول دقيقة على حركة بيانات الويب الخارجة حتى تتمكّن من تأمين شبكتك. عليك إنشاء وتحديد هويات العمل أو التطبيقات، ثم تطبيق السياسات.

الوصول الخاضع للمراقبة إلى خدمات الويب غير الموثوق بها

يمكنك استخدام Cloud SWP لتوفير وصول مُراقب إلى خدمات الويب غير الموثوق بها. تحدِّد خدمة Cloud SWP الزيارات التي لا تتوافق مع السياسة وتسجِّلها في Cloud Logging (تسجيل الدخول). يمكنك بعد ذلك مراقبة استخدام الإنترنت واكتشاف التهديدات التي تتعرض لها شبكتك والاستجابة للتهديدات.

عناصر تحكّم مفصَّلة في السياسات لـ Google APIs

يمكنك استخدام Cloud SWP لتوفير سياسات دقيقة بشأن Google APIs. على سبيل المثال، يمكنك ضبط السياسات على مستوى الحزمة/الكائنات التي تعتمد لغة التعبير الشائعة (CEL).

الميزات المتاحة

توفِّر أداة Cloud SWP الميزات التالية:

خدمة الخادم الوكيل الفاضح

يجب أن يتم ضبط العملاء صراحةً لاستخدام الخادم الوكيل. يعزل خادم Cloud SWP الوكيل العملاء عن الإنترنت من خلال إنشاء اتصالات TCP جديدة نيابةً عن العميل.

التوسيع التلقائي للخوادم الوكيلة لبرنامج Cloud SWP Envoy

تتيح التعديل التلقائي لحجم مجموعة الخادم الوكيل في Envoy وسعة المجموعة في منطقة معيّنة، ما يتيح تحقيق أداء متّسق خلال الفترات التي يزداد فيها الطلب بأقلّ تكلفة.

السياسات المعيارية للوصول إلى الخروج

تتوافق أداة Cloud SWP على وجه التحديد مع سياسات الخروج التالية:

  • هوية المصدر استنادًا إلى علامات الأمان أو حسابات الخدمة أو عناوين IP
  • الوجهات المستندة إلى عناوين URL وأسماء المضيفين
  • الطلبات المستندة إلى الطرق أو العناوين أو عناوين URL. يمكن تحديد عناوين URL باستخدام القوائم أو أحرف البدل أو الأنماط.
  • التشفير التام بين الأطراف: قد يتم نقل أنفاق العميل الوكيل عبر بروتوكول أمان طبقة النقل (TLS). تتوافق ميزة Cloud SWP أيضًا مع بروتوكول HTTP/S CONNECT لاتصالات بروتوكول أمان طبقة النقل (TLS) التي يبدأها العميل من طرف إلى طرف بالخادم الوجهة.

دمج مبسّط لترجمة عنوان الشبكة في السحابة الإلكترونية

توفِّر آلية ترجمة عنوان الشبكة في السحابة الإلكترونية تلقائيًا عناوين IP عامة إضافية عند زيادة مجموعة الخوادم الوكيلة التي تخدم حركة بيانات التبديل في السحابة الإلكترونية (SWP).

إنّ عناوين IP العامة الثابتة واليدوية هي أيضًا خيار للمستخدمين الذين يريدون أن يكون لديهم عناوين IP معروفة للمخرج.

دمج سجلات تدقيق السحابة الإلكترونية وحزمة عمليات Google Cloud

تعمل سجلات تدقيق Cloud وحزمة عمليات Google Cloud على تسجيل الأنشطة الإدارية وطلبات الوصول إلى الموارد ذات الصلة ببرنامج Cloud SWP. وتسجّل أيضًا المقاييس وسجلات المعاملات للطلبات التي يعالجها الخادم الوكيل.

فحص بروتوكول أمان طبقة النقل (TLS)

يوفِّر خادم وكيل الويب الآمن خدمة فحص بروتوكول أمان طبقة النقل (TLS) التي تتيح لك اعتراض عدد زيارات بروتوكول أمان طبقة النقل (TLS) وفحص الطلب المُشفَّر وفرض سياسات الأمان.

  • تكامُل محكم مع خدمة مرجع التصديق (CAS)، وهي مستودع متاح وقابل للتوسع بدرجة كبيرة للمراجع المصدقة الخاصة.
  • إمكانية استخدام جذرك الخاص إذا لزم الأمر يمكنك أيضًا استخدام هيئة إصدار شهادات الجذر الحالية لتوقيع شهادات CA التابعة التابعة لهيئة CAS. إذا كنت تفضل ذلك، يمكنك إنشاء شهادة جذر جديدة داخل CAS.
  • معايير فك التشفير الدقيقة باستخدام SessionMatcher وApplicationMatcher ضمن قواعد سياسة خادم وكيل الويب الآمن وتتضمن هذه المعايير المضيفين المطابقين الموجودين في قوائم عناوين URL والتعبيرات العادية ونطاقات عناوين IP والتعبيرات المتشابهة. وإذا لزم الأمر، يمكن دمج المعايير مع التعبيرات المنطقية.
  • يمكن ضبط كل سياسة من سياسات خادم وكيل الويب الآمن من خلال سياسة فحص بروتوكول أمان طبقة النقل (TLS) الخاصة بها ومجمّع مرجع التصديق. يمكن أن تتشارك عدة سياسات لخادم وكيل الويب الآمن بدلاً من ذلك سياسة فحص واحدة لبروتوكول أمان طبقة النقل (TLS).

ما ستتعرَّف عليه

  • كيفية نشر وإدارة عملية محو بيانات السحابة الإلكترونية

المتطلبات

  • معرفة نشر المثيلات وتهيئة مكونات الشبكة
  • معلومات حول إعداد جدار الحماية لـ VPC

2. بيئة الاختبار

سيعتمد هذا الدرس التطبيقي حول الترميز على شبكة VPC واحدة. سيخرج مورد حوسبة في هذه البيئة باستخدام عملية محو بيانات الخدمة من السحابة الإلكترونية كما هو موضح في المخطّط أدناه.

1264e30caa136365.png

في هذا التمرين المعملي، سيكون هناك جهازان افتراضيان لأعباء العمل.

سيتم ضبط العميل أ على إرسال كل طلبات HTTP/HTTPS إلى عملية محو بيانات الخدمة على السحابة الإلكترونية.

لن يتم ضبط العميل ب على إرسال طلبات HTTP/HTTPS بشكل صريح إلى عملية محو بيانات الخدمة على السحابة الإلكترونية، ولكن بدلاً من ذلك يمكنه استخدام ترجمة عنوان الشبكة في السحابة الإلكترونية مع حركة البيانات المرتبطة بالإنترنت.

3- قبل البدء

يتطلّب الدرس التطبيقي حول الترميز مشروعًا واحدًا.

داخل Cloud Shell، تأكَّد من إعداد رقم تعريف مشروعك.

export project_id=`gcloud config list --format="value(core.project)"`
export project_number=`gcloud projects describe $project_id --format="value(projectNumber)"`
export region=us-west1
export zone=us-west1-a
export prefix=codelab-swp
export member="serviceAccount:service-$project_number@gcp-sa-networksecurity.iam.gserviceaccount.com"

4. تفعيل واجهات برمجة التطبيقات

تفعيل واجهات برمجة التطبيقات لاستخدام المنتجات

gcloud services enable networksecurity.googleapis.com
gcloud services enable certificatemanager.googleapis.com
gcloud services enable networkservices.googleapis.com

5- إنشاء شبكة VPC وشبكة فرعية وشبكة فرعية للخادم الوكيل فقط

شبكة VC

أنشِئ codelab-swp-vpc VPC:

gcloud compute networks create $prefix-vpc --subnet-mode=custom 

الشبكة الفرعية

أنشئ الشبكات الفرعية المعنية في المنطقة المحددة:

gcloud compute networks subnets create $prefix-vpc-subnet \
   --range=10.10.10.0/24 --network=$prefix-vpc --region=$region

الشبكة الفرعية للخادم الوكيل فقط

أنشئ شبكة فرعية للخادم الوكيل فقط في المنطقة المحدّدة:

gcloud compute networks subnets create $prefix-proxy-only-subnet --purpose=REGIONAL_MANAGED_PROXY --role=ACTIVE --region=$region --network=$prefix-vpc --range=172.16.0.0/23

6- إنشاء قواعد جدار حماية

للسماح لعمليات الشراء داخل التطبيق بالاتصال بمثيلات الأجهزة الافتراضية، أنشِئ قاعدة جدار حماية تعمل على:

  • ينطبق ذلك على جميع مثيلات الأجهزة الافتراضية التي تريد أن تتوفّر إمكانية الوصول إليها من خلال استخدام الشراء داخل التطبيق.
  • يسمح بالزيارات الواردة من نطاق IP 35.235.240.0/20. يحتوي هذا النطاق على جميع عناوين IP التي يستخدمها بروتوكول IAP لإعادة توجيه بروتوكول التحكم بالنقل.

من cloudshell:

gcloud compute firewall-rules create $prefix-allow-iap-proxy \
--direction=INGRESS \
--priority=1000 \
--network=$prefix-vpc \
--action=ALLOW \
--rules=tcp:22 \
--source-ranges=35.235.240.0/20

7. إنشاء Cloud Router ترجمة عنوان الشبكة في السحابة الإلكترونية (NAT)

إنشاء Cloud Router لتطبيق Cloud NAT (ترجمة عنوان الشبكة).

gcloud compute routers create ${prefix}-cr \
--region=$region \
--network=${prefix}-vpc

إنشاء بوابة NAT في السحابة الإلكترونية للعميل "ب".

gcloud compute routers nats create $prefix-nat-gw-$region \
--router=$prefix-cr \
--router-region=$region \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges

8. إنشاء سياسة أمان المدخل

إنشاء ملف yaml يحتوي على معلومات ذات صلة بالسياسة:

cat > /tmp/policy.yaml << EOF
description: Policy to allow .com traffic, then (/index.html), and finally TLS.
name: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy
EOF

شغّل الأمر gcloud لإنشاء السياسة من ملف yaml:

gcloud network-security gateway-security-policies import ${prefix}-policy --source=/tmp/policy.yaml --location=${region}

9. إنشاء قاعدة سياسة أمان المدخل

أنشئ ملف yaml يحتوي على القواعد. يتم تمثيل هذه القواعد بلغة التعبير الشائعة (CEL). ستستخدم هذه الميزة الاختبارية قاعدة بسيطة تتيح الزيارات إلى نطاقات .com وتحظر جميع النطاقات الأخرى:

cat > /tmp/rule-com.yaml << EOF
name: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy/rules/rule-com
enabled: true
priority: 1
description: Allow .com traffic
basicProfile: ALLOW
sessionMatcher: host().endsWith('com')
EOF

يمكننا الآن ربط القاعدة بسياسة أمان البوابة:

gcloud network-security gateway-security-policies rules import rule-com --source=/tmp/rule-com.yaml --location=${region} --gateway-security-policy=${prefix}-policy

10. إنشاء شهادة وتحميلها إلى Cloud Certificate Manager

إنشاء شهادة لإنهاء حركة بيانات حمل العمل:

openssl req -x509 -newkey rsa:2048 -keyout /tmp/key.pem -out /tmp/cert.pem -days 365 -subj '/CN=www.codelab-swp.com' -nodes -addext \
  "subjectAltName = DNS:www.codelab-swp.com"

حمِّل الشهادة إلى Cloud Certificate Manager حتى تتمكّن ميزة "عملية إيقاف الخدمة" من الرجوع إليها في سياسة مدخل الأمان.

gcloud certificate-manager certificates create ${prefix}-cert --location=${region} --private-key-file=/tmp/key.pem --certificate-file=/tmp/cert.pem

11. إنشاء بوابة عملية محو بيانات المستخدم

أنشئ ملف yaml لبوابة SWP للإشارة إلى المعلومات السابقة مثل الشهادة وسياسة أمان البوابة والشبكة والشبكة الفرعية.

cat > /tmp/gateway.yaml << EOF
name: projects/${project_id}/locations/${region}/gateways/${prefix}-gateway
type: SECURE_WEB_GATEWAY
addresses: [10.10.10.50]
ports: [443]
certificateUrls: [projects/${project_id}/locations/${region}/certificates/${prefix}-cert]
gatewaySecurityPolicy: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy
network: projects/${project_id}/global/networks/${prefix}-vpc
subnetwork: projects/${project_id}/regions/${region}/subnetworks/${prefix}-vpc-subnet
EOF

إنشاء البوابة:

gcloud network-services gateways import ${prefix}-swp --source=/tmp/gateway.yaml --location=${region}

تأكَّد من إنشاء البوابة:

gcloud network-services gateways describe ${prefix}-swp --location ${region}

12. إنشاء مثيلات الحوسبة

بما أنّ Cloud SWP هو خادم وكيل صريح، نحتاج إلى تحديد عنوان IP للخادم الوكيل بشكل صريح للزيارات الواردة من حِمل العمل. سيتم ضبط متغيّر البيئة لمثيل الحوسبة clientA. لن يفعل ClientB ذلك.

إنشاء مثيلات الحوسبة ClientA وClientB:

gcloud compute instances create clienta \
   --subnet=$prefix-vpc-subnet \
   --no-address \
   --private-network-ip=10.10.10.10 \
   --zone $zone \
   --metadata startup-script='#! /bin/bash
apt-get update
sudo echo http_proxy=https://10.10.10.50:443/ >> /etc/environment
sudo echo https_proxy=https://10.10.10.50:443/ >> /etc/environment
'
gcloud compute instances create clientb \
   --subnet=$prefix-vpc-subnet \
   --no-address \
   --private-network-ip=10.10.10.200 \
   --zone $zone \
   --metadata startup-script='#! /bin/bash
apt-get update
'

13. اختبار مطابقة الجلسات

بروتوكول النقل الآمن (SSH) إلى "clienta" حوسبة افتراضي تم إنشاؤه مؤخرًا. يحتوي هذا الجهاز الافتراضي على المتغيّر البيئي مضبوطًا على استخدام Cloud SWP.

من cloudshell:

gcloud compute ssh clienta --zone=$zone --tunnel-through-iap

تنفيذ بعض طلبات البحث على الويب للتحقّق من صحة الوظيفة نحتاج إلى خادم وكيل غير آمن لأنّنا أنشأنا شهادة موقعة ذاتيًا لهذا التمرين المعملي:

curl https://google.com --proxy-insecure

المخرجات المتوقعة:

davidtu@clienta:~$ curl https://google.com --proxy-insecure
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.com/">here</A>.
</BODY></HTML>

كما ترى، كان الطلب "ناجحًا". ومن المتوقّع أن تظهر لنا عملية إعادة التوجيه 301 بسبب إعادة توجيه الموقع الإلكتروني إلى https://www.google.com.

يؤدي تشغيل الأمر التالي إلى توفير سجلات مطوّلة تحتوي على تفاصيل حول الاتصال:

curl https://google.com --proxy-insecure -v

تمييز بعض النتائج لعرض تفاصيل اتصال الخادم الوكيل والشهادات والوجهة

davidtu@clienta:~$ curl https://google.com --proxy-insecure -v
* Uses proxy env variable https_proxy == 'https://10.10.10.50:443/'
*   Trying 10.10.10.50:443...
* Connected to 10.10.10.50 (10.10.10.50) port 443 (#0)
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use http/1.1
* Proxy certificate:
*  subject: CN=www.codelab-swp.com
*  start date: Dec 12 17:16:35 2022 GMT
*  expire date: Dec 12 17:16:35 2023 GMT
*  issuer: CN=www.codelab-swp.com
*  SSL certificate verify result: self signed certificate (18), continuing anyway.
* allocate connect buffer!
* Establish HTTP proxy tunnel to google.com:443
> CONNECT google.com:443 HTTP/1.1
> Host: google.com:443
> User-Agent: curl/7.74.0
> Proxy-Connection: Keep-Alive
> 
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
< HTTP/1.1 200 OK
< date: Mon, 12 Dec 2022 19:22:04 GMT
< 
* Proxy replied 200 to CONNECT request
* CONNECT phase completed!
...

يمكنك تجربة نطاقات com .أخرى للتحقّق من الوظائف.

لنجرب الآن بعض النطاقات الأخرى التي لا تتبع com. للتحقق من سلوك الحظر الافتراضي:

curl https://wikipedia.org --proxy-insecure

المخرجات المتوقعة:

curl: (56) Received HTTP code 403 from proxy after CONNECT

وبالمثل، راجِع التسجيل المطوَّل للمخرجات وتأكَّد من أنّ Cloud SWP تحظر هذه الزيارات:

curl https://wikipedia.org --proxy-insecure -v
davidtu@clienta:~$ curl https://wikipedia.org --proxy-insecure -v
* Uses proxy env variable https_proxy == 'https://10.10.10.50:443/'
*   Trying 10.10.10.50:443...
* Connected to 10.10.10.50 (10.10.10.50) port 443 (#0)
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use http/1.1
* Proxy certificate:
*  subject: CN=www.codelab-swp.com
*  start date: Dec 12 17:16:35 2022 GMT
*  expire date: Dec 12 17:16:35 2023 GMT
*  issuer: CN=www.codelab-swp.com
*  SSL certificate verify result: self signed certificate (18), continuing anyway.
* allocate connect buffer!
* Establish HTTP proxy tunnel to wikipedia.org:443
> CONNECT wikipedia.org:443 HTTP/1.1
> Host: wikipedia.org:443
> User-Agent: curl/7.74.0
> Proxy-Connection: Keep-Alive
> 
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
< HTTP/1.1 403 Forbidden
< content-length: 13
< content-type: text/plain
< date: Mon, 12 Dec 2022 19:35:09 GMT
< connection: close
< 
* Received HTTP code 403 from proxy after CONNECT
* CONNECT phase completed!
* Closing connection 0
curl: (56) Received HTTP code 403 from proxy after CONNECT

يمكنك تجربة نطاقات أخرى أيضًا للتحقق من السلوك.

إنهاء جلسة بروتوكول النقل الآمن (SSH) إلى "العميل" وبدء اتصال SSH جديد بـ "clientb".

gcloud compute ssh clientb --zone=$zone --tunnel-through-iap

شغِّل بعض أوامر curl للتحقّق من السلوك:

curl https://google.com

من المفترض أن يعمل هذا على النحو المتوقَّع في Clientb VM:

davidtu@clientb:~$ curl https://google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.com/">here</A>.
</BODY></HTML>

إجراء الاختبار على نطاق مؤسسة:

curl https://wikipedia.org

ويعمل ذلك على النحو المتوقّع لأنّ العميل لا يستخدم ميزة Cloud SWP:

davidtu@clientb:~$ curl https://wikipedia.org
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://www.wikipedia.org/">here</a>.</p>
</body></html>

يمكنك اختبار إرسال حركة البيانات بشكل صريح من خلال Cloud SWP:

curl -x https://10.10.10.50:443/ https://wikipedia.org --proxy-insecure 

يتضح لنا أنّه تم رفض حركة البيانات هذه من خلال سياسة Cloud SWP:

davidtu@clientb:~$ curl -x https://10.10.10.50:443/ https://wikipedia.org --proxy-insecure
curl: (56) Received HTTP code 403 from proxy after CONNECT

لقد تحقّقت من أنّه يتم فرض حركة البيانات التي تستفيد من Cloud SWP على سياسة الأمان التي تم ضبطها. يُسمح بالزيارات المتجهة إلى .com، ويتم رفض جميع الوجهات الأخرى.

اخرج من العميل.

14. تعديل قاعدة سياسة أمان المدخل من أجل ApplicationMatching

لنعدّل القاعدة لتتطابق مع التفاصيل على مستوى التطبيق. سننشئ قاعدة للنظر في مسار الطلب ولن نسمح به إلا إذا كان يتطابق مع index.html.

cat > /tmp/rule-com.yaml << EOF
name: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy/rules/rule-com
enabled: true
priority: 1
description: Allow .com traffic with path index.html
basicProfile: ALLOW
sessionMatcher: host().endsWith('com')
applicationMatcher: request.path.matches('index.html')
EOF

يمكننا الآن ربط القاعدة المُعدَّلة بسياسة أمان المدخل:

gcloud network-security gateway-security-policies rules import rule-com --source=/tmp/rule-com.yaml --location=${region} --gateway-security-policy=${prefix}-policy

15. اختبار قاعدة ApplicationMatcher

بروتوكول النقل الآمن إلى clienta compute VM. يحتوي هذا الجهاز الافتراضي على المتغيّر البيئي مضبوطًا على استخدام Cloud SWP.

من cloudshell:

gcloud compute ssh clienta --zone=$zone --tunnel-through-iap

تنفيذ بعض طلبات البحث على الويب للتحقّق من صحة الوظيفة نحتاج إلى خادم وكيل غير آمن لأنّنا أنشأنا شهادة موقعة ذاتيًا لهذا التمرين المعملي:

curl http://google.com --proxy-insecure

لاحظ أن هذا الاستعلام سيفشل عند اجتيازه سابقًا.

Access denied

أي مسار طلب إلى جانب "index.html" رسالة الخطأ 403. يُرجى عدم التردّد في اختبار ذلك الأمر.

قم بتعديل طلب البحث لتضمين المسار /index.html

curl http://google.com/index.html --proxy-insecure

من المفترض أن يكون هذا الطلب ناجحًا:

davidtu@clienta:~$ curl http://google.com/index.html --proxy-insecure
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.com/index.html">here</A>.
</BODY></HTML>

ومن المتوقّع أن تظهر لنا عملية إعادة التوجيه 301 نظرًا إلى أنّ الموقع الإلكتروني يعيد التوجيه إلى http://www.google.com/index.html.

لاحظ أن هذا طلب HTTP. بعد ذلك، ستحتاج إلى تفعيل ميزة محو بيانات الخدمة (SWP) للحصول على إمكانات فحص بروتوكول أمان طبقة النقل (TLS).

بعد ذلك، شغِّل طلب البحث نفسه ولكن عبر بروتوكول أمان طبقة النقل (TLS):

curl -k https://google.com/index.html --proxy-insecure

المخرجات المتوقعة:

curl: (56) Received HTTP code 403 from proxy after CONNECT

من المفترَض أن يتعذّر هذا الطلب لأنّ عملية محو بيانات الخدمة لم يتم ضبطها لفحص بروتوكول أمان طبقة النقل (TLS) ولا يمكنها تقييم المسار وفقًا لقاعدة applicationMatcher.

يُرجى الخروج من Centa.

16. تفعيل فحص بروتوكول أمان طبقة النقل (TLS)

بدون فحص بروتوكول أمان طبقة النقل (TLS)، لن تتم مطابقة applicationMatcher مع عدد زيارات HTTPS.

&quot;applicationMatcher&quot; يسمح بالفلترة على ما يلي:

  • ربط العناوين
  • طريقة الطلب
  • طلب المضيف
  • مسار الطلب
  • طلب البحث
  • مخطط الطلبات
  • عنوان URL للطلب الكامل
  • طلب وكيل المستخدم

إنشاء حساب الخدمة

سيحصل حساب الخدمة هذا على الأذونات لإنشاء شهادات لفحص بروتوكول أمان طبقة النقل (TLS) في ميزة SWP.

gcloud beta services identity create \
    --service=networksecurity.googleapis.com \
    --project=$project_id

التأكّد من تفعيل خدمة CAS

gcloud services enable privateca.googleapis.com

إنشاء مجموعة مصادر تصديق

gcloud privateca pools create $prefix-ca-pool \
    --tier=devops \
    --project=$project_id \
    --location=$region 

إنشاء مرجع تصديق جذر

مرجع تصديق مستخدَم لتوقيع الشهادة

gcloud privateca roots create $prefix-root-ca --pool=$prefix-ca-pool \
  --location=$region \
  --auto-enable \
  --subject="CN=my-swp-ca, O=SWP LLC"

إنشاء ملف سياسة إصدار الشهادات

cat > /tmp/tls-issuance-policy.yaml << EOF
maximumLifetime: 1209600s
baselineValues:
  caOptions:
    isCa: false
  keyUsage:
    extendedKeyUsage:
      serverAuth: true
EOF

إنشاء ملف yaml لفحص بروتوكول أمان طبقة النقل (TLS)

cat > /tmp/tls-inspection-policy.yaml << EOF
caPool: projects/$project_id/locations/$region/caPools/$prefix-ca-pool
name: projects/$project_id/locations/$region/tlsInspectionPolicies/$prefix-tls-inspection
EOF

إنشاء سياسة فحص بروتوكول أمان طبقة النقل (TLS)

gcloud network-security tls-inspection-policies import $prefix-tls-inspection \
    --source=/tmp/tls-inspection-policy.yaml \
    --location=$region

تعديل مجموعة مصادر الشهادات (CA) لاستخدام سياسة إصدار الشهادات

gcloud privateca pools update $prefix-ca-pool    --issuance-policy=/tmp/tls-issuance-policy.yaml --location=$region

منح الأذونات

ويسمح ذلك لحساب الخدمة باستخدام مجموعة شهادات CA لإنشاء شهادات.

gcloud privateca pools add-iam-policy-binding $prefix-ca-pool \
    --member=$member \
    --role='roles/privateca.certificateManager' \
    --location=$region

تعديل ملف yaml للسياسة ليشمل فحص بروتوكول أمان طبقة النقل (TLS)

cat > /tmp/policy.yaml << EOF
description: some policy description
name: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy
tlsInspectionPolicy: projects/${project_id}/locations/${region}/tlsInspectionPolicies/${prefix}-tls-inspection
EOF

شغِّل الأمر لتطبيق السياسة المعدّلة.

gcloud network-security gateway-security-policies import ${prefix}-policy --source=/tmp/policy.yaml --location=${region}

تعديل القواعد لتضمين فحص بروتوكول أمان طبقة النقل (TLS)

بعد ذلك، حدِّد القواعد التي يجب أن تتضمّن فحص TLS "enabtlsInspectionEnabled: true" .

cat > /tmp/rule-com.yaml << EOF
name: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy/rules/rule-com
enabled: true
priority: 1
description: Allow .com traffic with path index.html
basicProfile: ALLOW
sessionMatcher: host().endsWith('com')
applicationMatcher: request.path.matches('index.html')
tlsInspectionEnabled: true
EOF

شغِّل الأمر لتطبيق القاعدة المُعدَّلة.

gcloud network-security gateway-security-policies rules import rule-com --source=/tmp/rule-com.yaml --location=${region} --gateway-security-policy=${prefix}-policy

17. اختبار فحص بروتوكول أمان طبقة النقل (TLS)

بروتوكول النقل الآمن إلى clienta compute VM. يحتوي هذا الجهاز الافتراضي على المتغيّر البيئي مضبوطًا على استخدام Cloud SWP.

من cloudshell:

gcloud compute ssh clienta --zone=$zone --tunnel-through-iap

شغِّل طلب بحث الويب السابق للتأكّد مما إذا كانت عملية محو بيانات الخدمة تُجري فحص بروتوكول أمان طبقة النقل (TLS) لاسترداد المسار

curl -k https://google.com/index.html --proxy-insecure

هذه المرة، من المفترض أن تكون ناجحة لأنّ عملية محو بيانات الخدمة يمكنها تقييم ApplicationMatcher.

المخرجات المتوقعة:

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.com/index.html">here</A>.
</BODY></HTML>

لقد أعددنا بنجاح عملية محو بيانات السحابة الإلكترونية لفحص بروتوكول أمان طبقة النقل (TLS) وتقييم منطق applicationMatcher.

اخرج من العميل.

18 خطوات التنظيف

من Cloud Shell، أزِل مدخل عملية محو بيانات الخدمة (SWP) وسياسة الأمان والشهادات والمثيلات وCloud NAT وCloud Router:

gcloud -q network-services gateways delete ${prefix}-swp --location=${region}

gcloud -q network-security gateway-security-policies rules delete rule-com --location=${region} --gateway-security-policy=${prefix}-policy

gcloud -q network-security gateway-security-policies delete ${prefix}-policy --location=${region}

gcloud -q certificate-manager certificates delete ${prefix}-cert --location=${region}

gcloud -q network-security tls-inspection-policies delete $prefix-tls-inspection --location=$region

gcloud -q privateca roots disable $prefix-root-ca --pool=$prefix-ca-pool --location=$region

gcloud -q privateca roots delete $prefix-root-ca --pool=$prefix-ca-pool --location=$region --ignore-active-certificates --skip-grace-period

gcloud -q privateca pools delete $prefix-ca-pool --location=$region

gcloud -q compute instances delete clienta --zone=$zone

gcloud -q compute instances delete clientb --zone=$zone

gcloud -q compute routers nats delete ${prefix}-nat-gw-${region} \
--router=$prefix-cr --router-region=$region

gcloud -q compute routers delete `gcloud compute routers list --regions=$region --format="value(NAME)" | grep -e swg-autogen -e codelab-swp` --region=$region

إزالة الشبكات الفرعية وقواعد البرامج الثابتة وشبكات VPC:

gcloud -q compute networks subnets delete $prefix-vpc-subnet \
    --region $region

gcloud -q compute networks subnets delete $prefix-proxy-only-subnet \
    --region=$region

gcloud -q compute firewall-rules delete $prefix-allow-iap-proxy

gcloud -q compute networks delete $prefix-vpc

19. تهانينا

تهانينا على إكمال الدرس التطبيقي حول الترميز. لقد ضبطت "خادم وكيل الويب الآمن على السحابة الإلكترونية" ونشره على Google Cloud بنجاح.

المواضيع التي تناولناها

  • برنامج Cloud SWP ومزاياه