説明
hostPath ボリュームをコンテナーにマウントすると、ノードのファイルシステムに直接アクセスできます。システムエージェントなど、ノードへのアクセスが不可欠な場合を除き、通常のアプリケーションでは用途に合ったストレージを使用してください。
ワークロードを kube-system に移すだけでは、ファイルアクセスは制限されません。リスクは実際のホストパス、コンテナーのマウント設定、ファイル権限によって異なります。
想定される影響
- ノードの設定、ログ、認証情報がコンテナーから読み取られる可能性があります。
- 書き込み権限がある場合、ホストファイルの変更が他のワークロードやノードの動作に影響するおそれがあります。
- ノードごとのファイルの状態に依存し、ワークロードの動作が異なる場合があります。
対処方法
- アプリケーションデータには適切なストレージの PVC、設定には ConfigMap、機密情報には Secret などを検討してください。
- 必須のシステムワークロードだけに必要なホストパスを許可し、読み取りだけでよければ
readOnly: trueを設定してください。 - 対象ワークロードを作成・変更できる権限も制限してください。名前空間の名前だけをセキュリティ境界としないでください。
例
次の例はボリューム宣言の抜粋です。セレクター、Pod のラベル、volumeMounts などは省略しています。実際の利用では必要な項目とサポートされるイメージを設定してください。
変更前
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: default
spec:
template:
spec:
containers:
- name: nginx
image: nginx:1.14.2
volumes:
- name: static-page-dir
hostPath:
path: /var/local/static
type: DirectoryOrCreate
一般的なアプリケーションにホストの /var/local/static ディレクトリを提供する構成です。マウントすると、アプリケーションがノード上のファイルに依存します。
変更後
yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd-elasticsearch
namespace: kube-system
spec:
template:
spec:
containers:
- name: fluentd-elasticsearch
image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
volumes:
- name: varlog
hostPath:
path: /var/log
システムのログ収集器が /var/log にアクセスする用途は妥当な場合があります。ただし、kube-system にあるだけでは保護されません。実際の volumeMounts を読み取り専用にし、ログへのアクセス権限を確認する必要があります。