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.

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.

  1. 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ö.

  2. 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

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

  1. 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
    
  2. 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.

  3. Installera Go

    sudo add-apt-repository ppa:longsleep/golang-backports;
    sudo apt update;
    sudo apt install golang-go -y
    

Skapa Go-paketet

  1. Skapa en ny katalog med namnet go-on-azure i din hemkatalog.

    mkdir ~/go-on-azure
    
  2. Ändra till go-on-azure katalogen.

    cd ~/go-on-azure
    
  3. Kör go mod init för att skapa go.mod filen.

    go mod init go-on-azure
    
  4. 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"
    
  5. 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()
    }
    
    
  6. 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>
    
  7. 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.

Nästa steg