Openshift - SCC

Reading time: 4 minutes

このページの元の著者は Guillaume

定義

OpenShiftの文脈において、SCCはSecurity Context Constraintsを指します。Security Context Constraintsは、OpenShiftクラスター上で実行されるポッドの権限を制御するポリシーです。これらは、ポッドが実行されることを許可されるセキュリティパラメータを定義し、どのようなアクションを実行できるか、どのリソースにアクセスできるかを含みます。

SCCは、管理者がクラスター全体でセキュリティポリシーを強制するのに役立ち、ポッドが適切な権限で実行され、組織のセキュリティ基準に従っていることを保証します。これらの制約は、ポッドのセキュリティのさまざまな側面を指定できます。例えば:

  1. Linux capabilities: 特権アクションを実行する能力など、コンテナに利用可能な能力を制限します。
  2. SELinux context: コンテナのSELinuxコンテキストを強制し、プロセスがシステム上のリソースとどのように相互作用するかを定義します。
  3. Read-only root filesystem: 特定のディレクトリ内のファイルをコンテナが変更するのを防ぎます。
  4. Allowed host directories and volumes: ポッドがマウントできるホストディレクトリとボリュームを指定します。
  5. Run as UID/GID: コンテナプロセスが実行されるユーザーおよびグループIDを指定します。
  6. Network policies: ポッドのネットワークアクセスを制御し、エグレストラフィックを制限します。

SCCを構成することで、管理者はポッドが適切なレベルのセキュリティ隔離とアクセス制御で実行されることを保証し、クラスター内のセキュリティ脆弱性や不正アクセスのリスクを減少させることができます。

基本的に、ポッドデプロイメントが要求されるたびに、次のような入場プロセスが実行されます:

この追加のセキュリティレイヤーは、デフォルトで特権ポッドの作成、ホストファイルシステムのマウント、または特権昇格につながる可能性のある属性の設定を禁止します。

Pod Escape Privileges

SCCのリスト

OpenShiftクライアントを使用してすべてのSCCをリストするには:

bash
$ oc get scc #List all the SCCs

$ oc auth can-i --list | grep securitycontextconstraints #Which scc user can use

$ oc describe scc $SCC #Check SCC definitions

すべてのユーザーは、最も厳格なSCCであるデフォルトのSCC "restricted" と "restricted-v2" にアクセスできます。

SCCの使用

ポッドに使用されるSCCは、アノテーション内で定義されています:

bash
$ oc get pod MYPOD -o yaml | grep scc
openshift.io/scc: privileged

ユーザーが複数のSCCにアクセスできる場合、システムはセキュリティコンテキストの値に一致するものを利用します。そうでない場合、禁止エラーが発生します。

bash
$ oc apply -f evilpod.yaml #Deploy a privileged pod
Error from server (Forbidden): error when creating "evilpod.yaml": pods "evilpod" is forbidden: unable to validate against any security context constrain

SCC バイパス

OpenShift - SCC bypass

参考文献