Autentisering med Azure SDK för Go med hjälp av 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 resursen åtkomst till andra Azure-resurser som stöder hanterade identiteter, vilket tar bort behovet av att skicka autentiseringsuppgifter i ditt program. Du kan använda hanterade identiteter för att autentisera och auktorisera Azure-värdbaserade appar med andra Azure-resurser.
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.
Om du vill använda Azure CLI för att köra stegen i den här artikeln:
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Snabbstart för Bash i Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör i Windows eller macOS kan du köra Azure CLI i en Docker-container. Mer information finns i Så här kör du Azure CLI i en Docker-container.
Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Andra inloggningsalternativ finns i Logga in med Azure CLI.
När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda tillägg med Azure CLI.
Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
Om du vill använda Azure PowerShell för att köra stegen i den här artikeln:
- Om du väljer att använda Azure PowerShell lokalt:
- Installera den senaste versionen av Az PowerShell-modulen.
- Anslut till ditt Azure-konto med cmdleten Anslut-AzAccount.
- Om du väljer att använda Azure Cloud Shell:
- Om du väljer att använda Azure PowerShell lokalt:
1. Skapa Azure-resurser
Innan du börjar måste du skapa en ny resursgrupp, virtuell dator och key vault-instans.
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 parametern
--location
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:0001-com-ubuntu-server-jammy:22_04-lts:latest \ --admin-username azureuser \ --admin-password <password>
<password>
Ersätt 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 key vault-instans
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 --enable-rbac-authorization
Ersätt <keyVaultName>
med ett globalt unikt namn.
2. Skapa en hanterad identitet
Två typer av hanterade identiteter stöds i Azure. systemtilldelad och användartilldelad.
Systemtilldelade identiteter är direkt kopplade till en Azure-resurs och begränsas endast till den resursen. Användartilldelade identiteter är fristående resurser som kan tilldelas till en eller flera Azure-resurser.
Mer information om skillnaden mellan systemtilldelade och användartilldelade finns i Hanterade identitetstyper.
Välj ett av följande alternativ:
Alternativ 1: Skapa en systemtilldelad identitet
Kör följande kommandon för att skapa en systemtilldelad hanterad identitet:
az vm identity assign -g go-on-azure -n go-on-azure-vm
Alternativ 2: Skapa en användartilldelad identitet
Kör följande kommandon för att skapa en användartilldelad 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 GoUserIdentity
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 identitetsbehörighet för att få åtkomst till andra Azure-resurser. I den här självstudien tilldelar du den inbyggda rollen Key Vault Secrets Officer
för den hanterade identiteten så att Go-programmet kan skapa en hemlighet i key vault-instansen.
Välj ett av följande alternativ:
- Alternativ 1: Tilldela en roll till en systemtilldelad identitet
- Alternativ 2: Tilldela en roll till en användartilldelad identitet
Alternativ 1: Tilldela en roll till en systemtilldelad identitet
Kör följande kommandon för att tilldela Key Vault Secrets Officer
rollen till den systemtilldelade 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
az keyvault show --name <keyVaultName> --query id -o tsv
az role assignment create --assignee <principalId> --role "Key Vault Secrets Officer" --scope <keyVaultId>
I det andra kommandot ersätter du <keyVaultName>
med namnet på ditt nyckelvalv. I det sista kommandot ersätter <principalId>
du och <keyVaultId>
med utdata från de två första kommandona.
Alternativ 2: Tilldela en roll till en användartilldelad identitet
Kör följande kommandon för att tilldela Key Vault Secrets Officer
rollen till den användartilldelade 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 <keyVaultName> --query id -o tsv
az role assignment create --assignee <principalId> --role "Key Vault Secrets Officer" --scope <keyVaultId>
I det andra kommandot ersätter du <keyVaultName>
med namnet på ditt nyckelvalv. I det sista kommandot ersätter <principalId>
du och <keyVaultId>
med utdata från de två första kommandona.
Mer information om inbyggda roller i Azure Key Vault finns i Ge åtkomst till Key Vault-nycklar, certifikat och hemligheter med en rollbaserad åtkomstkontroll i Azure. Mer information om inbyggda roller i Azure finns i Inbyggda Azure-roller.
4. Skapa en nyckelvalvshemlighet med Go
Nästa SSH i den virtuella Azure-datorn installerar du Go och skapar 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 go-on-azure -n go-on-azure-vm --query publicIps -o tsv
SSH 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-azure
i din hemkatalog.mkdir ~/go-on-azure
Ändra till
go-on-azure
katalogen.cd ~/go-on-azure
Kör
go mod init
för att skapago.mod
filen.go mod init go-on-azure
Kör
go get
fö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/security/keyvault/azsecrets"
Skapa en
main.go
fil och kopiera följande kod till den.package main import ( "context" "fmt" "log" "os" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/security/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) } params := azsecrets.SetSecretParameters{Value: &secretValue} resp, err := client.SetSecret(context.TODO(), secretName, params, 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() }
Skapa en miljövariabel med namnet
KEY_VAULT_NAME
. Ersätt<keyVaultName>
med namnet på din Azure Key Vault-instans.export KEY_VAULT_NAME=<keyVaultName>
Kör
go run
kommandot för att skapa en nyckelvalvshemlighet.go run main.go
Vid lyckat resultat liknar utdata följande:
Name: https://<keyVaultName>.vault.azure.net/secrets/quickstart-secret/0e0b941824c4493bb3b83045a31b2bf7, Value: createdWithGO
Du kan kontrollera att nyckelvalvshemligheten har skapats med Hjälp av Azure PowerShell, Azure CLI eller Azure-portalen.
Kommentar
Om du använder Azure CLI eller Azure PowerShell måste du se till att ditt Azure-användarkonto har tilldelats en roll som gör att det kan läsa hemligheter i nyckelvalvet som "Key Vault Secrets Officer" eller "Key Vault Secrets User".
5. Rensa resurser
Om du inte längre vill använda de Azure-resurser som du skapade i den här artikeln är det bra att ta bort dem. Om du tar bort oanvända resurser kan du undvika löpande avgifter och hålla prenumerationen rensad. Det enklaste sättet att ta bort de resurser som du använde i den här självstudien är att ta bort resursgruppen.
az group delete --name go-on-azure --force-deletion-types Microsoft.Compute/virtualMachines --yes
Argumentet force-deletion-type
instruerar kommandot att framtvinga borttagning av virtuella datorer i resursgruppen. Argumentet --yes
instruerar kommandot att inte be om bekräftelse.
Föregående kommando utför en mjuk borttagning av nyckelvalvet i resursgruppen. Om du vill ta bort den permanent från din prenumeration anger du följande kommando:
az keyvault purge --name <keyVaultName> --no-wait
Ersätt <keyVaultName>
med namnet på ditt nyckelvalv.