A common theme in cloud environments today is the ability to define templates, policies, and procedures. These templates then dictate what can be done and verify that what does exist is correct. A service from Microsoft called Azure Policy is a great way to make that happen.
この記事では、Azure Policyの動作方法を学び、さまざまなポリシーと是正アクションの作成方法を見ていきます。
Azure Policyの作成
Azureポータル、PowerShell、Azure CLI、およびARMテンプレートなど、さまざまな方法でポリシーを作成することができます。
Azureポータル
GUIルートを選択する場合、またはオプションを探索する場合は、ここからポリシーについての良い導入を始めることができます。インターフェースはシンプルで、一目でオプションを確認することができます。
- Azureポータル内で、ポリシーを検索します。
- Authoringセクションの下にあるAssignmentsをクリックします。
- Assign policyをクリックします。
- Scopeの下にある省略符号をクリックして、適用するサブスクリプションと必要に応じてリソースグループを選択します。
- Policy definitionの下にある省略符号をクリックして、定義するポリシーを選択します。
- Assignment nameの下に生成されたデフォルトの名前を使用するか、ポリシーを一意に識別する名前を入力します。
- 必要な場合は、選択したポリシーに基づいて任意のパラメータを入力します。
- 最後に、必要に応じてマネージドアイデンティティを作成し、場所を定義します。

PowerShell
幸いなことに、PowerShellを使用すると、Azureポリシー定義をポリシーアサインメントに割り当てることが迅速かつ簡単に行えます。2つの前提条件があります。Azure PowerShellの最新バージョンがインストールされていることと、Azure Policy Insightsリソースプロバイダの登録が必要です。
Azure CLI
PowerShellが利用できない場合や好ましくない場合、Azure CLIを使用することでも同じことを達成することができます。これは、すべてのオペレーティングシステムでPowerShellを使用できない場合にも、クロスプラットフォームのシナリオで役立ちます。
Azureポリシーテンプレート
Azure Resource Managerテンプレートは、リソースにポリシーを作成および割り当てるための別の方法です。以下に、リソースグループに割り当てるポリシーを選択するためのスターターテンプレートがあります。
Azureポリシーアサインメントの動作
適用するポリシー定義を選択または作成した後、それらの定義を特定のスコープに割り当てます。スコープは、ポリシーアサインメントが適用される範囲を定義するだけであり、管理またはリソースグループなどです。ポリシーアサインメントはすべての子リソースで継承されますが、必要に応じてサブスコープを除外することも可能です。
例:Azureポリシー
さまざまなポリシー定義があり、適用するのに最適なものを選択するのは難しいかもしれません。では、いくつかのオプションと、それらをいつ使用するか、なぜ使用するかについて考えてみましょう。
- タグとその値の必要性 – これは、コストコードや複数のリソースグループにまたがるさまざまなリソースの識別に使用することができます。
- 許可されたリソースタイプ – 特定のリソースのみを許可したい場合はどうなりますか?これにより、ストレージリソースの作成などが制限されます。
- Windows VMの監査 – 保留中の再起動 – おそらく、保留中の再起動が必要なWindows VMを知りたいと思っているのでしょうか?このポリシーを使用して、スケジュールに基づいてそれらを検出し、必要に応じて修復することができます。
- 診断設定の監査 – 診断設定が有効になっていない場合、このポリシーは非準拠のものを検出します。
- 仮想マシンの管理ポートは閉じられているべきです – VMの管理ポートが閉じられていることを確認し、セキュリティに関心のある方には素晴らしいポリシーです。
- サブスクリプションから非推奨のアカウントを削除するべきです – ディレクトリ内でサインインがブロックされたすべてのアカウントを検出し、必要に応じて修復するために使用します。ここには多くのポリシーがありますが、さらに毎日増え続けています。また、独自のカスタムポリシー定義を作成する非常に強力な機能もあります。簡単なクエリ定義スキーマを使用して、ポリシーを適用する条件を強力なif-then構造で定義することができます。
Azureポリシーを再利用可能にする方法
パラメータ
最も有用なツールの一つは、ポリシーで使用するためのパラメータを定義することです。ポリシーのバリエーションごとに個別のポリシーを定義する必要がある場合、数百のポリシーが必要になるかもしれません。これに対する素晴らしい解決策は、ポリシーをパラメータ化することです。これにより、割り当て時にポリシーをカスタマイズし、1つのポリシー定義を多くの異なるユースケースに適用することができます。
イニシアチブ
次の論理的なステップは、複数の定義をセットにまとめることです。これにより、個々に割り当てることなく、それらの異なる定義をスコープに割り当てることができます。
イニシアチブパラメータ
最後に、イニシアチブにパラメータを追加することができます。これにより、個別のポリシーに継承されることができます。つまり、イニシアチブ内に含まれる各ポリシーに対して個別にパラメータを割り当てる必要はありません。これにより、パラメータの選択に応じてさまざまな方法で多くの異なるポリシーを適用する数少ないイニシアチブのみを定義することができ、多くの時間を節約できます。
修復タスク
準拠していないリソースを評価するポリシーがある場合、どうすればよいでしょうか?その場合、修復タスクを起動して問題を修正することができます。これは非常に強力ですが、設定が間違っている場合は非常に危険です。再度、これらのタスクを定義するためには、Azureポータル、PowerShell、またはAzure CLIのいずれかを使用することができます。
Azureポータル
以前と同様に、Azureポータルを使用して修復タスクの作成を試みることができます。ポリシーが表示されない場合は、deployIfNotExistsポリシーと、非準拠に評価されたポリシーの両方があることを確認してください。
- Azureポータル内で、ポリシーを検索します。
- 左側の修復をクリックします。
- deployIfNotExistsタイプかつ非準拠リソースを持つポリシーをクリックします。
- 新しいリメディエーションタスクページでリソースを制限して、タスクが適用される範囲を絞ります。
- タスク自体を開始するには、リメディエーションをクリックします。
PowerShell
PowerShellを使用してリメディエーションタスクを簡単に作成できます。覚えておくべき主なことは、deployIfNotExistsポリシーを使用する必要があるということです。
Azure CLI
PowerShellの代わりに、Azure CLIを使用してリメディエーションタスクを開始することもできます。PowerShellタスクと同様です。
概要
Azureポリシーを使用することで、Azureサブスクリプションごとに柔軟なポリシーを定義して環境を管理することができます。さらに、ポリシーやイニシアチブ、パラメータの構造に時間と労力をかけることで、明確で簡単にリメディエーションできる設定を作成できます。
AzureポリシーはAzureサブスクリプションで無料で利用できるため、必要なものを実装するための時間を取ることは非常に重要です。定義とポリシーの作成と展開方法の柔軟性を考えると、ほとんどのことに適用でき、環境を管理するのに役立ちます!