Configurer ou désactiver l’accès à distance aux nœuds de calcul dans un pool Azure Batch

Par défaut, Batch autorise les utilisateurs du nœud disposant d’une connectivité réseau à se connecter en externe à un nœud de calcul dans un pool Batch. Par exemple, un utilisateur peut se connecter en utilisant un protocole RDP (Remote Desktop Protocol) sur le port 3389 pour un nœud de calcul dans un pool Windows. De même, par défaut, un utilisateur peut se connecter à un nœud de calcul dans un pool Linux en utilisant un protocole SSH (Secure Shell) sur le port 22.

Dans votre environnement, vous devrez peut-être limiter ou désactiver ces paramètres d’accès externe par défaut. Vous pouvez modifier ces paramètres en utilisant les API Batch pour définir la propriété PoolEndpointConfiguration.

À propos de la configuration de point de terminaison de pool

La configuration de point de terminaison se compose d’un ou plusieurs pools de traduction d’adresses réseau (NAT) de ports frontaux. (Ne confondez pas un pool NAT avec le pool Batch des nœuds de calcul.) Vous configurez chaque pool NAT pour remplacer les paramètres de connexion par défaut sur les nœuds de calcul du pool.

Chaque configuration de pool NAT inclut les règles d’un ou plusieurs groupes de sécurité réseau (NSG). Chaque règle NSG autorise ou refuse certains trafics réseau au point de terminaison. Vous pouvez choisir d’autoriser ou de refuser tout le trafic, le trafic identifié par une balise de service (par exemple, « Internet »), ou le trafic provenant d’adresses IP ou de sous-réseaux spécifiques.

Considérations

  • La configuration de point de terminaison de pool fait partie de la configuration réseau du pool. La configuration réseau peut éventuellement inclure des paramètres permettant de joindre le pool à un réseau virtuel Azure. Si vous configurez le pool dans un réseau virtuel, vous pouvez créer des règles NSG qui utilisent des paramètres d’adresse dans le réseau virtuel.
  • Vous pouvez configurer plusieurs règles NSG lorsque vous configurez un pool NAT. Les règles sont vérifiées dans l’ordre de priorité. Une fois qu’une règle s’applique, plus aucune correspondance de règle n’est testée.

Exemple : refuser tout le trafic RDP

L’extrait de code C# suivant montre comment configurer le point de terminaison RDP sur les nœuds de calcul dans un pool Windows afin de refuser tout le trafic réseau. Le point de terminaison utilise un pool frontal de ports dans la plage 60000 - 60099.

using Microsoft.Azure.Batch;
using Microsoft.Azure.Batch.Common;

namespace AzureBatch
{
    public void SetPortsPool()
    {   
        pool.NetworkConfiguration = new NetworkConfiguration
        {
            EndpointConfiguration = new PoolEndpointConfiguratio(new InboundNatPool[]
            {
              new InboundNatPool("RDP", InboundEndpointProtocol.Tcp, 3389, 60000, 60099, new NetworkSecurityGroupRule[]
                {
                    new NetworkSecurityGroupRule(162, NetworkSecurityGroupRuleAccess.Deny, "*"),
                })
            })    
        };
    }
}

Exemple : refuser tout le trafic SSH provenant d’Internet

L’extrait de code Python suivant montre comment configurer le point de terminaison SSH sur les nœuds de calcul dans un pool Linux afin de refuser tout le trafic Internet. Le point de terminaison utilise un pool frontal de ports dans la plage 4000 - 4100.

from azure.batch import models as batchmodels

class AzureBatch(object):
    def set_ports_pool(self, **kwargs):
        pool.network_configuration = batchmodels.NetworkConfiguration(
            endpoint_configuration=batchmodels.PoolEndpointConfiguration(
                inbound_nat_pools=[batchmodels.InboundNATPool(
                    name='SSH',
                    protocol='tcp',
                    backend_port=22,
                    frontend_port_range_start=4000,
                    frontend_port_range_end=4100,
                    network_security_group_rules=[
                        batchmodels.NetworkSecurityGroupRule(
                            priority=170,
                            access=batchmodels.NetworkSecurityGroupRuleAccess.deny,
                            source_address_prefix='Internet'
                        )
                    ]
                )
                ]
            )
        )

Exemple : autoriser le trafic RDP à partir d’une adresse IP spécifique

L’extrait de code C# suivant montre comment configurer le point de terminaison RDP sur les nœuds de calcul dans un pool Windows afin d’autoriser l’accès RDP uniquement à partir de l’adresse IP 198.51.100.7. La deuxième règle NSG refuse le trafic qui ne correspond pas à l’adresse IP.

using Microsoft.Azure.Batch;
using Microsoft.Azure.Batch.Common;

namespace AzureBatch
{
    public void SetPortsPool()
    {
        pool.NetworkConfiguration = new NetworkConfiguration
        {
            EndpointConfiguration = new PoolEndpointConfiguration(new InboundNatPool[]
            {
                new InboundNatPool("RDP", InboundEndpointProtocol.Tcp, 3389, 7500, 8000, new NetworkSecurityGroupRule[]
                {   
                    new NetworkSecurityGroupRule(179, NetworkSecurityGroupRuleAccess.Allow, "198.51.100.7"),
                    new NetworkSecurityGroupRule(180, NetworkSecurityGroupRuleAccess.Deny, "*")
                })
            })    
        };
    }
}

Exemple : autoriser le trafic SSH à partir d’un sous-réseau spécifique

L’extrait de code Python suivant montre comment configurer le point de terminaison SSH sur les nœuds de calcul dans un pool Linux afin d’autoriser l’accès uniquement à partir du sous-réseau 192.168.1.0/24. La deuxième règle NSG refuse le trafic qui ne correspond pas au sous-réseau.

from azure.batch import models as batchmodels

class AzureBatch(object):
    def set_ports_pool(self, **kwargs):
        pool.network_configuration = batchmodels.NetworkConfiguration(
            endpoint_configuration=batchmodels.PoolEndpointConfiguration(
                inbound_nat_pools=[batchmodels.InboundNATPool(
                    name='SSH',
                    protocol='tcp',
                    backend_port=22,
                    frontend_port_range_start=4000,
                    frontend_port_range_end=4100,
                    network_security_group_rules=[
                        batchmodels.NetworkSecurityGroupRule(
                            priority=170,
                            access='allow',
                            source_address_prefix='192.168.1.0/24'
                        ),
                        batchmodels.NetworkSecurityGroupRule(
                            priority=175,
                            access='deny',
                            source_address_prefix='*'
                        )
                    ]
                )
                ]
            )
        )

Étapes suivantes