こんにちは。IBM Cloud Privateについて、かなり間が空きましたが、前々回にインストールの内容を投稿しました。
今回は脆弱性アドバイザー(Vulnerability Advisor)を追加してみたいと思います。
脆弱性アドバイザーって何?
ドキュメント上では下記のように説明されています。
脆弱性アドバイザーは、IBM® やサード・パーティーによって提供されるか、組織のレジストリー名前空間に追加された、コンテナー・イメージのセキュリティー状況を検査します。 Container Scanner が各クラスターにインストールされている場合、脆弱性アドバイザーは、実行中のコンテナーの状況も検査します。 https://console.bluemix.net/docs/services/va/va_index.html#about
ICPで管理しているイメージや稼働しているコンテナー上で脆弱性をもつパッケージがないかと設定について問題がないかをレポートしてくれます。
また、この機能の開発は日本のラボで開発されているとのことです。
既存のICPの環境にVulnerability Advisor(VA)を追加して、イメージのスキャンとコンテナーのスキャンまでできることを確認してみたいと思います。
※注意※ 既存環境が存在しており、その環境にWorkerノードを追加構築していく想定の手順となっていますので、環境がまだないという方はインストール方法を参考に作ってみていただければと思います。 また、商用版のIBM Cloud Privateを想定した手順となっておりますので、CE版での実施は想定しておりません。(VAはCE版では利用できません。) あらかじめご了承ください。
また、今回の環境はICP 3.1.1の環境をベースに作成しています。
前回投稿したICPのインストール手順では3.1.0を利用していますが、今回手順については3.1.0でも変わりませんので、各コマンド部分の3.1.1部分を3.1.0に読み替えて実施してみてください。
脆弱性アドバイザー(VA)のインストール
既存環境
サーバースペックは同じもので2台のサーバーがあります。
OS | RedHat Endterprise Linux 7.4 |
物理/仮想 | 仮想 |
CPU(Core) | 8 |
Memory | 24GB |
Disk | 300GB |
NIC | 1つ |
Master ServerとWorker Serverが1台ずつあります。 ICPのバージョンは3.1.1になります。
以前、投稿した手順は3.1.0になります。3.1.1でも同様の手順でインストールできます。
また、この手順は3.1.0でも同様の作業内容になりますので、記載されているバイナリ名や、設定名等、 3.1.1 となっている部分は 3.1.0 と読み替えて手順を実施してください。
事前準備
WorkerやVAにするノードを準備します。
今回は以既存環境と同じスペックのRHELの仮想マシンと同じものを用意します。
Linux on PowerやLinux on IBM Z でも動作は可能(VAは制限あり)ですので、動作環境の詳細は下記をご参照ください。
https://www.ibm.com/support/knowledgecenter/en/SSBS6K_3.1.1/supported_system_config/supported_os.html
追加するノード
追加するノードは下記になります。
Host name | IP | 作業ユーザー |
---|---|---|
icp-poc-va1.icp.local | xxx.xxx.xxx.158 | root |
追加ノードで行う作業
追加するノードでは下記の事を行います。
- 通信ポートの確認
- SE Linux の無効化、Firewallの無効化
- /etc/hostsを設定
- 時刻の同期
- Python のインストール(の確認)
- Dockerのインストール
- (後から作業) sshサービスの再起動
通信ポートの確認
下記コマンドを実行してなにも表示されないことを確認します。
ss -tnlp | awk '{print $4}' | egrep -w "8001|8500|3306"
SE Linux の無効化、Firewallの無効化
SE LinuxとFirewallを無効化します。
SE Linuxは /etc/selinux/config をdisableに変更します。
Firewallは下記のコマンドを実行します。
systemctl stop firewalldsystemctl disable firewalld
/etc/hostsを設定
クラスターに存在するすべてのノード(Master/Worker/VA/Management/Proxy)を /etc/hosts に指定します。
前
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4xxx.xxx.xxx.161 icp-poc-master1.icp.localxxx.xxx.xxx.164 icp-poc-worker1.icp.local
後
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4xxx.xxx.xxx.161 icp-poc-master1.icp.localxxx.xxx.xxx.164 icp-poc-worker1.icp.localxxx.xxx.xxx.158 icp-poc-va1.icp.local
時刻の同期
追加するノードと既存のサーバー群と時刻の差が出ないように時刻同期を行います。
時刻同期方法は各Linuxのドキュメントをご確認ください。
RHELで時刻、時刻同期の設定の確認は下記コマンドでできます。
# timedatectl
Local time: Tue 2019-01-08 11:01:18 JST
Universal time: Tue 2019-01-08 02:01:18 UTC
RTC time: Tue 2019-01-08 02:01:17
Time zone: Asia/Tokyo (JST, +0900)
NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
Python のインストール(の確認)
Pythonがインストールされていることを確認します。
サポートされているPythonのバージョンは、2.6,2.7,3.5以上になります。
# python --version
Python 2.7.5
Dockerのインストール
Dockerをインストールします。DockerのバイナリーはIBM社から提供されています。
- IBM Cloud Private 3.1.1 Docker for Linux (x86_64) (CNXD2EN )
size: 141MB
このファイルをノード上にコピーし実行します。
cd /(ファイルをコピーした場所)
./icp-docker-18.03.1_x86_64.bin --install
※このとき、内部で別のコンポーネントをyumでインストールします。
dockerが自動起動されるように設定します。
systemctl start docker
systemctl enable docker
(後から作業) sshサービスの再起動
既存のMaster ServerからSSH Keyをコピーした後にSSH Serviceの再起動を行います。
後述の手順内で再度ご案内します。
Master Serverで行う作業
実際のインストール作業については既存のMaster Serverから行います。
- SSH Keyのコピー
- (後から作業) sshサービスの再起動
- バイナリーファイルの確認
- ノードへのVAインストールの実施
- ノードの状態の確認
- Master Serverへの機能のAddon
SSH Keyのコピー
Master Server上からノードにSSH Keyをコピーします。
ssh-copy-id -i ~/.ssh/id_rsa.pub <user>@<node_ip_address>
今回は、下記の情報を使ってコマンドを実行します。
user | node_ip_address |
---|---|
root | xxx.xxx.xxx.158 |
ssh-copy-id -i ~/.ssh/id_rsa.pub root@xxx.xxx.xxx.158
!!!ノードで作業!!! sshサービスの再起動
ノード上でSSH Serviceを再起動します。
systemctl restart sshd
バイナリーファイルの確認
下記にLinux用のバイナリーファイルがあることを確認します。
インストールパスを変更している場合は適宜読み替えてください。
Path | File name |
---|---|
/opt/ibm-cloud-private-3.1.1/cluster/images | ibm-cloud-private-x86_64-3.1.1.tar.gz |
コマンド
# ls /opt/ibm-cloud-private-3.1.1/cluster/images ibm-cloud-private-x86_64-3.1.1.tar.gz
VAの追加
VAの追加は下記のコマンドを参考に実行します。
docker run --rm -t -e LICENSE=accept --net=host -v \
$(pwd):/installer/cluster ibmcom/icp-inception-$(uname -m | sed 's/x86_64/amd64/g'):3.1.1-ee va -l \
ip_address_vanode1,ip_address_vanode2
IPアドレス xxx.xxx.xxx.158 をVAとして追加しますので、実行するコマンドは下記になります。
cd /opt/ibm-cloud-private-3.1.1/cluster
docker run --rm -t -e LICENSE=accept --net=host -v \
$(pwd):/installer/cluster ibmcom/icp-inception-$(uname -m | sed 's/x86_64/amd64/g'):3.1.1-ee va -l \
xxx.xxx.xxx.158
ノードの状態の確認
追加したノードがVAとして登録されているか確認します。
ICP管理コンソールから[プラットホーム]-[ノード]を開きます。
IPアドレスの末尾 158 の役割に VA と記載されていることを確認します。
Master Serverへの機能のAddon
最後にMaster ServerとVAノードに機能をデプロイ(アドオン)します。
Master Server上のConfig.yamlを編集します。
vi /opt/ibm-cloud-private-3.1.1/cluster/config.yaml
変更前
## You can disable following services if they are not needed:
# custom-metrics-adapter
# image-security-enforcement
# istio
# metering
# monitoring
# service-catalog
# storage-minio
# storage-glusterfs
# vulnerability-advisor
management_services:
istio: disabled
vulnerability-advisor: disabled
storage-glusterfs: disabled
storage-minio: disabled
変更後
## You can disable following services if they are not needed:
# custom-metrics-adapter
# image-security-enforcement
# istio
# metering
# monitoring
# service-catalog
# storage-minio
# storage-glusterfs
# vulnerability-advisor
management_services:
istio: disabled
vulnerability-advisor: enabled #←disabledからenabledに変更
storage-glusterfs: disabled
storage-minio: disabled
下記の内容を参考にコマンドを実行します。
docker run --rm -t -e LICENSE=accept --net=host -v $(pwd):/installer/cluster ibmcom/icp-inception-ARCH:3.1.1-ee addon
Dockerイメージ名が異なりますので、下記のように変更して実行します。
cd /opt/ibm-cloud-private-3.1.1/clusterdocker run --rm -t -e LICENSE=accept --net=host -v $(pwd):/installer/cluster ibmcom/icp-inception-amd64:3.1.1-ee addon
VA動作の確認
VAの機能追加完了後は、管理コンソール上でスキャンの状況やレポートが確認できるようになります。
管理コンソールのログアウト/ログイン
管理コンソールにログインした状態で機能の追加を行った場合は画面が正常に表示されない場合がありますので、管理コンソールからログアウトし、再度ログインします。
コンテナーイメージのスキャン状況の確認
VAの機能が有効化されると自動的にコンテナーイメージのスキャンが実行されます。
すべてのイメージをスキャンするには時間がかかりますが、スキャン済みのものからステータスの確認ができますので開いています。
-
管理コンソールを開きます。
-
メニューから[コンテナー・イメージ]を選択します。
-
一覧が表示されます。セキュリティー・スキャンのステータスに 成功 or 失敗しました のステータスがあるものはスキャンが完了しています。
-
失敗している ibmcom/curl-amd64 をクリックします。
-
スキャンの結果、問題がいくつあるか表示されています。
スキャンの表示 をクリックします。 -
スキャン結果のレポートが表示されます。
Organizational Policiesでは違反理由が表示されています。
今回はイメージ内にインストールされたパッケージ上に既知の脆弱性が含まれていることが示されています。 -
[vulnerable Packages]のタブをクリックします。
ここでは脆弱性の影響を受けるパッケージの情報が表示されます。 -
[Container Settings]のタブをクリックします。
ここではコンテナーの設定に対して潜在的な脆弱性の問題や推奨されてる設定について表示されます。
今回は見つかっていませんが、Security MisconfigurationsやRisk Analysisの情報も確認できます。 -
次に稼働しているContainerのスキャンレポートを確認します。
管理コンソールから[ツール]-[脆弱性アドバイザー]を選択します。
※ツールメニューが表示されない場合は管理コンソールのログアウト/ログインを行ってください。 -
[kube-system]を選択します。
-
別のタブが開き、[Vulnerability Advisor(List Containers)]が表示されます。
Filterに[mariadb]と入力し、Organizational Policiesのステータスが Violation となっているリストをクリックします。
-
Imageスキャンの結果と同じように Organizational Policies / Vulnerable Packages / Container Settings / Security Misconfigurations / Risk Analysis の情報が表示されます。
以上がVAの展開からスキャンの結果の表示までの手順になります。
このほかにも **Mutation Advisor というContainer上で変更があった場合に検知する機能もあります。
今後、検証する予定ですので、別途レポートを投稿したいと思っています。
Docker Containerの利用が広がるにつれて、すでに公開されているDocker Imageを使ったり、公式で公開されているDocker Imageから作成したDocker Imageを利用する機会が増えてくると思いますが、Docker Image自体にセキュリティ上の問題がないか、設定上にも不備がないかもチェックしていかなければならないかと思います。
脆弱性のあるパッケージの確認についてはいろいろと製品が出てきてはいますが、Vulnerability AdvisorはICPに付属している製品ですので、ぜひ試してみてください。
参考URL:
https://www.ibm.com/support/knowledgecenter/en/SSBS6K_3.1.1/manage_applications/disable_service.html
https://www.ibm.com/support/knowledgecenter/en/SSBS6K_3.1.1/installing/add_node.html
最後に
IBM Cloud PrivateのPoC環境の貸し出しも実施しています。
https://www.networld.co.jp/product/ibm-hardware/trial/
Web上にVA機能についてのPoCについて記載はありませんが、PoC環境でVAも使って検証してみたい!といったご要望がありましたら問い合わせ窓口からご相談ください。
すずきけ