セキュリティコンテキストは、コンテナ内のプロセスの権限を制御および管理します。セキュリティコンテキストは、コンテナ内のプロセスの動作を制限し、コンテナ内のプロセスが指定された権限とリソース制限内でしか実行できないようにします。このトピックでは、セキュリティコンテキストを設定し、ポッドまたはコンテナの権限とアクセス制御設定を定義する方法について説明します。
背景情報
セキュリティコンテキストは、ポッドまたはコンテナの権限とアクセス制御設定を定義します。セキュリティコンテキスト設定の例としては、随意アクセス制御、Security Enhanced Linux(SELinux)、およびLinuxケーパビリティなどがあります。詳細については、ポッドまたはコンテナのセキュリティコンテキストの設定を参照してください。
Kubernetesは、セキュリティコンテキストを設定するための2つの方法を提供しています。次の表に、これらの方法を示します。
方法 | 適用範囲 | サポートされている機能 |
ポッドセキュリティコンテキスト | ポッドのセキュリティコンテキストを設定します。設定されたセキュリティコンテキストは、ポッド内のすべてのコンテナとボリュームに適用されます。 | ポッドのセキュリティコンテキストを設定することで、sysctlおよびrunAsUserパラメータを変更できます。 |
コンテナセキュリティコンテキスト | コンテナのセキュリティコンテキストを設定します。設定されたセキュリティコンテキストは、コンテナに適用されます。 | コンテナのセキュリティコンテキストを設定することで、sysctlおよびrunAsUserパラメータを変更できます。 |
ポッドのセキュリティコンテキストの設定
設定の説明
Linuxシステムでは、sysctlインターフェースを使用してランタイムカーネルパラメータを変更できます。次のコマンドを実行することで、Elastic Container Instanceのカーネルパラメータを表示できます。詳細については、sysctl.shを参照してください。
sysctl -aポッドのセキュリティコンテキストを設定することで、sysctlおよびrunAsUserパラメータを変更できます。
オペレーティングシステムの不安定性を避けるため、sysctlパラメータの変更の影響を完全に理解してから実行してください。詳細については、sysctlを参照してください。
Elastic Container Instanceでは、次のsysctlパラメータを変更できます。
kernel.shm*
kernel.msg*
kernel.sem
fs.mqueue.*
net.* (net.ipv4.tcp_syncookiesを除く)
vm.min_free_kbytes
vm.min_free_kbytesには、合計メモリサイズの20%以下の値を指定することをお勧めします。
上記のsysctlパラメータ以外のホストレベルのsysctlパラメータを変更する場合は、チケットを送信してください。Alibaba Cloudが申請を承認した後、ポッドの設定ファイルにk8s.aliyun.com/eci-host-sysctls: '[{"name":"xxx", "value": "vvv"}]'アノテーションを追加して、sysctlパラメータを変更できます。
設定例
次のYAMLファイルの例は、セキュリティコンテキストを設定してnet.core.somaxconnおよびkernel.msgmax sysctlパラメータを変更する方法を示しています。
apiVersion: v1
kind: Pod
metadata:
name: sysctl-example
labels:
alibabacloud.com/eci: "true"
spec:
securityContext:
sysctls:
- name: net.core.somaxconn
value: "1024"
- name: kernel.msgmax
value: "65536"
containers:
- name: busybox
image: registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30
command: [ "sh", "-c", "sleep 12000" ]コンテナのセキュリティコンテキストの設定
設定の説明
特定のコンテナのセキュリティコンテキストを設定できます。
ポッドとコンテナのセキュリティコンテキストを設定するときに設定するrunAsUserなどの共通パラメータについては、コンテナのセキュリティコンテキストの設定がポッドのセキュリティコンテキストの設定よりも優先されます。
次の表に、Elastic Container Instanceでサポートされているパラメータを示します。
パラメータ | 説明 |
runAsUser | コンテナを実行するユーザーのID。このパラメータの設定は、DockerfileのUSERコマンドよりも優先されます。 |
runAsGroup | コンテナを実行するユーザーグループ。 |
runAsNonRoot | ユーザーがコンテナを非rootユーザーとして実行するかどうかを指定します。有効な値:trueまたはfalse。デフォルト値:false。 |
privileged | コンテナを特権モードで実行するかどうかを指定します。trueの値は、コンテナが特権モードで実行されることを指定します。デフォルト値:false。 説明 特権コンテナ機能は内部プレビュー中です。この機能を使用するには、チケットを送信してください。 |
capabilities | コンテナ内のプロセスに付与される権限。詳細については、Linuxケーパビリティを参照してください。 次の権限を設定できます。
説明 SYS_RAWIO権限をプロセスに付与することはできません。SYS_RAWIOを使用するには、チケットを送信してください。 |
次の表に、サポートされていないパラメータとそれらのデフォルト値を示します。
サポートされていないパラメータ | 説明 |
AllowedProcMountTypes | コンテナに許可されるprocマウントタイプ。デフォルト値:DefaultProcMount。 |
readOnlyRootFilesystem | コンテナが実行されるルートファイルシステムが読み取り専用かどうかを指定します。デフォルト値:true。 |
設定例
デフォルトでは、コンテナにはNET_ADMIN権限がありません。コンテナ内でネットワーク関連の操作を実行すると、エラーメッセージが返されます。
コンテナのセキュリティコンテキストを設定し、capabilitiesパラメータを指定してNET_ADMIN権限を追加できます。次のYAMLファイルの例は、capabilitiesパラメータを設定してNET_ADMIN権限を追加する方法を示しています。
apiVersion: v1
kind: Pod
metadata:
name: sysctl-example
labels:
alibabacloud.com/eci: "true"
spec:
containers:
- name: busybox
image: registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30
command: ["sh", "-c", "sleep 12000"]
securityContext:
capabilities:
add: ["NET_ADMIN"] ポッドを再作成した後、コンテナ内でネットワーク関連の操作を実行できます。
