Kubernetesのセキュリティの悩みを解決するStackRoxの導入

★★★ Live配信告知 ★★★ぜひお申込みください!
◆◇SIOS PS Live配信 第20回◆◇
9/28(水) 19:00~ 〜 Google Cloudで実現したクラウド型電子カルテサービス「INDIGO NOTE」の開発小話 〜 開発に携わった3人のエンジニアが「Indigo Note」の概要、フロント開発・API開発をお話しします。

こんにちは、サイオステクノロジーの前田です。アプリケーションのコンテナリリースが増えてきました。アプリケーションを運用するときにはセキュリティ要素が気になることも多いのではないでしょうか。本記事では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の『組織と情報システムのためのセキュリティおよびプライバシー管理策』

 

IP制限に関して

サーバのセキュリティで一般有名なのがファイヤーウォールやIP制限ではないでしょうか、KubernetesもNetworkPolicyというリソースを設定することで制限が可能です。

Kubernetesのネットワークポリシー

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台作成してください。

StackRoxドキュメント

導入手順概要

  • 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の悩みの一つを解決できたら幸いです。





ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!


ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

Be the first to comment

Leave a Reply

Your email address will not be published.


*