Azure Policy を使用して Azure Virtual Network Manager で動的ネットワーク グループ メンバーシップを定義する
この記事では、Azure Policy の条件ステートメントを使用して、動的メンバーシップを持つネットワーク グループを作成する方法について説明します。 これらの条件付きのステートメントは、ドロップダウン メニューからパラメータと演算子を選択する基本エディターの使用で作成します。 また、既存のネットワーク グループの条件付きステートメントを更新するための詳細エディターの使用法も学習します。
Azure Policy は、リソースごとのガバナンスを大規模に実現できるようにするサービスです。 これは仮想ネットワークの明示的なリストではなく、グループ メンバーシップを定義する条件式を指定するために使用できます。 この条件は引き続きネットワーク グループを動的に制御し、ネットワーク マネージャーの操作を必要とせずに、条件の充足の変化に応じて仮想ネットワークがグループに自動的に参加および脱退できるようにします。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- 動的ネットワーク グループを変更するには、ロールベースのアクセス制御を使用してアクセスを許可する必要があります。 従来の管理者/レガシ承認はサポートされていません。
パラメータと演算子
動的メンバーシップを持つ仮想ネットワークは、条件付きステートメントを使用して選択されます。 選択した仮想ネットワークをさらに絞り込む必要があるシナリオでは、AND や OR などの "論理演算子" を使用して、複数の条件付きステートメントを定義できます。
サポートされているパラメータのリスト:
パラメーター | [詳細エディター] フィールド |
---|---|
名前 | 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 のキーと値のペアを持つ仮想ネットワークだけを選択する必要があります。 基本エディターの使用で条件付きステートメントを作成するために、新しいネットワーク グループを作成する必要があります。
Azure Virtual Network Manager インスタンスに移動し、[設定] で [ネットワーク グループ] を選択します。 次に、 [+ 作成] を選択して、新しいネットワーク グループを作成します。
ネットワーク グループの名前とオプションの説明を入力し、[追加] を選択します。
一覧からネットワーク グループを選択し、[Azure Policy の作成] を選択します。
ポリシー名を入力し、変更が必要な場合を除き、[スコープ] の選択はそのままにします。
[基準] で、[パラメータ] のドロップダウンから [タグ] を選択してから、[演算子] のドロップダウンから [キーと値のペア] を選択します。
[条件] に「environment」と「production」を入力し、[プレビュー リソース] を選択します。 myVNet01-EastUS と myVNet01-WestUS がリストに表示されます。
[閉じる]、[保存] の順に選択します。
数分後、ネットワーク グループを選択し、[設定] で [グループ メンバー] を選択します。 myVNet01-WestUS と myVNet01-WestUS のみが表示されます。
重要
基本エディター は、Azure Policy の作成時のみに使用できます。 ポリシーの作成後の編集は、すべて仮想ネットワーク マネージャーのポリシー セクションで JSON を使用して、または Azure Policy 経由で行うことになります。
詳細エディター
詳細エディターを使用すると、ネットワーク グループの作成時または既存のネットワーク グループの更新時に仮想ネットワークを選択できます。 JSON に基づく詳細エディターは、経験豊富なユーザーによる複雑な Azure Policy の条件ステートメントの作成と更新に役立ちます。
詳細エディターを使用して新しいポリシーを作成する
Azure Virtual Network Manager インスタンスに移動し、[設定] で [ネットワーク グループ] を選択します。 次に、 [+ 作成] を選択して、新しいネットワーク グループを作成します。
ネットワーク グループの名前とオプションの説明を入力し、[追加] を選択します。
一覧からネットワーク グループを選択し、[Azure Policy の作成] を選択します。
ポリシー名を入力し、変更が必要な場合を除き、[スコープ] の選択はそのままにします。
[条件] で [詳細 (JSON) エディター] を選択してエディターを開きます。
テキスト ボックスに次の JSON コードを入力し、[保存] を選択します。
{ "field": "Name", "contains": "myVNet01" }
数分後、ネットワーク グループを選択し、[設定] で [グループ メンバー] を選択します。 myVNet01-WestUS と myVNet01-EastUS のみが表示されているはずです。
重要
仮想ネットワーク マネージャーを使用して作成した Azure Policy は、Azure Policy サービス領域に存在します。 これらは、仮想ネットワーク マネージャー インスタンスが削除されても、Azure Policy の割り当てと定義から削除されません。 これには、手動でポリシーを削除する必要があります。 Azure Policy を削除する方法について
既存のポリシーを編集する
前のセクションで作成したネットワーク グループを選択します。 次に、[ポリシー] タブを選択します。
前のセクションで作成したポリシーを選択します。
以下のように、[詳細エディター] ビューにネットワーク グループの条件付きステートメントが表示されます。
[ { "field": "Name", "contains": "myVNet01" } ]
WestUS を "含まない" Name フィールドに別の条件付きステートメントを追加するには、詳細エディターに次のように入力します。
{ "allOf": [ { "field": "Name", "contains": "VNet01" }, { "field": "Name", "notcontains": "WestUS" } ] }
"allOf"
パラメータには、AND 論理演算子で分離された両方の条件付きステートメントが含まれています。[保存] を選択します。
数分後、ネットワーク グループを選択し、[設定] で [グループ メンバー] を選択します。 myVNet01-EastUS のみが表示されているはずです。
詳細エディターで使用できるパラメータと演算子の完全なリストについては、「パラメータと演算子」を参照してください。
その他の例
詳細エディターの条件付きステートメントのその他の例を次に示します。
例 1: OR 演算子のみ
この例は、OR 論理演算子を使用して二つの条件付きステートメントを分離します。
基本エディター:
高度な演算子:
{ "anyOf": [ { "field": "Name", "contains": "myVNet01" }, { "field": "Name", "contains": "myVNet02" } ] }
パラメータ "anyOf"
には、OR 論理演算子で分離された両方の条件付きステートメントが含まれています。
例 2: AND 演算子と OR 演算子を同時に実行します
基本エディター:
詳細エディター:
{
"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 でフィルター処理する必要があります。 この条件は、ポータルで指定されたあらゆる条件の前に追加されます。
次のステップ
- ネットワーク グループについて確認する。
- Azure Virtual Network Manager インスタンスを作成します。
- コンプライアンスを強制するポリシーの作成と管理