TG客服

阿里云ACK容器服务中Pod安全策略限制特权容器运行

⏱️2026-05-21 09:00 👁️2

🤔 Pod 安全策略(PSP)是 Kubernetes 中一种用于控制 Pod 安全相关属性的机制。在阿里云 ACK(容器服务 Kubernetes)环境中,你可以使用 PSP 来限制特权容器的运行,从而提高集群的整体安全性。🛡️

为什么限制特权容器?

  • 安全风险: 特权容器本质上拥有主机 root 权限,如果容器内的应用程序被攻破,攻击者可以利用该权限控制整个节点,甚至整个集群。😈
  • 合规性: 许多安全标准和法规要求限制或禁止特权容器的使用。📜
  • 资源隔离: 特权容器可能会滥用主机资源,影响其他容器的正常运行。⚙️

如何使用 PSP 限制特权容器?

  1. 创建 PSP 对象: 定义一个 PSP 对象,其中 privileged: false 表示禁止特权容器。 📝
    apiVersion: policy/v1beta1
    kind: PodSecurityPolicy
    metadata:
      name: restricted
    spec:
      privileged: false
      # ... 其他安全策略 ...
    
  2. 配置其他安全策略: 除了 privileged,还可以配置其他安全策略,例如:
    • runAsUser:限制容器以 root 用户运行。
    • capabilities:限制容器可以使用的 Linux capabilities。
    • volumes:限制容器可以挂载的卷类型。
    • hostNetworkhostPIDhostIPC:禁止容器使用主机网络、PID 和 IPC 命名空间。
  3. 创建 Role 和 RoleBinding: 创建 Role 对象,授予使用 PSP 的权限。然后创建 RoleBinding 对象,将 Role 绑定到特定的 ServiceAccount、User 或 Group。 🔑
    # Role
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: psp-restricted
    rules:
    - apiGroups: ['policy']
      resources: ['podsecuritypolicies']
      verbs:     ['use']
      resourceNames: ['restricted']
    
    # RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: psp-restricted-binding
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: psp-restricted
    subjects:
    - kind: ServiceAccount
      name: default
      namespace: default
    
  4. 将 ServiceAccount 关联到 Pod: 确保 Pod 使用的 ServiceAccount 具有使用 PSP 的权限。 👤
    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod
    spec:
      serviceAccountName: default
      # ...
    

示例:禁止特权容器并限制 root 用户

apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: restricted
spec:
  privileged: false
  # 禁用 host 命名空间
  hostNetwork: false
  hostIPC: false
  hostPID: false
  # 禁止挂载 hostPath 卷
  volumes:
  - 'configMap'
  - 'emptyDir'
  - 'persistentVolumeClaim'
  - 'secret'
  - 'projected'
  # 设置 RunAsUser 策略
  runAsUser:
    rule: 'MustRunAsNonRoot'
  seLinux:
    rule: 'RunAsAny'
  supplementalGroups:
    rule: 'RunAsAny'
  fsGroup:
    rule: 'RunAsAny'
  readOnlyRootFilesystem: false
  # 允许使用的 Capabilities
  allowedCapabilities:
  - KILL
  - NET_BIND_SERVICE
  requiredDropCapabilities:
  - ALL

注意事项:

  • 默认策略: 如果没有定义任何 PSP,Kubernetes 允许创建任何 Pod,包括特权容器。因此,务必创建明确的 PSP 来控制 Pod 的安全属性。⚠️
  • 策略冲突: 如果多个 PSP 适用于同一个 Pod,Kubernetes 会选择限制最严格的策略。🤔
  • 测试: 在生产环境中应用 PSP 之前,务必在测试环境中进行充分的测试,确保不会影响应用程序的正常运行。🧪
  • ACK 控制台: 阿里云 ACK 控制台提供了一些预定义的 PSP 模板,你可以直接使用或根据需要进行修改。 💻
  • PSP 弃用: PodSecurityPolicy 在 Kubernetes 1.21 中已被弃用,并将在未来的版本中移除。建议迁移到 Pod Security Admission。 ➡️

迁移到 Pod Security Admission (PSA):

Kubernetes 官方推荐使用 Pod Security Admission (PSA) 作为 Pod 安全策略的替代方案。PSA 基于标签,可以更灵活地控制 Pod 的安全级别。 PSA 定义了三个级别:

  • Privileged: 不受限制,允许所有的行为。
  • Baseline: 阻止已知的权限提升。
  • Restricted: 遵循当前 Pod 安全最佳实践。

你可以通过在 Namespace 上设置标签来应用不同的安全级别。

apiVersion: v1
kind: Namespace
metadata:
  name: my-namespace
  labels:
    pod-security.kubernetes.io/enforce: restricted
    pod-security.kubernetes.io/warn: baseline

总结:通过使用 Pod Security Policy 或 Pod Security Admission,你可以有效地限制特权容器的运行,增强阿里云 ACK 集群的安全性。记得定期审查和更新安全策略,以应对新的安全威胁。 🧐

国际云自助站点

我们提供一站式多云服务管理平台,支持阿里云国际、腾讯云国际、AWS(亚马逊云)和GCP(谷歌云)等主流国际云厂商。无论是新账户申请、余额充值,还是日常管理与监控,平台均可统一操作,大幅提升管理效率。同时支持余额预警、异常通知等推送功能,帮助用户实时掌握各云平台资源状态,防止因欠费导致业务中断。平台还支持多账号集中管理,适用于个人站长、跨境电商、开发团队等多场景使用需求,真正实现高效、安全、灵活的多云资源协同管理。

热门文章
更多>