5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Microsoft Defender for Containers を使った Azure Kubernetes Service (AKS) のセキュリティ監視 - 入門編

Last updated at Posted at 2021-12-10

*2023年1月にスクリーンショットなどを一部更新

本記事について

2021年12月9日に、Microsoft Defender for Cloud (旧 Azure Security Center / Azure Defender)の新しいメニューとなる Microsoft Defender for Containers (以下、Defender for Containers)がパブリックプレビューリリースとなりました。もともとあった、Defender for Container Registry および Defender for Kubernetes を統合し、新たに複数の重要機能をリリースしています。2023年時点で多くの機能が一般提供開始済みになっています。

image.png

本記事では、特に、Defender for Containers となってから追加された機能群となる、動いているコンテナーの脆弱性評価機能と Runtime での脅威検知機能を見ていきたいと思います。一方、より Azure のコンテナーのセキュリティの全体感を知りたい方はこちらの記事をご参照ください。

Defender for Containers のオンボード

オンボードは、Defender for Cloud の環境設定から行います。コンテナーの欄を明示的に「オン」にします。

image.png

加えて 構成の編集で、Defender DaemonSet を有効化します。これにより、AKS のクラスターの各ノードにデーモンセットとして、Defender が利用するポッドがデプロイされます。

image.png

この自動オンボードを有効化しない場合、各リソースのインベントリページから 「クラスターで Defender for Containers の Defender プロファイルを有効化する必要がある」を選択し、Fix をクリックすることで個別に Defender のデーモンセットを AKS クラスターにデプロイすることもできます。

image.png

デプロイが完了すると、AKS 側からはそのデーモンセットが確認できます。(もちろん、kubectlなどを使っても確認できます。)

image.png

イメージの脆弱性監視

コンテナレジストリ上のイメージや GitHub Actions でビルドされたイメージの脆弱性の検知は、もともとの Defender for Container Registry でもできました。これは、Defender for Containers でも引き続き、利用することができます。

〇 Container Registry 上のイメージの脆弱性評価結果

image.png

〇 GitHub Actions (CI/CD パイプライン)上でビルドされたイメージの脆弱性評価結果

image.png

加えて、今回可能になったのが、実行中のコンテナーの脆弱性評価です。ここでは、DVWAのイメージを使って試してみます。Azure Container Registry に自分のレジストリを作り、DVWA のイメージをプッシュします。(ここの手順については、こちらのブログ記事も参考になります。)

docker pull vulnerables/web-dvwa 
Docker tag  vulnerables/web-dvwa:latest  <ACRのレジストリ名>.azurecr.io/vulnerables/web-dvwa:v1
Docker push  <ACRのレジストリ名>.azurecr.io/vulnerables/web-dvwa:v1

次に自分の AKS のクラスターにこのイメージからポッドとロードバランサーを作ります。

〇 dvwa.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dvwa
  namespace: dvwa
spec:
  replicas: 1
  selector:
    matchLabels:
      app: dvwa
  template:
    metadata:
      labels:
        app: dvwa
    spec:
      containers:
        - name: dvwa
          image: yooacr.azurecr.io/vulnerables/web-dvwa:v1
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 250m
              memory: 256Mi
          ports:
            - containerPort: 80
              name: http

〇dvwa-lb.yml

apiVersion: v1
kind: Service
metadata:
  name: dvwa-lb
  namespace: dvwa
spec:
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: 80
  selector:
    app: dvwa

名前空間を作り、上記の YAML ファイルでポッドとロードバランサーをデプロイしてみます。

kubectl create namespace dvwa
kubectl apply -f dvwa.yml
kubectl apply -f dvwa-lb.yml

すると、ロードバランサーの外部 IP アドレスを取得すると、DVWA がちゃんと動いていることを確認できます。

kubectl get services -n dvwa

〇 ブラウザでのアクセス結果

image.png

少し時間がかかることがありますが、その後 Azure Portal で Defender for Cloud へ進み、インベントリページで該当の AKS のクラスターを選択すると、「実行中のイメージの脆弱性を修復する必要があります (Qualys を利用)」という推奨事項が出てくるのでクリックします。

image.png

すると、上述のレジストリ上での脆弱性評価と似たような画面で、実行中のコンテナーの脆弱性スキャン結果を確認できます。

image.png

この機能により、デプロイする前にレジストリ上のイメージを確認するだけでなく、今 AKS 上で動いているコンテナーに脆弱性が無いかを見ていくことができるようになりました。

Runtime での脅威検知

デーモンセットを活用した AKS の各ノード上での脅威検知も、Defender for Cloud になり新しく導入された機能です。

image.png

今までの Defender for Kubernetes では、AKS のコントロールプレーンのログを中心に分析し脅威を見つけていましたが、それに加えデーモンセットからの情報を分析して解析するようになりました。これにより、見つけられる脅威の数が大幅に増加しております。(2021年12月現在で78種類。)
検知可能な脅威のリストはこちらに展開されています。

image.png

こちらも、さきほど AKS クラスターに展開したコンテナーを利用して試してみたいと思います。

まず、DVWA のポッドの中に入ります。

kubectl get pods -n dvwa
kubectl exec --stdin --tty -n dvwa <ポッド名> -- /bin/bash 

そしてその中で、下記のコマンドを実施します。コマンド自体は失敗するかもしれませんが、いったんここではそのままで大丈夫です。

apt update
apt install armitage

数分後、Defender for Cloud のアラート画面に以下のようなアラートが上がってきます。

image.png

image.png

ポッドに攻撃用ツールがインストールされようとしていることが Defender for Containers によって捉えられています。デーモンセットから情報を取れるようになったことで、このようなポッドやノード側の動きが掴めるようになりました!

また、今回の記事では触れませんでしたが、Defender for Containers では、Defender for Kubernetes の頃から利用できる Azure Policy for Kubernetes 連携を利用し、クラスター上での不正な操作のブロックや監査を行うこともできます。(上記ダイアグラムの Gatekeeper, Azure Policy を利用。)

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

image.png

Azure Kubernetes Service (AKS) 利用時のセキュリティアーキテクチャについて

マイクロソフト社の Azure の GitHub Repository にて Azure Kubernetes Service: セキュリティの脅威への対策ガイドが公開されていますので、こちらもご参照ください。

最後に

本稿では Defender for Cloud の新メニューとなる Defender for Containers の新機能である、実行中のコンテナーの脆弱性評価や Runtime での脅威検知機能を見てきました。昨今、Azure Kubernetes Service (AKS) を利用してシステム構築を行われることが増えてきておりますが、その際に Defender for Containers を利用してセキュリティ監視をしていただく一助となれば幸いです。

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

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?