Azure Batch プール内の計算ノードへのリモート アクセスを構成する
構成されている場合、ネットワークに接続しているノード ユーザーが Batch プールの計算ノードに外部接続することを許可できます。 たとえば、リモート デスクトップ (RDP) を利用し、ポート 3389 で Windows プールの計算ノードに接続できます。 同様に、既定では、Secure Shell (SSH) を利用し、ポート 22 で Linux プールの計算ノードに接続できます。
ヒント
API バージョン 2024-07-01
の時点で、Batch では SSH と RDP の一般的なリモート アクセス ポートを自動的にマップしなくなりました。
API バージョン 2024-07-01
以降で作成されたプールを使用して Batch 計算ノードへのリモート アクセスを許可する場合は、そのようなアクセスを有効にするためにプール エンドポイント構成を手動で構成する必要があります。
お使いの環境では、外部アクセス設定または Batch プールで必要なその他のポートを有効にするか、制限するか、無効にする必要がある場合があります。 Batch API を利用して PoolEndpointConfiguration プロパティを設定することで、これらの設定を変更できます。
Batch プール エンドポイントの構成
エンドポイントは、フロントエンド ポートの 1 つまたは複数のネットワーク アドレス変換 (NAT) プールから構成されます。 NAT プールと計算ノードの Batch プールを混同しないでください。 プールの計算ノードの既定の接続設定をオーバーライドするように各 NAT プールを設定します。
各 NAT プール構成には、1 つまたは複数のネットワーク セキュリティ グループ (NSG) ルールが含まれています。 各 NSG ルールによって、エンドポイントへの特定のネットワーク トラフィックが許可されるか、拒否されます。 すべてのトラフィック、サービス タグ ("Internet" など) で識別されるトラフィック、特定の IP アドレスやサブネットから届くトラフィックを許可または拒否するように選択できます。
考慮事項
- プール エンドポイント構成は、プールのネットワーク構成の一部です。 ネットワーク構成には任意で、Azure 仮想ネットワークにプールを参加させる設定を含めることができます。 仮想ネットワークにプールを設定した場合、仮想ネットワークのアドレス設定を使用する NSG ルールを作成できます。
- NAT プールを構成するとき、複数の NSG ルールを構成できます。 ルールは優先順位に従ってチェックされます。 いずれかのルールが適用されると、それ以上はルールの一致テストが行われなくなります。
例:特定の IP アドレスからの RDP トラフィックを許可する
次の C# スニペットは、Windows プールの計算ノードに RDP エンドポイントを構成し、IP アドレス 198.168.100.7 からのみ RDP アクセスを許可する方法を示しています。 2 つ目の 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 からのみアクセスを許可する方法を確認できます。 2 つ目の 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 のポートのフロントエンド プールが使用されます。
Note
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 PoolEndpointConfiguration(new InboundNatPool[]
{
new InboundNatPool("RDP", InboundEndpointProtocol.Tcp, 3389, 60000, 60099, new NetworkSecurityGroupRule[]
{
new NetworkSecurityGroupRule(162, NetworkSecurityGroupRuleAccess.Deny, "*"),
})
})
};
}
}
例:インターネットからのすべての SSH トラフィックを拒否する
次の Python コードの抜粋からは、Linux プールの計算ノードに SSH エンドポイントを構成し、すべてのインターネット トラフィックを拒否する方法を確認できます。 このエンドポイントでは、範囲 4000 - 4100 のポートのフロントエンド プールが使用されます。
Note
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'
)
]
)
]
)
)
次のステップ
- Batch サービスのワークフローと主要なリソース (プール、ノード、ジョブ、タスクなど) について学習します。
- Azure の NSG ルールに関する詳細については、「ネットワーク セキュリティ グループによるネットワーク トラフィックのフィルタリング」をご覧ください。