Azure のガバナンス機能を使ってクラウドネイティブガバナンスを実現 ~ 実践編その 1 ~

この記事は

こちらのブログの続きです。はじめての方はこちらを先にお読みいただけると理解が深まるかと思います。 

年末のあわただしさ(言い訳)から概要レベルにとどまってしまいましたが、年も明けたので実践編をしたためていきたいと思います。

Azure Policy とは

Azure Policy では、Azure の各種リソースに対してポリシーを定義・適用することで、プロアクティブな統制を実現することができます。例えば、指定されたリージョンにのみデプロイを許可する、指定された SKU だけデプロイできる、、、なんてことができます。Azure Dev Ops と連携することで CI / CD パイプラインにポリシー準拠機能を組み込んだり、既存リソースに対してポリシーに適合するために変更をかけたりすることができます。2018/9 の Ignite で GA となりました。本ブログでは Azure Policy をもう少し深堀していきます。

イニシアティブとポリシーの関係

Azure Policy はイニシアティブとポリシーという 2 種類の定義を Azure リソースに対して割り当てることができます。イニシアティブとは、複数のポリシーによって構成されるまとめルールのようなもので、いくつかのポリシーをセットにしてまとめることで運用を簡単にすることができます。

f:id:minorun40:20190112213644p:plain

ビルトインで提供されるイニシアティブ、ポリシーはすぐ使えて便利ですが・・・

既にビルトインでいくつかのイニシアティブ、ポリシーが Azure Policy には用意されています。既にあるものは使った方が便利なので使ってしまいましょう。

ただし、イニシアティブを選ぶ場合は、どんなポリシーから構成されているか、ポリシーを選ぶ場合は、そのポリシー定義がどのようなルールとして記述されているか、しっかりと確認してから採用しましょう。

これはあくまでもビルトインとして提供されているものであり、皆様の企業のポリシーやコンプライアンスルールで適用するにはカスタマイズが必要かもしれません。

全てのポリシーは JSON で記述されていますので、その内容を確認していただくことができます。どういった時にポリシー違反となるのか、ならないのかはちゃんと理解しておかないと、思いもよらないところでルール違反を出してデプロイを停止させてしまう場合もあります。

さっそく Azure Policy を適用してみましょう

Azure Policy をリソースグループに適用する流れは以下の通りです。

・割り当てたいルールの種類(イニシアティブかポリシーか)を選ぶ

・割り当てる対象(スコープ)を決める

  Management Group 、サブスクリプション、リソースグループから選べる

  除外設定も可能

・割り当てたい定義(どのイニシアティブ、ポリシーか)を選ぶ

・各種パラメータを決める

試しに一つイニシアティブを割り当ててみます。

Azure Policy のメニューから「割り当て」を選び、

f:id:minorun40:20190112215243p:plain      

出てきたページの上のメニューから「イニシアティブの割り当て」を選びます。

f:id:minorun40:20190112215342p:plain

イニシアティブの割り当てページにて、「スコープ」と「基本」を設定します。

今回は、AzureGovernanceTestというリソースグループをスコープとして設定し、Azure Security Center での監視を有効にするというイニシアティブ定義を使ってみましょう。

f:id:minorun40:20190112220020p:plain

と、ここまでは良いのですが、これを設定するとこの下に大量のパラメータが出てきました。

f:id:minorun40:20190112220231p:plain

これは何でしょうか?

ちょっと戻って、実際にイニシアティブの中身を見てみたいと思います。

イニシアティブの構成要素の確認方法

Azure Policy のメニュー画面で「定義」を開くと、イニシアティブ、ポリシーの一覧が出てきます。「定義の種類」でイニシアティブのみフィルタしてみましょう。

f:id:minorun40:20190112220418p:plain

今回割り当てようとしている、「Azure Security Center での監視を有効にする」を開くと、、、沢山のポリシーから構成されていることがわかりますね。

f:id:minorun40:20190112220657p:plain

試しに一つ、ポリシー定義を開いてみましょう。

一番上にある、IoT Hub における診断ログが有効であることの監査を開くと、以下のような JSON ファイルで構成されていることがわかります。

f:id:minorun40:20190112220955p:plain

ここで、”Parameters” という箇所がありますね。右にある「パラメーター」を開くと、このポリシーで定義されているパラーメーターがわかります。このパラメーターは、ポリシーを割り当てるときに選んで変えられるという設定なのです。

f:id:minorun40:20190112221225p:plain

もちろん、ここを固定値に最初から記述することもできます。毎回聞かれるのが大変、もしくは組織として常に一律の値とすべき、ということであれば固定値に書き換えてカスタムポリシーとして定義することもできます。

“効果”(“effect“)とは

このように、ポリシー定義は、論理条件に従いその振る舞いを定義するのですが、このポリシー定義の重要なところは、”効果”の記述です。

既存のリソースに対してポリシーを割り当てる際に、既存のリソースの状況は知りたいが、いきなり日々のデプロイや運用業務を止められないというシーンはありますよね。そうした時に、アラートだけ上げる、といったようなふるまいを設定するのが、”効果”の箇所となります。以下のような種類の”効果”を選ぶことができます。

  • deny : 監査ログでイベントを生成し、要求は失敗します。
  • audit : 監査ログで警告イベントを生成しますが、要求は失敗しません。
  • append : 定義済みのフィールド セットを要求に追加します。
  • AuditIfNotExists : リソースが存在しない場合に監査を有効にします。
  • DeployIfNotExists : リソースが存在しない場合にリソースをデプロイします。

今回のイニシアティブの割り当てはテストですのでAuditifNotExistsとして割り当ててみましょう。

このように、まずは今のリソースがどのような状態かを確認するためにも、またはポリシー定義の動作確認のためにも、まずは緩めに”効果”を設定すると良いと思います。

参考リンク

ポリシー定義の構造の詳細 - Azure Policy | Microsoft Docs

効果のしくみを理解する - Azure Policy | Microsoft Docs

実際に割り当ててみると、このような感じになりました。

f:id:minorun40:20190112222511p:plain

最後に、現在使用できるビルトインのイニシアティブ、ポリシーを載せておきます。

あくまでも本日(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 VMDependency 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 VMDependency 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

 

続く・・・かも。