Távoli hozzáférés konfigurálása számítási csomópontokhoz egy Azure Batch-készletben

Ha konfigurálva van, engedélyezheti, hogy a hálózati kapcsolattal rendelkező csomópont-felhasználók külsőleg csatlakozzanak egy Batch-készlet számítási csomóponthoz. Egy felhasználó például csatlakozhat távoli asztallal (RDP) a 3389-s porton egy Számítási csomóponthoz egy Windows-készletben. Hasonlóképpen, a felhasználó alapértelmezés szerint csatlakozhat a Secure Shell (SSH) által a 22-s porton egy Linux-készlet számítási csomópontjához.

Feljegyzés

Az API 2024-07-01 verziótól kezdve (és az API-verziótól függetlenül 2025. november 30. után létrehozott összes készlet esetén) a Batch már nem képez le automatikusan általános távelérési portokat az SSH-hoz és az RDP-hez. Ha API-verzió 2024-07-01 vagy újabb (és 2025. november 30. után) segítségével létrehozott készletekkel kívánja engedélyezni a Batch számítási csomópontokhoz való távoli hozzáférést, akkor manuálisan kell konfigurálnia a készletvégpont beállításait az ilyen hozzáférés engedélyezéséhez.

Előfordulhat, hogy a környezetben engedélyeznie, korlátoznia vagy letiltania kell a külső hozzáférési beállításokat, illetve a Batch-készletben használni kívánt egyéb portokat. Ezeket a beállításokat a Batch API-k használatával módosíthatja a NetworkConfiguration tulajdonság beállításához.

Batch pool végpontbeállítása

A végpontkonfiguráció az előtérbeli portok egy vagy több hálózati címfordítási (NAT) készletéből áll. Ne keverje össze a NAT-készletet a számítási csomópontok Batch-készletével. Minden NAT-készletet úgy állított be, hogy felülbírálja a készlet számítási csomópontja alapértelmezett kapcsolati beállításait.

Minden NAT-készletkonfiguráció egy vagy több hálózati biztonsági csoport (NSG) szabályt tartalmaz. Minden NSG-szabály engedélyezi vagy tagadja bizonyos hálózati forgalmat a végpont felé. Dönthet úgy, hogy engedélyezi vagy letiltja az összes forgalmat, a szolgáltatáscímke által azonosított forgalmat (például internetet), vagy adott IP-címekről vagy alhálózatokról érkező forgalmat.

Megfontolások

  • A készlet végpontkonfigurációja a készlet hálózati konfigurációjának része. A hálózati konfiguráció opcionálisan tartalmazhat beállításokat a készlet Azure-beli virtuális hálózathoz való csatlakoztatásához. Ha egy virtuális hálózaton állítja be a virtuális készletet, létrehozhat olyan NSG-szabályokat, amelyek a virtuális hálózat címbeállításait használják.
  • NAT-készlet konfigurálásakor több NSG-szabályt is konfigurálhat. A szabályokat prioritási sorrendben ellenőrzik. Amint egy szabály érvényesül, több szabályt már nem vizsgálunk az egyezés érdekében.

Példa: RDP-forgalom engedélyezése egy adott IP-címről

A következő C#-kódrészlet bemutatja, hogyan konfigurálhatja az RDP-végpontot a Windows-készlet számítási csomópontjain, hogy csak a 198.168.100.7 IP-címről engedélyezze az RDP-hozzáférést. A második NSG-szabály tagadja az IP-címnek nem megfelelő forgalmat.

ArmClient armClient = new ArmClient(new DefaultAzureCredential());

        ResourceIdentifier batchAccountResourceId =
            BatchAccountResource.CreateResourceIdentifier("subscriptionId", "resourceGroupName", "accountName");
        BatchAccountResource batchAccount = armClient.GetBatchAccountResource(batchAccountResourceId);

        BatchAccountPoolCollection poolCollection = batchAccount.GetBatchAccountPools();

        BatchAccountPoolData poolData = new BatchAccountPoolData()
        {
            VmSize = "Standard_D2_v2",
            DeploymentConfiguration = new BatchDeploymentConfiguration()
            {
                VmConfiguration = new BatchVmConfiguration(
                    imageReference: new BatchImageReference()
                    {
                        Publisher = "canonical",
                        Offer = "0001-com-ubuntu-server-jammy",
                        Sku = "22_04-lts",
                        Version = "latest"
                    },
                    nodeAgentSkuId: "batch.node.ubuntu 22.04")
            },
            ScaleSettings = new BatchAccountPoolScaleSettings()
            {
                FixedScale = new BatchAccountFixedScaleSettings() { TargetDedicatedNodes = 2 }
            },
            NetworkConfiguration = new BatchNetworkConfiguration()
            {
                EndpointInboundNatPools =
                {
                    new BatchInboundNatPool(
                        name: "RDP",
                        protocol: BatchInboundEndpointProtocol.Tcp,
                        backendPort: 3389,
                        frontendPortRangeStart: 7500,
                        frontendPortRangeEnd: 8000)
                    {
                        NetworkSecurityGroupRules =
                        {
                            new BatchNetworkSecurityGroupRule(
                                priority: 179,
                                access: BatchNetworkSecurityGroupRuleAccess.Allow,
                                sourceAddressPrefix: "198.168.100.7"),
                            new BatchNetworkSecurityGroupRule(
                                priority: 180,
                                access: BatchNetworkSecurityGroupRuleAccess.Deny,
                                sourceAddressPrefix: "*")
                        }
                    }
                }
            }
        };

        ArmOperation<BatchAccountPoolResource> pool = await poolCollection.CreateOrUpdateAsync(
            WaitUntil.Completed, "myPool", poolData);

Példa: SSH-forgalom engedélyezése egy adott alhálózatról

Az alábbi Python-kódrészlet bemutatja, hogyan konfigurálhatja az SSH-végpontot a Linux-készlet számítási csomópontjain, hogy csak a 192.168.1.0/24 alhálózatról engedélyezze a hozzáférést. A második NSG-szabály letiltja az alhálózatnak nem megfelelő forgalmat.

from azure.batch import models

class AzureBatch(object):
    def set_ports_pool(self, **kwargs):
        pool.network_configuration = models.NetworkConfiguration(
            endpoint_configuration=models.BatchPoolEndpointConfiguration(
                inbound_nat_pools=[models.BatchInboundNatPool(
                    name='SSH',
                    protocol=models.InboundEndpointProtocol.TCP,
                    backend_port=22,
                    frontend_port_range_start=4000,
                    frontend_port_range_end=4100,
                    network_security_group_rules=[
                        models.NetworkSecurityGroupRule(
                            priority=170,
                            access=models.NetworkSecurityGroupRuleAccess.ALLOW,
                            source_address_prefix='192.168.1.0/24'
                        ),
                        models.NetworkSecurityGroupRule(
                            priority=175,
                            access=models.NetworkSecurityGroupRuleAccess.DENY,
                            source_address_prefix='*'
                        )
                    ]
                )
                ]
            )
        )
    ),
    network_configuration=batchmodels.NetworkConfiguration(
        endpoint_configuration=batchmodels.PoolEndpointConfiguration(
            inbound_nat_pools=[batchmodels.InboundNatPool(
                name='SSH',
                protocol=batchmodels.InboundEndpointProtocol.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.ALLOW,
                        source_address_prefix='192.168.1.0/24'
                    ),
                    batchmodels.NetworkSecurityGroupRule(
                        priority=175,
                        access=batchmodels.NetworkSecurityGroupRuleAccess.DENY,
                        source_address_prefix='*'
                    )
                ]
            )]
        )
    )
)

result = client.pool.create(
    resource_group_name=resource_group_name,
    account_name=account_name,
    pool_name=pool_name,
    parameters=pool_parameters
)

print(f"Pool '{result.name}' created successfully.")

Példa: Az összes RDP-forgalom megtagadása

Az alábbi C#-kódrészlet bemutatja, hogyan konfigurálhatja az RDP-végpontot a Windows-készlet számítási csomópontjain az összes hálózati forgalom letiltására. A végpont a portok előtérkészletét használja a 60000 és 60099 közötti tartományban.

Feljegyzés

A Batch API-verziótól 2024-07-01számítva a 3389-es port, amely általában az RDP-hez van társítva, alapértelmezés szerint nem lesz leképezve. Az explicit megtagadási szabály létrehozása már nem szükséges, ha nincs szükség hozzáférésre az internetről az ezzel az API-verzióval vagy újabb verzióval létrehozott Batch-készletekhez. Előfordulhat, hogy a más forrásokból való hozzáférés korlátozásához explicit megtagadási szabályokat kell megadnia.

ArmClient armClient = new ArmClient(new DefaultAzureCredential());

        ResourceIdentifier batchAccountResourceId =
            BatchAccountResource.CreateResourceIdentifier("subscriptionId", "resourceGroupName", "accountName");
        BatchAccountResource batchAccount = armClient.GetBatchAccountResource(batchAccountResourceId);

        BatchAccountPoolCollection poolCollection = batchAccount.GetBatchAccountPools();

        BatchAccountPoolData poolData = new BatchAccountPoolData()
        {
            VmSize = "Standard_D2_v2",
            DeploymentConfiguration = new BatchDeploymentConfiguration()
            {
                VmConfiguration = new BatchVmConfiguration(
                    imageReference: new BatchImageReference()
                    {
                        Publisher = "canonical",
                        Offer = "0001-com-ubuntu-server-jammy",
                        Sku = "22_04-lts",
                        Version = "latest"
                    },
                    nodeAgentSkuId: "batch.node.ubuntu 22.04")
            },
            ScaleSettings = new BatchAccountPoolScaleSettings()
            {
                FixedScale = new BatchAccountFixedScaleSettings() { TargetDedicatedNodes = 2 }
            },
            NetworkConfiguration = new BatchNetworkConfiguration()
            {
                EndpointInboundNatPools =
                {
                    new BatchInboundNatPool(
                        name: "RDP",
                        protocol: BatchInboundEndpointProtocol.Tcp,
                        backendPort: 3389,
                        frontendPortRangeStart: 60000,
                        frontendPortRangeEnd: 60099)
                    {
                        NetworkSecurityGroupRules =
                        {
                            new BatchNetworkSecurityGroupRule(
                                priority: 162,
                                access: BatchNetworkSecurityGroupRuleAccess.Deny,
                                sourceAddressPrefix: "*")
                        }
                    }
                }
            }
        };

        ArmOperation<BatchAccountPoolResource> pool = await poolCollection.CreateOrUpdateAsync(
            WaitUntil.Completed, "myPool", poolData);

Példa: Az összes SSH-forgalom megtagadása az internetről

A következő Python-kódrészlet bemutatja, hogyan konfigurálhatja az SSH-végpontot a Linux-készlet számítási csomópontjain az összes internetes forgalom letiltására. A végpont a 4000–4100 tartományban lévő portok előtérkészletét használja.

Feljegyzés

A Batch API 2024-07-01 verziójától kezdődően a 22-es port, amely általában az SSH-hoz van társítva, nincs többé alapértelmezés szerint leképezve. Az explicit megtagadási szabály létrehozása már nem szükséges, ha nincs szükség hozzáférésre az internetről az ezzel az API-verzióval vagy újabb verzióval létrehozott Batch-készletekhez. Előfordulhat, hogy a más forrásokból való hozzáférés korlátozásához explicit megtagadási szabályokat kell megadnia.

from azure.batch import models

class AzureBatch(object):
    def set_ports_pool(self, **kwargs):
        pool.network_configuration = models.NetworkConfiguration(
            endpoint_configuration=models.BatchPoolEndpointConfiguration(
                inbound_nat_pools=[models.BatchInboundNatPool(
                    name='SSH',
                    protocol=models.InboundEndpointProtocol.TCP,
                    backend_port=22,
                    frontend_port_range_start=4000,
                    frontend_port_range_end=4100,
                    network_security_group_rules=[
                        models.NetworkSecurityGroupRule(
                            priority=170,
                            access=models.NetworkSecurityGroupRuleAccess.DENY,
                            source_address_prefix='Internet'
                        )
                    ]
                )
                ]
            )
        )
    ),
    network_configuration=batchmodels.NetworkConfiguration(
        endpoint_configuration=batchmodels.PoolEndpointConfiguration(
            inbound_nat_pools=[batchmodels.InboundNatPool(
                name='SSH',
                protocol=batchmodels.InboundEndpointProtocol.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'
                    )
                ]
            )]
        )
    )
)

result = client.pool.create(
    resource_group_name=resource_group_name,
    account_name=account_name,
    pool_name=pool_name,
    parameters=pool_parameters
)

print(f"Pool '{result.name}' created successfully.")

Következő lépések