Autentisering med Azure SDK för Go en hanterad identitet
I den här självstudien konfigurerar du en virtuell Azure-dator med en hanterad identitet för att autentisera till Azure med hjälp av Azure SDK för Go.
Hanterade identiteter eliminerar behovet av att hantera autentiseringsuppgifter genom att tillhandahålla en identitet direkt till en Azure-resurs. Behörigheter som tilldelats identiteten ger resursåtkomst till andra Azure-resurser som stöder hanterade identiteter. Du behöver inte skicka autentiseringsuppgifter till ditt program.
Följ den här självstudien om du vill tilldela en hanterad identitet till en virtuell dator och autentisera till Azure med hjälp av en hanterad identitet.
Förutsättningar
- Azure-prenumeration: Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
- Go installerat:Version 1.16 eller senare
1. Konfigurera din miljö
Innan du börjar måste du konfigurera din miljö.
Distribuera en virtuell dator
Distribuera en virtuell dator till Azure. Du kör Go-koden för att skapa en hemlighet i Azure Key Vault från den virtuella datorn.
Skapa en Azure-resursgrupp.
az group create --name go-on-azure --location eastusÄndra
--locationparametern till lämpligt värde för din miljö.Skapa den virtuella Azure-datorn.
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>Ersätt
<password>lösenordet.
Mer information om andra tjänster som stöder hanterade identiteter finns i Tjänster som stöder hanterade identiteter för Azure-resurser.
Distribuera en nyckelvalvsinstans
Skapa en ny Azure Key Vault-instans genom att köra följande kommando:
az keyvault create --location eastus --name `<keyVaultName>` --resource-group go-on-azure
Ersätt <keyVaultName> med ett globalt unikt namn.
2. Skapa en hanterad identitet
Två typer av hanterade identiteter stöds i Azure: system-tilldelad och användar-tilldelad.
System tilldelade identiteter är direkt kopplade till en Azure-resurs och begränsas endast till den resursen. Användar tilldelade identiteter är fristående resurser som kan tilldelas till en eller flera Azure-resurser.
Mer information om skillnaden mellan system- och användar tilldelade finns i Hanterade identitetstyper.
Välj något av följande alternativ:
- Alternativ 1: Skapa en system tilldelad identitet
- Alternativ 2: Skapa en användar tilldelad identitet
Alternativ 1: Skapa en system tilldelad identitet
Kör följande kommandon för att skapa en system tilldelad hanterad identitet:
az vm identity assign -g go-on-azure -n go-on-azure-vm
Alternativ 2: Skapa en användar tilldelad identitet
Kör följande kommandon för att skapa en användar tilldelad hanterad identitet:
az identity create -g go-on-azure -n GoUserIdentity
az vm identity assign -g go-on-azure -n go-on-azure-vm --identities <UserIdentityId>
Ersätt <UserIdentityId> med ID:t för den hanterade användaridentiteten.
Mer information finns i Konfigurera hanterade identiteter för Azure-resurser på en virtuell Azure-dator med Hjälp av Azure CLI.
3. Tilldela en roll till den hanterade identiteten
När en hanterad identitet har skapats tilldelar du roller för att ge identiteten behörighet att komma åt andra Azure-resurser. I den här självstudien tilldelar du den inbyggda rollen för till den hanterade identiteten så att Go-programmet kan skapa Key Vault Contributor en hemlighet i nyckelvalvsinstansen.
Välj något av följande alternativ:
- Alternativ 1: Tilldela en roll till en system tilldelad identitet
- Alternativ 2: Tilldela en roll till en användar tilldelad identitet
Alternativ 1: Tilldela en roll till en system tilldelad identitet
Kör följande kommandon för att tilldela rollen Key Vault Contributor till den system tilldelade hanterade identiteten:
#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>'
Alternativ 2: Tilldela en roll till en användar tilldelad identitet
Kör följande kommandon för att tilldela rollen Key Vault Contributor till den användar tilldelade hanterade identiteten:
#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>'
Mer information om inbyggda roller finns i Inbyggda Roller i Azure.
4. Skapa en nyckelvalvshemlighet med Go
Därefter installerar du Go i den virtuella Azure-datorn och skapade Go-paketet.
Installera Go på den virtuella Azure-datorn
Hämta den offentliga IP-adressen för den virtuella Azure-datorn.
az vm show -d -g QuickstartAnsible-rg -n QuickstartAnsible-vm --query publicIps -o tsvSSH till den virtuella Azure-datorn.
ssh azureuser@<public-ip>Ersätt
<public-ip>med den offentliga IP-adressen för den virtuella Azure-datorn.Installera Go
sudo add-apt-repository ppa:longsleep/golang-backports; sudo apt update; sudo apt install golang-go -y
Skapa Go-paketet
Skapa en ny katalog med namnet
go-on-azurei arbetskatalogen.mkidr ~/go-on-azureÄndra till
go-on-azurekatalogen.cd ~/go-on-azureKör
go mod initför att skapago.modfilen.go mod init go-on-azureKör
go getför att installera nödvändiga Go-moduler.go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity" go get "github.com/Azure/azure-sdk-for-go/sdk/keyvault/armkeyvault" go get "github.com/Azure/azure-sdk-for-go/sdk/azcore/arm" go get "github.com/Azure/azure-sdk-for-go/sdk/azcore/to"Skapa en
main.gofil och kopiera följande kod till den.package armkeyvault_test import ( "context" "log" "github.com/Azure/azure-sdk-for-go/sdk/azcore/arm" "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/keyvault/armkeyvault" ) func SecretsClient_CreateOrUpdate() { cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { log.Fatalf("failed to obtain a credential: %v", err) } client := armkeyvault.NewSecretsClient(arm.NewDefaultConnection(cred, nil), "") resp, err := client.CreateOrUpdate( context.Background(), "<resourceGroupName>", "<keyVaultName>", "<secretName>", armkeyvault.SecretCreateOrUpdateParameters{ Properties: &armkeyvault.SecretProperties{ Attributes: &armkeyvault.SecretAttributes{ Attributes: armkeyvault.Attributes{ Enabled: to.BoolPtr(true), }, }, Value: to.StringPtr("<password>"), }}, nil) if err != nil { log.Fatalf("failed to create the key: %v", err) } log.Printf("Secret ID: %v\n", *resp.Secret.ID) } func main() { SecretsClient_CreateOrUpdate() }Ersätt
<password>, , och med lämpliga<resourceGroupName><keyVaultName><secretName>värden.Kör
go runkommandot för att skapa en nyckelvalvshemlighetgo run main.go
Kontrollera att hemligheten för nyckelvalvet har skapats med Azure PowerShell, Azure CLI eller Azure Portal.