VPC環境で利用できます。
ML expert Platformを使用する際に発生し得る問題と解決方法について説明します。
Admission Policy
ML expert Platformは、様々なセキュリティ脅威を検知し、安全な Kubernetes環境を提供するために、独自の Admission Policyを適用しています。
Admission Policyは、デフォルトでユーザーに対してアプリケーションの動作に必要な最小限の権限のみを付与します。ML expert Platformサービスの利用中に Podを作成した際、「admission webhook ...denied the request」というメッセージが表示された場合は、Rule IDごとの解決方法を確認し、適切に対応してください。
| Rule ID | Rule Name | 内容 | 詳細パス |
|---|---|---|---|
| AR-1 | Privileged | privileged: true設定不可 | 表示 |
| AR-6 | Host Network | spec.hostNetwork : true設定不可 | 表示 |
| AR-7 | Host IPC | spec.hostIPC: true設定不可 | 表示 |
| AR-8 | Host PID | spec.hostPID: true設定不可 | 表示 |
| AR-9 | Host Path | spec.volumes.hostPath値は設定不可 | 表示 |
| AR-10 | Host Port | spec.containers.ports.hostPort値は設定不可 | 表示 |
| AR-13 | procMount mask | spec.containers.securityContext.procMount値は設定不可 | 表示 |
| AR-14 | Volume Types | 事前に定義された Volumeタイプのみ許可 | 表示 |
[AR-1] Privileged
Privileged Containerは Container間の分離状態を無効化し、Hostシステムの権限と同等の権限を持ちます。他のユーザーのリソースに影響を与える可能性があります。
設定の例
安全な設定
apiVersion: v1
kind: Pod
metadata:
name: safe-example
spec:
containers:
- name: app
image: nginx
危険な設定
apiVersion: v1
kind: Pod
metadata:
name: unsafe-example
spec:
containers:
- name: app
image: nginx
securityContext:
privileged: true #危険な設定
[AR-6] Host Network
hostNetwork設定は、Podが hostのインターフェース(eth0)を使用できるようにします。これにより、攻撃者は開発 Podの Network Namespaceの分離を回避し、hostネットワークを任意に操作できる可能性があります。
設定の例
安全な設定
apiVersion: v1
kind: Pod
metadata:
name: safe-example
spec:
containers:
- name: app
image: nginx
危険な設定
apiVersion: v1
kind: Pod
metadata:
name: unsafe-example
spec:
hostNetwork: true #危険な設定
containers:
- name: app
image: nginx
[AR-7] Host IPC
hostIPC設定は、Pod内のプロセスが Hostの全プロセスと IPCで通信できるようにします。これにより、Containerを掌握した攻撃者は Hostのプロセスと IPC通信(共有メモリ、メッセージキューなど)が行えるようになります。
設定の例
安全な設定
apiVersion: v1
kind: Pod
metadata:
name: safe-example
spec:
containers:
- name: app
image: nginx
危険な設定
apiVersion: v1
kind: Pod
metadata:
name: unsafe-example
spec:
hostIPC: true #危険な設定
containers:
- name: app
image: nginx
[AR-8] Host PID
hostPID設定は、Podが Host上の全プロセスにアクセスできるようにします。これにより、攻撃者は Hostで実行中の全プロセスに対して、悪意のある操作(kill、attachなど)を実行できるようになります。
設定の例
安全な設定
apiVersion: v1
kind: Pod
metadata:
name: safe-example
spec:
containers:
- name: app
image: nginx
危険な設定
apiVersion: v1
kind: Pod
metadata:
name: unsafe-example
spec:
hostPID: true #危険な設定
containers:
- name: app
image: nginx
[AR-9] Host Path
hostPathタイプのボリュームマウントを使用する場合、分離された Container filesystemから Hostの filepathを使用できます。攻撃者は hostPathの誤った設定により、Hostのシステム関連の重要な Pathを mountし、Hostを掌握できるようになります。
設定の例
安全な設定
apiVersion: v1
kind: Pod
metadata:
name: safe-example
spec:
containers:
- name: app
image: nginx
危険な設定
apiVersion: v1
kind: Pod
metadata:
name: unsafe-example
spec:
volumes:
- name: host-volume
hostPath: #危険な設定
path: /proc
containers:
- name: app
image: nginx
volumeMounts:
- name: host-volume
mountPath: /proc
[AR-10] Host Port
ユーザーが hostPortを使用すると、任意の hostportを解放できるようになります。このような場合、Hostで稼働している様々なアプリケーション間で競合が発生する可能性や、複数の Pod間で hostportの競合が発生する可能性があるため、Kubernetes管理目的の Pod以外では使用しないようにする必要があります。
設定の例
安全な設定
apiVersion: v1
kind: Pod
metadata:
name: safe-example
spec:
containers:
- name: app
image: nginx
危険な設定
apiVersion: v1
kind: Pod
metadata:
name: unsafe-example
spec:
containers:
- name: app
image: nginx
ports:
- containerPort: 80
hostPort: 80 # 危険な設定
[AR-13] procMount mask
基本的に/procおよび/sysパスには Linuxシステム情報が含まれているため、Container内部のセキュリティに関わる機密性の高いファイルやパスについては、マスク処理または読み取り専用として設定されます。機密情報が漏洩したり、Hostシステムに影響を与える可能性があります。
設定の例
安全な設定
apiVersion: v1
kind: Pod
metadata:
name: safe-example
spec:
containers:
- name: app
image: nginx
危険な設定
apiVersion: v1
kind: Pod
metadata:
name: unsafe-example
spec:
containers:
- name: app
image: nginx
securityContext:
procMount: Unmasked # 危険な設定
[AR-14] Volume Types
ML expert Platformでサポートする Volumeは、次の通りです。その他のタイプの Volumeの作成は許可されません。
- configMap
- csi
- downwardAPI
- emptyDir
- configMap
- ephemeral
- persistentVolumeClaim
- projected
- secret
設定の例
安全な設定
apiVersion: v1
kind: Pod
metadata:
name: safe-example
spec:
volumes:
- name: config
configMap:
name: app-config
containers:
- name: app
image: nginx
volumeMounts:
- name: config
mountPath: /etc/app
危険な設定
apiVersion: v1
kind: Pod
metadata:
name: unsafe-example
spec:
volumes:
- name: nfs-path
nfs: # 危険な設定
server: 10.10.10.10
path: /test/path
containers:
- name: app
image: nginx
volumeMounts:
- name: nfs-path
mountPath: /nfs/path