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). Vous configurez vos clients pour utiliser explicitement Cloud SWP en tant que proxy. Les requêtes Web peuvent provenir des sources suivantes:

  • Instances de machines virtuelles (VM)
  • Conteneurs
  • Environnement sans serveur utilisant 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 d'élaborer des règles flexibles et précises basées sur des identités et des applications Web cloud-first.

Avantages

Vous trouverez ci-dessous quelques exemples d'avantages que Cloud SWP peut offrir à une entreprise:

Migration vers Google Cloud

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

Accès à des services Web externes de confiance

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

Accès surveillé aux services Web non approuvés

Vous pouvez utiliser Cloud SWP pour fournir un accès surveillé à des services Web non approuvés. Cloud SWP identifie le trafic non conforme à la stratégie et le consigne dans Cloud Logging (Logging). Vous pouvez ainsi surveiller l'utilisation d'Internet, détecter les menaces qui pèsent sur votre réseau et réagir en conséquence.

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

Vous pouvez utiliser Cloud SWP afin de fournir des règles précises pour les API Google. Par exemple, vous pouvez définir des stratégies au niveau du bucket ou 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 des connexions TCP pour le compte du client.

Autoscaling des proxys Cloud SWP Envoy

Accepte l'ajustement automatique de la taille et de la capacité du pool de proxy Envoy dans une région, ce qui permet de bénéficier de performances constantes lors des périodes de forte demande pour un coût minimal.

Règles d'accès de sortie modulaires

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

  • Identité de la 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 par TLS. Cloud SWP est également compatible avec HTTP/S CONNECT pour les connexions TLS de bout en bout déclenchées par le client vers le serveur de destination.

Intégration simplifiée de Cloud NAT

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

Vous pouvez également utiliser des adresses IP publiques statiques manuelles si vous souhaitez 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 associées à Cloud SWP. Ils enregistrent également des métriques et des journaux de transactions pour les requêtes traitées par le proxy.

Inspection TLS

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

  • Une intégration étroite avec Certificate Authority Service (CAS), un dépôt hautement disponible et évolutif pour les autorités de certification privées.
  • Possibilité d'utiliser votre propre racine de confiance si nécessaire. Vous pouvez également utiliser une autorité de certification racine existante pour signer des autorités de certification subordonnées détenues par des autorités de certification. Si vous le souhaitez, vous pouvez générer un nouveau certificat racine dans les autorités de certification.
  • Critères de déchiffrement précis à l'aide de SessionMatcher et ApplicationMatcher dans les règles de stratégie du proxy Web sécurisé. Ces critères incluent 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. Plusieurs règles de proxy Web sécurisé peuvent également partager une même règle d'inspection TLS.

Points abordés

  • Découvrez comment déployer et gérer Cloud SWP.

Prérequis

  • Vous disposez des connaissances nécessaires sur le déploiement d'instances et la configuration des composants réseau.
  • Connaissances de la configuration d'un 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 de Cloud SWP, comme illustré dans le schéma ci-dessous.

1264e30caa136365.png

Dans cet atelier, nous avons 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 à Cloud SWP. Il utilisera plutôt Cloud NAT pour le trafic 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 autoriser IAP à 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 rendre accessibles à l'aide d'IAP.
  • Autorise le trafic entrant provenant de la plage d'adresses IP 35.235.240.0/20. Cette plage contient toutes les adresses IP utilisées par IAP 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éer 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 dans le langage CEL (Common Expression Language). Dans cet atelier, vous allez utiliser 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 lier 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 interrompre le trafic des charges 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 le référencer dans la stratégie 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 Compute

Étant donné que Cloud SWP est un proxy explicite, nous devons spécifier explicitement l'adresse IP du proxy pour le trafic des charges de travail. La variable d'environnement sera définie pour le clientA de l'instance Compute. ClientB ne fonctionne 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

Se connecter en SSH à "clienta" Compute Engine récemment créée. La variable d'environnement de cette VM est définie pour utiliser Cloud SWP.

Depuis Cloud Shell:

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

Exécuter des requêtes Web pour valider le fonctionnement L'utilisation d'un proxy non sécurisé est obligatoire, 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 constater, la requête a abouti. Il est normal que nous voyions 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 contenant des détails sur la connexion:

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

Mise en surbrillance de certaines sorties pour montrer 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 en vérifier le bon fonctionnement.

Essayons maintenant avec d'autres domaines autres que .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 et confirmez 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 en vérifier le comportement.

Quittez la session SSH pour "clienta". et établir une nouvelle connexion SSH à « clientb ».

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

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

curl https://google.com

Cela devrait fonctionner comme prévu sur la 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>

Test par rapport à un domaine d'organisation:

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 explicite de trafic via Cloud SWP:

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

Nous constatons que ce trafic est refusé via 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 exploitant Cloud SWP est appliqué à la règle de sécurité configurée. Le trafic destiné à .com est autorisé, et toutes les autres destinations sont refusées.

Quittez le clientb.

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

Mettons à jour 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 lier 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. Test de la règle ApplicationMatcher

Connectez-vous en SSH à la VM de calcul cliente. La variable d'environnement de cette VM est définie pour utiliser Cloud SWP.

Depuis Cloud Shell:

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

Exécuter des requêtes Web pour valider le fonctionnement L'utilisation d'un proxy non sécurisé est obligatoire, car nous avons créé un certificat autosigné pour cet atelier:

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

Notez que cette requête échouera lorsqu'elle aura précédemment été transmise.

Access denied

Tout chemin de requête autre que "index.html" devrait être bloqué par une erreur 403. N'hésitez pas à tester cela de plus près.

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

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

Cette demande doit être traitée:

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>

Il est normal qu'une redirection 301 s'affiche, car le site Web redirige l'utilisateur vers l'adresse http://www.google.com/index.html.

Notez qu'il s'agit d'une requête HTTP. Ensuite, vous devrez activer SWP pour disposer de fonctionnalités d'inspection TLS.

Exécutez ensuite la même requête, mais via 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 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 peut pas établir de correspondance avec le trafic HTTPS.

&quot;applicationMatcher&quot; permet de filtrer les éléments suivants:

  • Mappage des en-têtes de requête
  • Méthode de la requête
  • Demander l'hôte
  • Chemin de requête
  • Requête de requête
  • Schéma de requête
  • URL de requête complète
  • User-agent de requête

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

Assurez-vous 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 du certificat.

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 stratégie 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 stratégie d'émission de certificats

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 des règles 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 "Appliquer la stratégie 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

Spécifiez ensuite les règles pour lesquelles l'inspection TLS doit être définie sur "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 mise à jour

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 à la VM de calcul cliente. La variable d'environnement de cette VM est 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 pour récupérer le chemin d'accès

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

Cette fois-ci, l'opération devrait fonctionner, 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 terminé la configuration de Cloud SWP pour inspecter TLS et évaluer la logique applicationMatcher.

Quittez le clienta.

18. Étapes de nettoyage

Dans Cloud Shell, supprimez la passerelle SWP, la stratégie 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 micrologiciel 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 terminé de configurer et de déployer le proxy Web sécurisé Cloud sur Google Cloud.

Points abordés

  • Cloud SWP et ses avantages