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

#はじめに

[Microsoft Azure Tech Advent Calendar 2018](https://qiita.com/advent-calendar/2018/microsoft-azure-tech) の 19 日目です。
このブログでは、Azure ガバナンスに関して書いていこうと思います。

2018 年はクラウドがより一般的に使われるようになった年でしたね。
普及していくにつれ、企業としてガバナンスをどうやって効かせていくかに悩まれている人も多いのではないかと思います。

#企業における悩み
クラウドの良さは、誰でも簡単にクラウド側の無尽蔵に近いコンピューティングリソースや PaaS を使って素早くやりたいことを実現できることなわけですが、一方で企業としては統制をかけなければいけないという側面もあります。
例えば、コンプライアンス上日本国内でしか使ってはいけない、企業として決められたセキュリティ機能を ON にしないといけない、予算上に限りがある、、、など。
こうした課題に対して、企業ではどのようなアプローチがあるでしょうか。一般的には、チェックシートや管理者による承認を経ないと使えない、、といった管理施策を取られている企業が多いのではないかと思います。しかし、こうした管理施策が、クラウドの良さであるスピードを削ぎ、利用者/管理者双方に無視できない負荷をかけているという場面があるのではないかと思います。
<img src="https://qiita-image-store.s3.amazonaws.com/0/167354/eeeb9c6a-369f-ad04-e8ef-427299a721ad.png" width=80%>

#Azure ガバナンスってなに？
こうした課題に関して、Azure では、企業の統制ポリシーへの準拠状態のチェックや承認、コストの管理などを、人を介さず組み込みポリシーで管理するための各種サービス群を用意しています。
<img src="https://qiita-image-store.s3.amazonaws.com/0/167354/e52d4bf6-ff01-6df8-78f5-0db194a9b73f.png" width=80%>
<img src="https://qiita-image-store.s3.amazonaws.com/0/167354/cbf7a100-b164-83c3-94a8-575fd5e9000b.png" width=80%>
サービスとしては、「 Policy 」、「 Blueprints 」「 Resource Graph 」「 Management Group 」「 Cost 」というサービスになります。

今回のブログでは、主に「 Policy 」、「 Blueprints 」について紹介したいと思います。

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

#Azure Blueprints とは
特定のサブスクリプションや Management Group （複数のサブスクリプションをまとめてグループ化できます）で定義したグループに対して、Azure Policy でセットしたポリシーの適用や、指定した Arm template のデプロイ、指定されたアカウントの権限を付与する定義（ Blueprints = 青写真 ) を作成、配布することで、ポリシーを再利用・再配布可能な形にすることができます。2018/9 の Ignite で プレビューが開始されています。

#やってみましょう
####事前準備
こちらを参考に、「 Management Group （日本語名：管理グループ） 」を作成しておきます。
[Azure 管理グループでリソースを整理する](https://docs.microsoft.com/ja-jp/azure/governance/management-groups/index) 

####ブループリントを作ってみる
管理グループをつくったら、Azure ポータルにて、「 すべてのサービス 」から「 ポリシー 」を選びます。
何度も使う場合は、お気に入り （ ☆ マーク ）にチェックを入れておくと便利です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/167354/31f1525c-a468-140e-925f-257c6dc2efc5.png)

左ペインから「 ブループリント（プレビュー） 」を選びます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/167354/4c3dee81-41bb-ebd9-77ef-9c84fbfd2a56.png)

「 作成 」を選んでみましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/167354/a654e89e-b79e-8146-d764-3913d4edc17c.png)

ブループリントの作成画面で、「 名前 」「 説明 」を記載します。また、「 定義の場所 」には、先ほど作成した管理グループを選択し、「 次へ：成果物 」と進みます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/167354/f5cf338c-4674-5a1d-a16d-75159a599dee.png)

「 成果物 」のタブでどのようなブループリントを作るかを定義します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/167354/0e637b45-823f-c4bb-8cc2-9eb3c4d97cae.png)

いきなり、サブスクリプション単位で統制をかけてしまうと大変なので、まずはリソースグループ単位で実施してみることをお勧めします。
「 ＋成果物の追加 」を押して「 リソースグループ 」を選びます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/167354/20878b9d-6b28-49de-da31-8ce1a93717cc.png)

そうすると、リソースグループを選ぶことができるのですが、後で設定することができます。チェックを外すと明示的に指定できます。現時点ではチェックしたままにしておきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/167354/29e11a8b-2437-2c24-bafd-00cd39a81345.png)

そうすると、リソースグループが成果物に追加されました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/167354/2a21ed21-7cdb-3585-acda-9e739c988a9a.png)

この要領で、ポリシーを追加します。
####ポリシーを作ってみる
![image.png](https://qiita-image-store.s3.amazonaws.com/0/167354/e40a8d13-547f-7de9-3981-72f3434b1fc5.png)
ポリシーの割り当てを選ぶと、現在使用できるポリシーが出てきます。沢山ありますね！
![image.png](https://qiita-image-store.s3.amazonaws.com/0/167354/c08e78a7-f7b8-a3ad-78f6-19c364689b6d.png)
「 検索 」で「 場所 」と入力し、「 許可されている場所 」というポリシーを選び「 追加 」を押します。
「 許可されている場所 」というのは、リソースをデプロイできる場所を制限するポリシーです。
どの場所に制限するのかは、後で設定可能です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/167354/a4bd9d37-8cc1-b12a-b5ad-3559652bff5d.png)
この他、「 ロールの割り当て 」「 ARM テンプレート 」というものも選べます。
「 ロールの割り当て 」では、指定されたアカウントを指定された権限で（ この場合はリソースグループに ）追加できます。「 ARM テンプレート 」は、テンプレートファイルを読み込むことで、ブループリントをデプロイする際に、指定した場所（ この場合はリソースグループに ）リソースを追加することができます。例えば、NSG に診断ログを追加するというポリシーを適用する場合に、そのためのストレージアカウントを追加する、みたいなことができるわけです。
最初は、ポリシーの割り当てだけでも良いでしょう。まずは試してみることが肝心です。

必要なポリシーやアカウント、リソース作成が終わったら、「 下書きの保存 」を行っておきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/167354/471d9afb-3f90-179b-9e42-4a6fe9efe8f0.png)

下書きが終わったら、次は「 発行 」を行います。
「 ブループリントの定義 」から先ほど作成したブループリントを選びます。
準備が良ければ、「 ブループリントを発行する 」を選びます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/167354/c1ded96f-39c5-f8d4-0b05-f09c80bafc16.png)
バージョンを記載して、「 公開 」を押します。ほどなく、発行が完了します。

発行が完了したブループリントは、特定のリソースグループやサブスクリプションに割り当てることができます。「 ブループリントの定義 」から先ほど発行したブループリントを選び、「 ブループリントの割り当て 」を選びます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/167354/69f5eeb5-0445-a272-7348-93ea4377b938.png)

ブループリントの割り当て設定画面では、どのサブスクリプションに割り当てるか、などの設定ができます。ここで、先ほど後で設定するとした、リソースグループや許可されている場所を選ぶことができます。
こちらは、適用したいリソースグループや特定したいリージョンの名前を入力します。
今回は、東日本リージョンに限定するので ["japaneast"] と入力します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/167354/540cfa58-c058-a79e-edd5-bd11c32185e8.png" width=80%>

全ての入力が終わったら割り当てを押してデプロイです！

定義されたスコープにポリシーが割り当てられるまで30分ほどかかるので、お茶でも飲んでゆっくりしましょう。

ポリシーの適用が完了すると、ポリシーの概要ページやコンプライアンスのページから、現在の準拠状況が見えるようになります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/167354/76a6f5e8-5630-c395-0713-5a6f4cb9408e.png)
※この画面はサンプルです。今回のデプロイの結果はもっとシンプルになります。

また、今回のポリシーが適用されると、該当するリソースグループでは東日本リージョン以外でデプロイができなくなります。
試しに西日本リージョンで仮想マシンを作ってみると、、、
![image.png](https://qiita-image-store.s3.amazonaws.com/0/167354/6a9b8d3e-ea48-9967-b48e-9fc2a5bf4190.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/167354/213ea106-ed68-2003-b6a6-a805eabcd1f6.png)
このような感じでポリシーが適用され、ポリシー違反の行為を未然に防がれたことがわかりますね！

ポリシーはカスタムで作成することもできますし、サンプルも公開されています。
[Azure Policy の定義の構造](https://docs.microsoft.com/ja-jp/azure/governance/policy/concepts/definition-structure)
[Azure Policy のサンプル](https://docs.microsoft.com/ja-jp/azure/governance/policy/samples/)
また、ポリシー違反を止めることもできますし、レポートだけ出してデプロイさせることもできます。
[Policy の効果について](https://docs.microsoft.com/ja-jp/azure/governance/policy/concepts/effects)
ブループリントに組み込まなくても、ポリシー単体でデプロイすることもできます。

また、以下ドキュメントも参考にしてみてください。
[Azure の管理 - ガバナンス](https://docs.microsoft.com/ja-jp/azure/governance/)
[エンタープライズ クラウドの導入: クラウド リソース ガバナンスとは](https://docs.microsoft.com/ja-jp/azure/architecture/cloud-adoption/getting-started/what-is-governance)
[Azure エンタープライズ スキャフォールディング - 規範的なサブスクリプション ガバナンス](https://docs.microsoft.com/ja-jp/azure/architecture/cloud-adoption/appendix/azure-scaffold)
[Azure Blueprint とは](https://docs.microsoft.com/ja-jp/azure/governance/blueprints/overview)
[Azure Blueprint のライフサイクルの概要](https://docs.microsoft.com/ja-jp/azure/governance/blueprints/concepts/lifecycle)

また、Tech Summit 2018 にて、Azure ガバナンスに関してデモを交えてセッションを行いました。Tech Summit 2018 のセッション動画と資料が現在公開されています。どなたでもご覧になれますので、ぜひどうぞ！
https://www.microsoft.com/ja-jp/events/techsummit/2018/
<img src="https://qiita-image-store.s3.amazonaws.com/0/167354/71ff120d-d8fd-79f6-645b-12db5e977201.png" width=50%>

それでは、”クラウドネイティブ”な統制を実現してハッピーなクラウドライフを！