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

1. مقدمة

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

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

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

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

المزايا

في ما يلي بعض الأمثلة على المزايا التي يمكن أن توفّرها "منصة العمل الآمنة على السحابة الإلكترونية" للمؤسسة:

النقل إلى Google Cloud

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

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

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

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

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

عناصر التحكّم الدقيقة في السياسات الخاصة بواجهات Google API

يمكنك استخدام Cloud SWP لتوفير سياسات دقيقة لواجهات Google API. على سبيل المثال، يمكنك ضبط سياسات على مستوى الحزمة أو العنصر باستخدام "لغة التعبير العادي" (CEL).

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

يتيح Cloud SWP الميزات التالية:

خدمة وكيل صريح

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

توسيع نطاق خوادم وكيل Envoy لعملية محو بيانات الخدمة (SWP) على السحابة الإلكترونية تلقائيًا

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

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

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

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

تكامل Cloud NAT المُبسّط

توفّر Cloud NAT تلقائيًا عناوين IP عامة إضافية عند زيادة مجموعة الخوادم الوكيلة التي تعرض زيارات Cloud SWP.

تتوفر أيضًا عناوين IP ثابتة وعلنية يدوية للذين يريدون الحصول على عناوين IP معروفة للخروج.

دمج Cloud Audit Logs مع حزمة عمليات Google Cloud

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

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

تقدّم خدمة Secure Web Proxy خدمة فحص بروتوكول أمان طبقة النقل (TLS) التي تتيح لك اعتراض زيارات بيانات بروتوكول أمان طبقة النقل (TLS)، وفحص الطلب المشفّر، وتنفيذ سياسات الأمان.

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

أهداف الدورة التعليمية

  • كيفية نشر Cloud SWP وإدارتها

المتطلبات

  • معرفة كيفية نشر الآلات الافتراضية وضبط مكونات الشبكة
  • معرفة إعدادات جدار الحماية في شبكة VPC

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

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

1264e30caa136365.png

في هذا الدرس التطبيقي، سيكون لدينا جهازا VM مخصصان لأحمال العمل.

سيتم إعداد العميل (أ) لإرسال جميع طلبات HTTP/HTTPS إلى Cloud SWP.

لن يتم إعداد العميل B لإرسال طلبات HTTP/HTTPS بشكل صريح إلى Cloud SWP، بل سيستفيد بدلاً من ذلك من Cloud NAT لنقل البيانات المرتبطة بالإنترنت.

3- قبل البدء

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

داخل 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 وشبكة فرعية وشبكة فرعية مخصّصة للوكيل فقط

شبكة السحابة الخاصة الافتراضية (VPC)

أنشئ شبكة VPC باسم codelab-swp-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. إنشاء قواعد جدار الحماية

للسماح لميزة "الوصول إلى الأجهزة الافتراضية عبر الإنترنت" بالاتصال بأجهزة VM الافتراضية، أنشئ قاعدة جدار حماية تتضمّن ما يلي:

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

من 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 وCloud NAT

أنشئ Cloud Router لخدمة Cloud NAT.

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

أنشئ بوابة Cloud 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"

أنشئ شهادة لإنهاء عدد زيارات عبء العمل:

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"

حمِّل الشهادة إلى "مدير الشهادات في السحابة الإلكترونية" لكي تتمكّن "بوابة الويب الآمنة" من الرجوع إليها في سياسة بوابة الأمان.

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

11. إنشاء بوابة SWP

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

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. إنشاء آلات افتراضية في Compute

بما أنّ 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

نفِّذ بعض طلبات البحث على الويب للتحقّق من صحة الوظائف. نحتاج إلى ‎-proxy-insecure لأنّنا أنشأنا شهادة موقَّعة ذاتيًا لهذا المختبر:

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 إلى "clienta" وابدأ اتصال SSH جديدًا بـ "clientb".

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

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

curl https://google.com

من المفترض أن يعمل هذا الإجراء على النحو المتوقّع على الجهاز الافتراضي (VM) clientb:

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

يعمل هذا الإجراء على النحو المتوقّع لأنّ clientb لا يستفيد من 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 ويتم رفض جميع الوجهات الأخرى.

الخروج من clientb

14. تعديل قاعدة سياسة أمان البوابة لتطابق التطبيقات

لنعدّل القاعدة لتتطابق مع تفاصيل على مستوى التطبيق. سننشئ قاعدة للبحث في مسار الطلب والسماح به فقط إذا كان مطابقًا لـ 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

استخدِم بروتوكول SSH للوصول إلى جهاز افتراضي (VM) على Compute Engine. تم ضبط متغيّر البيئة في هذا الجهاز الافتراضي لاستخدام Cloud SWP.

من cloudshell:

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

نفِّذ بعض طلبات البحث على الويب للتحقّق من صحة الوظائف. نحتاج إلى ‎-proxy-insecure لأنّنا أنشأنا شهادة موقَّعة ذاتيًا لهذا المختبر:

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

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

الخروج من clenta

16. تفعيل فحص TLS

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

تسمح السمة "applicationMatcher" بالفلترة حسب ما يلي:

  • خريطة عناوين الطلبات
  • طريقة الطلب
  • مضيف الطلب
  • مسار الطلب
  • طلب البحث
  • مخطط الطلب
  • عنوان 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 

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

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

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 لـ "فحص طبقة النقل الآمنة"

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

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

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

تعديل ملف Policy yaml ليشمل فحص طبقة النقل الآمنة

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}

تعديل القواعد لتشمل فحص طبقة النقل الآمنة

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

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)

استخدِم بروتوكول SSH للوصول إلى جهاز افتراضي (VM) على Compute Engine. تم ضبط متغيّر البيئة في هذا الجهاز الافتراضي لاستخدام Cloud SWP.

من cloudshell:

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

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

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

في هذه المرة، من المفترض أن تنجح العملية لأنّ SWP يمكنه تقييم 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>

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

الخروج من clienta

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 والمزايا