【 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
- 請在終端機輸入下方指令以建立
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
- 記錄下 Response 中的
- 修改指令中的
-
取得
VmssGroupName
與VmssName
- 開啟 Azure Portal 並於上方輸入框輸入
vmss
再點選結果中的Virtual machine scale sets
- 取得所需資訊
Name
欄位即為下個步驟所需要的VmssName
Resource group
欄位即為下個步驟所需要的VmssGroupName
- 開啟 Azure Portal 並於上方輸入框輸入
-
請在終端機輸入下方指令為
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
- 修改指令中的
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
查看可用區域
- 可輸入
- 修改指令中的
ResourceGroupName
為Step 4
所建立的名稱。 - 修改指令中的
KeyVaultName
為唯一可識別的名稱。 - 本範例使用如下
az keyvault create --location westus2 --name aks-sercre-test --resource-group aks-sercre-test
- 修改指令中的
- 請在終端機輸入下方指令以設定
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"
- 修改指令中的
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 Vault
az 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