VMM でポート ACL を管理する

System Center Virtual Machine Manager (VMM) では、Hyper-V ポートアクセス制御リスト (ACL) を一元的に構成および管理できます。 ポート ACL は、ネットワーク コントローラーで管理されるファブリックと、ネットワーク コントローラーで管理されていないネットワークの両方に対して構成できます。

  • ポート ACL は、レイヤー 2 のポート レベルでトラフィックをフィルター処理するルールのセットです。 VMM のポート ACL は、特定の VMM オブジェクトへのアクセスをフィルター処理します。 ネットワーク オブジェクトには、1 つ以上のポート ACL をアタッチすることはできません。
  • ACL にはルールが含まれており、任意の数のネットワーク オブジェクトにアタッチできます。 ルールなしで ACL を作成し、後でルールを追加できます。 各 ACL ルールは、1 つのポート ACL にのみ対応します。
  • ACL に複数のルールがある場合は、優先度に基づいて適用されます。 ルールが条件に一致し、適用された後、他のルールは処理されません。
  • グローバル設定ポート ACL は、インフラストラクチャ内のすべての VM 仮想ネットワーク アダプターに適用されます。 グローバル設定に個別のオブジェクトの種類はありません。 代わりに、グローバル設定ポート ACL が VMM 管理サーバーに接続されます。
  • ポート ACL の設定は、VMM の PowerShell コマンドレットを介してのみ公開され、VMM コンソールで構成することはできません。
  • ポート ACL は、次の場合に適用できます。
    • ネットワーク コントローラー展開の仮想サブネットとアダプター。
    • ネットワーク コントローラーによって管理されていないネットワーク内の仮想サブネット、ネットワーク アダプター、VM ネットワーク、および VMM 管理サーバー。

開始する前に

  • ネットワーク コントローラーによって管理されるオブジェクトに ACL を適用するには、 ManagedByNC フラグを使用し、 True に設定します。 True に設定されていない場合、ACL はネットワーク コントローラーによって管理されていないネットワーク オブジェクトにのみ適用されます。
  • ACL の種類は交換可能ではありません。 ManagedByNC false に設定された ACL を、ネットワーク コントローラーによって管理されるオブジェクトに適用することはできません。その逆も同様です。
  • これら 2 種類の ACL の主な違いは、ネットワーク コントローラーで管理されていないオブジェクトに ACL を適用した後、各ネットワーク アダプターを修復する必要がある点です。
  • 優先順位の範囲にも違いがあります。
    • Hyper-V ポート ACL (ネットワーク コントローラーによって管理されない) : 1 から 65535
    • SDN ポート ACL (ネットワーク コントローラーによって管理) : 1 から 64500
  • ポート ACL をグローバル設定にアタッチするには、完全な VMM 管理者アクセス許可が必要です。 ACL を VMM オブジェクト (VM ネットワーク、サブネット、仮想ネットワーク アダプター) にアタッチするには、VMM 管理者またはテナント管理者、またはセルフサービス ユーザーである必要があります。

サポートされていないシナリオ

サポートされていないシナリオの一覧を次に示します。

  • ACL が複数のインスタンスと共有されている場合は、1 つのインスタンスの個々のルールを管理します。 すべてのルールは、親 ACL 内で一元的に管理され、ACL がアタッチされている場所であればどこでも適用されます。
  • エンティティに複数の ACL をアタッチします。
  • Hyper-V 親パーティション (管理オペレーティング システム) 内の仮想ネットワーク アダプターにポート ACL を適用します。
  • IP レベルのプロトコル (TCP または UDP 以外) を含むポート ACL 規則を VMM で作成します。 他のプロトコルは引き続き Hyper-V によってネイティブにサポートされています。
  • ポート ACL を、論理ネットワーク、ネットワーク サイト (論理ネットワーク定義)、サブネット VLAN、サポート対象として言及されていないその他の VMM ネットワーク オブジェクトに適用します。

デプロイメントの手順

VMM PowerShell インターフェイスを使用して、次の操作を行います。

  1. ポート ACL と規則を定義します。

    • これらの規則は、Hyper-V サーバー上の仮想スイッチ ポートに拡張ポート ACL (VMNetworkAdapterExtendedAcl) として適用されます。 つまり、以前のバージョンの従来の Hyper-V ポート ACL (VMNetworkAdapterAcl) は VMM によって作成されないため、Windows Server 2012 R2 以降を実行しているホストにのみ適用できます。
    • この規則は、Hyper-V サーバー上の仮想スイッチ ポートに "拡張ポート ACL" (VMNetworkAdapterExtendedAcl) として適用されます。 つまり、VMM では以前のバージョンの従来の Hyper-V ポート ACL (VMNetworkAdapterAcl) が作成されないため、Windows Server 2016 以降を実行しているホストにのみ適用できます。
    • この規則は、Hyper-V サーバー上の仮想スイッチ ポート 目的のポート ACL (VMNetworkAdapterExtendedAcl) として適用されます。 つまり、VMM では以前のバージョンの従来の Hyper-V ポート ACL (VMNetworkAdapterAcl) が作成されないため、Windows Server 2019 以降を実行しているホストにのみ適用できます。
    • VMM で定義されているすべてのポート ACL 規則は、TCP に対してステートフルです。 ステートレス TCP ACL ルールを作成することはできません。
  2. グローバル設定にポート ACL をアタッチします。 これにより、すべての VM 仮想ネットワーク アダプターに ACL が適用されます。

  3. ポート ACL を VM ネットワーク、VM サブネット、または VM 仮想ネットワーク アダプターに接続します。

  4. ポート ACL 規則を管理します。

ポート ACL の作成

  1. VMM で PowerShell を開きます。

  2. New-SCPortACL コマンドレットを使用してポート ACL を作成します。

    New-SCPortACL [-Name] <String> [-Description <String>] [-JobVariable <String>] [-ManagedByNC] [-OnBehalfOfUser <String>] [-OnBehalfOfUserRole <UserRole>] [-Owner <String>] [-PROTipID <Guid>] [-RunAsynchronously] [-UserRole <UserRole>] [-VMMServer <ServerConnection>] [<CommonParameters>]
    

パラメーター

パラメーター 詳細
名前;形容 ポート ACL の名前と説明
JobVariable ジョブの進行状況を格納します
ManagedByNC オブジェクトがネットワーク コントローラーによって管理されるかどうかを指定します
OnBehalfOfUser/OnBehalfOfRole ユーザー名またはロールを使用してジョブを実行する
Owner 有効なドメイン ユーザー アカウントの形式で VMM オブジェクトの所有者を指定します。 例: Contoso\PattiFuller または PattiFuller@Contoso
ProTipID アクションをトリガーした ProTip の ID
RunAsychronously ジョブが非同期的に実行されるかどうかを示します
UserRole ユーザー ロールを指定します
VMMServer VMM サーバーを指定します
共通パラメーター 詳細情報

ネットワーク コントローラー "DemoACLManagedByNC" によって管理されるオブジェクトのポート ACL を作成します。

PS: C:\> New-SCPortACL -Name "DemoACLManagedByNC" -Description "PortACL Example Managed by NC" -ManagedByN

ネットワーク コントローラー "DemPortACL" によって管理されていないオブジェクトのポート ACL を作成します。

PS: C:\> New-SCPortACL -Name "DemoPortACL" -Description "Port ACL Example Non Managed by NC"

ポート ACL のポート ACL 規則を定義する

  1. VMM で PowerShell を開きます。

  2. New-SCPortACLRule コマンドレットを使用して 1 つ以上の規則を作成します。

    New-SCPortACLrule -PortACL <PortACL> -Name <string> [-Description <string>] -Type <Inbound | Outbound> -Action <Allow | Deny> -Priority <uint16> -Protocol <Tcp | Udp | Any> [-LocalAddressPrefix <string: IPAddress | IPSubnet>] [-LocalPortRange <string:X|X-Y|Any>] [-RemoteAddressPrefix <string: IPAddress | IPSubnet>] [-RemotePortRange <string:X|X-Y|Any>]
    

パラメーター

パラメーター 詳細
名前、説明 ルールの名前と説明
Type ACL が適用されるトラフィックの方向を指定します (受信または送信)
アクション ACL がトラフィックを許可またはブロックするかどうかを指定します (許可または拒否)
LocalAddressPrefix フィルター処理する必要があるトラフィックを識別するために使用される送信元 IP アドレスまたはサブネットを指定します
LocalPortRange トラフィックの識別に使用される送信元ポート範囲を指定します
RemoteAddressPrefix フィルター処理のトラフィックを識別するために使用する宛先 IP アドレスまたはサブネットを指定します。
RemotePortRange トラフィックを識別するために使用される接続先ポート範囲を指定します。
Protocol ルールが適用されるプロトコルを指定します
優先順位 ポート ACL でルールの優先順位を指定します。 ルールは順序に従って適用されます。 優先順位を 1 から 65535 の間で設定します。最も低い数値の優先度が最も高くなります。 ネットワーク コントローラーによって管理されるオブジェクトのポート ACL 規則は、100 以上に設定する必要があります。 ネットワーク コントローラーでは、100 未満の優先度はサポートされていません。

ポート ACL を作成し、$portACLにオブジェクトを格納します。

PS: C:\> $portACL = New-SCPortACL -Name "RDP ACL" -Description "Acl on RDP access"

リモート サブネットからの RDP アクセスを許可するポート ACL 規則を作成します。

PS: C:\> New-SCPortACLRule -Name "AllowRDPAccess" -PortACL $portACL -Description "Allow RDP Rule from a subnet" -Action Allow -Type Inbound -Priority 110 -Protocol Tcp -LocalPortRange 3389 -RemoteAddressPrefix 10.184.20.0/24

ACL 規則の優先順位を変更します。

PS: C:\> $portACLRule = Get-SCPortACLRule -Name "AllowRDPAccess" `` <br/><br/> `` PS: C:\> Set-SCPortACLRule -PortACLRule $portACLRule -Priority 220

最初のコマンドは、ポート ACL 規則 "AllowRDPAccess" を取得します。 2 番目のコマンドは、ルールの優先順位を 220 に変更します。

宛先アドレス範囲のポート ACL 規則と規則のプロトコルを変更します。

PS: C:\> $portACLRule = Get-SCPortACLRule -Name "AllowRDPAccess" `` <br/><br/> `` PS: C:\> Set-SCPortACLRule -PortACLRule $portACLRule -RemoteAddressPrefix 172.185.21.0/24 -Protocol Udp

最初のコマンドは、ルール AllowRDPAccess を取得します。 2 つ目は、プロトコルを UDP に変更し、宛先をサブネット 172.185.21.0/24 に設定します。

ポート ACL のアタッチとデタッチ

ポート ACL は、グローバル設定、VM ネットワーク、VM サブネット、仮想ネットワーク アダプターにアタッチできます。 グローバル設定に接続されているポート ACL は、既定ですべての VM 仮想ネットワーク アダプターに適用されます。

  1. VMM で PowerShell を開きます。

  2. Set-SCVMMServer コマンドレットを使用してポータル ACL をアタッチします。

    Set-SCVMMServer –VMMServer <VMMServer> [-PortACL <NetworkAccessControlList> | -RemovePortACL ]
    

パラメーター

パラメーター 詳細
VMM サーバー ポート ACL が適用されている VMM サーバーの名前
PortACL 必要に応じて、指定したポート ACL をグローバル設定にアタッチします

ACL をグローバル設定にアタッチします。

Set-SCVMMServer -VMMServer "VMM.Contoso.Local" -PortACL $acl`` <br/><br/> ExampleL: `` Set-SCVMMServer -VMMServer "VMM.Contoso.Local" -PortACL $acl

グローバル設定から ACL をデタッチします。

Set-SCVMMServer -VMMServer "VMM.Contoso.Local" -RemovePortACL

作成時に ACL を VM ネットワークにアタッチします。

New-SCVMNetwork [–PortACL <NetworkAccessControlList>] [rest of the parameters]

既存の VM ネットワークに ACL を接続します。

Set-SCVMNetwork -PortACL $acl`

作成時に ACL を VM サブネットにアタッチします。

New-SCVMSubnet [–PortACL <NetworkAccessControlList>] [rest of the parameters]

既存の VM サブネットに ACL をアタッチします。

Set-SCVMSubnet [–PortACL <NetworkAccessControlList> | -RemovePortACL] [rest of the parameters]

ポート ACL と規則を取得して表示する

  1. VMM で PowerShell を開きます。

  2. Get-SCPortACL コマンドレットを実行して、ポート ACL を取得して表示します。

    Get-SCPortACL [[-Name] <String> ] [-ID <Guid> ] [-OnBehalfOfUser <String> ] [-OnBehalfOfUserRole <UserRole> ] [-VMMServer <ServerConnection> ] [ <CommonParameters>]
    
  3. Get-SCPortACLRule を実行して、ルールを取得して表示します。

    Get-SCPortACLRule [-Name <String> ] [-ID <Guid> ] [-OnBehalfOfUser <String> ] [-OnBehalfOfUserRole <UserRole> ] [-PortACL <PortACL> ] [-VMMServer <ServerConnection> ] [ <CommonParameters>]
    

パラメーター

パラメーター 詳細
パラメーターなし すべての ACL を取得します
名前/ID 名前または GUID で取得する
OnBehalfOfUser/OnBehalfOfUserRole ユーザー名またはロールを使用して実行する
VMMServer 特定の VMM サーバーの ACL を取得する
共通パラメーター 詳細情報

特定の ACL を取得します。

    PS: C:> $portACL = Get-SCPortACL -Name "DemoPortACL"

特定の ACL の規則を取得します。

    PS: C:> Get-SCPortACLRule -Name "AllowRDPAccess"

ACL のすべてのルールを取得します。

    PS: C:> Get-SCPortACLRule -PortACL $portACL

ポート ACL と規則を変更する

  1. VMM で PowerShell を開きます。

  2. Set-SCPortACL コマンドレットを実行して、ポート ACL を変更します。

    Set-SCPortACL [-PortACL] <PortACL> [[-Description] <String>] [-JobVariable <String>] [-Name <String>] [-OnBehalfOfUser <String>] [-OnBehalfOfUserRole <UserRole>] [-PROTipID <Guid>] [-RunAsynchronously] [-VMMServer <ServerConnection>] [<CommonParameters>]
    
  3. Remove-SCPortACL を実行して ACL を削除します。

    Remove-SCPortACL [-PortACL] <PortACL> [-Confirm] [-JobVariable <String>] [-OnBehalfOfUser <String>] [-OnBehalfOfUserRole <UserRole>] [-PROTipID <Guid>] [-RunAsynchronously] [-VMMServer <ServerConnection>] [-WhatIf] [<CommonParameters>]
    

    パラメーター

パラメーター 詳細
名前/説明 ポート ACL の名前と説明
JobVariable ジョブの進行状況を格納します
OnBehalfOfUser/OnBehalfOfUserRole ユーザー名またはロールを使用して実行する
ProTipID アクションをトリガーした ProTip の ID
RunAsynchronously ジョブが非同期的に実行されるかどうかを示します
Confirm ジョブを実行する前のプロンプト
WhatIf コマンドを実行せずに何が起こるかを示します

ACL の説明を設定します。

PS: C:> $portACL = Get-SCPortACL -Name "DemoPortACL"
PS: C:> Set-SCPortACL -PortACL $portACL -Description "Port ACL Example Non Managed by Network Controller"

最初のコマンドレットは ACL を取得します。2 つ目は ACL の説明を設定します。

ACL を削除します。

PS: C:> $portACL = Get-SCPortACL -Name "DemoPortACL"
PS: C:> Remove-SCPortACL -PortACL $portACL

最初のコマンドレットは ACL を取得します。2 つ目は削除します。