Kubernetes SecurityContext(s)

Reading time: 11 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

PodSecurityContext

From the docs:

Podのセキュリティコンテキストを指定する際、いくつかの属性を使用できます。防御的なセキュリティの観点から考慮すべきことは次のとおりです:

  • runASNonRootTrueに設定する
  • runAsUserを設定する
  • 可能であれば、seLinuxOptionsseccompProfileを指定してpermissions制限することを検討する
  • runAsGroupsupplementaryGroupsを介してprivilege groupアクセスを与えない

| パラメータ | 説明 | |

fsGroup
integer

|

ポッド内のすべてのコンテナに適用される特別な補助グループ。いくつかのボリュームタイプでは、Kubeletがそのボリュームの所有権を変更できる:
1. 所有するGIDはFSGroupになります
2. setgidビットが設定されます(ボリューム内で作成された新しいファイルはFSGroupが所有します)
3. パーミッションビットはrw-rw----とORされます。未設定の場合、Kubeletはボリュームの所有権とパーミッションを変更しません。

|

|

fsGroupChangePolicy
string

| ボリュームの所有権とパーミッションを変更する動作を定義します。 | |

runAsGroup
integer

| コンテナプロセスのエントリポイントを実行するためのGID。未設定の場合はランタイムのデフォルトを使用します。 | |

runAsNonRoot
boolean

| コンテナが非rootユーザーとして実行される必要があることを示します。trueの場合、Kubeletはランタイムでイメージを検証し、UID 0(root)として実行されないことを確認し、そうであればコンテナの起動に失敗します。 | |

runAsUser
integer

| コンテナプロセスのエントリポイントを実行するためのUID。未指定の場合は、イメージメタデータで指定されたユーザーがデフォルトになります。 | |

seLinuxOptions
SELinuxOptions
More info about seLinux

| すべてのコンテナに適用されるSELinuxコンテキスト。未指定の場合、コンテナランタイムは各コンテナに対してランダムなSELinuxコンテキストを割り当てます。 | |

seccompProfile
SeccompProfile
More info about Seccomp

| このポッド内のコンテナが使用するseccompオプション。 | |

supplementalGroups
integer array

| コンテナの主要GIDに加えて、各コンテナで実行される最初のプロセスに適用されるグループのリスト。 | |

sysctls
Sysctl array
More info about sysctls

| Sysctlsは、ポッドに使用される名前空間付きsysctlsのリストを保持します。サポートされていないsysctlsを持つポッド(コンテナランタイムによって)は起動に失敗する可能性があります。 | |

windowsOptions
WindowsSecurityContextOptions

| すべてのコンテナに適用されるWindows特有の設定。未指定の場合、コンテナのSecurityContext内のオプションが使用されます。 |

SecurityContext

From the docs:

このコンテキストはコンテナ定義内に設定されます。防御的なセキュリティの観点から考慮すべきことは次のとおりです:

  • allowPrivilegeEscalationFalseに設定する
  • 機密のcapabilitiesを追加せず(必要のないものは削除する)
  • privilegedFalseに設定する
  • 可能であれば、readOnlyFilesystemTrueに設定する
  • runAsNonRootTrueに設定し、runAsUserを設定する
  • 可能であれば、seLinuxOptionsseccompProfileを指定してpermissions制限することを検討する
  • runAsGroupを介してprivilege groupアクセスを与えない。

SecurityContextPodSecurityContextの両方に設定された属性に注意してください。SecurityContextで指定された値が優先されます。

allowPrivilegeEscalation
boolean

AllowPrivilegeEscalationは、プロセスが親プロセスよりもより多くの権限を得ることができるかどうかを制御します。このboolは、no_new_privsフラグがコンテナプロセスに設定されるかどうかを直接制御します。AllowPrivilegeEscalationは、コンテナがPrivilegedとして実行されるか、CAP_SYS_ADMINを持つ場合は常にtrueです。

capabilities
Capabilities
More info about Capabilities

コンテナを実行する際に追加/削除するcapabilities。デフォルトはデフォルトのcapabilitiesのセットです。

privileged
boolean

特権モードでコンテナを実行します。特権コンテナ内のプロセスは、基本的にホスト上のrootと同等です。デフォルトはfalseです。

procMount
string

procMountは、コンテナに使用するprocマウントのタイプを示します。デフォルトはDefaultProcMountで、読み取り専用パスとマスクされたパスに対してコンテナランタイムのデフォルトを使用します。

readOnlyRootFilesystem
boolean

このコンテナが読み取り専用のルートファイルシステムを持つかどうか。デフォルトはfalseです。

runAsGroup
integer

コンテナプロセスのエントリポイントを実行するためのGID。未設定の場合はランタイムのデフォルトを使用します。

runAsNonRoot
boolean

コンテナが非rootユーザーとして実行される必要があることを示します。trueの場合、Kubeletはランタイムでイメージを検証し、UID 0(root)として実行されないことを確認し、そうであればコンテナの起動に失敗します。

runAsUser
integer

コンテナプロセスのエントリポイントを実行するためのUID。未指定の場合は、イメージメタデータで指定されたユーザーがデフォルトになります。

seLinuxOptions
SELinuxOptions
More info about seLinux

コンテナに適用されるSELinuxコンテキスト。未指定の場合、コンテナランタイムは各コンテナに対してランダムなSELinuxコンテキストを割り当てます。

seccompProfile
SeccompProfile

このコンテナが使用するseccompオプション

windowsOptions
WindowsSecurityContextOptions

すべてのコンテナに適用されるWindows特有の設定

References

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする