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 كما هو موضّح في المخطط البياني أدناه.

في هذا الدرس التطبيقي، سيكون لدينا جهازا 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 والمزايا