Best Practices: Terraform Azure Authentication
在 Azure 上使用 Terraform 部署資源時,身份驗證是確保部署安全與順利執行的關鍵步驟。不同的環境適用不同的身份驗證方式,無論是 本地開發、CI/CD 自動化,還是 Azure 託管服務,選擇合適的方法能提升安全性與操作效率。本文將介紹常見的身份驗證方式及其最佳使用情境,幫助你在不同環境下順利完成 Terraform 部署。
1. Azure CLI 身份驗證(適用於本地開發)
對於 本地開發,使用 Azure CLI (az login
) 是最簡單的方法。Terraform 會自動使用您登入的憑證。
步驟:
- 登入 Azure CLI:
az login
- (可選)設置訂閱 ID:
az account set --subscription "<SUBSCRIPTION_ID>"
- 正常執行 Terraform。
優點:
- 簡單易用
- 無需管理額外的憑據
缺點:
- 需要手動登入
- 不適合 CI/CD 自動化
- 憑證會過期
2. Service Principal + Client Secret(適用於 CI/CD & 自動化)
對於 自動化部署,使用 Service Principal 搭配 Client Secret 是安全且可擴展的解決方案。
步驟:
- 建立 Service Principal:
az ad sp create-for-rbac --name "terraform-sp" --role="Contributor" --scopes="/subscriptions/<SUBSCRIPTION_ID>"
- 儲存返回的憑證(JSON 格式):
{ "appId": "xxxxxxx", "password": "xxxxxxx", "tenant": "xxxxxxx" }
- 設置環境變數(讓 Terraform 使用):
export ARM_CLIENT_ID="xxxxxxx" export ARM_CLIENT_SECRET="xxxxxxx" export ARM_TENANT_ID="xxxxxxx" export ARM_SUBSCRIPTION_ID="<SUBSCRIPTION_ID>"
- 執行 Terraform。
優點:
- 適合自動化(CI/CD、Terraform Cloud)
- 遵循最小權限原則(Least Privilege)
缺點:
- 需要安全存儲密鑰(如密鑰管理服務)
3. Managed Identity(適用於 Azure 託管服務)
如果 Terraform 執行於 Azure VM、Azure DevOps、Azure Functions,則可以使用 Managed Identity,無需存儲憑證。
步驟:
- 在 Azure VM 上啟用 Managed Identity:
az vm identity assign --name <VM_NAME> --resource-group <RESOURCE_GROUP>
- 為 Managed Identity 授權(例如設定 Contributor 角色):
az role assignment create --assignee <PRINCIPAL_ID> --role Contributor --scope /subscriptions/<SUBSCRIPTION_ID>
- 設定環境變數:
export ARM_USE_MSI=true
- 執行 Terraform。
優點:
- 無需管理憑證
- 最佳安全性做法
缺點:
- 僅適用於 Azure 內部服務
Best Practice
- 本地開發 → 使用 Azure CLI (
az login
) - CI/CD 自動化 → 使用 Service Principal + Client Secret
- Azure 託管服務(VMs, DevOps, Functions) → 使用 Managed Identity
留言
張貼留言