成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Kubernetes RBAC 101: 如何使用輔助命令加強安全控制

云計算 云原生
經過對這些強大工具的探索,我們不僅加深了對 Kubernetes RBAC 管理的理解,還獲得了加強集群安全的新視角。從 kubectl auth can-i? 的基本權限檢查到 kubectl-who-can? 的深入分析,再到 kubectl-rolesum? 和 rbac-tool 的全面視圖,這些工具共同為我們構筑了一個更加透明、健壯的 Kubernetes 環境。

今天,我們繼續深入 Kubernetes 的世界,探索一些關鍵但不太顯眼的輔助命令,這些命令對于加強集群的安全控制至關重要。我將詳細介紹這些工具,它們能夠幫助我們更加有效地理解和管理 RBAC 策略,確保我們的 Kubernetes 環境的安全。

初始準備

在開始之前,我們在集群中創建了一個供開發者使用的命名空間 developer,并配置了必要的資源,這些步驟包括創建命名空間、服務賬號、服務賬號秘鑰(token),以及定義了具體的角色和角色綁定:

# 1. 創建 namespace
kubectl create ns developer

# 2. 創建 ServiceAccount
kubectl -n developer create serviceaccount owner

# 3. 創建服務賬號 token 類型的 secret
cat << EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
  name: owner-secret
  namespace: developer
  annotations:
    kubernetes.io/service-account.name: owner
type: kubernetes.io/service-account-token
EOF

# 4. 創建角色
kubectl create role Owner \
  --resource pods,services,endpoints,secrets \
  --verb get,list,watch \
  -n developer

# 5. 將這個 Owner 角色的權限授予服務賬號 developer:owner
kubectl create rolebinding owner-binding \
  --role=Owner \
  --serviceaccount=developer:owner \
  -n developer

kubectl auth can-i

kubectl auth can-i 是一款實用的權限檢查工具,用于驗證用戶或服務賬戶是否有權限執行特定的 Kubernetes 操作。

好比說,我們可以驗證在初始化階段是否正確地限制了創建 Pod 的權限:

? kubectl --kubeconfig dev-config auth can-i create pod
no

同樣,用戶也可以通過以下命令,來檢查自己是否在當前命名空間中擁有執行所有操作的權限:

? kubectl --kubeconfig dev-config auth can-i '*''*'
no

管理員還可以使用 --as 參數來模擬任何服務賬戶的權限,進一步檢查權限設置:

? kubectl auth can-i \
    get pods --as=system:serviceaccount:developer:owner -n developer
yes

? kubectl auth can-i \
    create pod --as=system:serviceaccount:developer:owner -n developer
no

局限性

盡管 kubectl auth can-i 實用,但它不支持復雜查詢,也不能提供完整的權限視圖。

作為集群管理員,如果我想要知道某個資源的特定操作都有哪些人擁有,它就更加做不到了 ??

kubectl-who-can

kubectl-who-can[1] 是一個進階工具,擴展了 Kubernetes 的原生功能,提供了對 RBAC 策略的深入分析,幫助管理員和開發者能夠快速了解誰有權限執行特定的操作。

它主要用于顯示哪些主體(用戶、組、服務賬戶等)有權限執行指定的動作(如創建、獲取、刪除)在特定的資源上。這是通過分析現有的 RBAC 配置來實現的。

安裝

我們可以通過 Krew 非常方便的安裝它:

kubectl krew install who-can

如何使用?

例如,要找出哪些用戶或服務賬戶有權在特定命名空間中獲取 Pod,可以運行以下命令:

? kubectl who-can get pods -n developer
ROLEBINDING    NAMESPACE  SUBJECT  TYPE            SA-NAMESPACE
owner-binding  developer  owner    ServiceAccount  developer

CLUSTERROLEBINDING                             SUBJECT                                 TYPE            SA-NAMESPACE
cluster-admin                                  system:masters                          Group
system:kube-scheduler                          system:kube-scheduler                   User
system:controller:deployment-controller        deployment-controller                   ServiceAccount  kube-system
system:controller:endpoint-controller          endpoint-controller                     ServiceAccount  kube-system
system:controller:endpointslice-controller     endpointslice-controller                ServiceAccount  kube-system
system:controller:ephemeral-volume-controller  ephemeral-volume-controller             ServiceAccount  kube-system
system:controller:generic-garbage-collector    generic-garbage-collector               ServiceAccount  kube-system
system:controller:namespace-controller         namespace-controller                    ServiceAccount  kube-system
system:controller:node-controller              node-controller                         ServiceAccount  kube-system
system:controller:persistent-volume-binder     persistent-volume-binder                ServiceAccount  kube-system
system:controller:statefulset-controller       statefulset-controller                  ServiceAccount  kube-system
system:controller:pvc-protection-controller    pvc-protection-controller               ServiceAccount  kube-system
k3s-cloud-controller-manager                   k3s-cloud-controller-manager            User            kube-system
local-path-provisioner-bind                    local-path-provisioner-service-account  ServiceAccount  kube-system
system:k3s-controller                          system:k3s-controller                   User
cert-manager-controller-challenges             cert-manager                            ServiceAccount  cert-manager
xfs2-csi-driver                                xfs2-csi-driver-controller-sa           ServiceAccount  xfs2-csi-driver

這個命令將列出所有有權限在 developer 命名空間獲取 Pod 的主體(同時包括 namespace 級別和 cluster 級別)。這對于審核權限、準備安全報告或進行故障排除非常有用。

kubectl-who-can 的優勢

  1. 深入的權限分析: 與 K8s 自帶的 kubectl auth can-i 相比,kubectl-who-can 提供了更全面的視角,不僅能告知你是否有權限,還能指出集群中誰有這些權限。
  2. 安全審計: 這個工具對于安全團隊來說尤其重要,因為它有助于快速識別可能的權限過度分配。
  3. 簡化故障排除: 在調試權限問題時,能夠迅速找出有權限執行特定操作的所有主體,大大簡化了問題解決的過程。

局限性

盡管 kubectl-who-can 在權限管理和安全審計方面極為有效,但它的輸出僅基于當前的 RBAC 配置。

kubectl-rolesum

隨后,我們將轉向 kubectl-rolesum[2],這是一個非常實用的第三方工具,提供了對角色和角色綁定的清晰視圖。

它的主要功能是匯總和顯示特定 K8s 實體(如用戶、組或服務賬戶)的角色權限,這對于驗證安全策略和進行故障排除非常重要。

安裝

我們可以通過 Krew 非常方便的安裝它:

kubectl krew install rolesum

如何使用?

重新回到我們上面的用例,只要通過以下命令,它就能能夠提供比標準 kubectl 命令更加詳細和直觀的權限視圖。

? kubectl rolesum owner -n developer
ServiceAccount: developer/owner
Secrets:

Policies:
? [RB] developer/owner-binding ?  [R] developer/Owner
  Resource   Name  Exclude  Verbs  G L W C U P D DC
  endpoints  [*]     [-]     [-]   ? ? ? ? ? ? ? ?
  pods       [*]     [-]     [-]   ? ? ? ? ? ? ? ?
  secrets    [*]     [-]     [-]   ? ? ? ? ? ? ? ?
  services   [*]     [-]     [-]   ? ? ? ? ? ? ? ?

以下是部分字段的描述:

  • RB: RoleBinding
  • R: Role
  • CRB: ClusterRoleBinding
  • CR: ClusterRole
  • G: get
  • L: list
  • W: watch
  • C: create
  • U: udpate
  • P: patch
  • D: delete
  • DC: deletecollection

實際應用案例

下面是一個實際應用案例截圖,我們可以清晰的看到這個服務被賦予了哪些權限。

圖片圖片

在實際開發過程中,如果發現有些資源創建不出來或者其他權限異常,我們通過該工具能夠快速定位到原因。

同時它對于審計和合規性檢查也是一個寶貴的工具,因為它可以迅速展示權限的當前狀態。

局限性

kubectl-rolesum 的主要優勢在于其能夠提供比標準 kubectl 命令更加詳細和直觀的權限視圖。這對于管理復雜的 RBAC 策略特別有用。

但也有其局限性,就是它提供不了創建或修改這些角色的能力。

rbac-tool

最后,我們將探討 rbac-tool[3],這是一個強大的多功能工具,它不僅簡化了 RBAC 策略的查詢,還幫助我們更容易地創建和管理這些策略。

安裝

我們可以通過 Krew 非常方便的安裝它:

kubectl krew install rbac-tool

如何使用?

例如,要生成特定命名空間或整個集群的 RBAC 權限圖,可以使用以下命令:

kubectl rbac-tool viz --outformat dot \
  && cat rbac.dot | dot -Tpng > rbac.png  && open rbac.png

這個命令會創建一個 DOT 文件,該文件可以用圖形化工具(如 Graphviz)打開,展示角色和角色綁定之間的關系圖。

對于前面的例子,我們也可以使用如下命令用 chrome 打開,查看 owner 的情況。

? kubectl rbac-tool viz --include-subjects=owner && open -a "Google Chrome" rbac.html
[RAPID7-INSIGHTCLOUDSEC] Namespaces included '*'
[RAPID7-INSIGHTCLOUDSEC] Namespaces excluded 'kube-system'
[RAPID7-INSIGHTCLOUDSEC] Connecting to cluster ''
[RAPID7-INSIGHTCLOUDSEC] Generating Graph and Saving as 'rbac.html'

效果如下所示:

圖片圖片

kubectl rbac-tool lookup

提供查詢主體的權限:

? kubectl rbac-tool lookup -e '^owner.*'
  SUBJECT | SUBJECT TYPE   | SCOPE | NAMESPACE | ROLE
+---------+----------------+-------+-----------+-------+
  owner   | ServiceAccount | Role  | developer | Owner
rbac-tool who-can

查看誰有執行特定操作的權限,類比 kubectl-who-can 的能力:

? kubectl rbac-tool who-can get pod
  TYPE           | SUBJECT                                | NAMESPACE
+----------------+----------------------------------------+------------------------------------------------+
  Group          | system:masters                         |
  ServiceAccount | cert-manager                           | cert-manager
  ServiceAccount | deployment-controller                  | kube-system
  ServiceAccount | endpoint-controller                    | kube-system
  ServiceAccount | endpointslice-controller               | kube-system
  ServiceAccount | ephemeral-volume-controller            | kube-system
  ServiceAccount | generic-garbage-collector              | kube-system
  ServiceAccount | local-path-provisioner-service-account | kube-system
  ServiceAccount | namespace-controller                   | kube-system
  ServiceAccount | node-controller                        | kube-system
  ServiceAccount | owner                                  | developer
  ServiceAccount | persistent-volume-binder               | kube-system
  ServiceAccount | pvc-protection-controller              | kube-system
  ServiceAccount | statefulset-controller                 | kube-system
  ServiceAccount | user-sa                                | user-zone-4ef1aab6-3c45-4d37-bdb1-0b0c629b3b26
  ServiceAccount | user-sa                                | user-zone-729281f1-46e8-4d63-8ab8-cfd895923bab
  ServiceAccount | xfs2-csi-driver-controller-sa          | xfs2-csi-driver
  User           | k3s-cloud-controller-manager           | kube-system
  User           | system:k3s-controller                  |
  User           | system:kube-scheduler                  |

rbac-tool policy-rules

展示詳細的權限規則,類比 kubectl-rolesum 的能力,但在輸出可視化上,個人覺得 kubectl-rolesum 要更加清晰一些:

? kubectl rbac-tool policy-rules -e '^owner'
  TYPE           | SUBJECT | VERBS | NAMESPACE | API GROUP | KIND      | NAMES | NONRESOURCEURI | ORIGINATED FROM
+----------------+---------+-------+-----------+-----------+-----------+-------+----------------+-------------------------+
  ServiceAccount | owner   | get   | developer | core      | endpoints |       |                | Roles>>developer/Owner
  ServiceAccount | owner   | get   | developer | core      | pods      |       |                | Roles>>developer/Owner
  ServiceAccount | owner   | get   | developer | core      | secrets   |       |                | Roles>>developer/Owner
  ServiceAccount | owner   | get   | developer | core      | services  |       |                | Roles>>developer/Owner
  ServiceAccount | owner   | list  | developer | core      | endpoints |       |                | Roles>>developer/Owner
  ServiceAccount | owner   | list  | developer | core      | pods      |       |                | Roles>>developer/Owner
  ServiceAccount | owner   | list  | developer | core      | secrets   |       |                | Roles>>developer/Owner
  ServiceAccount | owner   | list  | developer | core      | services  |       |                | Roles>>developer/Owner
  ServiceAccount | owner   | watch | developer | core      | endpoints |       |                | Roles>>developer/Owner
  ServiceAccount | owner   | watch | developer | core      | pods      |       |                | Roles>>developer/Owner
  ServiceAccount | owner   | watch | developer | core      | secrets   |       |                | Roles>>developer/Owner
  ServiceAccount | owner   | watch | developer | core      | services  |       |                | Roles>>developer/Owner

以前用過 rakkess[4],它在對資源的訪問矩陣表現的也挺友好。

圖片圖片

rbac-tool gen

生成自定義 RBAC 規則。類比 kubectl create role 和 kubectl create clusterrole,但是在靈活性和資源的指定上,在部分場景下會更加高效:

? kubectl rbac-tool gen \
  --generated-type=Role \
  --allowed-verbs=get,list,watch \
  --allowed-groups=, \
  --deny-resources=bindings.,persistentvolumeclaims.,limitranges.,events.,replicationcontrollers.,configmaps.,resourcequotas.,podtemplates.,serviceaccounts.

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  creationTimestamp: null
  name: custom-role
  namespace: mynamespace
rules:
- apiGroups:
  - ""
  resources:
  - pods
  - secrets
  - endpoints
  - services
  verbs:
  - get
  - list
  - watch

相比較而言,rbac-tool 在 RBAC 管理方面還是非常強大的。

將學習付諸實踐

在前面的章節中,我們詳細探討了 Kubernetes 中的 RBAC 工具和命令,了解了如何使用它們來做安全審計或者簡化故障排除。但是,光有工具并不足以保障安全,正確和高效地應用這些工具同樣重要。因此,接下來的部分,我將分享一些 “RBAC 最佳實踐” 關鍵的策略和建議:

1. 最小權限原則

在定義角色時,應遵循最小權限原則。只授予執行特定任務所需的最少權限,以最大限度地減少未授權操作的風險。這是確保安全的關鍵步驟。

2. 定期審計

定期回顧和審計集群里的 RBAC 配置,確保它們與組織的安全策略保持一致。刪除不必要或過度的權限,并根據需要更新角色。這有助于維持一個清晰、安全的權限結構。

3. 有效使用命名空間

利用命名空間邏輯地隔離不同的團隊或項目,并在命名空間級別執行 RBAC 策略。這樣可以更有效地管理權限,確保不同團隊或項目之間的操作隔離。

4. 測試 RBAC 策略

在非生產環境中徹底測試我們的 RBAC 策略,確保它們按預期工作,然后再應用到生產集群中。這是防止潛在問題影響生產環境的重要一步。

Conclusion

經過對這些強大工具的探索,我們不僅加深了對 Kubernetes RBAC 管理的理解,還獲得了加強集群安全的新視角。從 kubectl auth can-i 的基本權限檢查到 kubectl-who-can 的深入分析,再到 kubectl-rolesum 和 rbac-tool 的全面視圖,這些工具共同為我們構筑了一個更加透明、健壯的 Kubernetes 環境。

記住,Kubernetes 安全是一項持續的努力。借助這些工具和不斷的學習,我們能夠確保我們的集群既強大又安全。

責任編輯:武曉燕 來源: Cloud Native 101
相關推薦

2024-09-03 16:28:20

2018-12-14 08:00:00

2022-07-04 09:30:59

Kubernetes云安全

2018-05-09 11:22:15

2022-06-21 08:03:49

RBAC 限制容器

2020-06-02 14:27:48

物聯網訪問控制網絡安全

2017-09-12 14:46:54

2012-10-24 11:08:41

2013-07-19 09:12:54

2022-10-10 13:22:38

物聯網安全隱私

2011-03-22 16:28:59

2014-09-03 11:26:11

2022-09-16 14:26:54

物聯網網絡安全

2019-07-22 10:20:06

2013-05-13 15:14:56

信息安全

2024-05-06 14:07:47

射頻識別RFID

2010-05-17 15:38:57

IIS服務器

2011-12-02 09:56:50

2022-07-27 19:05:58

物聯網安全網絡安全

2010-08-24 09:32:13

Exchange201RBAC用戶權限
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产三级精品三级在线观看四季网 | 日韩一区二区在线看 | 中文一区二区 | 久久久精品一区二区三区 | 久久精品欧美电影 | 国产91久久久久 | 欧美色综合一区二区三区 | 最新伦理片 | 久久久www成人免费精品 | 精品久久久久香蕉网 | 久久夜视频 | 一级黄a| 国家一级黄色片 | 欧美综合一区二区三区 | 欧美精品一区二区三区一线天视频 | 九九导航 | 国产成人精品一区二区三区 | 一级欧美一级日韩片免费观看 | 亚洲精品成人在线 | 91精品国模一区二区三区 | 精品福利在线 | 日韩一区二区三区在线观看 | 网站国产 | 91精品国产综合久久久久蜜臀 | 亚洲+变态+欧美+另类+精品 | 日韩精品一区二区三区在线播放 | 成人精品国产免费网站 | 欧洲精品久久久久毛片完整版 | 欧美精品一区二区免费 | 精品国产1区2区3区 一区二区手机在线 | 久99久视频 | 国产精品极品美女在线观看免费 | 亚洲一区在线免费观看 | 国产一区二区三区视频在线观看 | 精品产国自在拍 | 拍戏被cao翻了h承欢 | 国产乱码精品一区二区三区五月婷 | 成人免费视频久久 | 国产精品一区一区 | 欧美男人天堂 | 日本精品视频一区二区三区四区 |