官术网_书友最值得收藏!

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。

主站蜘蛛池模板: 葵青区| 新蔡县| 靖西县| 龙川县| 九江市| 泽库县| 福建省| 普安县| 稷山县| 德化县| 苍山县| 泸定县| 奈曼旗| 华容县| 日喀则市| 祥云县| 中山市| 曲靖市| 理塘县| 措美县| 洛阳市| 肃宁县| 土默特左旗| 突泉县| 新晃| 阆中市| 丰都县| 清丰县| 太和县| 康乐县| 铜陵市| 张掖市| 临朐县| 福海县| 宜昌市| 潢川县| 静海县| 邵武市| 弥勒县| 娄烦县| 永新县|