【 Cloud 】Azure Kubernetes Service 透過身份識別存取 Azure Key Vault Secret
內容
- 學習目標
- 前置準備作業
- 設定 Azure Kubernetes Service 透過身份識別存取 Azure Key Vault
- 測試與驗證
- 刪除所建立的資源與服務
學習目標
- 如何在
Azure Kubernetes Service ( AKS )透過身份識別存取Azure Key Vault
前置準備作業
- 已建立 Azure 帳號並能正常登入
- 已於電腦端安裝 IDE,本範例使用 Visual Studio Code
- 已於電腦端安裝 AZ Cli
- 已於電腦端安裝 kubectl
設定 Azure Kubernetes Service 透過身份識別存取 Azure Key Vault
Step 1. 安裝 AZ Tool 並登入
-
請參考此網頁進行安裝 https://docs.microsoft.com/zh-tw/cli/azure/install-azure-cli
-
安裝完成後請在終端機輸入下方指令
az login
Step 2. 註冊 EnablePodIdentityPreview
- 請在終端機輸入下方指令
az feature register --name EnablePodIdentityPreview --namespace Microsoft.ContainerService

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
-
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
- 修改指令中的
-
如需在已建立的 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
- 修改指令中的
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"
- 修改指令中的
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
- 記錄下 Response 中的
- 修改指令中的

Step 9. 於 Virtual machine scale sets 設定 Managed Identity
- 請在終端機輸入下方指令以建立
Identityaz 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
- 記錄下 Response 中的
- 修改指令中的

-
取得
VmssGroupName與VmssName- 開啟 Azure Portal 並於上方輸入框輸入
vmss再點選結果中的Virtual machine scale sets

- 取得所需資訊
Name欄位即為下個步驟所需要的VmssNameResource group欄位即為下個步驟所需要的VmssGroupName
- 開啟 Azure Portal 並於上方輸入框輸入
-
請在終端機輸入下方指令為
Virtual machine scale sets設定Managed Identityaz 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
- 修改指令中的

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

- 請在終端機輸入下方指令以設定
Secretaz 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" - 修改指令中的

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 - 修改指令中的

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

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 - 修改指令中的

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

Step 15. 建立 Pod 的 YAML 檔
- 請在本地端電腦建立名為
Pod.yml的檔案並輸入下方內容
Step 16. 部署 Pod 的 YAML 檔
- 請在終端機切換目錄到
Pod.yml檔案所在位置再輸入下方指令kubectl apply -f Pod.yml

測試與驗證
Step 1. 查看 Pod
- 請在終端機輸入下方指令
kubectl get pods

Step 2. 進入到 Pod 中
- 請在終端機輸入下方指令
kubectl exec -it busybox-secrets-store-inline-user-msi sh

Step 3. 切換工作路徑到 /mnt/secrets-store
- 請在終端機輸入下方指令
cd /mnt/secrets-store

Step 4. 查看目錄內容
- 請在終端機輸入下方指令
ls

Step 5. 查看檔案內容
- 請在終端機輸入下方指令
- 檔案內容為
Azure Key Vault中password Secret所設定的值
cat password - 檔案內容為

刪除所建立的資源與服務
Step 1. 刪除 Pod
- 請在終端機輸入下方指令
kubectl delete -f Pod.yml

Step 2. 刪除 SecretProviderClass
- 請在終端機輸入下方指令
kubectl delete -f SecretProviderClass.yml

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

Step 4. 刪除 Azure Key Vault
- 查看刪除清單
az keyvault list-deleted

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

Reference
- https://docs.microsoft.com/en-us/azure/aks/use-managed-identity
- https://docs.microsoft.com/en-us/azure/aks/csi-secrets-store-identity-access