使用適用於 Go 的 Azure 身分識別模組進行 Azure 驗證
在本教學課程中, 適用於 Go 的 Azure 身分識別模組中的 DefaultAzureCredential 類型可用來向 Azure 進行驗證。 Azure 身分識別模組提供數種認證類型,著重於具有 Microsoft Entra ID 的 OAuth。
DefaultAzureCredential
藉由結合常用的認證類型來簡化驗證。 它會鏈結用來驗證 Azure 部署應用程式的認證類型,以及用來在開發環境中進行驗證的認證類型。
必要條件
- Azure 訂用帳戶:如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
- Go 已安裝:版本 1.18 或更高版本
1.安裝適用於 Go 的 Azure 身分識別模組
執行下列命令以下載 azidentity 模組:
go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity
2.使用 Azure 進行驗證
使用 DefaultAzureCredential
下列其中一種技術向 Azure 進行驗證:
若要深入瞭解不同的認證類型,請參閱 認證類型。
選項 1:定義環境變數
會 DefaultAzureCredential
使用 EnvironmentCredential
支援三種驗證類型的環境變數來設定驗證。 從下列驗證類型中選擇,並定義適當的環境變數。
具有秘密的服務主體
變數名稱 | 值 |
---|---|
AZURE_CLIENT_ID |
Azure 服務主體的應用程式標識碼 |
AZURE_TENANT_ID |
應用程式的 Microsoft Entra 租使用者識別碼 |
AZURE_CLIENT_SECRET |
Azure 服務主體的密碼 |
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_SECRET="<service_principal_password>"
具有憑證的服務主體
變數名稱 | 值 |
---|---|
AZURE_CLIENT_ID |
Microsoft Entra 應用程式的標識碼 |
AZURE_TENANT_ID |
應用程式的 Microsoft Entra 租使用者識別碼 |
AZURE_CLIENT_CERTIFICATE_PATH |
PEM 或 PKCS12 憑證檔案的路徑,包括私鑰 |
AZURE_CLIENT_CERTIFICATE_PASSWORD |
(選擇性)憑證檔案的密碼 |
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_CERTIFICATE_PATH="<azure_client_certificate_path>"
使用者名稱與密碼
變數名稱 | 值 |
---|---|
AZURE_CLIENT_ID |
Microsoft Entra 應用程式的標識碼 |
AZURE_USERNAME |
使用者名稱(通常是電子郵件位址) |
AZURE_PASSWORD |
該用戶的密碼 |
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_USERNAME="<azure_username>"
export AZURE_PASSWORD="<azure_user_password>"
在上述順序中嘗試設定。 例如,如果客戶端密碼和憑證的值都存在,則會使用客戶端密碼。 如需使用服務主體進行驗證的端對端教學課程,請參閱 使用服務主體進行 Go 驗證的 Azure SDK。
選項 2:使用工作負載身分識別
Microsoft Entra 工作負載 ID 可讓 Kubernetes 叢集中的 Pod 使用 Kubernetes 身分識別(服務帳戶)。 發出 Kubernetes 令牌,而 OIDC 同盟 可讓 Kubernetes 應用程式使用 Microsoft Entra ID 安全地存取 Azure 資源。
如果 的必要環境變數 EnvironmentCredential
不存在, DefaultAzureCredential
請嘗試使用 WorkloadIdentityCredential 進行驗證。 WorkloadIdentityCredential
嘗試從工作負載識別 Webhook 所設定的環境變數讀取服務主體組態。
選項3:使用受控識別
受控識別可免除開發人員管理認證的需求。 聯機到支援 Microsoft Entra 驗證的資源時,裝載在 Azure 中的應用程式可以使用 Microsoft Entra 令牌,而不是認證。 本機開發不支援受控識別。
如果 的必要環境變數 WorkloadIdentityCredential
不存在, DefaultAzureCredential
請嘗試使用 ManagedIdentityCredential 進行驗證。
如果使用使用者指派的受控識別,請執行下列命令來設定 AZURE_CLIENT_ID
環境變數。
export AZURE_CLIENT_ID="<user_assigned_managed_identity_client_id>"
AZURE_CLIENT_ID
如果未設定環境變數,DefaultAzureCredentials
請在裝載資源上啟用系統指派的受控識別時,嘗試使用系統指派的受控識別進行驗證。
如需在 Azure 託管應用程式中使用受控識別進行驗證的端對端教學課程,請參閱 使用受控識別向 Azure SDK for Go 進行驗證。
選項 4:使用 Azure CLI 登入
若要減少本機開發的摩擦, DefaultAzureCredential
可以在使用者登入 Azure CLI 時進行驗證。
執行下列命令以登入 Azure CLI:
az login
選項 5:使用 Azure 開發人員 CLI 登入
在本機開發中,如果使用者未登入 Azure CLI, DefaultAzureCredential
可以在使用者登入 Azure 開發人員 CLI 時進行驗證。
執行下列命令以登入 Azure 開發人員 CLI:
azd auth login
不建議在 Azure 中執行的應用程式使用 Azure 開發人員 CLI 驗證。
3.使用 DefaultAzureCredential 來驗證 ResourceClient
使用 建立名為 azure-auth
的新範例 Go 模組,以測試向 Azure DefaultAzureCredential
進行驗證:
建立目錄以測試並執行範例 Go 程式代碼,然後變更至該目錄。
執行 go mod init 以建立模組:
go mod init azure-auth
執行 go 以 下載、建置及安裝必要的 Azure SDK for Go 模組:
go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity" go get "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription"
建立名為
main.go
的檔案,並插入下列程式碼:package main import ( "context" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription" ) const subscriptionID = "<subscription ID>" func main() { cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { // TODO: handle error } // Azure SDK Resource Management clients accept the credential as a parameter. // The client will authenticate with the credential as necessary. client, err := armsubscription.NewSubscriptionsClient(cred, nil) if err != nil { // TODO: handle error } _, err = client.Get(context.TODO(), subscriptionID, nil) if err != nil { // TODO: handle error } }
使用您的訂用帳戶 ID 來取代
<subscription ID>
。執行
go run
以建置並執行應用程式:go run .
注意
若要在本機系統上以身分執行,您必須使用 Azure CLI 或 Azure 開發人員 CLI 登入 Azure。
使用 DefaultAzureCredential 向 Azure 進行驗證
在應用程式中使用下列程式代碼,使用 向 Azure 身分識別模組 DefaultAzureCredential
進行驗證:
// This credential type checks environment variables for configuration.
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
// handle error
}
// Azure Resource Management clients accept the credential as a parameter
client, err := armresources.NewClient("<subscriptionId>", cred, nil)
if err != nil {
// handle error
}
疑難排解
如需解決特定認證類型錯誤的指導,請參閱 疑難解答指南。