共用方式為


設定 Azure Batch 集區中計算節點的遠端訪問

如果已設定,您可以允許 具有網路連線的節點使用者 ,以外部連線到 Batch 集區中的計算節點。 例如,使用者可利用遠端桌面 (RDP) 透過連接埠 3389 連線至 Windows 集區中的計算節點。 同樣地,根據預設,使用者可利用安全殼層 (SSH) 透過連接埠 22 連線至 Linux 集區中的計算節點。

提示

從 API 版本 2024-07-01起,Batch 不再自動對應 SSH 和 RDP 的通用遠端存取埠。 如果您想要允許使用 API 版本或更新版本 2024-07-01 所建立集區的 Batch 計算節點進行遠端訪問,則必須手動設定集區端點組態以啟用這類存取。

在您的環境中,您可能需要在 Batch 集區上啟用、限制或停用外部存取設定或任何其他您想要的埠。 您可以使用 Batch API 設定 PoolEndpointConfiguration 屬性,來修改這些設定。

Batch 集區端點設定

端點設定包含一或多個前端連接埠的網路位址轉譯 (NAT) 集區。 請勿將 NAT 集區與計算節點的 Batch 集區混淆。 您可以設定每個 NAT 集區,以覆寫集區計算節點上的預設連線設定。

每個 NAT 集區設定都包含一或多個網路安全性群組 (NSG) 規則。 每個 NSG 規則皆會允許或拒絕通往端點的特定網路流量。 您可選擇要允許或拒絕所有流量、以服務標籤 (例如「網際網路」) 識別的網路流量,或來自特定 IP 位址或子網路的流量。

考量

  • 集區端點設定是屬於集區網路設定的一部分。 網路設定可選擇性地包含將集區加入 Azure 虛擬網路的設定。 如果您在虛擬網路中設定集區,您可以建立使用虛擬網路中位址設定的 NSG 規則。
  • 當您設定 NAT 集區時,可以設定多個 NSG 規則。 系統會依照規則優先順序檢查規則。 一旦套用規則,就不會再測試規則是否符合。

範例:允許來自特定 IP 位址的 RDP 流量

下列 C# 代碼段示範如何在 Windows 集區中的計算節點上設定 RDP 端點,只允許從 IP 位址 198.168.100.7 存取 RDP。 第二個 NSG 規則會拒絕不符合 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.168.100.7"),
                    new NetworkSecurityGroupRule(180, NetworkSecurityGroupRuleAccess.Deny, "*")
                })
            })
        };
    }
}

範例:允許來自特定子網路的 SSH 流量

下列 Python 程式碼片段示範如何設定 Linux 集區中計算節點上的 SSH 端點,以只允許來自子網路 192.168.1.0/24 的存取。 第二個 NSG 規則會拒絕不符合子網的流量。

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='*'
                        )
                    ]
                )
                ]
            )
        )

範例:拒絕所有 RDP 流量

下列 C# 程式碼片段示範如何設定 Windows 集區中計算節點上的 RDP 端點,以拒絕所有網路流量。 此端點使用範圍 60000 - 60099 的連接埠前端集區。

注意

從 Batch API 版本 2024-07-01起,通常與 RDP 相關聯的埠 3389 預設不會再對應。 如果使用此 API 版本或更新版本建立的 Batch 集區不需要從因特網存取,就不再需要建立明確拒絕規則。 您可能仍然需要指定明確的拒絕規則,以限制來自其他來源的存取。

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, "*"),
                })
            })
        };
    }
}

範例:拒絕來自網際網路的所有 SSH 流量

下列 Python 程式碼片段示範如何設定 Linux 集區中計算節點上的 SSH 端點,以拒絕所有網際網路流量。 此端點使用範圍 4000 - 4100 的連接埠前端集區。

注意

從 Batch API 版本 2024-07-01起,通常與 SSH 相關聯的埠 22 預設不會再對應。 如果使用此 API 版本或更新版本建立的 Batch 集區不需要從因特網存取,就不再需要建立明確拒絕規則。 您可能仍然需要指定明確的拒絕規則,以限制來自其他來源的存取。

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'
                        )
                    ]
                )
                ]
            )
        )

下一步