首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用服务帐户加固k8s集群

如何用服务帐户加固k8s集群
EN

Stack Overflow用户
提问于 2022-05-24 17:39:53
回答 1查看 88关注 0票数 0

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

我的集群包含以下内容(为了隐私起见,我删除了IP):

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2022-05-25 14:38:18

不仅仅是更改默认的服务帐户,您还需要遵循NSA/CISA Kubernetes硬化指南

关于Pod安全执行:

在Kubernetes,可以通过两种机制来执行对Pods的安全要求:

  1. beta1发布功能称为Pod安全接纳-生产Kubernetes管理员应该采用Pod安全接纳,因为在Kubernetes版本1.23中默认启用了该功能。Pod安全接纳是基于将Pod分类为特权、基线和受限的,并且提供了比PSP更直观的实现。有关Pod安全接纳的更多信息可在在线documentation2中获得。
  2. 一个被称为Pod安全策略(PSP)的不推荐特性--在转换到Pod安全接纳时使用PSP的管理员可以使用附录C中的信息: Pod安全策略来增强它们的PSP。

保护Pod服务帐户令牌:

默认情况下,Kubernetes在创建Pod时自动提供服务帐户,并在运行时在Pod中挂载帐户的秘密令牌。许多容器化应用程序不需要直接访问服务帐户,因为Kubernetes编排是在后台透明地进行的。如果应用程序被破坏,网络参与者可以收集Pods中的帐户令牌,并用来进一步破坏集群。当应用程序不需要直接访问服务帐户时,Kubernetes管理员应该确保Pod规范禁用正在挂载的秘密令牌。这可以使用Pod的YAML规范中的“automountServiceAccountToken: false”指令来实现。 在某些情况下,容器化应用程序使用提供的服务帐户令牌对外部服务(如云平台)进行身份验证。在这种情况下,禁用帐户令牌是不可行的。相反,群集管理员应该确保实现RBAC来限制集群中的Pod特权。

RBAC

基于角色的访问控制(RBAC)是一种基于组织中单个用户的角色来管理对计算机或网络资源的访问的方法。 RBAC授权使用rbac.authorization.k8s.io API组来驱动授权决策,允许您通过Kubernetes API动态配置策略。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72367219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档