Azure 上のコンテナーと AKS (Azure Kubernetes Service) の守り方 - Azure のコンテナーのセキュリティ機能まとめ（随時追記）

＊2021年12月に [Microsoft Defender for Containers](https://docs.microsoft.com/ja-jp/azure/defender-for-cloud/defender-for-containers-introduction?tabs=defender-for-container-arch-aks) がリリースされましたので、それに合わせて記事を編集しています。Defende for Containers リリースのアップデート情報については、[こちら](https://qiita.com/YoshiakiOi/items/cf6c19df164e32109402)もご参照ください。

# 本記事について

本記事では、Azure 上でコンテナーや [AKS (Azure Kubernetes Service）](https://docs.microsoft.com/ja-jp/azure/aks/intro-kubernetes)を利用する際に、活用できる Azure のセキュリティ機能をご紹介していきます。

# Azure 上のコンテナー関連サービスについて

Azure では、Virtual Machine (VM) 上でコンテナーを動かすことのほか、マネージドの Kubernetes のサービスである、Azure Kubernetes Service (AKS) やマネージドなプライベートレジストリである、Azure Container Registry (ACR) が提供されています。

また、本記事では対象としませんが、サーバーレスなコンテナー実行環境である、[Azure Container Instance](https://docs.microsoft.com/ja-jp/azure/container-instances/) もありますし、App Service ではコンテナーを実行環境にすることもできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/6a0facdc-b62c-6263-1d6b-d7a7915df589.png)

## 特に本記事で扱うアーキテクチャについて

本記事では、特に Azure Container Registry (ACR), Azure Kubernetes Service (AKS), と Azure 上の Docker を動かしている仮想マシンに焦点を当てます。

* 本記事での対象サービスのアーキテクチャサマリ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/caa84193-4789-7ea9-ab61-72aaba5d1bd5.png)

# コンテナーのセキュリティについて

コンテナーのセキュリティについては、アメリカ国立標準技術研究所（NIST）が [SP 800-190](https://csrc.nist.gov/publications/detail/sp/800-190/final)にて、詳細をまとめています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/f6f3f90a-3773-7ba0-2339-93560218f300.png)

本稿では、その中で示されている Major Risks for Core Components of Container Technologies の5つの項目に沿って、Azure のサービスを利用すると具体的にどのような対策が取れるのかをご紹介していきます。

# 1. Image Risks

Image Risks の項目では、Image Vulnerability や Image Configuration Defects などについて説明されています。

コンテナーイメージのセキュリティ対策で、Azure の機能で利用できるのは [Defender for Containers](https://docs.microsoft.com/ja-jp/azure/defender-for-cloud/defender-for-container-registries-introduction) です。Azure Container Registry にプッシュされたイメージは、Defender for Containers を利用すると、自動でその脆弱性スキャンを実行することができます。なお、ここでは Qualys 社のスキャナーが利用されていますが、Defender for Containers の課金で使用することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/be60f1fa-ce7c-886f-94bc-7ed720f32c74.png)

自分の持つ ACR 上で脆弱性があるイメージがあるかを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/c190a1b5-e807-8dcb-95e8-13d73679e107.png)

そのイメージを選択すると、脆弱性の一覧や、ひとつひとつの脆弱性の詳細な情報を取得することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/10b268cc-3469-3e35-418b-5a01a8f70195.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/e929401b-b7dd-4671-fdc9-667481ed6ed7.png)

加えて、Defender for Containers では、実行中のコンテナーの脆弱性を評価したり、GitHub Actions でビルドされたイメージの脆弱性を評価することもできます。

# 2. Registry Risks

この項目では、レジストリのリスクについて説明があり、セキュアでない接続や不十分な認証・認可などがリスクとして挙げられています。

Azure Container Registry は、セキュアに設計されたコンテナーレジストリです。[Azure Active Directory を利用した認証](https://docs.microsoft.com/ja-jp/azure/container-registry/container-registry-authentication)や[ロールベースアクセス制御](https://docs.microsoft.com/ja-jp/azure/container-registry/container-registry-roles)、[署名済みのイメージのプッシュ・プルの機能](https://docs.microsoft.com/ja-jp/azure/container-registry/container-registry-content-trust)（Premium SKU のみ)などの機能を提供しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/621e2ac0-287d-6ea8-a2e7-2bfbfdbfd692.png)

# 3. Orchestrator Risks

オーケストレーターのリスクとしては、制限がされていない特権アクセスや認可されていないアクセス、分離が不十分な内部ネットワークトラフィックなどが挙げられています。

ここでは、特にマネージドな Kubernetes サービスである、AKS に特化してご紹介したいと思います。オーケストレーターのリスクに対しては、[Defender for Containers](https://docs.microsoft.com/ja-jp/azure/security-center/azure-kubernetes-service-integration) はプロアクティブな対応である AKS の構成の問題の特定と、脅威発生時の検知機能を提供しています。Defender for Cloud の CSPM (Cloud Security Posture Management) 機能の一部という位置づけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/8922b1c2-7956-d1ab-dffd-dbb52c42c6c6.png)

## 構成の問題の特定

こちらでは、[推奨事項](https://docs.microsoft.com/ja-jp/azure/defender-for-cloud/recommendations-reference#container-recommendations)として、特に RBAC (ロールベースアクセス制御) の問題の特定やアプリケーションが特権を持たないようなポッドのセキュリティポリシーの設定を提示します。

現在、コンテナーについては22種類の推奨事項が提供されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/644a2351-8a9c-f7c7-e958-de3332608528.png)


特に[ロールベースアクセス制御](https://docs.microsoft.com/ja-jp/azure/aks/concepts-identity#role-based-access-controls-rbac)は、アプリケーションのワークロードと顧客データを保護するのに役立ち、AKS では、[Azure Active Directory](https://docs.microsoft.com/ja-jp/azure/aks/concepts-identity#azure-active-directory-integration) を利用できます。

## 脅威の検知

AKS の API サーバーからの監査ログから、Kubernetes 上での脅威を検知することもできます。具体的なアラートは、[こちら](https://docs.microsoft.com/ja-jp/azure/defender-for-cloud/alerts-reference#alerts-k8scluster)で公開されています。

検知されるアラートには、たとえば Podの異常な展開や Core DNS の異常な書き換え、Dashboardやサービスの公開などが含まれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/28dbf237-cdc8-fbd8-4752-2ea7f1e90323.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/5b415e35-0b98-a051-676e-9586a74c8f70.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/3004e159-09a7-a6e1-248e-07486a91fb31.png)

特権ロールへの新しいバインドや新しい高い特権ロールなども検知されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/fa2f90c7-2b8e-d4ce-60f4-13a8c606cc10.png)

# 4. Container Risk

コンテナーそのもののリスクとしては、制限のないネットワークアクセスやランタイムの問題などが挙げられています。

Microsoft Defender for Cloud では、Docker を動かしているホスト (Defender for Servers) と AKS クラスター（Defender for Containers）のそれぞれに対して、構成の特定や脅威検知を提供しています。

## 脅威検知

### Docker を動かしている Linux 仮想マシン

Docker を動かしているホストに対して、エージェントからのセキュリティイベント情報を分析し、[実際に起こっている脅威を検知](https://docs.microsoft.com/ja-jp/azure/defender-for-cloud/alerts-reference#alerts-linux)する機能を提供しています。

これには、特権コンテナーやSSHサーバーの実行、Docker デーモンの公開の検出が含まれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/3766e00f-1456-8ec9-4ffe-71ce9f84e73a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/59cbfbba-caff-42d5-260b-a472ec42910a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/ebf4d9eb-8903-c6d8-ce5e-2d52717fa090.png)

### AKS クラスター

また、AKS のクラスターに対しては、Kubernetes の監査ログと各ノードに配布される Daemon Setからセキュリティ情報を収集し AKS環境での脅威を検知します。このアラートには、特権コンテナーの検出やデジタル通貨マイニング用のコンテナーの検出に加え、不正なコマンドの実行や悪質なファイルのダウンロード、Kubernetes Dashboard の公開などがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/8922b1c2-7956-d1ab-dffd-dbb52c42c6c6.png)

Defender for Containers が検知するアラートは、APIサーバーとノードからの検知の合計で2021年12月現在[78種類](https://docs.microsoft.com/ja-jp/azure/defender-for-cloud/alerts-reference#alerts-k8scluster)用意されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/fea05e05-c066-7a1e-d166-b06b676c98cf.png)

## 構成の監査と保護

### Docker を動かしている Linux 仮想マシン

VM の上で Docker を実行している場合には、[CIS Docker Benchmark との比較](https://docs.microsoft.com/ja-jp/azure/security-center/container-security#continuous-monitoring-of-your-docker-configuration)機能を利用できます（Defender for Servers）。

Defender for Servers が利用する Log Analytics エージェントは、VM の中で Docker が動いているかを検知し、その構成について、CIS Docker Benchmark と比較して結果が "Failed" だったものを表示してくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/b9ee2af8-b083-f329-9d77-f03bad80130a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/06a185a0-2577-25bd-4dec-50c385a4cd9a.png)

### AKS クラスター

一方 AKS クラスターに対しては、Defender for Containers で、[Azure Policy for Kubernetes 連携を利用し、クラスター上での不正な操作のブロックや監査](https://docs.microsoft.com/ja-jp/azure/defender-for-cloud/kubernetes-workload-protections)を行うことができます。（上記ダイアグラムの Gatekeeper, Azure Policy を利用。）

こちらでは、17種類のプリセットされたルールを使って監査やブロックを有効化します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/7b29cdb0-e309-71a5-42b6-645c1842bcb0.png)

# 5. Host OS Risks

ホストOSのリスクとしては、広いアタックサーフェスやOSのコンポーネントの脆弱性、ファイルシステムのタンパリングなどが挙げられています。

## Docker を動かしている Linux 仮想マシン

特に Azure の VM 上でコンテナーを実行している場合、ホスト OS のセキュリティには、[Defender for Cloud の Linux 向けの機能](https://docs.microsoft.com/ja-jp/azure/defender-for-cloud/supported-machines-endpoint-solutions-clouds?tabs=features-linux#vm-server-features)を活用できます。

たとえば、[統合された脆弱性スキャナー](https://docs.microsoft.com/ja-jp/azure/security-center/built-in-vulnerability-assessment)で Qualys のエージェントを利用して Linux の脆弱性をチェックしたり、[FIM (File Integrity Monitoring)](https://docs.microsoft.com/ja-jp/azure/security-center/security-center-file-integrity-monitoring-baselines) で特定のファイルの改ざんを検知したりすることができます。

## AKS クラスター

一方、AKS の場合は、[既定でセキュリティが最適化されたホスト OS を提供](https://docs.microsoft.com/ja-jp/azure/aks/security-hardened-vm-host-image)しています。

# 補足

## （補足）AKS のベストプラクティス

本記事では主に、Defender for Containers でできることをメインにご紹介しました。一方で、より広範囲にわたる、AKS のベストプラクティスについては、[こちらのドキュメント](https://docs.microsoft.com/ja-jp/azure/aks/best-practices)にて、詳細にまとめられています。

## （補足） Microsoft Defender for Cloud の 価格

Defender for Cloud はリソースのタイプによって異なる従量課金モデルになっています。詳細は、[こちら](https://azure.microsoft.com/ja-jp/pricing/details/azure-defender/)をご参照ください。

# 最後に

＊本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。

# 参考資料

[Detecting threats targeting containers with Azure Security Center](https://azure.microsoft.com/ja-jp/blog/detecting-threats-targeting-containers-with-azure-security-center/)
：実際に起こっているDocker環境での脅威と、Azure Security Center がそれをどう検知するかを解説した記事です。