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

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

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

条件付きネットワークグループメンバーシップのタイミングは、Azure Policyの割り当て範囲によって異なります。 会員登録数が1,000未満の場合、会員情報の更新は数分で完了することがあります。 1,000以上のサブスクリプションがある環境では、Azure Policyがネットワークグループへの通知に最大24時間かかることがあります。 通知後、数分以内にアクティブな構成が更新されたメンバーに適用されます。 詳細については、「 デプロイメントレイテンシとタイミング」をご覧ください。

前提条件

パラメータと演算子

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

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

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

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

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

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

基本エディター

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

仮想ネットワーク タグ名 タグ値
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-EastUSと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"
              }
            ]    
       }
    
    

    条件式は、効率を向上させるために、リソースの種類 Microsoft.Network/virtualNetwork に基づいてフィルター処理する必要があります。 この条件は、ポータルで指定したすべての条件式の先頭に自動的に追加されます。

次のステップ