Défendre la mise en cache périphérique avec Cloud Armor

1. Introduction

Les règles de sécurité périphérique Google Cloud Armor vous permettent de limiter l'accès aux objets mis en cache dans Google Cloud CDN et Google Cloud Storage. Elles vous permettent, entre autres, d'empêcher l'accès à des objets des buckets de stockage à partir de zones géographiques restreintes ou de vous assurer que votre distribution de médias filtre les contenus selon les zones géographiques pour lesquelles vous disposez d'une licence.

Dans cet atelier, vous allez créer un bucket GCS, y importer une image, l'associer à un équilibreur de charge, puis activer Cloud CDN et des règles de sécurité périphérique pour ce bucket.

Points abordés

  • Configurer un bucket Cloud Storage pour des contenus pouvant être mis en cache
  • Créer une règle de sécurité périphérique pour protéger les contenus
  • Valider que la règle de sécurité périphérique fonctionne comme prévu

Prérequis

  • Connaissances de base sur la gestion de réseaux et le protocole HTTP
  • Connaissances de base de la ligne de commande Unix/Linux

2. Préparation

Configuration de l'environnement au rythme de chacun

  1. Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères qui n'est pas utilisée par les API Google, et que vous pouvez modifier à tout moment.
  • L'ID du projet doit être unique sur l'ensemble des projets Google Cloud et doit être immuable (vous ne pouvez pas le modifier une fois que vous l'avez défini). Cloud Console génère automatiquement une chaîne unique dont la composition importe peu, en général. Dans la plupart des ateliers de programmation, vous devrez référencer l'ID du projet (généralement identifié comme PROJECT_ID), donc s'il ne vous convient pas, générez-en un autre au hasard ou définissez le vôtre, puis vérifiez s'il est disponible. Il est ensuite "gelé" une fois le projet créé.
  • La troisième valeur est le numéro de projet, utilisé par certaines API. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
  1. Vous devez ensuite activer la facturation dans Cloud Console afin d'utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour arrêter les ressources afin d'éviter qu'elles ne vous soient facturées après ce tutoriel, suivez les instructions de nettoyage indiquées à la fin de l'atelier. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300$.

Démarrer Cloud Shell

Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons nous servir de Google Cloud Shell pour cet atelier de programmation, un environnement de ligne de commande exécuté dans le cloud.

Depuis la console GCP, cliquez sur l'icône Cloud Shell de la barre d'outils située dans l'angle supérieur droit :

bce75f34b2c53987.png

Le provisionnement et la connexion à l'environnement prennent quelques instants seulement. Une fois l'opération terminée, le résultat devrait ressembler à ceci :

f6ef2b5f13479f3a.png

Cette machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et l'authentification. Vous pouvez réaliser toutes les activités de cet atelier dans un simple navigateur.

Avant de commencer

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

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
PROJECT_ID=[YOUR-PROJECT-NAME]
echo $PROJECT_ID

Activer les API

Activez tous les services nécessaires.

gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com
gcloud services enable monitoring.googleapis.com

3. Créer un bucket Cloud Storage

Dans Cloud Console, accédez au menu de navigation > Cloud Storage > Navigateur. Cliquez sur CRÉER UN BUCKET :

baf3d3c74282ecba.png

Règles pour les noms de buckets :

  • N'incluez aucune information sensible dans le nom des buckets, car leur espace de noms est global et public.
  • Les noms de buckets ne doivent contenir que des lettres minuscules, des chiffres, des tirets (-), des traits de soulignement (_) et des points (.). Les noms contenant des points doivent être validés.
  • Les noms de buckets doivent commencer et se terminer par un chiffre ou une lettre.
  • Les noms de buckets doivent compter entre 3 et 63 caractères. Ceux qui comportent des points peuvent contenir jusqu'à 222 caractères, mais chaque composant séparé par un point ne peut pas posséder plus de 63 caractères.
  • Les noms de buckets ne peuvent pas correspondre à une adresse IP en notation décimale à point (par exemple, 192.168.5.4).
  • Les noms de buckets ne peuvent pas commencer par le préfixe "goog".
  • Les noms de buckets ne peuvent pas contenir "google" ni des termes semblables à "google".
  • De plus, pour la conformité DNS et la compatibilité future, vous ne devez pas utiliser de traits de soulignement (_) ni un point adjacent à un autre point ou à un tiret. Par exemple, ".." ou "-." ou ".-" ne sont pas autorisés dans les noms DNS.

Cliquez sur CONTINUER.

Type d'emplacement : région

Emplacement : choisissez une région éloignée de votre emplacement.

Cliquez sur CONTINUER.

Classe de stockage par défaut : Standard

Cliquez sur CONTINUER.

Décochez la case Appliquer la protection contre l'accès public sur ce bucket sous "Empêcher l'accès public".

Sous "Contrôle des accès", sélectionnez Ultraprécis.

Cliquez sur CONTINUER.

Une fois votre bucket configuré, cliquez sur CRÉER :

Voilà ! Vous venez de créer un bucket Cloud Storage.

4. Importer un objet dans un bucket

À présent, vous devez importer un objet dans un bucket.

Téléchargez tout d'abord cette image dans une instance temporaire dans Cloud Shell. Dans l'exemple ci-dessous, nous utilisons un logo Google figurant sur la page d'accueil de Google.

Depuis Cloud Shell

wget --output-document google.png https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png

Exécutez la commande gsutil cp pour importer l'image depuis l'emplacement où vous l'avez enregistrée dans le bucket que vous avez créé :

Depuis Cloud Shell

gsutil cp google.png gs://YOUR-BUCKET-NAME

Supprimez maintenant l'image téléchargée :

Depuis Cloud Shell

rm google.png

Recherchez votre objet, puis cliquez sur les trois points à droite et définissez les autorisations sur "Public".

821aad82d8633922.png

30a975d3ad22d33d.png

5. Créer un équilibreur de charge

Nous allons maintenant créer un équilibreur de charge HTTP.

Accédez à Mise en réseau >> Services réseau >> Équilibrage de charge >> Créer un équilibreur de charge >> Équilibreur de charge HTTP >> Internet vers mes VM >> Équilibreur de charge HTTP(S) classique.

Commencez par créer un nom pour l'équilibreur de charge que vous allez créer.

Créer un bucket backend

Créez un bucket backend (celui que vous venez de créer), puis sélectionnez "CDN activé" et "Mettre en cache le contenu statique". Cliquez sur Créer.

ed392a56538d499e.png

Créer les règles d'hôte et de chemin d'accès

Accédez à "Règles d'hôte et de chemin d'accès" sur la gauche. Nous utiliserons une règle simple d'hôte/chemin d'accès et enverrons n'importe quelle requête au bucket.

7c1a664e0d1f15b0.png

Créer la configuration de l'interface

Sélectionnez la configuration de l'interface. Pour la configuration de l'interface, nous utiliserons HTTP (HTTPS fonctionnera également si vous possédez un certificat) et une adresse IP éphémère, et nous nous assurerons d'avoir sélectionné le niveau de service réseau Premium.

2597a5e63d618622.png

Cliquez sur "Créer".

Obtenir l'adresse IP de l'équilibreur de charge

Obtenez l'adresse IP de l'équilibreur de charge depuis la console en cliquant sur le nom de l'équilibreur de charge dans la liste des équilibreurs de charge de votre projet.

9b757362d806e835.png

Interroger l'équilibreur de charge

Patientez quelques minutes, puis essayez d'interroger l'équilibreur de charge pour l'objet que vous avez importé. Vous aurez besoin de l'adresse IP de l'équilibreur de charge, ainsi que du nom de l'image. La commande est structurée comme suit :

Depuis le terminal

curl -svo /dev/null http://LOAD_BALANCER_IP/google.png

Sortie

armanrye-macbookpro% curl -svo /dev/null http://34.98.81.123/google.png
*   Trying 34.98.81.123...
* TCP_NODELAY set
* Connected to 34.98.81.123 (34.98.81.123) port 80 (#0)
> GET /google.png HTTP/1.1
> Host: YOUR_IP
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< X-GUploader-UploadID: ADPycdtoILI76KVsvBvdVGvSfzaxys1m3zYqCepBrmJxAI48ni24cWCRIdNu-53PX3DS6iycxp6xwFbMpwtcHHZQUQmEBxAgng
< Expires: Mon, 13 Dec 2021 22:58:26 GMT
< Date: Mon, 13 Dec 2021 21:58:26 GMT
< Cache-Control: public, max-age=3600
< Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT
< ETag: "8f9327db2597fa57d2f42b4a6c5a9855"
< x-goog-generation: 1639431957957903
< x-goog-metageneration: 2
< x-goog-stored-content-encoding: identity
< x-goog-stored-content-length: 5969
< Content-Type: image/png
< x-goog-hash: crc32c=TeiHTA==
< x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ==
< x-goog-storage-class: STANDARD
< Accept-Ranges: bytes
< Content-Length: 5969
< Server: UploadServer

Vérifiez que votre contenu est bien diffusé depuis le CDN par le biais de Cloud CDN ou de la surveillance de l'équilibrage de charge. Vous devriez être en mesure d'atteindre un taux d'accès au cache proche de 100 %. Si vous devez exécuter quelques requêtes, vous pouvez procéder comme suit :

Depuis le terminal

#for i in `seq 1 50`; do curl http://%loadbalncer-IP%/google.png; done

Confirmer le contenu diffusé par Cloud CDN

Vérifiez que vous diffusez le trafic depuis le CDN en accédant à Services réseau >> CDN.

a52d0ba4c084aa05.png

6. Supprimer l'objet de GCS

Maintenant que le cache est rempli, supprimons l'objet du bucket pour confirmer que nous appliquons la règle au cache et non au backend.

Accédez à Cloud Storage >> %nom du bucket% >> objets.

Sélectionnez l'image et supprimez-la.

a1cc1bb9a0ff41df.png

7. Créer une règle de sécurité de périphérie pour votre cache CDN

Accédez à Sécurité réseau >> Cloud Armor, puis cliquez sur "Créer une règle".

Sélectionnez les éléments suivants :

Type de règle : règle de sécurité de périphérie

Action par défaut : Refuser

7a12374be33026fd.png

b7c4efc091272358.png

77ddbcddd07b65d2.png

Appliquez la stratégie à votre bucket de backend.

8. Valider la règle de sécurité périphérique

Maintenant que nous avons créé une règle de sécurité périphérique devant notre bucket de backend, vérifions qu'elle fonctionne bien comme prévu.

Vérifier la stratégie de sécurité

Au bout de quelques minutes, vous pourrez vérifier que la règle Cloud Armor est bien en cours d'exécution. Depuis la ligne de commande, l'exécution de la commande suivante vous renverra une erreur 403.

Depuis le terminal

curl -svo /dev/null http://LOAD_BALANCER_IP/google.png

Sortie

curl -svo /dev/null http://34.98.81.123/google.png
*   Trying 34.98.81.123...
* TCP_NODELAY set
* Connected to 34.98.81.123 (34.98.81.123) port 80 (#0)
> GET /google.png HTTP/1.1
> Host: YOUR_IP
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 403 Forbidden
< X-GUploader-UploadID: ADPycdtS6FtJOGIsiWYDrAAE8VFeQuNutcvbGoQe2t8EZxsuspVtmCjyiTv_P3CNktroHMOGFXkTCfG-Jj-rUO60ZGPpEbpqcw
< Content-Type: application/xml; charset=UTF-8
< Content-Length: 111
< Date: Mon, 13 Dec 2021 23:09:35 GMT
< Expires: Mon, 13 Dec 2021 23:09:35 GMT
< Cache-Control: private, max-age=0
< Server: UploadServer
<

Examiner les journaux

Ensuite, vous pouvez vérifier les journaux pour constater que la règle de sécurité périphérique est appliquée. Accédez à Opérations >> Journalisation >> Explorateur de journaux.

Saisissez l'extrait ci-dessous dans la requête, puis cliquez sur "Exécuter".

14972af5ae6c182a.png

resource.type:(http_load_balancer) AND jsonPayload.enforcedEdgeSecurityPolicy.name:(%SECURITY_POLICY_NAME%)

Notez le code de réponse 403 et la règle de sécurité appliquée.

cddc48ca93ad79ca.png

Supprimer la règle de sécurité

Supprimez la règle de sécurité et envoyez une requête pour l'objet à partir du cache.

Accédez à Sécurité réseau >> Cloud Armor >> %NOM DE LA RÈGLE% >> cibles et supprimez le bucket cible.

350655729a89eb33.png

Confirmer la suppression de la règle

Au bout de quelques minutes, envoyez une autre requête curl à la ressource dans le bucket de stockage. Cette fois, vous obtiendrez une réponse 200.

Depuis le terminal

curl -svo /dev/null http://LOAD_BALANCER_IP/google.png

Sortie

armanrye-macbookpro% curl -svo /dev/null http://34.98.81.123/google.png

*   Trying 34.98.81.123...
* TCP_NODELAY set
* Connected to 34.98.81.123 (34.98.81.123) port 80 (#0)
> GET /google.png HTTP/1.1
> Host: YOUR_IP
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< X-GUploader-UploadID: ADPycdtI7f49P3MSuZSZ8vl6RwfwmnIDJ59EeSKp7UPvLPawdaiRHXiNWLtseQTxUxceWOvSLvpYmT3pWVkV4qeIP7M
< Date: Mon, 13 Dec 2021 23:06:46 GMT
< Last-Modified: Mon, 13 Dec 2021 21:45:57 GMT
< ETag: "8f9327db2597fa57d2f42b4a6c5a9855"
< x-goog-generation: 1639431957957903
< x-goog-metageneration: 2
< x-goog-stored-content-encoding: identity
< x-goog-stored-content-length: 5969
< Content-Type: image/png
< x-goog-hash: crc32c=TeiHTA==
< x-goog-hash: md5=j5Mn2yWX+lfS9CtKbFqYVQ==
< x-goog-storage-class: STANDARD
< Accept-Ranges: bytes
< Content-Length: 5969
< Server: UploadServer
< Age: 1621
< Cache-Control: public,max-age=3600
<
{ [775 bytes data]
* Connection #0 to host 34.98.81.123 left intact
* Closing connection 0

Félicitations ! Vous avez terminé cet atelier sur les règles de sécurité périphérique Cloud Armor.

©2020 Google LLC Tous droits réservés. Google et le logo Google sont des marques de Google LLC. Tous les autres noms d'entreprises et de produits peuvent être des marques des entreprises auxquelles ils sont associés.

9. Supprimer les fichiers de l'atelier

Accédez à Sécurité réseau >> Cloud Armor >> %NOM DE LA RÈGLE%, puis sélectionnez "Supprimer".

21eefb5f375e8fee.png

Accédez à Cloud Storage, sélectionnez le bucket que vous avez créé, puis cliquez sur "Supprimer".

ef2fa8d45c1d3452.png

Accédez à Mise en réseau >> Services réseau >> Équilibrage de charge. Sélectionnez l'équilibreur de charge que vous avez créé, puis cliquez sur "Supprimer".

ee2e78c10f4104eb.png

10. Félicitations !

Vous avez terminé l'atelier de programmation "Protéger le cache périphérique avec Cloud Armor" !

Points abordés

  • Configurer un bucket Cloud Storage et un équilibreur de charge cloud associé
  • Créer une règle de sécurité périphérique Cloud Armor
  • Comment vérifier que la règle de sécurité périphérique fonctionne comme prévu

Étapes suivantes

  • Essayez de configurer une stratégie de sécurité Edge avec un accès au cache à partir d'une ressource Compute Engine.