【kubernetes】--安全认证机制

文章目录

    • 安全认证
      • 1. **身份认证(Authentication)**
      • 2. **授权(Authorization)**
      • 3. **准入控制(Admission Control)**
      • 4. **机密信息管理**
      • 5. **其他安全实践**

安全认证

Kubernetes 的安全机制覆盖了从身份验证到资源操作的完整链条:

  1. 认证 → 2. 授权 → 3. 准入控制 → 4. 资源管理
    生产环境中建议:
  • 使用 RBAC + ServiceAccount 进行最小权限分配。
  • 启用 Pod 安全准入网络策略
  • 定期轮换证书和令牌。

通过组合这些机制,可以构建一个符合零信任原则的 Kubernetes 集群安全体系。

1. 身份认证(Authentication)

http token和账户密码等
https ca证书

  • X.509 客户端证书

    • 通过 TLS 双向认证,客户端使用证书(如 kubectl--client-certificate--client-key 参数)向 API Server 证明身份。
    • 证书由集群 CA 签发,需在 API Server 启动时配置 --client-ca-file
  • Bearer Token(静态令牌)

    • 静态令牌文件通过 --token-auth-file 指定,令牌以明文形式存储在文件中(不推荐生产环境使用)。
    • 通常用于服务账户(ServiceAccount)的自动生成令牌(JWT格式)。
  • ServiceAccount(服务账户)

    • 每个 Pod 默认挂载一个 ServiceAccount 的令牌(位于 /var/run/secrets/kubernetes.io/serviceaccount/token)。
    • API Server 通过 --service-account-key-file 验证令牌签名。
  • OpenID Connect (OIDC)

    • 集成第三方身份提供商(如 Google、Azure AD),用户通过 OAuth 2.0 流程获取 ID Token 后访问集群。
  • Webhook 令牌认证

    • 将令牌验证委托给外部服务(如自定义认证服务),通过 --authentication-token-webhook-config-file 配置。
  • 匿名请求

    • 默认允许匿名请求(身份为 system:anonymous),可通过 --anonymous-auth=false 禁用。

2. 授权(Authorization)

通过 RBAC(主流)、ABAC、Node Authorization 等机制控制已认证用户的权限:

  • RBAC(基于角色的访问控制)

    • 定义 Role(命名空间内权限)和 ClusterRole(集群范围权限),再通过 RoleBinding/ClusterRoleBinding 绑定到用户、组或 ServiceAccount。
    • 示例:允许某用户读取 Pod 信息:
      apiVersion: rbac.authorization.k8s.io/v1
      kind: Role
      metadata:namespace: defaultname: pod-reader
      rules:
      - apiGroups: [""]resources: ["pods"]verbs: ["get", "list", "watch"]
      
  • ABAC(基于属性的访问控制)

    • 通过策略文件(--authorization-policy-file)定义规则,灵活性差,已逐渐被 RBAC 取代。
  • Node Authorization

    • 专门授权 kubelet 访问节点相关资源(如 Pod、Secret)。
  • Webhook 授权

    • 将授权决策委托给外部 HTTP 服务。

3. 准入控制(Admission Control)

在请求通过认证和授权后,API Server 会调用准入控制器(Admission Controllers)进行更精细的资源校验或修改:

  • 内置控制器

    • NamespaceLifecycle:防止在终止的命名空间中创建资源。
    • ResourceQuota:限制命名空间的资源使用量。
    • PodSecurity(替代 PSP):强制执行 Pod 安全标准(如禁止特权容器)。
    • MutatingAdmissionWebhook/ValidatingAdmissionWebhook:通过 Webhook 动态修改或验证资源。
  • 示例:使用 ValidatingAdmissionWebhook 拦截不符合标签要求的 Deployment。

4. 机密信息管理

  • Secrets
    • 存储敏感数据(如密码、令牌),以 Base64 编码形式存在 Etcd 中,建议启用加密(--encryption-provider-config)。
  • ConfigMap
    • 存储非敏感配置,与 Secrets 分离以降低风险。

5. 其他安全实践

  • API Server 安全配置
    • 启用 HTTPS(--tls-cert-file, --tls-private-key-file)。
    • 限制匿名访问和废弃 API 版本。
  • Etcd 加密
    • 静态数据加密(--encryption-provider-config)。
  • 网络策略(NetworkPolicy)
    • 控制 Pod 间网络流量(需 CNI 插件支持,如 Calico)。
  • Pod 安全上下文(SecurityContext)
    • 限制容器权限(如 runAsNonRoot: truereadOnlyRootFilesystem: true)。