vm.gowatana.jp

NEOにほんごVMware(仮)

CloudHealth Secure State に Azure AKS を接続して Kubernetes セキュリティ設定を確認してみる。

CloudHealth Secure State(新しい名前は VMware Aria Automation for Secure Clouds)では、Kubernetes のセキュリティ ポスチャ管理(KSPM)に対応していてセキュリティ設定を確認できますが、その機能は Free Tier でも利用できるようです。

そこで、Azure Kubernetes サービス(AKS)で作成した Kubernetes クラスタを登録してみました。

今回の内容です。

 

今回の環境

下記の投稿でセットアップしてある CloudHealth Secure State Free Tier を利用しています。

 

Azure では、AKS による Kubernetes クラスタを「ssaks01」という名前で作成してあります。設定値は、ほぼデフォルトの最小構成です。

 

CloudHealth Secure State への Kubernetes の登録(AKS)

AKS の Kubernetes クラスタが Secure State で検出されると、下記のようにメッセージが表示されるので「ATTACH CLUSTER」をクリックします。

ちなみに、メッセージにあるように Secure State Free Tier では 5クラスタまで接続できます。

 

もしくは、「Settings」→「Kubernetes Clusters」を開きます。

 

検出(Discovered)されている Kubernetes クラスタで、「Attach cluster」をクリックします。

 

「1. General」画面では、Kubernetes の情報が検出されているのでそのまま「NEXT」をクリックします。

 

「2. Install Collector」画面が表示されるので、手順に記載されている kubectl コマンドを、登録する Kubernetes で実行します。

 

AKS であれば、Azure Portal の Cloud Shell(画面上部のアイコンをクリックすると起動される、黒背景のコマンド実行環境)から kubectl を実行すると便利です。

ちなみに、Kubernetes にコマンドを実行するまでの手順は、「接続」をクリックすると表示されます。

 

kubectl で Kubernetes クラスタに接続できたら、「2. Install Collector」にあったコマンドを実行して、namespace と secret を作成します。

$ kubectl create namespace chss-k8s && kubectl create secret generic collector-client-secret --from-literal=COLLECTOR_CLIENT_SECRET='XXXXXXXX' -n chss-k8s

 

ウィザードの例では1行のコマンドになっていますが、よく見ると下記のように 2つの kubectl コマンドを実行しています。

$ kubectl create namespace chss-k8s
$ kubectl create secret generic collector-client-secret --from-literal=COLLECTOR_CLIENT_SECRET='XXXXXXXX' -n chss-k8s

 

続けて、「2. Install Collector」画面から YAML ファイル(chss-k8s-collector.yaml)をダウンロードします。このファイルには、Kubernetes クラスタに Collector を作成するためのリソース定義が記載されており、kubectl apply コマンドで適用します。

 

Cloud Shell を利用する場合は、赤枠のボタンからファイルをアップロードできます。

 

chss-k8s-collector.yaml ファイルから、Kubernetes にリソースを作成します。

$ kubectl apply -f chss-k8s-collector.yaml

 

少し待つと、「chss-k8s-~」という名前の Pod が Running になります。

go@Azure:~$ kubectl get all -n chss-k8s
NAME                            READY   STATUS    RESTARTS   AGE
pod/chss-k8s-68764bd6f6-dscrz   1/1     Running   0          50s

NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/chss-k8s   1/1     1            1           50s

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/chss-k8s-68764bd6f6   1         1         1       50s

 

この状態になったら、Secure State 側で「DONE」をクリックしてウィザードを終了します。

 

これで Kubernetes クラスタが登録され、Status が Ready になります。

 

インベントリでの Kubernetes クラスタの確認

Secure State のインベントリから、AKS の Kubernetes クラスタを確認してみます。

「Explore」→「Inventory」を開きます。

 

「Containers」→「Azure AKS」→「Azure.AKS.ManagedCluster」を開きます。

 

AKS の Kubernetes クラスタが、1件だけ登録されていることがわかります。さらに「OPEN IN EXPLORE」をクリックします。

 

登録した AKS クラスタ「ssaks01」が表示されるので、展開してみます。

 

ssaks01 クラスタの Risk Score が「10」と表示されているので 、「VIEW FINDINGS」でリスクを検出したルールの内容を確認してみます。

 

「AKS should have diagnostic settings configured」という、診断情報取得設定が構成されてないことを検出するルールにマッチしていたことがわかります。

これは、「CIS Azure Foundations Benchmark 1.4.0」フレームワークにもとづいたもので、説明や Knowledge Base へのリンクが用意されています。

 

ちなみに Knowledge Base のリンク先には、設定修正手順(Remediation Steps)なども紹介されています。

 

調査結果全体からの確認

さきほどはインベントリから特定のクラスタの情報を確認しましたが、ここでは Secure State 全体の調査結果から Kubernetes のリスクとなる設定を確認してみます。

ダッシュボードのを確認すると「Kubernetes Clusters」に 1つのクラスタが登録されていることが確認できますが、今回はそこではなく「Rules with findings」のチャートのオレンジ部分をクリックして、ドリル ダウンしていきます。

Findings の一覧に、「Kubernetes」に関係するものがあるのでクリックしてみます。これは、Kubernetes の Namespace に Network Policy が設定されていないことを検出するルールです。

 

該当している Namespace をクリックします。

 

さきほどと同様に、ルールで検出したリスク内容を説明する画面が開けました。これは さきほどのルールとは異なり、「CIS Azure Foundations Benchmark」ではなく「CIS Kubernetes Benchmark」にもとづいていることがわかります。

 

Knowledge Base のリンク先には、さきほどのもの同様にリスクの説明や対応方法が記載されています。

 

Findings 画面に戻って「kubernetes」などで検索すると、AKS の Kubernetes クラスタは、Azure と Kubernetes 両方の CIS Benchmark フレームワークでチェックされていることがわかります。

 

「Governance」→「Compliance」を開くと、Secure State では「CIS Azure Kubernetes Service (AKS) Benchmark」でもチェックもできることがわかります。しかし、Free Tier ではロックされているようです。

 

以上、CloudHealh Secure State Free Tier を利用してみる話でした。