Atelier de programmation sur le proxy Web sécurisé Cloud (SWP)

1. Introduction

Proxy Web sécurisé Cloud

Cloud SWP est un service cloud-first qui fournit un proxy Web sécurisé pour vous aider à sécuriser le trafic Web de sortie (HTTP/S). Configurez vos clients pour qu'ils utilisent explicitement Cloud SWP comme proxy. Les requêtes Web peuvent provenir des sources suivantes :

  • Instances de machines virtuelles (VM)
  • Conteneurs
  • Un environnement sans serveur qui utilise un connecteur sans serveur
  • Charges de travail sur l'appairage de VPC
  • Charges de travail en dehors de Google Cloud connectées par Cloud VPN ou Cloud Interconnect

Cloud SWP permet de créer des stratégies flexibles et précises basées sur les identités cloud-first et les applications Web.

Avantages

Voici quelques exemples d'avantages que Cloud SWP peut offrir à une organisation :

Migration vers Google Cloud

Cloud SWP vous aide à migrer vers Google Cloud tout en conservant les règles et les exigences de sécurité existantes concernant le trafic Web sortant. Vous pouvez éviter d'utiliser des solutions tierces qui nécessitent une autre console de gestion ou la modification manuelle des fichiers de configuration.

Accès aux services Web externes de confiance

Le proxy Web sécurisé Cloud vous permet d'appliquer des règles précises de contrôle des accès à votre trafic Web de sortie afin de sécuriser votre réseau. Vous créez et identifiez des identités de charge de travail ou d'application, puis vous appliquez des règles.

Accès surveillé aux services Web non fiables

Vous pouvez utiliser Cloud SWP pour fournir un accès surveillé aux services Web non approuvés. Cloud SWP identifie le trafic non conforme aux règles et l'enregistre dans Cloud Logging (Logging). Vous pouvez ensuite surveiller l'utilisation d'Internet, détecter les menaces affectant votre réseau et y répondre.

Contrôles précis des règles pour les API Google

Vous pouvez utiliser Cloud SWP pour fournir des règles précises pour les API Google. Par exemple, vous pouvez définir des règles au niveau du bucket/de l'objet à l'aide du langage CEL (Common Expression Language).

Fonctionnalités disponibles

Cloud SWP est compatible avec les fonctionnalités suivantes :

Service proxy explicite

Les clients doivent être explicitement configurés pour utiliser le serveur proxy. Le proxy Cloud SWP isole les clients d'Internet en créant de nouvelles connexions TCP en leur nom.

Autoscaling des proxys Envoy Cloud SWP

Permet d'ajuster automatiquement la taille du pool de proxys Envoy et la capacité du pool dans une région, ce qui permet d'obtenir des performances constantes pendant les périodes de forte demande au moindre coût.

Règles d'accès de sortie modulaires

Cloud SWP est compatible avec les règles de sortie suivantes :

  • Identité source basée sur des tags sécurisés, des comptes de service ou des adresses IP.
  • Destinations basées sur des URL et des noms d'hôte.
  • Requêtes basées sur des méthodes, des en-têtes ou des URL. Les URL peuvent être spécifiées à l'aide de listes, de caractères génériques ou de modèles.
  • Chiffrement de bout en bout : les tunnels client-proxy peuvent transiter sur TLS. Cloud SWP est également compatible avec HTTP/S CONNECT pour les connexions TLS de bout en bout initiées par le client au serveur de destination.

Intégration simplifiée de Cloud NAT

Cloud NAT provisionne automatiquement des adresses IP publiques supplémentaires lorsque l'ensemble des proxys qui diffusent le trafic Cloud SWP augmente.

Il est également possible de définir manuellement des adresses IP publiques statiques pour ceux qui souhaitent disposer d'adresses IP de sortie connues.

Intégration de Cloud Audit Logs et de la suite Google Cloud Operations

Cloud Audit Logs et la suite Google Cloud Operations enregistrent les activités d'administration et les demandes d'accès pour les ressources liées à Cloud SWP. Ils enregistrent également les métriques et les journaux de transactions pour les requêtes traitées par le proxy.

Inspection TLS

Le proxy Web sécurisé propose un service d'inspection TLS qui vous permet d'intercepter le trafic TLS, d'inspecter les requêtes chiffrées et d'appliquer des règles de sécurité.

  • Intégration étroite à Certificate Authority Service (CAS), qui est un dépôt hautement disponible et évolutif pour les autorités de certification privées.
  • La possibilité d'utiliser votre propre racine de confiance si nécessaire. Vous pouvez également utiliser une autorité de certification racine existante pour signer les autorités de certification subordonnées détenues par CAS. Si vous préférez, vous pouvez générer un nouveau certificat racine dans CAS.
  • Critères de déchiffrement précis à l'aide de SessionMatcher et ApplicationMatcher dans les règles de stratégie de proxy Web sécurisé. Ce critère inclut les hôtes correspondants présents dans les listes d'URL, les expressions régulières, les plages d'adresses IP et les expressions similaires. Si nécessaire, les critères peuvent être combinés avec des expressions booléennes.
  • Chaque règle de proxy Web sécurisé peut être configurée avec sa propre règle d'inspection TLS et son propre pool d'autorités de certification. Vous pouvez également partager une même règle d'inspection TLS entre plusieurs règles de proxy Web sécurisé.

Points abordés

  • Déployer et gérer Cloud SWP

Prérequis

  • Connaissances sur le déploiement d'instances et la configuration de composants réseau
  • Connaissances sur la configuration des pare-feu VPC

2. Environnement de test

Cet atelier de programmation utilisera un seul VPC. Une ressource de calcul dans cet environnement sortira à l'aide du Cloud SWP, comme indiqué dans le diagramme ci-dessous.

1264e30caa136365.png

Dans cet atelier, nous aurons deux VM de charge de travail.

Le client A sera configuré pour envoyer toutes les requêtes HTTP/HTTPS au Cloud SWP.

Le client B ne sera pas configuré pour envoyer explicitement des requêtes HTTP/HTTPS au Cloud SWP, mais utilisera plutôt Cloud NAT pour le trafic destiné à Internet.

3. Avant de commencer

L'atelier de programmation nécessite un seul projet.

Dans Cloud Shell, assurez-vous que l'ID de votre projet est configuré.

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. Activer les API

Activer les API pour utiliser les produits

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

5. Créer un réseau VPC, un sous-réseau et un sous-réseau proxy réservé

Réseau VPC

Créez le VPC codelab-swp-vpc :

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

Sous-réseau

Créez les sous-réseaux respectifs dans la région sélectionnée :

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

Sous-réseau proxy réservé

Créez un sous-réseau proxy réservé dans la région sélectionnée :

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. Créer des règles de pare-feu

Pour permettre à IAP de se connecter à vos instances de VM, créez une règle de pare-feu qui :

  • S'applique à toutes les instances de VM auxquelles vous souhaitez être accessible à l'aide d'IAP.
  • Autorise le trafic entrant à partir de la plage d'adresses IP 35.235.240.0/20. Cette plage contient toutes les adresses IP qu'IAP utilise pour le transfert TCP.

Depuis Cloud Shell :

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. Créer un routeur Cloud Router et Cloud NAT

Créez un routeur Cloud Router pour Cloud NAT.

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

Créez une passerelle Cloud NAT pour le client B.

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. Créer une règle de sécurité de passerelle

Créez un fichier YAML contenant les informations pertinentes pour la règle :

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

Exécutez la commande gcloud pour créer la règle à partir du fichier YAML :

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

9. Créer une règle de stratégie de sécurité de passerelle

Créez un fichier YAML contenant les règles. Ces règles sont représentées en CEL (Common Expression Language). Cet atelier utilisera une règle simple qui autorisera le trafic vers les domaines .com et bloquera tous les autres :

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

Nous pouvons maintenant associer la règle à la stratégie de sécurité de la passerelle :

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

10. Créer un certificat et l'importer dans le gestionnaire de certificats Cloud

Créez un certificat pour mettre fin au trafic de charge de travail :

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"

Importez le certificat dans le gestionnaire de certificats Cloud afin que le SWP puisse y faire référence dans la règle de passerelle de sécurité.

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

11. Créer la passerelle SWP

Créez le fichier YAML pour la passerelle SWP afin de référencer les informations précédentes, telles que le certificat, la règle de sécurité de la passerelle, le réseau et le sous-réseau.

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

Créez la passerelle :

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

Vérifiez que la passerelle a été créée :

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

12. Créer des instances de calcul

Étant donné que Cloud SWP est un proxy explicite, nous devons spécifier explicitement l'adresse IP du proxy pour le trafic de charge de travail. La variable d'environnement sera définie sur le client A de l'instance de calcul. ClientB ne le fera pas.

Créez les instances de calcul ClientA et 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. Tester la mise en correspondance des sessions

Connectez-vous en SSH à la VM de calcul "clienta" récemment créée. Cette VM a la variable d'environnement définie pour utiliser Cloud SWP.

Depuis Cloud Shell :

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

Exécutez quelques requêtes Web pour valider la fonctionnalité. Nous avons besoin de l'indicateur "--proxy-insecure" car nous avons créé un certificat autosigné pour cet atelier :

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

Résultat attendu :

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>

Comme vous pouvez le voir, la demande a été "acceptée". Nous nous attendons à voir une redirection 301, car le site Web redirige vers https://www.google.com.

L'exécution de la commande suivante fournit des journaux détaillés sur la connexion :

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

Voici quelques exemples de résultats pour afficher les détails de la connexion au proxy, les certificats et la destination.

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!
...

N'hésitez pas à essayer d'autres domaines .com pour vérifier le fonctionnement.

Essayons maintenant d'autres domaines non .com pour vérifier le comportement de blocage par défaut :

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

Résultat attendu :

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

De même, examinez la journalisation détaillée des sorties et vérifiez que Cloud SWP bloque ce trafic :

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

N'hésitez pas à essayer d'autres domaines pour vérifier le comportement.

Quittez la session SSH vers "clienta" et établissez une nouvelle connexion SSH vers "clientb".

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

Exécutez quelques commandes curl pour vérifier le comportement :

curl https://google.com

La VM clientb devrait fonctionner comme prévu :

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>

Tester sur un domaine .org :

curl https://wikipedia.org

Cela fonctionne comme prévu, car clientb n'utilise pas 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>

Testez l'envoi de trafic de manière explicite via Cloud SWP :

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

Nous constatons que ce trafic est refusé par la règle 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

Comme vous l'avez vérifié, le trafic utilisant Cloud SWP est appliqué à la stratégie de sécurité configurée. Le trafic destiné à .com est autorisé, et toutes les autres destinations sont refusées.

Quittez clientb.

14. Mettre à jour une règle de stratégie de sécurité de passerelle pour ApplicationMatching

Modifions la règle pour qu'elle corresponde aux détails au niveau de l'application. Nous allons créer une règle pour examiner le chemin de la requête et l'autoriser uniquement s'il correspond à 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

Nous pouvons maintenant associer la règle mise à jour à la stratégie de sécurité de la passerelle :

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

15. Tester la règle ApplicationMatcher

Connectez-vous en SSH à une VM de calcul client. Cette VM a la variable d'environnement définie pour utiliser Cloud SWP.

Depuis Cloud Shell :

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

Exécutez quelques requêtes Web pour valider la fonctionnalité. Nous avons besoin de l'indicateur "--proxy-insecure" car nous avons créé un certificat autosigné pour cet atelier :

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

Notez que cette requête échouera alors qu'elle fonctionnait auparavant.

Access denied

Tout chemin d'accès à une requête autre que "index.html" doit être bloqué avec un code 403. N'hésitez pas à tester davantage cette fonctionnalité.

Modifiez la requête pour inclure le chemin d'accès /index.html.

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

Cette requête devrait aboutir :

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>

Nous nous attendons à voir une redirection 301, car le site Web redirige vers http://www.google.com/index.html.

Notez qu'il s'agit d'une requête HTTP. Vous devrez ensuite activer SWP pour bénéficier des fonctionnalités d'inspection TLS.

Exécutez ensuite la même requête, mais sur TLS :

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

Résultat attendu :

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

Cette requête devrait échouer, car SWP n'est pas configuré pour inspecter le protocole TLS et ne peut pas évaluer le chemin par rapport à la règle applicationMatcher.

Quittez clenta.

16. Activer l'inspection TLS

Sans inspection TLS, applicationMatcher ne correspondra pas au trafic HTTPS.

"applicationMatcher" permet de filtrer les éléments suivants :

  • Carte des en-têtes de requête
  • Mode de requête
  • Demander à devenir hôte
  • Chemin de requête
  • Requête
  • Schéma de la requête
  • URL complète de la demande
  • Demander l'user-agent

Créer un compte de service

Ce compte de service sera autorisé à générer des certificats pour l'inspection TLS SWP.

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

Vérifier que CAS est activé

gcloud services enable privateca.googleapis.com

Créer un pool d'autorités de certification

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

Créer une autorité de certification racine

Autorité de certification utilisée pour la signature des certificats.

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

Créer un fichier de règles d'émission de certificats

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

Créer un fichier YAML d'inspection 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

Créer une règle d'inspection TLS

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

Mettre à jour le pool d'autorités de certification pour utiliser la règle d'émission de certificat

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

Octroyer des autorisations

Cela permet à votre compte de service d'utiliser le pool d'autorités de certification pour générer des certificats.

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

Mettre à jour le fichier YAML de la règle pour inclure l'inspection 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

Exécutez la commande pour appliquer la règle mise à jour.

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

Mettre à jour les règles pour inclure l'inspection TLS

Ensuite, spécifiez les règles pour lesquelles l'inspection TLS doit être activée à l'aide de l'indicateur "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

Exécutez la commande pour appliquer la règle modifiée.

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

17. Tester l'inspection TLS

Connectez-vous en SSH à une VM de calcul client. Cette VM a la variable d'environnement définie pour utiliser Cloud SWP.

Depuis Cloud Shell :

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

Exécutez la requête Web précédente pour vérifier si SWP effectue une inspection TLS afin de récupérer le chemin d'accès.

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

Cette fois, l'opération devrait aboutir, car SWP peut évaluer ApplicationMatcher.

Résultat attendu :

<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>

Nous avons correctement configuré Cloud SWP pour inspecter le protocole TLS et évaluer la logique applicationMatcher.

Quittez clienta.

18. Étapes de nettoyage

Dans Cloud Shell, supprimez la passerelle SWP, la règle de sécurité, les certificats, les instances, Cloud NAT et 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

Supprimez les sous-réseaux, les règles de pare-feu et les 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. Félicitations !

Bravo ! Vous avez terminé cet atelier de programmation. Vous avez configuré et déployé Cloud Secure Web Proxy sur Google Cloud.

Points abordés

  • Proxy Web sécurisé Cloud et ses avantages