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



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

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

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 :

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


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.

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.

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.

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.

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.

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.

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



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

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.

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.

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

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

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

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.