この記事は更新から24ヶ月以上経過しているため、最新の情報を別途確認することを推奨いたします。
■はじめに
新規リソース作成時にタグ付けを必須とするポリシーの設定方法を調べました。
この設定を行うことで、リソース作成時にタグ付けを失念することがないため、
タグ付けによりリソース管理を徹底したい、といったケースに有用です。
本ブログでは、新規リソース作成時にタグ付けを必須とするポリシーの設定方法、
及び設定後の動作と設定前の考慮事項について記載します。
■前提
一部リソースではタグ機能がサポートされておらず、タグ付けが出来ないリソースがあります。
各リソースへのタグ付けの可不可は、下記のサイトで確認できます。
Azureリソースでのタグのサポート
“タグのサポート”が”いいえ”になっているリソースは、タグ付け必須のポリシーの設定に関わらず、タグ付けが出来ません。
例えば、クラシックVMは以下画像の通りタグ付けが不可能です。
また、クラシックVMに限らず、クラシックリソースは全てタグ付けが不可能です。
■操作手順
“リソースでタグを必須にする”というポリシーを設定することで、新規リソース作成時にタグ付けを必須とすることが出来ます。
本節では当ポリシーの詳細な設定方法について記載します。
なお、以下手順では、タグ”BusinessUnit”の付与を必須とする場合の操作手順を記載しています。
実際に操作する際に、指定したいタグに置き換えて操作を実施してください。
1.AzurePortalサインイン後、[ポリシー] > [割り当て] > [ポリシーの割り当て]を押下します。
2.ポリシーの割り当ての基本タブで、以下を入力します。
[スコープ]:※任意
[除外]:※任意
[ポリシー定義]:リソースでタグを必須にする
[割り当て名]:※任意
[説明]:※任意
[ポリシーの適用]:有効
[割り当て担当者]:※任意
3.パラメータタブで、以下を入力します。
[tagName]:BusinessUnit
4.修復タブにて、[マネージドIDを作成します]のチェックを外します。
5.非準拠メッセージタブのメッセージは任意で入力します。
6.[確認および作成] > [作成]を押下したら、設定完了です。
■ポリシー”リソースでタグを必須にする”設定後の動作について
ポリシー”リソースでタグを必須にする”設定後は、新規リソース作成時に、指定したタグを付けないとデプロイができません。
下記の画像のように、新規リソース作成時の[確認および作成]の際に、エラーが生じます。
[タグ]タブにて指定のタグを付与することで、デプロイが可能となります。
これにより、リソース作成時にタグ付けを失念することを防げます。
■ポリシー”リソースでタグを必須にする”設定時の考慮事項について
ポリシー”リソースでタグを必須にする”を設定する際に考慮すべき事項が2点あります。
①ポリシーで指定したタグが付与されていない既存リソースについて、一部の変更操作が実施できなくなります。
全ての既存のリソースに指定したタグを付与済であれば問題はありませんが、
指定したタグが付与されていない既存リソースがある場合、一部の変更操作が実施できなくなるため、考慮が必要になります。
例えば、ポリシー設定後に指定したタグが付与されていないVMでは、サイズ変更が実施できなくなります。
なお、全ての変更操作ではなく、一部の変更操作が実施不可となります。
例えば、NSGの場合、移動操作は実施できませんが、セキュリティ規則の変更は実施可能です。
このようなことが起きるのは、該当操作において”ResouceType”の値がサポートされているか否かに依存します。
該当操作の”ResourceType”の値は、操作ログのJSONファイルから確認できます。
この値と、下記サイトに記載のある項目”タグ”を照らし合わせることで、
該当操作の”ResouceType”の値がサポートされているか否かを確認できます。
Azure resource reference – Bicep, ARM template & Terraform AzAPI reference | Microsoft Docs
※操作ログの確認は、該当操作実施後に可能となるため、”ResouceType”の値を確認するには、1度該当操作を実施する必要があります。
該当操作の”ResourceType”の値がサポートされている場合、
“リソースでタグを必須にする”ポリシーの評価が行われ、ポリシーで指定したタグ付けがされていない場合、操作が拒否されます。
一方、該当操作の”ResourceType”の値がサポートされていない場合、
“リソースでタグを必須にする”ポリシーの評価が行われないため、操作が拒否されることなく、実施可能となります。
NSGの移動操作を例に挙げて説明します。
NSGの移動操作時、操作ログ(JSONファイル)の”ResoureType”セクション内の”value”が、
“Microsoft.Network/networkSecurityGroup”となっています。
ここで、先ほどのサイト内で、”タグ”項目を確認すると、“タグ”がサポートされていることがわかります。
“タグ”がサポートされていれば該当操作は実施不可となるため、移動操作は実施不可となります。
一方、NSGのセキュリティ規則変更時は、操作ログの”ResoureType”セクション内の”value”は
“Microsoft.Network/networkSecurityGroup/securityRules”となっています。
ここでまたサイトを確認すると、“タグ”がサポートされていないことがわかります。
以上により、NSGの移動操作は実施不可ですが、セキュリティ規則の変更は実施可能という事象が発生します。
②Runbookの新規作成が出来ません。
Runbookはタグがサポートされているリソースのため、
ポリシー”リソースでタグを必須にする”設定後は、リソース作成時に指定したタグを付与しないとデプロイできません。
しかし、既存AutomationにRunbookを新規作成する際にタグ付けをすることができない(設定項目が存在しない)ため、
Runbookを新規作成することができません。
※もしかすると、Runbook以外にも、このような矛盾により新規作成が出来ないリソースがあるかもしれません。
この事象は、ポリシー”リソースでタグを必須にする”設定時に、既存Automationを[除外]リソースに設定することで回避可能です。
この設定によりRunbookの新規作成が可能になります。
ただし、ここで新規作成したRunbookは作成時にタグ付けがされていないため、
タグ付けを行いたい場合は、デプロイ後にタグの付与操作をする必要があります。
■おわりに
新規リソース作成時にタグ付けを必須とするポリシーの設定方法を解説しました。
“リソースでタグを必須にする”ポリシーを設定することで、新規リソース作成時にタグ付けを必須とすることが可能です。
しかし、ポリシー設定後は指定したタグが付いていないリソースに対して操作が制限される可能性があるため、
設定後の動作について十分に考慮した上で、ポリシー設定を行う必要があります。