Azure のガバナンス機能を使ってクラウドネイティブガバナンスを実現 ~ 実践編その 1 ~
この記事は
こちらのブログの続きです。はじめての方はこちらを先にお読みいただけると理解が深まるかと思います。
年末のあわただしさ(言い訳)から概要レベルにとどまってしまいましたが、年も明けたので実践編をしたためていきたいと思います。
Azure Policy とは
Azure Policy では、Azure の各種リソースに対してポリシーを定義・適用することで、プロアクティブな統制を実現することができます。例えば、指定されたリージョンにのみデプロイを許可する、指定された SKU だけデプロイできる、、、なんてことができます。Azure Dev Ops と連携することで CI / CD パイプラインにポリシー準拠機能を組み込んだり、既存リソースに対してポリシーに適合するために変更をかけたりすることができます。2018/9 の Ignite で GA となりました。本ブログでは Azure Policy をもう少し深堀していきます。
イニシアティブとポリシーの関係
Azure Policy はイニシアティブとポリシーという 2 種類の定義を Azure リソースに対して割り当てることができます。イニシアティブとは、複数のポリシーによって構成されるまとめルールのようなもので、いくつかのポリシーをセットにしてまとめることで運用を簡単にすることができます。
ビルトインで提供されるイニシアティブ、ポリシーはすぐ使えて便利ですが・・・
既にビルトインでいくつかのイニシアティブ、ポリシーが Azure Policy には用意されています。既にあるものは使った方が便利なので使ってしまいましょう。
ただし、イニシアティブを選ぶ場合は、どんなポリシーから構成されているか、ポリシーを選ぶ場合は、そのポリシー定義がどのようなルールとして記述されているか、しっかりと確認してから採用しましょう。
これはあくまでもビルトインとして提供されているものであり、皆様の企業のポリシーやコンプライアンスルールで適用するにはカスタマイズが必要かもしれません。
全てのポリシーは JSON で記述されていますので、その内容を確認していただくことができます。どういった時にポリシー違反となるのか、ならないのかはちゃんと理解しておかないと、思いもよらないところでルール違反を出してデプロイを停止させてしまう場合もあります。
さっそく Azure Policy を適用してみましょう
Azure Policy をリソースグループに適用する流れは以下の通りです。
・割り当てたいルールの種類(イニシアティブかポリシーか)を選ぶ
・割り当てる対象(スコープ)を決める
Management Group 、サブスクリプション、リソースグループから選べる
除外設定も可能
・割り当てたい定義(どのイニシアティブ、ポリシーか)を選ぶ
・各種パラメータを決める
試しに一つイニシアティブを割り当ててみます。
Azure Policy のメニューから「割り当て」を選び、
出てきたページの上のメニューから「イニシアティブの割り当て」を選びます。
イニシアティブの割り当てページにて、「スコープ」と「基本」を設定します。
今回は、AzureGovernanceTestというリソースグループをスコープとして設定し、Azure Security Center での監視を有効にするというイニシアティブ定義を使ってみましょう。
と、ここまでは良いのですが、これを設定するとこの下に大量のパラメータが出てきました。
これは何でしょうか?
ちょっと戻って、実際にイニシアティブの中身を見てみたいと思います。
イニシアティブの構成要素の確認方法
Azure Policy のメニュー画面で「定義」を開くと、イニシアティブ、ポリシーの一覧が出てきます。「定義の種類」でイニシアティブのみフィルタしてみましょう。
今回割り当てようとしている、「Azure Security Center での監視を有効にする」を開くと、、、沢山のポリシーから構成されていることがわかりますね。
試しに一つ、ポリシー定義を開いてみましょう。
一番上にある、IoT Hub における診断ログが有効であることの監査を開くと、以下のような JSON ファイルで構成されていることがわかります。
ここで、”Parameters” という箇所がありますね。右にある「パラメーター」を開くと、このポリシーで定義されているパラーメーターがわかります。このパラメーターは、ポリシーを割り当てるときに選んで変えられるという設定なのです。
もちろん、ここを固定値に最初から記述することもできます。毎回聞かれるのが大変、もしくは組織として常に一律の値とすべき、ということであれば固定値に書き換えてカスタムポリシーとして定義することもできます。
“効果”(“effect“)とは
このように、ポリシー定義は、論理条件に従いその振る舞いを定義するのですが、このポリシー定義の重要なところは、”効果”の記述です。
既存のリソースに対してポリシーを割り当てる際に、既存のリソースの状況は知りたいが、いきなり日々のデプロイや運用業務を止められないというシーンはありますよね。そうした時に、アラートだけ上げる、といったようなふるまいを設定するのが、”効果”の箇所となります。以下のような種類の”効果”を選ぶことができます。
- deny : 監査ログでイベントを生成し、要求は失敗します。
- audit : 監査ログで警告イベントを生成しますが、要求は失敗しません。
- append : 定義済みのフィールド セットを要求に追加します。
- AuditIfNotExists : リソースが存在しない場合に監査を有効にします。
- DeployIfNotExists : リソースが存在しない場合にリソースをデプロイします。
今回のイニシアティブの割り当てはテストですのでAuditifNotExistsとして割り当ててみましょう。
このように、まずは今のリソースがどのような状態かを確認するためにも、またはポリシー定義の動作確認のためにも、まずは緩めに”効果”を設定すると良いと思います。
参考リンク
ポリシー定義の構造の詳細 - Azure Policy | Microsoft Docs
効果のしくみを理解する - Azure Policy | Microsoft Docs
実際に割り当ててみると、このような感じになりました。
最後に、現在使用できるビルトインのイニシアティブ、ポリシーを載せておきます。
あくまでも本日(2019/1/12)時点のものであり、最新のものは皆さんの環境で確認をしてください。
[ Appendix ] イニシアティブ一覧 ( 2019 / 1 / 12 )
No. | 名前 | ポリシー数 | カテゴリ |
---|---|---|---|
1 | [プレビュー]: Azure Security Center での監視を有効にする | 80 | Security Center |
2 | [プレビュー]: Data Protection Suite を有効にする | 1 | Security Center |
3 | [プレビュー]: Linux VM 内にアプリケーションがインストールされていないことを監査する | 2 | Guest Configuration |
4 | [プレビュー]: Linux VM 内にアプリケーションがインストールされていることを監査する | 2 | Guest Configuration |
5 | [プレビュー]: Linux および Windows 仮想マシン内のパスワードのセキュリティ設定の監査 | 18 | Guest Configuration |
6 | [プレビュー]: VM スケール セット (VMSS) 用の Azure Monitor の有効化 | 6 | Monitoring |
7 | [プレビュー]: VM 用 Azure Monitor を有効にする | 6 | Monitoring |
8 | [プレビュー]: Windows VM 内にアプリケーションがインストールされていないことを監査する | 2 | Guest Configuration |
9 | [プレビュー]: Windows VM 内にアプリケーションがインストールされていることを監査する | 2 | Guest Configuration |
10 | [プレビュー]: Windows VM 内の監査 Web サーバーのセキュリティ設定 | 2 | Guest Configuration |
[ Appendix ] ポリシー一覧 ( 2019 / 1 / 12 )
No. | 名前 | カテゴリ |
---|---|---|
1 | [プレビュー]: API アプリの CORS リソース アクセス制限を監査する | Security Center |
2 | [プレビュー]: API アプリの HTTPS 専用アクセスを監査する | Security Center |
3 | [プレビュー]: API アプリの IP 制限の構成を監査する | Security Center |
4 | [プレビュー]: API アプリの Web ソケットの状態を監査する | Security Center |
5 | [プレビュー]: API アプリのリモート デバッグ状態を監査する | Security Center |
6 | [プレビュー]: Dependency Agent デプロイの監査 - VM イメージ (OS) が一覧にない | Monitoring |
7 | [プレビュー]: Endpoint Protection の不足の Azure Security Center での監視 | Security Center |
8 | [プレビュー]: Linux VM /etc/passwd ファイルのアクセス許可が 0644 に設定されていることの監査 | Guest Configuration |
9 | [プレビュー]: Linux VM passwd ファイルのアクセス許可を監査する VM 拡張機能のデプロイ | Guest Configuration |
10 | [プレビュー]: Linux VM スケール セット (VMSS) 用の Dependency Agent のデプロイ | Monitoring |
11 | [プレビュー]: Linux VM スケール セット (VMSS) 用の Log Analytics エージェントのデプロイ | Monitoring |
12 | [プレビュー]: Linux VM 内にアプリケーションがインストールされていないことを監査する | Guest Configuration |
13 | [プレビュー]: Linux VM 内にアプリケーションがインストールされていないことを監査する VM 拡張機能のデプロイ | Guest Configuration |
14 | [プレビュー]: Linux VM 内にアプリケーションがインストールされていることを監査する | Guest Configuration |
15 | [プレビュー]: Linux VM 内にアプリケーションがインストールされていることを監査する VM 拡張機能のデプロイ | Guest Configuration |
16 | [プレビュー]: Linux VM 用 Dependency Agent のデプロイ | Monitoring |
17 | [プレビュー]: Linux VM 用 Log Analytics エージェントのデプロイ | Monitoring |
18 | [プレビュー]: Log Analytics エージェントのデプロイの監査 - VM イメージ (OS) が一覧にない | Monitoring |
19 | [プレビュー]: OS の脆弱性の Azure Security Center での監視 | Security Center |
20 | [プレビュー]: SQL の脆弱性評価の結果の Azure Security Center での監視 | Security Center |
21 | [プレビュー]: VM の脆弱性の Azure Security Center での監視 | Security Center |
22 | [プレビュー]: VM 用の Log Analytics ワークスペースの監査 - 不一致をレポート | Monitoring |
23 | [プレビュー]: VMSS の Dependency Agent デプロイの監査 - VM イメージ (OS) が一覧にない | Monitoring |
24 | [プレビュー]: VMSS の Log Analytics エージェントのデプロイの監査 - VM イメージ (OS) が一覧にない | Monitoring |
25 | [プレビュー]: Web アプリケーションの CORS リソース アクセス制限を監査する | Security Center |
26 | [プレビュー]: Web アプリケーションの HTTPS 専用アクセスを監査する | Security Center |
27 | [プレビュー]: Web アプリケーションの IP 制限の構成を監査する | Security Center |
28 | [プレビュー]: Web アプリケーションの Web ソケット状態を監査する | Security Center |
29 | [プレビュー]: Web アプリケーションのリモート デバッグ状態を監査する | Security Center |
30 | [プレビュー]: Windows VM がパスワードの複雑さの要件を強制していることの監査 | Guest Configuration |
31 | [プレビュー]: Windows VM がパスワードの複雑さの要件を適用していることを監査する VM 拡張機能のデプロイ | Guest Configuration |
32 | [プレビュー]: Windows VM スケール セット (VMSS) 用の Dependency Agent のデプロイ | Monitoring |
33 | [プレビュー]: Windows VM スケール セット (VMSS) 用の Log Analytics エージェントのデプロイ | Monitoring |
34 | [プレビュー]: Windows VM で可逆的暗号化を使用してパスワードを保存していないことの監査 | Guest Configuration |
35 | [プレビュー]: Windows VM で可逆的暗号化を使用してパスワードを保存していないことを監査する VM 拡張機能のデプロイ | Guest Configuration |
36 | [プレビュー]: Windows VM で直近に使用した 24 個のパスワードを許可していないことの監査 | Guest Configuration |
37 | [プレビュー]: Windows VM で直近に使用した 24 個のパスワードを許可していないことを監査する VM 拡張機能のデプロイ | Guest Configuration |
38 | [プレビュー]: Windows VM のパスワードが 14 文字以上でなければならないことの監査 | Guest Configuration |
39 | [プレビュー]: Windows VM のパスワードが 14 文字以上でなければならないことを監査する VM 拡張機能のデプロイ | Guest Configuration |
40 | [プレビュー]: Windows VM のパスワード最小有効期間が 1 日間であることの監査 | Guest Configuration |
41 | [プレビュー]: Windows VM のパスワード最小有効期間が 1 日間であることを監査する VM 拡張機能のデプロイ | Guest Configuration |
42 | [プレビュー]: Windows VM のパスワード最大有効期限が 70 日間であることの監査 | Guest Configuration |
43 | [プレビュー]: Windows VM のパスワード最大有効期限が 70 日間であることを監査する VM 拡張機能のデプロイ | Guest Configuration |
44 | [プレビュー]: Windows VM 内にアプリケーションがインストールされていないことを監査する VM 拡張機能のデプロイ | Guest Configuration |
45 | [プレビュー]: Windows VM 内にアプリケーションがインストールされていないことを監査する。 | Guest Configuration |
46 | [プレビュー]: Windows VM 内にアプリケーションがインストールされていることを監査する | Guest Configuration |
47 | [プレビュー]: Windows VM 内にアプリケーションがインストールされていることを監査する VM 拡張機能のデプロイ | Guest Configuration |
48 | [プレビュー]: Windows VM 内の監査 Web サーバーでは、TLS 1.1 バージョン以上の暗号化の使用が必要 | Guest Configuration |
49 | [プレビュー]: Windows VM 内の監査 Web サーバーに VM 拡張機能をデプロイするには、TLS 1.1 バージョン以上の暗号化の使用が必要 | Guest Configuration |
50 | [プレビュー]: Windows VM 用 Dependency Agent のデプロイ | Monitoring |
51 | [プレビュー]: Windows VM 用 Log Analytics Agent のデプロイ | Monitoring |
52 | [プレビュー]: カスタム ドメインを使用していない API Apps を監査する | Security Center |
53 | [プレビュー]: カスタム ドメインを使用していない Web アプリケーションを監査する | Security Center |
54 | [プレビュー]: カスタム ドメインを使用していない関数アプリを監査する | Security Center |
55 | [プレビュー]: サブスクリプションの最大所有者数の監査 | Security Center |
56 | [プレビュー]: サブスクリプションの所有者の最小数の監査 | Security Center |
57 | [プレビュー]: サブスクリプション上で MFA が有効ではない読み取りアクセス許可を持つアカウントの監査 | Security Center |
58 | [プレビュー]: サブスクリプション上で所有者アクセス許可を持つ非推奨のアカウントの監査 | Security Center |
59 | [プレビュー]: サブスクリプション上で書き込みアクセス許可を持つ外部アカウントの監査 | Security Center |
60 | [プレビュー]: サブスクリプション上で読み取りアクセス許可を持つ外部アカウントの監査 | Security Center |
61 | [プレビュー]: サブスクリプション上にある所有者アクセス許可を持つアカウントで MFA が有効でないものの監査 | Security Center |
62 | [プレビュー]: サブスクリプション上にある所有者アクセス許可を持つ外部アカウントの監査 | Security Center |
63 | [プレビュー]: サブスクリプション上にある書き込みアクセス許可を持つアカウントで MFA が有効でないものの監査 | Security Center |
64 | [プレビュー]: サブスクリプション上にある非推奨アカウントの監査 | Security Center |
65 | [プレビュー]: サポートされている最新の .NET Framework を使用していない API アプリケーションの監査 | Security Center |
66 | [プレビュー]: サポートされている最新の .NET Framework を使用していない Web アプリケーションを監査する | Security Center |
67 | [プレビュー]: サポートされている最新の Java フレームワークを使用していない API アプリケーションを監査する | Security Center |
68 | [プレビュー]: サポートされている最新の Java フレームワークを使用していない Web アプリケーションを監査する | Security Center |
69 | [プレビュー]: サポートされている最新の Node.js フレームワークを使用していない Web アプリケーションを監査する | Security Center |
70 | [プレビュー]: サポートされている最新の PHP フレームワークを使用していない API アプリケーションを監査する | Security Center |
71 | [プレビュー]: サポートされている最新の PHP フレームワークを使用していない Web アプリケーションを監査する | Security Center |
72 | [プレビュー]: サポートされている最新の Python フレームワークを使用していない API アプリケーションを監査する | Security Center |
73 | [プレビュー]: サポートされている最新の Python フレームワークを使用していない Web アプリケーションを監査する | Security Center |
74 | [プレビュー]: システムの更新プログラムの不足の Azure Security Center での監視 | Security Center |
75 | [プレビュー]: ストレージ アカウントでの BLOB 暗号化の不足の監査 | Security Center |
76 | [プレビュー]: パスワードがない Linux VM アカウントの監査 | Guest Configuration |
77 | [プレビュー]: パスワードがない Linux VM アカウントを監査する VM 拡張機能のデプロイ | Guest Configuration |
78 | [プレビュー]: パスワードがないアカウントからのリモート接続を許可する Linux VM の監査 | Guest Configuration |
79 | [プレビュー]: パスワードがないアカウントからのリモート接続を許可する Linux VM を監査する VM 拡張機能のデプロイ | Guest Configuration |
80 | [プレビュー]: 暗号化されていない SQL データベースの Azure Security Center での監視 | Security Center |
81 | [プレビュー]: 暗号化されていない VM ディスクの Azure Security Center での監視 | Security Center |
82 | [プレビュー]: 仮想ネットワークで Standard レベルの DDoS Protection が有効なことを監査する | Security Center |
83 | [プレビュー]: 可能なアプリのホワイトリスト登録の Azure Security Center での監視 | Security Center |
84 | [プレビュー]: 可能なジャスト イン タイム (JIT) ネットワーク アクセスの Azure Security Center での監視 | Security Center |
85 | [プレビュー]: 関数アプリの CORS リソース アクセス制限を監査する | Security Center |
86 | [プレビュー]: 関数アプリの HTTPS 専用アクセスを監査する | Security Center |
87 | [プレビュー]: 関数アプリの IP 制限の構成を監査する | Security Center |
88 | [プレビュー]: 関数アプリの Web ソケット状態を監査する | Security Center |
89 | [プレビュー]: 関数アプリのリモート デバッグ状態を監査する | Security Center |
90 | [プレビュー]: 制限が少なすぎるネットワーク アクセスの Azure Security Center での監視 | Security Center |
91 | [プレビュー]: 保護されていない Web アプリケーションの Azure Security Center での監視 | Security Center |
92 | [プレビュー]: 保護されていないネットワーク エンドポイントの Azure Security Center での監視 | Security Center |
93 | [プレビュー]: 未監査の SQL データベースの Azure Security Center での監視 | Security Center |
94 | App Services における診断ログが有効であることの監査 | App Service |
95 | Automation アカウント変数の暗号化が有効であることの監査 | Automation |
96 | Azure Data Lake Store における診断ログが有効であることの監査 | Data Lake |
97 | Azure Stream Analytics における診断ログが有効であることの監査 | Stream Analytics |
98 | Batch アカウントにおけるメトリック アラート ルールの構成の監査 | Batch |
99 | Batch アカウントにおける診断ログが有効であることの監査 | Batch |
100 | Data Lake Analytics における診断ログが有効であることの監査 | Data Lake |
101 | Data Lake Store アカウントにおける暗号化の強制 | Data Lake |
102 | IoT Hub における診断ログが有効であることの監査 | Internet of Things |
103 | Key Vault における診断ログが有効であることの監査 | Key Vault |
104 | Logic Apps における診断ログが有効であることの監査 | Logic Apps |
105 | Managed Disks を使用していない VM の監査 | Compute |
106 | Redis Cache に対してセキュリティで保護された接続のみが有効であることの監査 | Cache |
107 | Search サービスの診断ログが有効であることの監査 | Search |
108 | Service Bus における診断ログが有効であることの監査 | Service Bus |
109 | Service Bus 名前空間の承認規則の監査 | Service Bus |
110 | Service Fabric で ClusterProtectionLevel プロパティが EncryptAndSign に設定されていることの監査 | Service Fabric |
111 | Service Fabric でクライアント認証に Azure Active Directory を使用していることの監査 | Service Fabric |
112 | Service Fabric と Virtual Machine Scale Sets の診断ログが有効であることの監査 | Compute |
113 | SQL DB Transparent Data Encryption のデプロイ | SQL |
114 | SQL Server での監査のデプロイ | SQL |
115 | SQL Server での脅威検出のデプロイ | SQL |
116 | SQL Server バージョン 12.0 を必須とする | SQL |
117 | SQL Server レベルの監査設定の監査 | SQL |
118 | SQL サーバーの Azure Active Directory 管理者のプロビジョニングの監査 | SQL |
119 | Transparent Data Encryption 状態の監査 | SQL |
120 | VMSS でのアプリの正常性チェック付きで OS の自動アップグレードを適用 | Compute |
121 | Windows Server 用の既定の Microsoft IaaSAntimalware 拡張機能のデプロイ | Compute |
122 | イベント ハブ エンティティにおける承認規則の存在の監査 | Event Hub |
123 | イベント ハブにおける診断ログが有効であることの監査 | Event Hub |
124 | イベント ハブの名前空間の承認規則の監査 | Event Hub |
125 | カスタム RBAC 規則の使用監査 | General |
126 | ストレージ アカウントに対する制限のないネットワーク アクセスの監査 | Storage |
127 | ストレージ アカウントの BLOB 暗号化を必須とする | Storage |
128 | ストレージ アカウントへの安全な転送の監査 | Storage |
129 | タグとその既定値のリソース グループへの適用 | General |
130 | タグとその既定値の適用 | General |
131 | タグとその値の適用 | General |
132 | タグとその値をリソース グループに強制的に適用 | General |
133 | ディザスター リカバリーを構成されていない仮想マシンの監査 | Compute |
134 | ネットワーク セキュリティ グループの診断設定の適用 | Monitoring |
135 | リソース グループが許可される場所 | General |
136 | リソースの場所がリソース グループの場所と一致することの監査 | General |
137 | 仮想ネットワーク作成時の Network Watcher のデプロイ | Network |
138 | 許可されていないリソースの種類 | General |
139 | 許可されているストレージ アカウントの SKU | Storage |
140 | 許可されている仮想マシン SKU | Compute |
141 | 許可されている場所 | General |
142 | 使用できるリソースの種類 | General |
143 | 従来のストレージ アカウントの使用に関する監査 | Storage |
144 | 従来の仮想マシンの使用の監査 | Compute |
145 | 診断設定の監査 | Monitoring |
続く・・・かも。