Azure IaaS、仮想マシン のセキュリティ向上あれこれ

本記事は <a href="https://qiita.com/advent-calendar/2019/microsoft-azure-tech">Microsoft Tech Advent Calendar</a>  の 12 日目の記事です。

さて、本記事では、 Azure 仮想マシンをよりセキュアにするために実施すべきことをまとめてみたいと思います。

こちらの内容は、Ignite the tour Tokyo / Osaka で私がお話ししたセッションをベースに解説をしたものです。元々の US で行われた Ignite 2019 のセッション動画は<a href="https://www.youtube.com/watch?v=7qrW1prspAE">こちら</a>からご覧になれます（※英語です）

# はじめに
Azure の仮想マシンのセキュリティをより強固にするために考えるべき要素として、以下のようなものがあげられます。

- セキュアな権限管理
- 仮想マシンのアップデート管理
- AzureFirewall、NSG、ネットワーク仮想アプライアンス（NVA）
- Bastion と Jit （ Just in Time ）アクセス
- アダプティブアプリケーション制御
- ディスク暗号化
- ファイル変更監視
- その他の考慮事項

それでは、一つ一つ見ていきましょう。

# セキュアな権限管理
- ポータルで MFA を有効に
Azure ポータルはとても多機能で、様々な設定やオペレーションを行うことができます。検証時はよいのですが、本番運用を行う際にはセキュリティを高めたいと思います。そこで、本番運用を行うケースでは、 Azure ポータルにアクセスする際に、セキュリティを向上させるために MFA を有効にしましょう。
手順はこちらを参考に。<a href="https://docs.microsoft.com/ja-jp/azure/active-directory/conditional-access/app-based-mfa">
Azure Active Directory の条件付きアクセスを使用して特定のアプリケーションに対して MFA を必要にする
</a>

- RBAC ( Role Based Access Control ) を使って適切に権限を制御
- リソースグループ ( RG ) やサブスクリプションを活用して適切に仮想マシンを配置
- 仮想マシン管理者以外にはそもそも仮想マシンにアクセスする権限を与えない
Azure では、リソースを管理する単位として、サブスクリプション、リソースグループという単位があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167354/f31ada31-97c1-ba73-ec7b-fe8fcba72eeb.png)
それぞれの単位に対して、アクセス制御をかけることができます。これが、RBAC というものになります。適切なリソースに対して適切にアクセス権限をつけましょう。

こちらのブログもご参考に。
<a href="https://www.cloudou.net/azure/azure004/">ロールベース アクセス制御(RBAC) で役割分担</a>

# 仮想マシンのアップデート管理

- Update Management 機能を活用  
Azure には Update Management という、セキュリティパッチを管理する機能が提供されています。これは使わない手はないですね。ダッシュボードには適用されていない更新プログラムが表示され、どういったルールでどのようなタイミングで更新プログラムを適用するか、を設定することができます。さらに、 Azure 以外で稼働する仮想マシンのセキュリティパッチも管理できてしまいます。

手順はこちらに。
<a href="https://docs.microsoft.com/ja-jp/azure/automation/manage-update-multi">複数のマシンの更新プログラムの管理</a>

# AzureFirewall、NSG、ネットワーク仮想アプライアンス （ NVA ）
外部ネットワークと内部ネットワーク、複数のネットワーク間は適切にアクセス制御させる必要があります。これらを実現する Azure のサービスが以下となります。

- NSG ( Network Security Group ） 
シンプルで汎用的に使えるポートフィルタリングです。ソースと宛先間でどのポートを通す、通さないという設定ができます。
<a href="https://docs.microsoft.com/ja-jp/azure/virtual-network/security-overview">ネットワークセキュリティグループ</a>

- Azure Firewall
NSG よりもさらに高度な処理が行える Firewall サービス。L7 機能を持っているため、FQDN でトラフィックをフィルタリングできます。
<a href="https://docs.microsoft.com/ja-jp/azure/firewall/overview">Azure Firewall とは</a>

- NVA ( Network Virtual Appliance )
3rd Party の提供する、NVA を Azure 上にデプロイすることも可能です。マーケットプレイス上から購入することができます。
<a href="https://docs.microsoft.com/ja-jp/azure/virtual-network/virtual-network-scenario-udr-gw-nva">仮想アプライアンスを使用するシナリオ</a>

# Bastion と Jit （ Just in Time ）アクセス
仮想マシンに対してセキュアにアクセスするために、いろいろな方法が考えられます。例えば、Express Route や VPN を活用して、プライベートネットワークで接続させる方法も考えられます。とはいえ、回線コストもかかる、、、しかし、インターネットからアクセスできるポートを開けておくと攻撃されるリスクが高まるので普通はできない。。。

といった悩みに対して、これまでの現実解は踏み台サーバ ( Jump Box サーバ ) を用いる方法がありました。しかし、踏み台サーバを用いると今度はそのサーバの運用管理が必要となります。
そこで、その踏み台サーバをマネージドで提供するのが、Azure Bastion となります。Azure Bastion は Ignite 2019 で GA となりました。

- Bastion  
パブリック IP アドレスを持たない仮想マシンに対して Bastion 経由でアクセスをすることができます。この際の経路は、ポータル画面からブラウザを介して仮想マシンにアクセスを行います。Bastion サーバは Azure が管理を行いますのでご利用者が管理をする必要がなく、さらに NSG の設定も不要です。東日本リージョンでも使うことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167354/11cd5726-2a14-5ee9-87f7-7d9dca0e7ead.png)

設定方法はこちら。
<a href="https://docs.microsoft.com/ja-jp/azure/bastion/bastion-create-host-portal">Azure Bastion ホストを作成する</a>
 
- JiT アクセス  
パブリック IP アドレスを持っている仮想マシンに対して、アクセスするポートを時間限定で開放するサービスです。  
<a href="https://docs.microsoft.com/ja-jp/azure/security-center/security-center-just-in-time">Just-In-Time を使用した仮想マシン アクセスの管理</a>

# アダプティブアプリケーション制御  
Azure Security Center の機能の中に、アダプティブ（適応型）アプリケーション制御という機能があります。この機能では、機械学習を利用して仮想マシンで実行するアプリケーションを分析し、アプリケーション許可リストを作成することができます。

設定方法はこちら。
<a href="https://docs.microsoft.com/ja-jp/azure/security-center/security-center-adaptive-application">Azure Security Center におけるアダプティブ アプリケーション制御</a>

# ディスク暗号化
Azure の仮想マシンのディスクを暗号化します。仮想ディスクを暗号化することで、万が一仮想ディスクが流出しても、中身のデータにアクセスされてしまうことを防ぎます。

設定方法はこちら。
<a href="https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/encrypt-disks">Windows VM の仮想ディスクを暗号化する</a>
<a href="https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/disk-encryption-overview">Linux VM に対する Azure Disk Encryption</a>

# ファイル変更監視  
仮想マシンの OS やソフトウェアに対して加えられた変更をトラッキングすることができます。意図してかそうでないかはともかく、変更をチェックしておくことは重要ですね。

設定方法はこちら。
<a href="https://docs.microsoft.com/ja-jp/azure/security-center/security-center-file-integrity-monitoring">Azure Security Center のファイルの整合性の監視</a>

# その他の考慮事項

- Security Center によるセキュリティスコアの評価 
IaaS に限らずですが、Security Center の機能を用いて、継続的に評価を行いましょう。オンプレの環境も評価できます。
<a href="https://docs.microsoft.com/ja-jp/azure/security-center/security-center-intro">Azure Security Center とは</a>

- バックアップ 
不測の事態に備えて、バックアップを取っておきましょう。Azure Backup が簡単でかつオンラインバックアップ取得、ファイル単位や VM 単位でリストアなど多機能でありかつ簡単に実装できるのでお勧めです。
<a href="https://docs.microsoft.com/ja-jp/azure/backup/backup-overview
">Azure Backup サービスとは</a>

- 可能な限り最新の仮想マシンイメージを
最新のイメージはアップデートが施されて脆弱性が潰されていることが多いため、できる限り最新のイメージを使いましょう。

- アダプティブネットワーク
念のために少し広めのレンジで NSG のポートを開けていたりしませんか？ Security Center の機能で、実際に使われているトラフィックと NSG のルールが異なっている場合、機械学習のアルゴリズムにより、より範囲を狭めたルールを提案してくれます。
<a href="https://docs.microsoft.com/ja-jp/azure/security-center/security-center-adaptive-network-hardening">Azure Security Center でのアダプティブ ネットワークのセキュリティ強化機能</a>


# まとめ    
いかがでしたでしょうか。
Azure には 仮想マシンを保護するためのセキュリティ機能が豊富にありますので、ぜひこうした機能を有効に活用して、セキュリティを確保しながら運用を楽にして、より多くの事ができるようになって頂ければ幸いです。

最後にこちらもご参考に。
<a href="https://docs.microsoft.com/ja-jp/azure/security/fundamentals/iaas">Azure における IaaS ワークロードのセキュリティに関するベスト プラクティス</a>