iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0
Cloud Native

我在 CKS 考完只拿 47% 後痛定思痛決定好好準備內容系列 第 7

[Day7] 2-1. Use Role Based Access Controls to minimize exposure

  • 分享至 

  • xImage
  •  

今天要討論的是如何訪問 cluster (Kube-apiserver),在訪問 Cluster 的時候可以分為 人員 (user) 或者是 服務 (servie) 訪問。
如果是服務訪問時可以透過建立 ServiceAccount 進行服務的溝通及訪問,如果以 EKS 而言還可以透過 annotation 宣告並透過 oidc 串接 AWS IAM role。

ServiceAccount 的部分會在明天介紹。

當 user 要訪問 kube-apiserver 的時候會透過 kubectl指令訪問,那麼在訪問的時候是如何進行驗證(Authentication)以及授權(Authorization)的呢?

Authentication

  • Admins: 透過 kubectl 連線

  • Developers: 透過 curl https://kube-server-ip:6443/ 連線

  • Service Account
    上方所提及的屬於"人"使用,而當服務需要使用時會使用ServiceAccount

User

由 kube-apiserver 進行驗證(Authentication) , 可以由以下四種方式

  1. Static Password File: 透過帳號密碼的形式連線,該形式在v.19後已被棄用
  2. Static Token File: 透過設定 token 的方式進行連線該 token 會以 csv 檔案的形式儲存
    格式為
token,user,uid,"group1,group2,group3"

並在 /etc/kubernetes/manifests/kube-apiserver 加上

--token-auth-file user-details.csv

可以透過以下指令進行測試取得pod資訊

curl -v -k https://master-node-ip:6443/api/v1/pods --header "Authorization: Bearer token"
# -v 輸出細節
# -k 忽略SSL 證書驗證
# token 為上方建立csv時所給予user的token
  1. Certificates
  2. Identity Service

Authorization

主要會在kube-apiserver中設定 --authorization-mode
可以分為以下Mode

  • Node
  • RBAC
  • Webhook
  • ABAC
    如果列出多個,會多個嘗試。

Node

訪問node時的憑證,指的是不能跨 Node 存取

ABAC

直接將 policy 賦予給 user

{"kind":"Policy", "spec":{"user":"test-user","namespace":"*","resource":"pods","apiGroup":"*"}}

RBAC

建立 role ,並將 user 賦予給 role
Role 分為 Cluster 等級或者是 namespace 等級,Cluster 等級 可以為 nodes, PV, clusterroles, certificatesigningrequests, namespaces

Webhook

透過 Webhook 的方式將權限控管交由第三方,當向kube API 發起請求時會向該第三方發起

Always Allow

預設允許所有

Always Deny

預設拒絕所有


上一篇
[Day6] 1-5. Verify platform binaries before deploying
下一篇
[Day8] 2-2. Exercise caution in using service accounts
系列文
我在 CKS 考完只拿 47% 後痛定思痛決定好好準備內容11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言