Azure Policy を使用して Azure Virtual Network Manager で動的ネットワーク グループ メンバーシップを定義する

この記事では、Azure Policy の条件ステートメントを使用して、動的メンバーシップを持つネットワーク グループを作成する方法について説明します。 これらの条件付きのステートメントは、ドロップダウン メニューからパラメータと演算子を選択する基本エディターの使用で作成します。 また、既存のネットワーク グループの条件付きステートメントを更新するための詳細エディターの使用法も学習します。

Azure Policy は、リソースごとのガバナンスを大規模に実現できるようにするサービスです。 これは仮想ネットワークの明示的なリストではなく、グループ メンバーシップを定義する条件式を指定するために使用できます。 この条件は引き続きネットワーク グループを動的に制御し、ネットワーク マネージャーの操作を必要とせずに、条件の充足の変化に応じて仮想ネットワークがグループに自動的に参加および脱退できるようにします。

前提条件

パラメータと演算子

動的メンバーシップを持つ仮想ネットワークは、条件付きステートメントを使用して選択されます。 選択した仮想ネットワークをさらに絞り込む必要があるシナリオでは、ANDOR などの "論理演算子" を使用して、複数の条件付きステートメントを定義できます。

サポートされているパラメータのリスト:

パラメーター [詳細エディター] フィールド
名前 Name
ID Id
タグ tag['tagName']
サブスクリプション名 [subscription().Name]
サブスクリプション ID [subscription().Id]
サブスクリプションのタグ [subscription().tags['tagName']]
リソース グループ名 [resourceGroup().Name]
リソース グループ ID [resourceGroup().Id]
リソース グループのタグ [resourceGroup().tags['tagName']]

サポートされている演算子のリスト:

演算子 詳細エディター
Contains "contains": <>
含まない "notcontains": <>
含まれる "in": <>
含まれない "notin": <>
[等しい] "equals": <>
等しくない "notequals": <>
次のいずれかを含む "contains": <>
次のすべてを含む "contains": <>
次のいずれも含まない "notcontains": <>
Exists "exists": true
存在しない "exists": false

Note

Exists および Does not exist 演算子は、Tags パラメータでのみ使用されます。

基本エディター

サブスクリプションに以下の仮想ネットワークがあると仮定します。 各仮想ネットワークには、environment という名前のタグが関連付けられ、それぞれの値に production または test が付いています。

Virtual Network タグ名 タグ値
myVNet01-EastUS 環境 production
myVNet01-WestUS 環境 production
myVNet02-WestUS 環境 テスト
myVNet03-WestUS 環境 テスト

タグに environment = production のキーと値のペアを持つ仮想ネットワークだけを選択する必要があります。 基本エディターの使用で条件付きステートメントを作成するために、新しいネットワーク グループを作成する必要があります。

  1. Azure Virtual Network Manager インスタンスに移動し、[設定][ネットワーク グループ] を選択します。 次に、 [+ 作成] を選択して、新しいネットワーク グループを作成します。

  2. ネットワーク グループの名前とオプションの説明を入力し、[追加] を選択します。

  3. 一覧からネットワーク グループを選択し、[Azure Policy の作成] を選択します。

  4. ポリシー名を入力し、変更が必要な場合を除き、[スコープ] の選択はそのままにします。

  5. [基準] で、[パラメータ] のドロップダウンから [タグ] を選択してから、[演算子] のドロップダウンから [キーと値のペア] を選択します。

  6. [条件] に「environment」と「production」を入力し、[プレビュー リソース] を選択します。 myVNet01-EastUS と myVNet01-WestUS がリストに表示されます。

    キーと値のペアを持つ Azure Policy ウィンドウ設定タグの作成のスクリーンショット。

  7. [閉じる][保存] の順に選択します。

  8. 数分後、ネットワーク グループを選択し、[設定][グループ メンバー] を選択します。 myVNet01-WestUS と myVNet01-WestUS のみが表示されます。

重要

基本エディター は、Azure Policy の作成時のみに使用できます。 ポリシーの作成後の編集は、すべて仮想ネットワーク マネージャーのポリシー セクションで JSON を使用して、または Azure Policy 経由で行うことになります。

詳細エディター

詳細エディターを使用すると、ネットワーク グループの作成時または既存のネットワーク グループの更新時に仮想ネットワークを選択できます。 JSON に基づく詳細エディターは、経験豊富なユーザーによる複雑な Azure Policy の条件ステートメントの作成と更新に役立ちます。

詳細エディターを使用して新しいポリシーを作成する

  1. Azure Virtual Network Manager インスタンスに移動し、[設定][ネットワーク グループ] を選択します。 次に、 [+ 作成] を選択して、新しいネットワーク グループを作成します。

  2. ネットワーク グループの名前とオプションの説明を入力し、[追加] を選択します。

  3. 一覧からネットワーク グループを選択し、[Azure Policy の作成] を選択します。

  4. ポリシー名を入力し、変更が必要な場合を除き、[スコープ] の選択はそのままにします。

  5. [条件][詳細 (JSON) エディター] を選択してエディターを開きます。

  6. テキスト ボックスに次の JSON コードを入力し、[保存] を選択します。

       {
       "field": "Name",
       "contains": "myVNet01"
       }
    
  7. 数分後、ネットワーク グループを選択し、[設定][グループ メンバー] を選択します。 myVNet01-WestUS と myVNet01-EastUS のみが表示されているはずです。

重要

仮想ネットワーク マネージャーを使用して作成した Azure Policy は、Azure Policy サービス領域に存在します。 これらは、仮想ネットワーク マネージャー インスタンスが削除されても、Azure Policy の割り当てと定義から削除されません。 これには、手動でポリシーを削除する必要があります。 Azure Policy を削除する方法について

既存のポリシーを編集する

  1. 前のセクションで作成したネットワーク グループを選択します。 次に、[ポリシー] タブを選択します。

  2. 前のセクションで作成したポリシーを選択します。

  3. 以下のように、[詳細エディター] ビューにネットワーク グループの条件付きステートメントが表示されます。

    [
      {
         "field": "Name",
         "contains": "myVNet01"
      }
    ]
    
  4. WestUS を "含まない" Name フィールドに別の条件付きステートメントを追加するには、詳細エディターに次のように入力します。

    {
       "allOf": [
    
          {
             "field": "Name",
             "contains": "VNet01"
          },
          {
             "field": "Name",
             "notcontains": "WestUS"
          }
       ]
    }
    

    "allOf" パラメータには、AND 論理演算子で分離された両方の条件付きステートメントが含まれています。

  5. [保存] を選択します。

  6. 数分後、ネットワーク グループを選択し、[設定][グループ メンバー] を選択します。 myVNet01-EastUS のみが表示されているはずです。

詳細エディターで使用できるパラメータと演算子の完全なリストについては、「パラメータと演算子」を参照してください。

その他の例

詳細エディターの条件付きステートメントのその他の例を次に示します。

例 1: OR 演算子のみ

この例は、OR 論理演算子を使用して二つの条件付きステートメントを分離します。

  • 基本エディター:

    OR 論理演算子を使用したネットワーク グループの条件付きステートメントのスクリーンショット。

  • 高度な演算子:

    {
       "anyOf": [
          {
             "field": "Name",
             "contains": "myVNet01"
          },
          {
             "field": "Name",
             "contains": "myVNet02"
          }
       ]
    }
    

パラメータ "anyOf" には、OR 論理演算子で分離された両方の条件付きステートメントが含まれています。

例 2: AND 演算子と OR 演算子を同時に実行します

  • 基本エディター:

    OR と AND 論理演算子の両方を使用したネットワーク グループの条件付きステートメントのスクリーンショット。

  • 詳細エディター:

{
   "allOf": [
      {
         "anyOf": [
            {
               "field": "Name",
               "contains": "myVNet01"
            },
            {
               "field": "Name",
               "contains": "myVNet02"
            }
         ]
      },
      {
         "field": "Name",
         "notcontains": "West"
      }
   ]
}

コードでは "allOf""anyOf" の両方が使用されます。 AND 演算子はリストの最後にあるので、OR 演算子を含む 2 つの条件付きステートメントを含むコードの外側の部分にあります。

例 3: 詳細エディターでカスタム タグ値を使用する

この例では、名前に「myVNet」が含まれており、Environment タグが production と等しい仮想ネットワークを検索する条件付きステートメントを作成します。

  • 詳細エディター:

    
       {
            "allOf": [
              {
                 "field": "Name",
                 "contains": "myVNet"
              },      
              {
                 "field": "tags['environment']",
                 "equals": "production"
              }
            ]    
       }
    
    

    Note

    条件は、効率を向上させるために、リソースの種類 Microsoft.Network/virtualNetwork でフィルター処理する必要があります。 この条件は、ポータルで指定されたあらゆる条件の前に追加されます。

次のステップ