使用受控識別向 Azure SDK for Go 進行驗證
在本教學課程中,您將設定具有受控識別的 Azure 虛擬機,以使用 Azure SDK for Go 向 Azure 進行驗證。
受控識別不需要直接將身分識別提供給 Azure 資源來管理認證。 指派給身分識別的許可權會將資源存取權授與支援受控識別的其他 Azure 資源。 拿掉將認證傳遞至應用程式的需求。
請遵循本教學課程,將受控識別指派給虛擬機,並使用受控識別向 Azure 進行驗證。
必要條件
- Azure 訂用帳戶:如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
- Go 已安裝:1.18 版或 更新版本
1.設定您的環境
開始之前,您必須設定環境。
部署虛擬機器
將虛擬機部署至 Azure。 您將執行 Go 程式代碼,從該虛擬機在 Azure 金鑰保存庫中建立秘密。
建立 Azure 資源群組。
az group create --name go-on-azure --location eastus
將
--location
參數變更為適合您環境的值。建立 Azure 虛擬機。
az vm create \ --resource-group go-on-azure \ --name go-on-azure-vm \ --image canonical:ubuntuserver:19.04:latest \ --admin-username azureuser \ --admin-password <password>
<password>
取代您的密碼。
若要深入瞭解支援受控識別的其他服務,請參閱 支援 Azure 資源的受控識別服務。
部署金鑰保存庫實例
執行下列命令來建立新的 Azure 金鑰儲存庫實例:
az keyvault create --location eastus --name `<keyVaultName>` --resource-group go-on-azure
將取代 <keyVaultName>
為全域唯一名稱。
2.建立受控識別
Azure 支援兩種類型的受控識別;系統指派和使用者指派。
系統指派的身分識別會直接連結至 Azure 資源,且僅限於該資源。 使用者指派的身分識別是可指派給一或多個 Azure 資源的獨立資源。
若要深入了解系統指派與使用者指派之間的差異,請參閱 受控識別類型。
選擇下列其中一個選項:
選項 1:建立系統指派的身分識別
執行下列命令來建立系統指派的受控識別:
az vm identity assign -g go-on-azure -n go-on-azure-vm
選項 2:建立使用者指派的身分識別
執行下列命令來建立使用者指派的受控識別:
az identity create -g go-on-azure -n GoUserIdentity
az vm identity assign -g go-on-azure -n go-on-azure-vm --identities <UserIdentityId>
將取代 <UserIdentityId>
為受控用戶識別的標識碼。
若要深入瞭解,請參閱 使用 Azure CLI 在 Azure VM 上設定 Azure 資源的受控識別。
3.將角色指派給受控識別
建立受控識別之後,您可以指派角色來授與身分識別許可權以存取其他 Azure 資源。 在本教學課程中,您會將 的內建角色 Key Vault Contributor
指派給受控識別,讓 Go 應用程式可以在金鑰保存庫實例內建立秘密。
選擇下列其中一個選項:
選項 1:將角色指派給系統指派的身分識別
執行下列命令,將角色指派 Key Vault Contributor
給系統指派的受控識別:
#output system identity principal ID
az vm identity show --name go-on-azure-vm --resource-group go-on-azure --query 'principalId' -o tsv
#output key vault ID
scope=$(az keyvault show --name go-on-azure-kv --query id -o tsv)
az role assignment create --assignee '<principalId>' --role 'Key Vault Contributor' --scope '<keyVaultId>'
選項 2:將角色指派給使用者指派的身分識別
執行下列命令,將角色指派 Key Vault Contributor
給使用者指派的受控識別:
#output user identity principal ID
az identity show --resource-group go-on-azure --name GoUserIdentity --query 'principalId' -o tsv
#output key vault ID
az keyvault show --name go-on-azure-kv --query id -o tsv
az role assignment create --assignee '<principalId>' --role 'Key Vault Contributor' --scope '<keyVaultId>'
若要深入瞭解內建角色,請參閱 Azure 內建角色。
4.使用 Go 建立金鑰保存庫秘密
接下來透過 SSH 連線到 Azure 虛擬機,安裝 Go 並建置 Go 套件。
在 Azure VM 上安裝 Go
取得 Azure 虛擬機的公用 IP 位址。
az vm show -d -g go-on-azure -n go-on-azure-vm --query publicIps -o tsv
透過 SSH 連線到 Azure VM。
ssh azureuser@<public-ip>
將取代
<public-ip>
為 Azure VM 的公用 IP 位址。安裝 Go
sudo add-apt-repository ppa:longsleep/golang-backports; sudo apt update; sudo apt install golang-go -y
建立 Go 套件
在主目錄中建立名稱
go-on-azure
的新目錄。mkidr ~/go-on-azure
變更為
go-on-azure
目錄。cd ~/go-on-azure
執行
go mod init
以建立go.mod
檔案。go mod init go-on-azure
執行
go get
以安裝必要的 Go 模組。go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity" go get "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets"
建立檔案
main.go
,並將下列程式代碼複製到其中。package main import ( "context" "fmt" "log" "os" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets" ) func createSecret() { keyVaultName := os.Getenv("KEY_VAULT_NAME") secretName := "quickstart-secret" secretValue := "createdWithGO" keyVaultUrl := fmt.Sprintf("https://%s.vault.azure.net/", keyVaultName) cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { log.Fatalf("failed to obtain a credential: %v", err) } client, err := azsecrets.NewClient(keyVaultUrl, cred, nil) if err != nil { log.Fatalf("failed to create a client: %v", err) } resp, err := client.SetSecret(context.TODO(), secretName, secretValue, nil) if err != nil { log.Fatalf("failed to create a secret: %v", err) } fmt.Printf("Name: %s, Value: %s\n", *resp.ID, *resp.Value) } func main() { createSecret() }
執行程序代碼之前,請先建立名為的 KEY_VAULT_NAME
環境變數。 將環境變數的值設定為先前建立的 Azure 金鑰保存庫 名稱。 將取代<KeyVaultName>
為您的 Azure 金鑰保存庫 實例名稱。
export KEY_VAULT_NAME=<KeyVaultName>
接下來,執行 go run
命令以建立金鑰保存庫秘密。
go run main.go
確認已使用 Azure PowerShell、Azure CLI 或 Azure 入口網站 建立密鑰保存庫密碼。
下一步
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應