【 Cloud 】Azure Kubernetes Service 透過身份識別存取 Azure Key Vault Secret

【 Cloud 】Azure Kubernetes Service 透過身份識別存取 Azure Key Vault Secret
Photo by Massimo Virgilio / Unsplash

內容

  • 學習目標
  • 前置準備作業
  • 設定 Azure Kubernetes Service 透過身份識別存取 Azure Key Vault
  • 測試與驗證
  • 刪除所建立的資源與服務

學習目標

  • 如何在 Azure Kubernetes Service ( AKS ) 透過身份識別存取 Azure Key Vault

前置準備作業

設定 Azure Kubernetes Service 透過身份識別存取 Azure Key Vault

Step 1. 安裝 AZ Tool 並登入

az login

Step 2. 註冊 EnablePodIdentityPreview

  • 請在終端機輸入下方指令
az feature register --name EnablePodIdentityPreview --namespace Microsoft.ContainerService

---2022-02-18---1.43.31


Step 3. 安裝或更新 aks-preview extension

  • 如未安裝過 aks-preview extension 請執行下方指令
az extension add --name aks-preview
  • 如要更新 aks-preview extension 請執行下方指令
az extension update --name aks-preview

Step 4. 建立 Azure 資源群組

  • 請在終端機輸入下方指令

    az group create --name ResourceGroupName --location Region
    
    • 修改指令中的 ResourceGroupName 為唯一可識別的名稱。

    • 修改指令中的 Region 請輸入資源部署於何處

      • 可輸入 az account list-locations -o table 查看可用區域
    • 本範例使用如下

    az group create --name aks-sercre-test --location westus2
    

    ---2022-02-18---1.45.43


Step 5. 建立 Azure Kubernetes Service ( AKS ) 並啟用 Managed Identity

  • 請在終端機輸入下方指令

    az aks create -g ResourceGroupName -n AksName --enable-managed-identity
    
    • 修改指令中的 ResourceGroupName 請輸入 Step 4 所建立的名稱。
    • 修改指令中的 AksName 為唯一可識別的名稱。
    • 本範例使用如下
    az aks create -g aks-sercre-test -n aks-sercre-test --enable-managed-identity
    

    ---2022-02-18---1.52.23

  • 如需在已建立的 AKS 中啟用 Managed Identity 請輸入下方指令

    az aks update -g ResourceGroupName -n AksName --enable-managed-identity
    

Step 6. 下載 AKS Configures

  • 請在終端機輸入下方指令

    az aks get-credentials --resource-group ResourceGroupName --name AksName
    
    • 修改指令中的 ResourceGroupName 請輸入 Step 4 所建立的名稱。
    • 修改指令中的 AksName 請輸入 Step 5 所建立的名稱。
    • 本範例使用如下
    az aks get-credentials --resource-group aks-sercre-test --name aks-sercre-test
    

    ---2022-02-18---1.53.17


Step 7. 確認 AKS Cluster 正在使用 Managed Identity

  • 請在終端機輸入下方指令

    az aks show -g ResourceGroupName -n AksName --query "servicePrincipalProfile"
    
    • 修改指令中的 ResourceGroupName 請輸入 Step 4 所建立的名稱。
    • 修改指令中的 AksName 請輸入 Step 5 所建立的名稱。
    • 本範例使用如下
    az aks show -g aks-sercre-test -n aks-sercre-test --query "servicePrincipalProfile"
    

    ---2022-02-18---1.54.00


Step 8. 取得 Identity 相關資訊

  • 請在終端機輸入下方指令
    az aks show -g ResourceGroupName -n AksName --query "identity"
    
    • 修改指令中的 ResourceGroupName 請輸入 Step 4 所建立的名稱。
    • 修改指令中的 AksName 請輸入 Step 5 所建立的名稱。
    • 本範例使用如下
      az aks show -g aks-sercre-test -n aks-sercre-test --query "identity"
      
      • 記錄下 Response 中的 tenantId

---2022-02-18---1.54.40


Step 9. 於 Virtual machine scale sets 設定 Managed Identity

  • 請在終端機輸入下方指令以建立 Identity
    az identity create -g ResourceGroupName -n IdentityName
    
    • 修改指令中的 ResourceGroupName 請輸入 Step 4 所建立的名稱。
    • 修改指令中的 IdentityName 為唯一可識別的名稱。
    • 本範例使用如下
      az identity create -g aks-sercre-test -n aks-sercre-test
      
      • 記錄下 Response 中的 clientId 為之後步驟所需要的 IdentityClientId
      • 記錄下 Response 中的 id 為之後步驟所需要的 IdentityId

---2022-02-18---1.59.56

  • 取得 VmssGroupNameVmssName

    • 開啟 Azure Portal 並於上方輸入框輸入 vmss 再點選結果中的 Virtual machine scale sets
      ---2022-02-18---2.04.51
    • 取得所需資訊
      ---2022-02-18---2.09.01
      • Name 欄位即為下個步驟所需要的 VmssName
      • Resource group 欄位即為下個步驟所需要的 VmssGroupName
  • 請在終端機輸入下方指令為 Virtual machine scale sets 設定 Managed Identity

    az vmss identity assign -g VmssGroupName -n VmssName --identities IdentityId
    
    • 修改指令中的 VmssGroupName 請輸入前步驟所取得的 VmssGroupName
    • 修改指令中的 VmssName 請輸入前步驟所取得的 VmssName
    • 修改指令中的 IdentityId 請輸入前步驟所取得的 IdentityId
    • 本範例使用如下
      az vmss identity assign -g MC_aks-sercre-test_aks-sercre-test_westus2 -n aks-nodepool1-17757839-vmss --identities /subscriptions/3859d980-XXXX-XXXX-XXXX-19daf73d381f/resourcegroups/aks-sercre-test/providers/Microsoft.ManagedIdentity/userAssignedIdentities/aks-sercre-test
      

---2022-02-18---2.15.22


Step 10. 建立 Azure Key Vault 與設定 Secret

  • 請在終端機輸入下方指令以建立 Azure Key Vault
    az keyvault create --location Region --name KeyVaultName --resource-group ResourceGroupName
    
    • 修改指令中的 Region 請輸入資源部署於何處
      • 可輸入 az account list-locations -o table 查看可用區域
    • 修改指令中的 ResourceGroupNameStep 4 所建立的名稱。
    • 修改指令中的 KeyVaultName 為唯一可識別的名稱。
    • 本範例使用如下
    az keyvault create --location westus2 --name aks-sercre-test --resource-group aks-sercre-test
    

---2022-02-18---2.19.26

  • 請在終端機輸入下方指令以設定 Secret
    az keyvault secret set --vault-name "KeyVaultName" --name "SecretName" --value "SecretValue"
    
    • 修改指令中的 KeyVaultName 為所建立的 Key Vault 名稱。
    • 修改指令中的 SecretName 為所要設定的 Secret 的名稱。
    • 修改指令中的 SecretValue 為所要設定的 `Secret 的值。
    • 本範例使用如下
    az keyvault secret set --vault-name "aks-sercre-test" --name "password" --value "qwer1234567890"
    

---2022-02-18---2.20.40


Step 11. 設定 Key Vault 的 Policy

  • 請在終端機輸入下方指令
    az keyvault set-policy -n KeyVaultName --secret-permissions get --spn IdentityClientId -g ResourceGroupName
    
    • 修改指令中的 KeyVaultName 請輸入 Step 10 所建立的名稱。
    • 修改指令中的 IdentityClientId 請輸入 Step 9 所得到的 clientId
    • 修改指令中的 ResourceGroupName 請輸入 Step 4 所建立的名稱。
    • 本範例使用如下
    az keyvault set-policy -n aks-sercre-test --secret-permissions get --spn 5146cc05-a3be-4f56-9e3a-406ca5861a47 -g aks-sercre-test
    

---2022-02-18---2.24.00


Step 12. 建立 SecretProviderClass 的 YAML 檔

  • 請在本地端電腦建立名為 SecretProviderClass.yml 的檔案並輸入下方內容
    • 修改第 10 行的 Client-IdStep 9 中的 clientId 名稱。
    • 修改第 11 行的 Key-Vault-NameStep 10 中的 Key Vault 名稱。
    • 修改第 16 行的 Key-Vault-Secret-NameStep 10 中的 Secret 的名稱。
    • 修改第 19 行的 Tenant-IdStep 8 中的 tenantId

---2022-02-18---2.31.52


Step 13. AKS 啟用 azure-keyvault-secrets-provider

  • 請在終端機輸入下方指令
    az aks enable-addons --addons azure-keyvault-secrets-provider --name AksName --resource-group ResourceGroupName
    
    • 修改指令中的 AksName 請輸入 Step 5 所建立的名稱。
    • 修改指令中的 ResourceGroupName 請輸入 Step 4 所建立的名稱。
    • 本範例使用如下
    az aks enable-addons --addons azure-keyvault-secrets-provider --name aks-sercre-test --resource-group aks-sercre-test
    

---2022-02-18---2.36.03


Step 14. 部署 SecretProviderClass 的 YAML 檔

  • 請在終端機切換目錄到 SecretProviderClass.yml 檔案所在位置再輸入下方指令
    kubectl apply -f SecretProviderClass.yml
    

---2022-02-18---2.37.40


Step 15. 建立 Pod 的 YAML 檔

  • 請在本地端電腦建立名為 Pod.yml 的檔案並輸入下方內容

Step 16. 部署 Pod 的 YAML 檔

  • 請在終端機切換目錄到 Pod.yml 檔案所在位置再輸入下方指令
    kubectl apply -f Pod.yml
    

---2022-02-18---2.39.01

測試與驗證

Step 1. 查看 Pod

  • 請在終端機輸入下方指令
    kubectl get pods
    

---2022-02-18---2.39.52


Step 2. 進入到 Pod 中

  • 請在終端機輸入下方指令
    kubectl exec -it busybox-secrets-store-inline-user-msi sh
    

---2022-02-18---2.40.23


Step 3. 切換工作路徑到 /mnt/secrets-store

  • 請在終端機輸入下方指令
    cd /mnt/secrets-store
    

---2022-02-18---2.41.00


Step 4. 查看目錄內容

  • 請在終端機輸入下方指令
    ls
    

---2022-02-18---2.41.27


Step 5. 查看檔案內容

  • 請在終端機輸入下方指令
    • 檔案內容為 Azure Key Vaultpassword Secret 所設定的值
    cat password
    

---2022-02-18---2.41.59

刪除所建立的資源與服務

Step 1. 刪除 Pod

  • 請在終端機輸入下方指令
    kubectl delete -f Pod.yml
    

---2022-02-18---2.45.42


Step 2. 刪除 SecretProviderClass

  • 請在終端機輸入下方指令
    kubectl delete -f SecretProviderClass.yml
    

---2022-02-18---2.46.15


Step 3. 刪除所建立的相關資源

  • 請在終端機輸入下方指令
    az group delete -n ResourceGroupName
    
    • 修改指令中的 ResourceGroupName 將其改為 設定 Azure Kubernetes Service 透過身份識別存取 Azure Key Vault 段落中 Step 4 所建立的名稱。
    • 本範例使用如下
    az group delete -n aks-sercre-test
    

---2022-02-18---2.53.12


Step 4. 刪除 Azure Key Vault

  • 查看刪除清單
    az keyvault list-deleted
    

---2022-02-18---2.53.58

  • 請在終端機輸入下方指令以 Azure Key Vault
    az keyvault purge --name KeyVaultName
    
    • 修改指令中的 KeyVaultName 將其改為刪除清單中所顯示的名稱
    • 本範例使用如下
    az keyvault purge --name aks-sercre-test
    

---2022-02-18---2.55.47

Reference

GitHub

List of blogs