全部产品
Search
文档中心

弹性容器实例:配置Security Context

更新时间:Jul 16, 2024

本文介绍如何为实例或容器配置Security Context,定义实例或容器的权限和访问控制。

背景信息

Security Context,即安全上下文,用于定义Pod或者Container的权限和访问控制,包括Discretionary Access Control、SELinux、Linux Capabilities等。更多信息,请参见Security Context

配置Security Context时,可配置以下两种:

  • 实例Security Context

    ECI支持通过配置实例级别的Security Context来修改sysctl参数,可应用于实例内所有容器和数据卷。

  • 容器Security Context

    ECI支持通过配置容器级别的Security Context来修改runAsUse和capabilities,仅应用于指定的容器。

配置实例Security Context

功能说明

在Linux中,通常可以通过sysctl接口修改内核运行时的参数。对于ECI实例的内核参数,您可以通过以下命令进行查看。更多信息,请参见sysctl.sh

sysctl -a

在Pod级别,您可以通过配置Security Context来修改sysctl参数和runAsUser。

警告

为了避免破坏操作系统的稳定性,请您在充分了解sysctl参数变更影响后,再进行配置。更多信息,请参见sysctl

目前ECI支持修改的sysctl参数如下:

  • kernel.shm*

  • kernel.msg*

  • kernel.sem

  • fs.mqueue.*

  • net.*(net.ipv4.tcp_syncookies除外)

  • vm.min_free_kbytes

    修改vm.min_free_kbytes的值时,建议不要超过总内存的20%。

配置说明

调用CreateContainerGroup接口创建ECI实例时,您可以通过SecurityContext.Sysctl或HostSecurityContext.Sysctl配置实例Security Context,以修改sysctl参数,其中SecurityContext.Sysctl用于修改安全sysctl参数,HostSecurityContext.Sysctl用于修改非安全sysctl参数。相关参数说明如下,更多信息,请参见CreateContainerGroup

名称

类型

示例值

描述

SecurityContext.Sysctl.N.Name

string

net.ipv4.ping_group_range

通过安全上下文修改sysctl参数时,安全sysctl参数的名称。取值范围:

  • net.ipv4.ping_group_range

  • net.ipv4.ip_unprivileged_port_start

SecurityContext.Sysctl.N.Value

string

1

通过安全上下文修改sysctl参数时,安全sysctl参数的取值。

HostSecurityContext.Sysctl.N.Name

string

kernel.msgmax

通过安全上下文修改sysctl参数时,非安全sysctl参数的名称。取值范围:

  • kernel.shm*(kernel.shm_rmid_forced除外)

  • kernel.msg*

  • kernel.sem

  • fs.mqueue.*

  • net.*(net.ipv4.ip_local_port_range、net.ipv4.tcp_syncookies、net.ipv4.ping_group_range、net.ipv4.ip_unprivileged_port_start除外)

HostSecurityContext.Sysctl.N.Value

string

65536

通过安全上下文修改sysctl参数时,非安全sysctl参数的取值。

配置容器Security Context

功能说明

在容器级别,您可以为指定的容器配置Security Context。目前ECI支持配置的参数如下:

支持配置的参数

说明

runAsUser

设置运行容器的用户ID。该参数配置会覆盖Dockerfile中的USER指令。

runAsGroup

设置运行容器的用户组。

runAsNonRoot

设置容器是否以非root模式运行容器。取值为true表示以非root模式运行容器。默认为false。

privileged

设置容器是否以特权模式运行。取值为true表示以特权模式运行容器。默认为false。

说明

特权容器功能正在内测中。如需体验,请提交工单申请。

capabilities

为容器内的进程授予某些特定的权限。更多信息,请参见Linux Capabilities

目前支持配置以下权限:

  • AUDIT_WRITE

  • CHOWN

  • DAC_OVERRIDE

  • FSETID

  • FOWNER

  • KILL

  • MKNOD

  • NET_ADMIN

  • NET_BIND_SERVICE

  • NET_RAW

  • SETGID

  • SETUID

  • SETFCAP

  • SETPCAP

  • SYS_CHROOT

  • SYS_PTRACE

  • SYS_RAWIO

说明

SYS_RAWIO默认不支持,需提交工单申请。

部分不支持配置的参数及其默认值如下:

不支持配置的参数

说明

AllowedProcMountTypes

指定容器可以挂载的proc类型,默认为DefaultProcMount。

readOnlyRootFilesystem

容器运行的根文件系统是否为只读,默认为true。

配置说明

调用CreateContainerGroup接口创建ECI实例时,您可以通过Container.N.SecurityContext的相关参数配置容器Security Context。相关参数说明如下,更多信息,请参见CreateContainerGroup

名称

类型

示例值

描述

Container.N.SecurityContext.Capability.Add.N

array

NET_ADMIN

为容器内的进程授予某些特定的权限。

Container.N.SecurityContext.ReadOnlyRootFilesystem

boolean

true

容器运行的根文件系统是否为只读,目前仅支持配置为true。

Container.N.SecurityContext.RunAsUser

long

1000

设置运行容器的用户ID。

Container.N.SecurityContextRunAsGroup

long

3000

设置运行容器的用户组。

Container.N.SecurityContextRunAsNonRoot

boolean

true

是否以非root模式运行容器。取值范围:

  • true:非root模式

  • false(默认值):root模式

Container.N.SecurityContextPrivileged

boolean

true

容器是否启用特权,即是否以特权模式运行容器。取值范围:

  • true:启用特权

  • false(默认值):不启用特权

说明

特权容器功能正在内测中。如需体验,请提交工单申请。

说明

InitContainer也支持配置Security Context,参数与上表类似,但暂不支持SecurityContextRunAsGroup和SecurityContextRunAsNonRoot。