- 云原生安全:攻防實踐與體系構建
- 劉文懋 江國龍 浦明 阮博男 葉曉虎
- 858字
- 2021-11-04 18:12:36
4.3.1 背景知識
1.基于角色的訪問控制
基于角色的訪問控制(RBAC)是一種控制計算機、網絡資源訪問的方法,其核心理念是為不同用戶賦予不同的角色,通過角色授權進行訪問控制。RBAC模式可以在API Server啟動時加入相關參數來開啟:--authorization-mode=Example,RBAC。
Kubernetes提供了四種RBAC對象:Role、ClusterRole、RoleBinding和ClusterRoleBinding。
其中,Role和ClusterRole代表一系列權限的集合,一個Role資源通常是特定命名空間內的某些權限的集合,ClusterRole則是無命名空間限制的資源。
例如,下面是一個Role資源的聲明文件,它創建了一個名為pod-reader的角色,這個角色的權限是能夠對命名空間內部的Pod進行查看、事件監聽和列舉操作。
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: default name: pod-reader rules: - apiGroups: [""] # "" indicates the core API group resources: ["pods"] verbs: ["get", "watch", "list"]
RoleBinding和ClusterRoleBinding則用來將Role和ClusterRole定義的權限賦予一個或一組特定的用戶。
例如,下面是一個RoleBinding資源的聲明文件,它將pod-reader角色的權限賦予jane用戶:
apiVersion: rbac.authorization.k8s.io/v1 # This role binding allows "jane" to read pods in the "default" namespace. # You need to already have a Role named "pod-reader" in that namespace. kind: RoleBinding metadata: name: read-pods namespace: default subjects: # You can specify more than one "subject" - kind: User name: jane # "name" is case sensitive apiGroup: rbac.authorization.k8s.io roleRef: # "roleRef" specifies the binding to a Role / ClusterRole kind: Role #this must be Role or ClusterRole name: pod-reader # this must match the name of the Role or ClusterRole you wish to bind to apiGroup: rbac.authorization.k8s.io
本書的17.2節對Kubernetes的RBAC機制做了更多介紹。
2.WebSocket
WebSocket是一種網絡傳輸協議[1],可在單個TCP連接上進行全雙工通信,使得客戶端和服務器之間的數據交換變得更加簡單,允許服務端主動向客戶端推送數據。在WebSocket API中,瀏覽器和服務器只需要完成一次握手,兩者之間就可以創建持久性的連接,并進行雙向數據傳輸。為了實現兼容性,WebSocket握手使用HTTP Upgrade頭,從HTTP更改為WebSocket協議。
一個典型的WebSocket握手的客戶端請求如下:
GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Origin: http://example.com Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 13
相應的服務端響應內容:
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= Sec-WebSocket-Protocol: chat
后文的漏洞利用程序會涉及構造WebSocket報文的部分,它與上述示例類似,稍有不同。
3.Kubernetes API Server
在一個Kubernetes集群中,API Server處于通信的中樞位置,是集群控制平面的核心,各組件通過API Server進行交互。
API Server通過RESTful API提供服務。除此之外,它還具有代理轉發的功能,將外界對于部分API的調用轉發到后端實際執行這些API功能的組件上。例如,常用的對Pod執行exec的操作就是API Server作為代理,將請求轉發到對應節點的Kubelet上,由該Kubelet執行具體命令。這個過程還涉及從HTTP到WebSocket的協議升級過程,API Server能夠作為代理維護一條WebSocket連接。
[1] https://zh.wikipedia.org/wiki/WebSocket。