Exercice : Créer et gérer des groupes de sécurité réseau

Effectué

En tant qu’architecte de solution au sein de l’entreprise de fabrication, vous voulez à présent commencer à déplacer l’application ERP et les serveurs de base de données vers Azure. Dans un premier temps, vous testez votre plan de sécurité réseau sur deux de vos serveurs.

Dans cette unité, vous allez configurer un groupe de sécurité réseau et des règles de sécurité pour limiter le trafic réseau à des serveurs spécifiques. Vous souhaitez que votre serveur d’applications puisse se connecter à votre serveur de base de données via HTTP. Vous ne souhaitez pas que le serveur de base de données puisse utiliser le protocole HTTP pour se connecter au serveur d’applications.

Diagram of exercise scenario network security groups.

Créer un réseau virtuel et un groupe de sécurité réseau

Tout d’abord, vous allez créer le réseau virtuel et les sous-réseaux pour vos ressources serveur. Vous créez ensuite un groupe de sécurité réseau.

  1. Dans Azure Cloud Shell, exécutez la commande suivante pour attribuer le groupe de ressources de bac à sable à la variable rg :

    rg="<rgn>[sandbox resource group name]</rgn>"
    
  2. Pour créer le réseau virtuel ERP-servers et le sous-réseau Applications, exécutez la commande suivante dans Cloud Shell :

    az network vnet create \
        --resource-group $rg \
        --name ERP-servers \
        --address-prefixes 10.0.0.0/16 \
        --subnet-name Applications \
        --subnet-prefixes 10.0.0.0/24
    
  3. Pour créer le sous-réseau Databases, exécutez la commande suivante dans Cloud Shell :

    az network vnet subnet create \
        --resource-group $rg \
        --vnet-name ERP-servers \
        --address-prefixes 10.0.1.0/24 \
        --name Databases
    
  4. Pour créer le groupe de sécurité réseau ERP-SERVERS-NSG, exécutez la commande suivante dans Cloud Shell :

    az network nsg create \
        --resource-group $rg \
        --name ERP-SERVERS-NSG
    

Créer des machines virtuelles exécutant Ubuntu

Ensuite, vous allez créer deux machines virtuelles appelées AppServer et DataServer. Vous déployez AppServer sur le sous-réseau Applications et DataServer sur le sous-réseau Databases. Ajoutez les interfaces réseau de machine virtuelle au groupe de sécurité réseau ERP-SERVERS-NSG. Ensuite, pour tester votre groupe de sécurité réseau, utilisez ces machines virtuelles.

  1. Pour générer la machine virtuelle AppServer, exécutez la commande suivante dans Cloud Shell. Pour le compte d’administrateur, remplacez <password> par un mot de passe complexe.

    wget -N https://raw.githubusercontent.com/MicrosoftDocs/mslearn-secure-and-isolate-with-nsg-and-service-endpoints/master/cloud-init.yml && \
    az vm create \
        --resource-group $rg \
        --name AppServer \
        --vnet-name ERP-servers \
        --subnet Applications \
        --nsg ERP-SERVERS-NSG \
        --image Ubuntu2204 \
        --size Standard_DS1_v2 \
         --generate-ssh-keys \
        --admin-username azureuser \
        --custom-data cloud-init.yml \
        --no-wait \
        --admin-password <password>
    
  2. Pour générer la machine virtuelle DataServer, exécutez la commande suivante dans Cloud Shell. Pour le compte d’administrateur, remplacez <password> par un mot de passe complexe.

    az vm create \
        --resource-group $rg \
        --name DataServer \
        --vnet-name ERP-servers \
        --subnet Databases \
        --nsg ERP-SERVERS-NSG \
        --size Standard_DS1_v2 \
        --image Ubuntu2204 \
        --generate-ssh-keys \
        --admin-username azureuser \
        --custom-data cloud-init.yml \
         --no-wait \
        --admin-password <password>
    
  3. Plusieurs minutes peuvent être nécessaires pour que les machines virtuelles soient dans un état En cours d’exécution. Pour vérifier que les machines virtuelles sont en cours d’exécution, exécutez la commande suivante dans Cloud Shell :

    az vm list \
        --resource-group $rg \
        --show-details \
        --query "[*].{Name:name, Provisioned:provisioningState, Power:powerState}" \
        --output table
    

    Une fois vos machines virtuelles créées, vous devez voir la sortie suivante :

    Name        Provisioned    Power
    ----------  -------------  ----------
    AppServer   Succeeded      VM running
    DataServer  Succeeded      VM running
    

Vérifier la connectivité par défaut

À présent, essayez d’ouvrir une session Secure Shell (SSH) pour chaque machine virtuelle. N’oubliez pas que, jusqu’à présent, vous avez déployé un groupe de sécurité réseau avec les règles par défaut.

  1. Pour vous connecter à vos machines virtuelles, utilisez SSH directement depuis Cloud Shell. Pour ce faire, vous avez besoin des adresses IP publiques qui ont été attribuées à vos machines virtuelles. Pour lister les adresses IP que vous allez utiliser pour vous connecter aux machines virtuelles, exécutez la commande suivante dans Cloud Shell :

    az vm list \
        --resource-group $rg \
        --show-details \
        --query "[*].{Name:name, PrivateIP:privateIps, PublicIP:publicIps}" \
        --output table
    
  2. Pour simplifier la connexion à vos machines virtuelles pendant le reste de cet exercice, attribuez les adresses IP publiques à des variables. Pour enregistrer les adresses IP publiques de AppServer et de DataServer dans des variables, exécutez la commande suivante dans Cloud Shell :

    APPSERVERIP="$(az vm list-ip-addresses \
                     --resource-group $rg \
                     --name AppServer \
                     --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
                     --output tsv)"
    
    DATASERVERIP="$(az vm list-ip-addresses \
                     --resource-group $rg \
                     --name DataServer \
                     --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
                     --output tsv)"
    
  3. Pour vérifier si vous pouvez vous connecter à votre machine virtuelle AppServer, exécutez la commande suivante dans Cloud Shell :

    ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
    

    Vous obtenez un message Connection timed out.

  4. Pour vérifier si vous pouvez vous connecter à votre machine virtuelle DataServer, exécutez la commande suivante dans Cloud Shell :

    ssh azureuser@$DATASERVERIP -o ConnectTimeout=5
    

    Vous obtenez le même message d’échec de connexion.

N’oubliez pas que les règles par défaut refusent tout trafic entrant vers un réseau virtuel, sauf si ce trafic provient du même réseau virtuel. La règle Refuser tout trafic entrant a bloqué les connexions SSH entrantes que vous avez tentées.

Trafic entrant

Nom Priorité IP Source IP de destination Accès
Autoriser le trafic entrant du réseau virtuel 65 000 VIRTUAL_NETWORK VIRTUAL_NETWORK Autoriser
Refuser tout trafic entrant 65 500 * * Refuser

Créer une règle de sécurité pour SSH

Comme vous le savez maintenant, les règles par défaut dans votre groupe de sécurité réseau ERP-SERVERS-NSG incluent une règle Refuser tout trafic entrant. Vous allez maintenant ajouter une règle afin de pouvoir utiliser SSH pour vous connecter à AppServer et DataServer.

  1. Afin de créer une règle de sécurité de trafic entrant pour activer l’accès SSH, exécutez la commande suivante dans Cloud Shell :

    az network nsg rule create \
        --resource-group $rg \
        --nsg-name ERP-SERVERS-NSG \
        --name AllowSSHRule \
        --direction Inbound \
        --priority 100 \
        --source-address-prefixes '*' \
        --source-port-ranges '*' \
        --destination-address-prefixes '*' \
        --destination-port-ranges 22 \
        --access Allow \
        --protocol Tcp \
        --description "Allow inbound SSH"
    
  2. Pour vérifier si vous pouvez maintenant vous connecter à votre machine virtuelle AppServer, exécutez la commande suivante dans Cloud Shell :

    ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
    

    La règle de groupe de sécurité réseau peut prendre une minute ou deux pour entrer en vigueur. Si vous recevez un message d’échec de connexion, patientez un instant, puis réessayez.

  3. Vous devez maintenant être en mesure de vous connecter. Quand le message Are you sure you want to continue connecting (yes/no)? apparaît, entrez yes.

  4. Entrez le mot de passe que vous avez défini lors de la création de la machine virtuelle.

  5. Pour fermer la session AppServer, entrez exit.

  6. Pour vérifier si vous pouvez maintenant vous connecter à votre machine virtuelle DataServer, exécutez la commande suivante dans Cloud Shell :

    ssh azureuser@$DATASERVERIP -o ConnectTimeout=5
    
  7. Vous devez maintenant être en mesure de vous connecter. Quand le message Are you sure you want to continue connecting (yes/no)? apparaît, entrez yes.

  8. Entrez le mot de passe que vous avez défini lors de la création de la machine virtuelle.

  9. Pour fermer la session DataServer, entrez exit.

Créer une règle de sécurité pour empêcher l’accès web

Ajoutez maintenant une règle afin que AppServer puisse communiquer avec DataServer via HTTP, tout en empêchant DataServer de communiquer avec AppServer via HTTP. Voici les adresses IP internes de ces serveurs :

Nom du serveur Adresse IP
AppServer 10.0.0.4
DataServer 10.0.1.4
  1. Pour créer une règle de sécurité de trafic entrant afin de refuser l’accès HTTP sur le port 80, exécutez la commande suivante dans Cloud Shell :

    az network nsg rule create \
        --resource-group $rg \
        --nsg-name ERP-SERVERS-NSG \
        --name httpRule \
        --direction Inbound \
        --priority 150 \
        --source-address-prefixes 10.0.1.4 \
        --source-port-ranges '*' \
        --destination-address-prefixes 10.0.0.4 \
        --destination-port-ranges 80 \
        --access Deny \
        --protocol Tcp \
        --description "Deny from DataServer to AppServer on port 80"
    

Tester la connectivité HTTP entre les machines virtuelles

Dans cette section, vous allez vérifier si votre nouvelle règle fonctionne. AppServer doit être en mesure de communiquer avec DataServer via HTTP. DataServer ne doit pas être en mesure de communiquer avec AppServer via HTTP.

  1. Pour vous connecter à votre machine virtuelle AppServer, exécutez la commande suivante dans Cloud Shell. Vérifiez si AppServer peut communiquer avec DataServer via HTTP.

    ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'
    
  2. Entrez le mot de passe que vous avez défini lors de la création de la machine virtuelle.

  3. La réponse doit inclure un message 200 OK.

  4. Pour vous connecter à votre machine virtuelle DataServer, exécutez la commande suivante dans Cloud Shell. Vérifiez si DataServer peut communiquer avec AppServer via HTTP.

    ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'
    
  5. Entrez le mot de passe que vous avez défini lors de la création de la machine virtuelle.

  6. L’opération doit échouer, car vous avez bloqué l’accès via le port 80. Après quelques minutes, vous devriez obtenir un message Connection timed out. Pour arrêter la commande avant l’expiration, appuyez sur Ctrl+C.

Déployer un groupe de sécurité d’application

Ensuite, créez un groupe de sécurité d’application pour les serveurs de base de données afin que tous les serveurs de ce groupe puissent se voir attribuer les mêmes paramètres. Vous envisagez de déployer d’autres serveurs de base de données et souhaitez empêcher ces serveurs d’accéder aux serveurs d’applications via HTTP. En attribuant des sources dans le groupe de sécurité d’application, vous n’avez pas besoin de gérer manuellement une liste d’adresses IP dans le groupe de sécurité réseau. À la place, vous attribuez au groupe de sécurité d’application les interfaces réseau des machines virtuelles que vous souhaitez gérer.

Diagram of exercise scenario app security groups.

  1. Pour créer un groupe de sécurité d’application appelé ERP-DB-SERVERS-ASG, exécutez la commande suivante dans Cloud Shell :

    az network asg create \
        --resource-group $rg \
        --name ERP-DB-SERVERS-ASG
    
  2. Pour associer DataServer au groupe de sécurité d’application, exécutez la commande suivante dans Cloud Shell :

    az network nic ip-config update \
        --resource-group $rg \
        --application-security-groups ERP-DB-SERVERS-ASG \
        --name ipconfigDataServer \
        --nic-name DataServerVMNic \
        --vnet-name ERP-servers \
        --subnet Databases
    
  3. Pour mettre à jour la règle HTTP dans le groupe de sécurité réseau ERP-SERVERS-NSG, exécutez la commande suivante dans Cloud Shell. Vous devez mentionner le groupe de sécurité d’application ERP-DB-Servers.

    az network nsg rule update \
        --resource-group $rg \
        --nsg-name ERP-SERVERS-NSG \
        --name httpRule \
        --direction Inbound \
        --priority 150 \
        --source-address-prefixes "" \
        --source-port-ranges '*' \
        --source-asgs ERP-DB-SERVERS-ASG \
        --destination-address-prefixes 10.0.0.4 \
        --destination-port-ranges 80 \
        --access Deny \
        --protocol Tcp \
        --description "Deny from DataServer to AppServer on port 80 using application security group"
    

Tester la règle de sécurité HTTP mise à jour

  1. Pour vous connecter à votre machine virtuelle AppServer, exécutez la commande suivante dans Cloud Shell. Vérifiez si AppServer peut communiquer avec DataServer via HTTP.

    ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'
    
  2. Entrez le mot de passe que vous avez défini lors de la création de la machine virtuelle.

  3. Comme auparavant, la réponse doit inclure un message 200 OK. Les paramètres de groupe de sécurité d’application peuvent prendre une minute ou deux pour entrer en vigueur. Si vous ne recevez pas le message 200 OK, patientez une minute et réessayez.

  4. Pour vous connecter à votre machine virtuelle DataServer, exécutez la commande suivante dans Cloud Shell. Vérifiez si DataServer peut communiquer avec AppServer via HTTP.

    ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'
    
  5. Entrez le mot de passe que vous avez défini lors de la création de la machine virtuelle.

  6. Comme auparavant, l’opération doit échouer, car vous avez bloqué l’accès via le port 80. Après quelques minutes, vous devriez obtenir un message Connection timed out. Pour arrêter la commande avant l’expiration, appuyez sur Ctrl+C.

Vous avez maintenant vérifié que la règle de votre groupe de sécurité réseau fonctionne à l’aide d’un groupe de sécurité d’application, comme lorsque vous avez utilisé une adresse IP source. Si nous avions ajouté des serveurs de données, il nous suffirait de les intégrer au groupe ERP-DB-SERVERS-ASG pour qu’ils disposent de la sécurité réseau appropriée.