Merge pull request #34808 from windsonsea/pspolicy

[zh-cn] improve security/pod-security-policy.md
pull/34804/head
Kubernetes Prow Robot 2022-07-04 19:22:46 -07:00 committed by GitHub
commit 10184d33bf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 41 additions and 50 deletions

View File

@ -50,11 +50,11 @@ administrator to control the following:
--> -->
## 什么是 Pod 安全策略? {#what-is-a-pod-security-policy} ## 什么是 Pod 安全策略? {#what-is-a-pod-security-policy}
_Pod 安全策略Pod Security Policy_ 是集群级别的资源,它能够控制 Pod 规约 **Pod 安全策略Pod Security Policy**是集群级别的资源,它能够控制 Pod
中与安全性相关的各个方面。 规约中与安全性相关的各个方面。
[PodSecurityPolicy](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podsecuritypolicy-v1beta1-policy) [PodSecurityPolicy](/zh-cn/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podsecuritypolicy-v1beta1-policy)
对象定义了一组 Pod 运行时必须遵循的条件及相关字段的默认值,只有 Pod 满足这些条件才会被系统接受。 对象定义了一组 Pod 运行时必须遵循的条件及相关字段的默认值,只有 Pod 满足这些条件才会被系统接受。
Pod 安全策略允许管理员控制如下方面 Pod 安全策略允许管理员控制如下操作
<!-- <!--
| Control Aspect | Field Names | | Control Aspect | Field Names |
@ -80,20 +80,20 @@ Pod 安全策略允许管理员控制如下方面:
| ----------------------------------- | --------------------------------- | | ----------------------------------- | --------------------------------- |
| 运行特权容器 | [`privileged`](#privileged) | | 运行特权容器 | [`privileged`](#privileged) |
| 使用宿主名字空间 | [`hostPID`、`hostIPC`](#host-namespaces) | | 使用宿主名字空间 | [`hostPID`、`hostIPC`](#host-namespaces) |
| 使用宿主的网络和端口 | [`hostNetwork`, `hostPorts`](#host-namespaces) | | 使用宿主的网络和端口 | [`hostNetwork``hostPorts`](#host-namespaces) |
| 控制卷类型的使用 | [`volumes`](#volumes-and-file-systems) | | 控制卷类型的使用 | [`volumes`](#volumes-and-file-systems) |
| 使用宿主文件系统 | [`allowedHostPaths`](#volumes-and-file-systems) | | 使用宿主文件系统 | [`allowedHostPaths`](#volumes-and-file-systems) |
| 允许使用特定的 FlexVolume 驱动 | [`allowedFlexVolumes`](#flexvolume-drivers) | | 允许使用特定的 FlexVolume 驱动 | [`allowedFlexVolumes`](#flexvolume-drivers) |
| 分配拥有 Pod 卷的 FSGroup 账号 | [`fsGroup`](#volumes-and-file-systems) | | 分配拥有 Pod 卷的 FSGroup 账号 | [`fsGroup`](#volumes-and-file-systems) |
| 以只读方式访问根文件系统 | [`readOnlyRootFilesystem`](#volumes-and-file-systems) | | 以只读方式访问根文件系统 | [`readOnlyRootFilesystem`](#volumes-and-file-systems) |
| 设置容器的用户和组 ID | [`runAsUser`, `runAsGroup`, `supplementalGroups`](#users-and-groups) | | 设置容器的用户和组 ID | [`runAsUser`、`runAsGroup`、`supplementalGroups`](#users-and-groups) |
| 限制 root 账号特权级提升 | [`allowPrivilegeEscalation`, `defaultAllowPrivilegeEscalation`](#privilege-escalation) | | 限制 root 账号特权级提升 | [`allowPrivilegeEscalation``defaultAllowPrivilegeEscalation`](#privilege-escalation) |
| Linux 权能字Capabilities | [`defaultAddCapabilities`, `requiredDropCapabilities`, `allowedCapabilities`](#capabilities) | | Linux 权能字Capabilities | [`defaultAddCapabilities`、`requiredDropCapabilities`、`allowedCapabilities`](#capabilities) |
| 设置容器的 SELinux 上下文 | [`seLinux`](#selinux) | | 设置容器的 SELinux 上下文 | [`seLinux`](#selinux) |
| 指定容器可以挂载的 proc 类型 | [`allowedProcMountTypes`](#allowedprocmounttypes) | | 指定容器可以挂载的 proc 类型 | [`allowedProcMountTypes`](#allowedprocmounttypes) |
| 指定容器使用的 AppArmor 模 | [annotations](#apparmor) | | 指定容器使用的 AppArmor 模 | [annotations](#apparmor) |
| 指定容器使用的 seccomp 模 | [annotations](#seccomp) | | 指定容器使用的 seccomp 模 | [annotations](#seccomp) |
| 指定容器使用的 sysctl 模版 | [`forbiddenSysctls`,`allowedUnsafeSysctls`](#sysctl) | | 指定容器使用的 sysctl 模板 | [`forbiddenSysctls`、`allowedUnsafeSysctls`](#sysctl) |
<!-- <!--
## Enabling Pod Security Policies ## Enabling Pod Security Policies
@ -117,8 +117,8 @@ enabled independently of the admission controller, for existing clusters it is
recommended that policies are added and authorized before enabling the admission recommended that policies are added and authorized before enabling the admission
controller. controller.
--> -->
由于 Pod 安全策略 API`policy/v1beta1/podsecuritypolicy`)是独立于准入控制器 由于 Pod 安全策略 API`policy/v1beta1/podsecuritypolicy`)是独立于准入控制器来启用的,
来启用的,对于现有集群而言,建议在启用准入控制器之前先添加策略并对其授权。 对于现有集群而言,建议在启用准入控制器之前先添加策略并对其授权。
<!-- <!--
## Authorizing Policies ## Authorizing Policies
@ -133,7 +133,7 @@ must be authorized to use the policy, by allowing the `use` verb on the policy.
PodSecurityPolicy 资源被创建时,并不执行任何操作。为了使用该资源, PodSecurityPolicy 资源被创建时,并不执行任何操作。为了使用该资源,
需要对发出请求的用户或者目标 Pod 需要对发出请求的用户或者目标 Pod
的[服务账号](/zh-cn/docs/tasks/configure-pod-container/configure-service-account/)授权, 的[服务账号](/zh-cn/docs/tasks/configure-pod-container/configure-service-account/)授权,
通过允许其对策略执行 `use`允许其使用该策略。 通过允许其对策略执行 `use`作,以允许其使用该策略。
<!-- <!--
Most Kubernetes pods are not created directly by users. Instead, they are Most Kubernetes pods are not created directly by users. Instead, they are
@ -148,8 +148,8 @@ pod's service account (see [example](#run-another-pod)).
大多数 Kubernetes Pod 不是由用户直接创建的。相反,这些 Pod 是由 大多数 Kubernetes Pod 不是由用户直接创建的。相反,这些 Pod 是由
[Deployment](/zh-cn/docs/concepts/workloads/controllers/deployment/)、 [Deployment](/zh-cn/docs/concepts/workloads/controllers/deployment/)、
[ReplicaSet](/zh-cn/docs/concepts/workloads/controllers/replicaset/) [ReplicaSet](/zh-cn/docs/concepts/workloads/controllers/replicaset/)
或者经由控制器管理器模化的控制器创建。 或者经由控制器管理器模化的控制器创建。
赋予控制器访问策略的权限意味着对应控制器所创建的 *所有* Pod 都可访问策略。 赋予控制器访问策略的权限意味着对应控制器所创建的**所有** Pod 都可访问策略。
因此,对策略进行授权的优先方案是为 Pod 的服务账号授予访问权限 因此,对策略进行授权的优先方案是为 Pod 的服务账号授予访问权限
(参见[示例](#run-another-pod))。 (参见[示例](#run-another-pod))。
@ -716,8 +716,7 @@ rolebinding "default:psp:unprivileged" created
Now if you give it a minute to retry, the replicaset-controller should Now if you give it a minute to retry, the replicaset-controller should
eventually succeed in creating the pod: eventually succeed in creating the pod:
--> -->
现在如果你给 ReplicaSet 控制器一分钟的时间来重试,该控制器最终将能够 现在如果你给 ReplicaSet 控制器一分钟的时间来重试,该控制器最终将能够成功地创建 Pod
成功地创建 Pod
```shell ```shell
kubectl-user get pods --watch kubectl-user get pods --watch
@ -906,12 +905,12 @@ PodSecurityPolicy 并不限制可以被 `PersistentVolumeClaim` 所引用的
--> -->
**FSGroup** - 控制应用到某些卷上的附加用户组。 **FSGroup** - 控制应用到某些卷上的附加用户组。
- *MustRunAs* - 要求至少指定一个 `range` - **MustRunAs** - 要求至少指定一个 `range`
使用范围中的最小值作为默认值。所有 range 值都会被用来执行验证。 使用范围中的最小值作为默认值。所有 range 值都会被用来执行验证。
- *MayRunAs* - 要求至少指定一个 `range` - **MayRunAs** - 要求至少指定一个 `range`
允许不设置 `FSGroups`,且无默认值。 允许不设置 `FSGroups`,且无默认值。
如果 `FSGroup` 被设置,则所有 range 值都会被用来执行验证检查。 如果 `FSGroup` 被设置,则所有 range 值都会被用来执行验证检查。
- *RunAsAny* - 不提供默认值。允许设置任意 `fsGroup` ID 值。 - **RunAsAny** - 不提供默认值。允许设置任意 `fsGroup` ID 值。
<!-- <!--
**AllowedHostPaths** - This specifies a list of host paths that are allowed **AllowedHostPaths** - This specifies a list of host paths that are allowed
@ -1042,15 +1041,15 @@ spec:
**RunAsUser** - 控制使用哪个用户 ID 来运行容器。 **RunAsUser** - 控制使用哪个用户 ID 来运行容器。
- *MustRunAs* - 必须至少设置一个 `range`。使用该范围内的第一个值作为默认值。 - **MustRunAs** - 必须至少设置一个 `range`。使用该范围内的第一个值作为默认值。
所有范围值都会被验证检查。 所有范围值都会被验证检查。
- *MustRunAsNonRoot* - 要求提交的 Pod 具有非零 `runAsUser` 值,或在镜像中 - **MustRunAsNonRoot** - 要求提交的 Pod 具有非零 `runAsUser` 值,或在镜像中
(使用 UID 数值)定义了 `USER` 环境变量。 (使用 UID 数值)定义了 `USER` 环境变量。
如果 Pod 既没有设置 `runAsNonRoot`,也没有设置 `runAsUser`,则该 Pod 如果 Pod 既没有设置 `runAsNonRoot`,也没有设置 `runAsUser`,则该 Pod
会被修改以设置 `runAsNonRoot=true`,从而要求容器通过 `USER` 指令给出非零的数值形式的用户 ID。 会被修改以设置 `runAsNonRoot=true`,从而要求容器通过 `USER` 指令给出非零的数值形式的用户 ID。
此配置没有默认值。采用此配置时,强烈建议设置 `allowPrivilegeEscalation=false` 此配置没有默认值。采用此配置时,强烈建议设置 `allowPrivilegeEscalation=false`
- *RunAsAny* - 没有提供默认值。允许指定任何 `runAsUser` 配置。 - **RunAsAny** - 没有提供默认值。允许指定任何 `runAsUser` 配置。
<!-- <!--
**RunAsGroup** - Controls which primary group ID the containers are run with. **RunAsGroup** - Controls which primary group ID the containers are run with.
@ -1063,11 +1062,11 @@ spec:
--> -->
**RunAsGroup** - 控制运行容器时使用的主用户组 ID。 **RunAsGroup** - 控制运行容器时使用的主用户组 ID。
- *MustRunAs* - 要求至少指定一个 `range` 值。第一个范围中的最小值作为默认值。 - **MustRunAs** - 要求至少指定一个 `range` 值。第一个范围中的最小值作为默认值。
所有范围值都被用来执行验证检查。 所有范围值都被用来执行验证检查。
- *MayRunAs* - 不要求设置 `RunAsGroup` - **MayRunAs** - 不要求设置 `RunAsGroup`
不过,如果指定了 `RunAsGroup` 被设置,所设置值必须处于所定义的范围内。 不过,如果指定了 `RunAsGroup` 被设置,所设置值必须处于所定义的范围内。
- *RunAsAny* - 未指定默认值。允许 `runAsGroup` 设置任何值。 - **RunAsAny** - 未指定默认值。允许 `runAsGroup` 设置任何值。
<!-- <!--
**SupplementalGroups** - Controls which group IDs containers add. **SupplementalGroups** - Controls which group IDs containers add.
@ -1082,12 +1081,12 @@ spec:
--> -->
**SupplementalGroups** - 控制容器可以添加的组 ID。 **SupplementalGroups** - 控制容器可以添加的组 ID。
- *MustRunAs* - 要求至少指定一个 `range` 值。第一个范围中的最小值用作默认值。 - **MustRunAs** - 要求至少指定一个 `range` 值。第一个范围中的最小值用作默认值。
所有范围值都被用来执行验证检查。 所有范围值都被用来执行验证检查。
- *MayRunAs* - 要求至少指定一个 `range` 值。 - **MayRunAs** - 要求至少指定一个 `range` 值。
允许不指定 `supplementalGroups` 且不设置默认值。 允许不指定 `supplementalGroups` 且不设置默认值。
如果 `supplementalGroups` 被设置,则所有 range 值都被用来执行验证检查。 如果 `supplementalGroups` 被设置,则所有 range 值都被用来执行验证检查。
- *RunAsAny* - 未指定默认值。允许为 `supplementalGroups` 设置任何值。 - **RunAsAny** - 未指定默认值。允许为 `supplementalGroups` 设置任何值。
<!-- <!--
### Privilege Escalation ### Privilege Escalation
@ -1194,9 +1193,9 @@ specified.
--> -->
### SELinux ### SELinux
- *MustRunAs* - 要求必须配置 `seLinuxOptions`。默认使用 `seLinuxOptions` - **MustRunAs** - 要求必须配置 `seLinuxOptions`。默认使用 `seLinuxOptions`
针对 `seLinuxOptions` 所给值执行验证检查。 针对 `seLinuxOptions` 所给值执行验证检查。
- *RunAsAny* - 没有提供默认值。允许任意指定的 `seLinuxOptions` 选项。 - **RunAsAny** - 没有提供默认值。允许任意指定的 `seLinuxOptions` 选项。
<!-- <!--
### AllowedProcMountTypes ### AllowedProcMountTypes
@ -1238,7 +1237,6 @@ Controlled via annotations on the PodSecurityPolicy. Refer to the
详情请参阅 详情请参阅
[AppArmor 文档](/zh-cn/docs/tutorials/security/apparmor/#podsecuritypolicy-annotations)。 [AppArmor 文档](/zh-cn/docs/tutorials/security/apparmor/#podsecuritypolicy-annotations)。
<!-- <!--
### Seccomp ### Seccomp
@ -1261,7 +1259,7 @@ are:
相同的 PodSecurityPolicy 可以用于不同版本,进而控制如何应用对应的字段或注解。 相同的 PodSecurityPolicy 可以用于不同版本,进而控制如何应用对应的字段或注解。
**seccomp.security.alpha.kubernetes.io/defaultProfileName** - **seccomp.security.alpha.kubernetes.io/defaultProfileName** -
注解用来指定为容器配置默认的 seccomp 模。可选值为: 注解用来指定为容器配置默认的 seccomp 模。可选值为:
<!-- <!--
- `unconfined` - Seccomp is not applied to the container processes (this is the - `unconfined` - Seccomp is not applied to the container processes (this is the
@ -1274,19 +1272,13 @@ are:
`--seccomp-profile-root` flag on the Kubelet. If the `--seccomp-profile-root` `--seccomp-profile-root` flag on the Kubelet. If the `--seccomp-profile-root`
flag is not defined, the default path will be used, which is flag is not defined, the default path will be used, which is
`<root-dir>/seccomp` where `<root-dir>` is specified by the `--root-dir` flag. `<root-dir>/seccomp` where `<root-dir>` is specified by the `--root-dir` flag.
{{< note >}}
The `--seccomp-profile-root` flag is deprecated since Kubernetes
v1.19. Users are encouraged to use the default path.
{{< /note >}}
--> -->
- `unconfined` - 如果没有指定其他替代方案Seccomp 不会被应用到容器进程上 - `unconfined` - 如果没有指定其他替代方案Seccomp 不会被应用到容器进程上
Kubernets 中的默认设置)。 Kubernets 中的默认设置)。
- `runtime/default` - 使用默认的容器运行时模 - `runtime/default` - 使用默认的容器运行时模板。
- `docker/default` - 使用 Docker 的默认 seccomp 模。自 1.11 版本废弃。 - `docker/default` - 使用 Docker 的默认 seccomp 模板。自 1.11 版本废弃。
应改为使用 `runtime/default` 应改为使用 `runtime/default`
- `localhost/<路径名>` - 指定节点上路径 `<seccomp_root>/<路径名>` 下的一个文件作为其模 - `localhost/<路径名>` - 指定节点上路径 `<seccomp_root>/<路径名>` 下的一个文件作为其模
其中 `<seccomp_root>` 是通过 `kubelet` 的标志 `--seccomp-profile-root` 来指定的。 其中 `<seccomp_root>` 是通过 `kubelet` 的标志 `--seccomp-profile-root` 来指定的。
如果未定义 `--seccomp-profile-root` 标志,则使用默认的路径 `<root-dir>/seccomp` 如果未定义 `--seccomp-profile-root` 标志,则使用默认的路径 `<root-dir>/seccomp`
其中 `<root-dir>` 是通过 `--root-dir` 标志来设置的。 其中 `<root-dir>` 是通过 `--root-dir` 标志来设置的。
@ -1309,8 +1301,8 @@ default cannot be changed.
--> -->
**seccomp.security.alpha.kubernetes.io/allowedProfileNames** - 指定可以为 **seccomp.security.alpha.kubernetes.io/allowedProfileNames** - 指定可以为
Pod seccomp 注解配置的值的注解。取值为一个可用值的列表。 Pod seccomp 注解配置的值的注解。取值为一个可用值的列表。
表中每项可以是上述各值之一,还可以是 `*`,用来表示允许所有的模 表中每项可以是上述各值之一,还可以是 `*`,用来表示允许所有的模
如果没有设置此注解,意味着默认的 seccomp 模是不可更改的。 如果没有设置此注解,意味着默认的 seccomp 模是不可更改的。
<!-- <!--
### Sysctl ### Sysctl
@ -1357,6 +1349,5 @@ Refer to the [Sysctl documentation](/docs/tasks/administer-cluster/sysctl-cluste
- 参阅 [Pod 安全标准](/zh-cn/docs/concepts/security/pod-security-standards/) - 参阅 [Pod 安全标准](/zh-cn/docs/concepts/security/pod-security-standards/)
了解策略建议。 了解策略建议。
- 阅读 [PodSecurityPolicy 参考](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podsecuritypolicy-v1beta1-policy) - 阅读 [PodSecurityPolicy 参考](/zh-cn/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podsecuritypolicy-v1beta1-policy)
了解 API 细节。 了解 API 细节。