こんにちは、サイオステクノロジーの前田です。アプリケーションのコンテナリリースが増えてきました。アプリケーションを運用するときにはセキュリティ要素が気になることも多いのではないでしょうか。本記事ではKubernetesネイティブなセキュリティのStackRoxについて説明していきます。
StackRoxとは
StackRoxはKubernetesネイティブなセキュリティのOSSです。Kubernetesの脆弱性管理や構成管理、コンプライアンスチェック、ネットワークセグメントの可視化、驚異の検出等を行えます。
StackRox の有償なものとしては、Red Hat Advanced Cluster Security for Kubernete(RHACS)が存在します。関係性としてはRHACS(他のOSSプロジェクトを含む)を強化する主要なアップストリームプロジェクトになります。
Kubernetes等のセキュリティについて
コンテナのセキュリティでよく話されるのはNIST 800-190になります。StackRoxは他のいろいろな内容を確認します。詳細に関しましては各種参照先をご覧ください。
-
Kubernets等のセキュリティ観点
- CIS Docker, CIS Kubernetes
- CIS(Center for Internet Security)が発行したベンチマーク
- PCI DSS
- カード情報セキュリティの国際統一基準
- HIPAA
- 医療情報のプライバシーとセキュリティに関する法律。それを満たすためのデータのプライバシーとセキュリティ要件
- NIST SP 800-190
- NIST(National Institute of Standards and Technology)の『アプリケーション・コンテナのセキュリティガイド』
- NIST SP 800 53
- NISTの『組織と情報システムのためのセキュリティおよびプライバシー管理策』
- CIS Docker, CIS Kubernetes
IP制限に関して
サーバのセキュリティで一般有名なのがファイヤーウォールやIP制限ではないでしょうか、KubernetesもNetworkPolicyというリソースを設定することで制限が可能です。
KuberetesやOKDに関するセキュリティリソースやセキュリティアプリに関しては、他にもたくさんあります。例を挙げるとOKDはSCCという管理者等の特定ユーザで実行しないようにする規則設定のリソースがあります。
StackRox導入
StackRoxを導入していきます。StackRoxはLocal、KubernetesやOpenShift環境にデプロイすることができます。今回は下記に記載の条件でインストールしていきます。
環境条件
- Kubernetese基盤 OKD4.10
- 基盤: AWS
- クライアントOS: CentOS Stream
- 永続ストレージ設定あり
本環境はOKDのワーカーノードのスペックをクイックインストールのリソースより増やしております。クイックインストールではワーカーノード1台はCPU 2, メモリ 8GBです。その状態ではリソースが足りなくStackRoxはデプロイできないです。そのためCPU 4, メモリ 16GBのワーカーノードを3台作成してください。
導入手順概要
- Gitからソース取得
- 環境変数設定
- スクリプトを利用したデプロイ
- ※デプロイが最後まで行かない場合のみ SCCの設定
- 正常性確認
導入手順
■Gitからソース取得
$ git clone git@github.com:stackrox/stackrox.git $ cd stackrox
OKDクラスターへのアクセス確認
$ oc get node $ oc get projects
■環境変数設定
$ export LOAD_BALANCER=route $ export STORAGE=pvc
環境変数を設定することによって、いろいろな設定ができます。上記環境変数でルートを利用したURLアクセスと永続ストレージの設定をします。
■スクリプトを利用したデプロイ
$ ./deploy/openshift/deploy.sh
デプロイを行います。インストールするのに必要なコマンドが存在しない場合はエラーが表示されます。その場合はmake等のクライアントをインストールしてから再実行してください。
LAST DEPLOYED: Tue May 17 23:31:44 2022 NAMESPACE: stackrox STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: StackRox Secured Cluster Services 3.70.x-109-gc066f9a34e has been installed. Secured Cluster Configuration Summary: Name: remote Kubernetes Namespace: stackrox Helm Release Name: stackrox-secured-cluster-services Central Endpoint: central.stackrox:443 OpenShift Cluster: 4 Admission Control Webhooks deployed: Admission Control Creates/Updates enforced: false Please take note of the following: - Based on API server properties, we have inferred that you are deploying into an OpenShift 4.x cluster. Set the `env.openshift` property explicitly to 3 or 4 to override the auto-sensed value. IMPORTANT: You have deployed into an OpenShift-enabled cluster. If you see that your pods are not scheduling, run oc annotate namespace/stackrox --overwrite openshift.io/node-selector="" Thank you for using StackRox! service/sensor patched service/central patched (no change) networkpolicy.networking.k8s.io/allow-monitoring unchanged
結果が上記のように表示されます。自動的に完全構築されるまでお待ちください。OKDの画面やpodの動作を見て確認を起動を待ちます。余裕をもって10分程度ぐらいかかると考えてください。
$ oc get deployment -n stackrox
エラーが出ているものや起動していないものがあれば設定を見直します。
※デプロイが最後まで行かない場合のみ SCCの設定
OpenShiftとKubernetsの違いでデプロイに関してよく起きる問題がSCCのセキュリティ制限です。この設定のためKubernetsやDockerではデプロイしたけどOpenShiftではコンテナが作成されないという状態になる場合があります。OpenShiftのほうがセキュリティ設定が多くあるためです。
monitringがデプロイされない場合はSCCで問題が発生している場合があります。下記を設定して下さい。設定するとmonitoringが再デプロイされます。
$ oc create serviceaccount teststackrox -n stackrox $ oc adm policy add-scc-to-user anyuid -z teststackrox -n stackrox $ oc set serviceaccount deployment/monitoring teststackrox -n stackrox
■正常性確認
デプロイ時に表示されているURLではDNSの設定がないためアクセスできません。そのため下記コマンドでURLの情報を確認します。
$ oc get route -n stackrox
StackRoxのURLにアクセスします。パスワードとユーザ情報を入力します。ユーザ名は admin パスワードはクライアント端末に生成されるためコマンドを実行して確認します。
cat deploy/openshift/central-deploy/password
ログインしてStackRoxのトップページを表示します。
コンプライアンススキャンを実施すると上記のように多くの情報が表示されます。
StackRox画面説明
StackRoxの画面を記載します。
- Dashboard
- Network Graph
- Violations
- Compliance
- Vulnerability Management
- Configuration Management
- Risk
最後に
セキュリティというのは、言葉一つで片付ければ簡単なものです。しかし実際は費用や運用稼働等でどのように対応するか大きく変わる項目です。Kubernetesのセキュリティはコンテナのため、サーバで動かしたときと観点が違います。StackRoxはオープンソースです。一度導入して、項目を確認してみて実際に触ってください。全機能を使うのは大変ですが、Network Graphの箇所はkubenretesの理解しにくかったネットワークセキュリティを理解する助けになるはずです。本記事が読まれた方のKubernetsの悩みの一つを解決できたら幸いです。