NSGはじめに今回は、Azureポリシーを用いてリソースの設定値を制限する方法の紹介です。以前、AutomationにPowerShellスクリプトを登録して特定のNSGルールを検出し、SendGridでメール通知する、という記事を投稿しました。Azureポリシーで特定の設定値を禁止できそうだったため試してみました。「ソースIPアドレスがAnyのNSGルールは作成不可」というルールを設定します。概要Azureポリシーは、リソースに対して名前や設定値のルールを与えることができるサービスです。例として、[ストレージアカウントのSKUはLRSのみとする]、[東日本リージョンのみデプロイ可能]、[タグとして○○を必須とする]などが指定可能であり、それに違反するリソースをデプロイできないよう制御できます。ポリシーは適用先としてサブスクリプションかリソースグループを選ぶことが可能なため、全体としての制御や、特定のリソースグループ内のみの制御など用途に合わせて利用します。組み込みで用意されているルールもありますが、今回は該当するものがないため、JSONを記述して作成しています。以下のサイトを参考にしました。今回使用するポリシーはこれです。}}policyRuleブロック内に、JSONで条件を記述します。allOfがand、anyOfがorとしてブロック構造で条件分岐を記述するので、なかなか書きづらいです。Internetタグ"ならば、拒否する」です。これで不特定なIPアドレスからの接続を許可するNSGルールを禁止するポリシーとして機能します。可能ですが、ここでは利用していません。公式ドキュメントにサンプルが紹介されています。Docsポリシーの定義、割り当て実際にポリシーを作成し適用します。適用するポリシー(ルール)を定義します。[定義の場所]ではサブスクリプションを指定します。その他は任意に指定します。ポリシー定義に先ほどのJSONを貼り付け、保存します。[種類]を"カスタム"に変更すると自作ポリシーのみ表示されるため、先ほど作成したポリシーの名前をクリックします。[割り当て]をクリックします。ポリシーを適用することや、一部のリソースグループやリソースを適用対象外とすることが可能です。今回はサブスクリプション全体に適用するのでこのままです。パラメータがあるポリシーを定義した場合は、パラメータタブにて指定することができます。修復タブでは、ポリシー用のマネージドIDの作成を指定できます。ポリシーの作成の仕方によっては、ルールに合致した際に自動設定や自動修正が可能であり、それ用のIDです。これはそのうち試してみたいですが、今回はそのままにして割り当てを実行。サービスIDについては以前にちょこっと書いたのでそれ参照。みち草これでポリシーの定義と割り当ては完了です。テスト早速、適用したポリシーの動作をテストします。送信元がAnyのNSGルールを追加してみます。ルールの作成時にエラーが表示され、「ポリシーにより許可されませんでした」とあります。Azureポリシーを用いて、ルールに合致した設定値を拒否することができました。ソースIPアドレスを指定したルールであれば作成可能です。ポリシーの準拠状況や、準拠していないリソース、拒否されたイベント発生数などを確認することができます。※割り当て後、状況取得にはある程度時間がかかります。以下は別のポリシーのキャプチャですが、時間が経つとポリシーの準拠していないリソースがどのくらいあるのか表示してくれます。イベントを発生させたユーザーもわかるので、誰が設定を行おうとしたか、ばっちりわかります。料金Azureポリシーの利用料金は発生しないため、好きなだけ使えます。Azure気になることルールに合致した設定を拒否できるAzureポリシーですが、ちょっと気になる箇所があります。それは、ユーザーが自分で設定した際は拒否してくれるのですが、システム的に設定される場合は拒否されない、という点です。例として試したのは、VM作成時の以下の設定です。このチェック用いると、VMデプロイ時のインターフェースに割り当てられるNSGに対して自動でルールを追加してくれます。ソースIPアドレスががAnyなのです。今回のポリシーを適用していても、拒否されずにデプロイされてしまいます。以前は警告なくAny許可でしたが、最近は「すべてのIPアドレスからアクセス可能になります」と注意を明記してくれるだけマシになりました。システム的に防ぎたいところですがダメそうです。おわりに今回は、Azureポリシーでリソースの設定値を制限する、ということを紹介しました。組み込みのポリシーで済むようであればそれだけで、費用なく設定が可能です。求めるものがない場合は作成するしかありませんが、記事中で紹介したサンプルページもあるため、それを参考にするのが良いかと思います。環境全てをポリシーで制御しようと思うとひたすらJSON記述になり大変ですが、これは絶対使わせない!という設定を制御するにはよいかと思います。発言は個人の見解であり、所属組織の公式な見解ではありません。問い合わせ問い合わせスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。