セキュリティ設定問題

Prev Next

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