本文介绍如何为实例或容器配置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参数的名称。取值范围:
|
SecurityContext.Sysctl.N.Value | string | 1 | 通过安全上下文修改sysctl参数时,安全sysctl参数的取值。 |
HostSecurityContext.Sysctl.N.Name | string | kernel.msgmax | 通过安全上下文修改sysctl参数时,非安全sysctl参数的名称。取值范围:
|
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。 目前支持配置以下权限:
说明 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模式运行容器。取值范围:
|
Container.N.SecurityContextPrivileged | boolean | true | 容器是否启用特权,即是否以特权模式运行容器。取值范围:
说明 特权容器功能正在内测中。如需体验,请提交工单申请。 |
InitContainer也支持配置Security Context,参数与上表类似,但暂不支持SecurityContextRunAsGroup和SecurityContextRunAsNonRoot。