如何使用服务帐户对k8s集群进行加固



我希望使用服务帐户来加固我的集群。现在所有的pod都在使用默认的服务帐户。我认为我的方法是为集群中当前的pod创建一个单独的服务帐户。对我来说,现在的困惑是理解我为每个pod分配的主题(即服务帐户)的角色/集群角色(权限)?对于一些pod,我将如何确定它是否需要访问集群API?

我的集群包含以下内容(为了保护隐私,我删除了ip):

kubectl get all
NAME                                                        READY   STATUS    RESTARTS   AGE
pod/nginx-ingress-ingress-nginx-controller   1/1     Running   0          

NAME                                                       TYPE           CLUSTER-IP       EXTERNAL-IP       PORT(S)                      AGE
service/kubernetes                                         ClusterIP         <none>                         443/TCP                      123d
service/nginx-ingress-ingress-nginx-controller             LoadBalancer                                      80:31180/TCP,443:31405/TCP   116d
service/nginx-ingress-ingress-nginx-controller-admission   ClusterIP         <none>                          443/TCP                      116d

NAME                                                     READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-ingress-ingress-nginx-controller   1/1     1            1           116d

NAME                                                                DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-ingress-ingress-nginx-controller                1         1         1       7d19h


root@osboxes:/home/osboxes# kubectl get all -n <>
NAME                               READY   STATUS    RESTARTS   AGE
pod/mariadb-0               1/1     Running   0          5d19h
pod/web2                    1/1     Running   0          7d17h

NAME                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/mariadb   ClusterIP                           <none>        3306/TCP   123d
service/web       ClusterIP                           <none>        80/TCP     116d

NAME                          READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/web2          1/1     1            1           7d17h

NAME                                     DESIRED   CURRENT   READY   AGE
replicaset.apps/web2-6f8d8bcc76          1         1         1       7d17h

NAME                              READY   AGE
statefulset.apps/mariadb          1/1     123d


kubectl get all -n cert-manager
NAME                                          READY   STATUS    RESTARTS   AGE
pod/cert-manager-6b5c6b786d-cc448             1/1     Running   0          5d19h
pod/cert-manager-cainjector-6bc9d758b-sdb8l   1/1     Running   0          9d
pod/cert-manager-webhook-586d45d5ff-jsh54     1/1     Running   0          9d

NAME                           TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/cert-manager           ClusterIP                     <none>        9402/TCP   12d
service/cert-manager-webhook   ClusterIP                     <none>        443/TCP    12d

NAME                                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/cert-manager              1/1     1            1           12d
deployment.apps/cert-manager-cainjector   1/1     1            1           12d
deployment.apps/cert-manager-webhook      1/1     1            1           12d

NAME                                                DESIRED   CURRENT   READY   AGE
replicaset.apps/cert-manager-6b5c6b786d             1         1         1       7d20h
replicaset.apps/cert-manager-6bbf595697             0         0         0       12d
replicaset.apps/cert-manager-788ff5c97d             0         0         0       7d21h
replicaset.apps/cert-manager-cainjector-6bc9d758b   1         1         1       12d
replicaset.apps/cert-manager-webhook-586d45d5ff     1         1         1       12d

除了更改默认服务帐户外,您还需要遵循NSA/CISA Kubernetes加固指南。

For Pod Security Enforcement:

在pod上强制执行安全需求可以本地完成通过以下两种机制:

  1. 一个名为Pod安全准入的beta版本特性-生产Kubernetes管理员应该采用Pod安全准入,作为在Kubernetes 1.23版本中默认启用。舱安全准入是基于对豆荚的分类,包括特权,基线,并提供了比psp上。关于Pod安全许可的更多信息可在2 .
  2. 一个被称为Pod安全策略(psp)的已弃用功能-管理员在过渡到Pod安全时使用psp准入可以使用附录C中的信息:Pod安全策略来

保护Pod服务帐户令牌:

默认情况下,Kubernetes在以下情况下自动提供服务帐户创建一个Pod,并在Pod中挂载帐户的秘密令牌运行时。许多容器化的应用程序不需要直接访问在Kubernetes业务流程发生时,将服务帐户迁移到该帐户透明的背景。如果应用程序受到威胁,Pods中的账户令牌可以被网络行为者收集并使用进一步妥协集群。当应用程序不需要时Kubernetes管理员应该直接访问服务帐户确保Pod规范禁用正在挂载的秘密令牌。这可以使用Pod的YAML规范中的"automountServiceAccountToken: false"指令来完成。

在某些情况下,容器化应用程序使用已配置的服务帐户令牌来向外部服务(如云平台)进行身份验证。在这些在某些情况下,禁用帐户令牌可能是不可行的。相反,集群管理员应确保将RBAC实现到在集群内限制Pod权限

RBAC:

基于角色的访问控制(RBAC)是一种控制访问的方法基于个人用户角色的计算机或网络资源在你的组织内。

RBAC授权使用RBAC .authorization.k8s。io API组驱动授权决策,允许您动态配置

相关内容

  • 没有找到相关文章

最新更新