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. Tar bort behovet av att 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.18 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.

  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:ubuntuserver:19.04: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

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 <UserIdentityId>

Ersätt <UserIdentityId> med den hanterade användaridentitetens ID.

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 Contributor 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 Contributor 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
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ändartilldelad identitet

Kör följande kommandon för att tilldela Key Vault Contributor 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 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 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.

    mkidr ~/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/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/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()
    }
    
    

Innan du kör koden skapar du en miljövariabel med namnet KEY_VAULT_NAME. Ange miljövariabelns värde till namnet på det Azure Key Vault som skapades tidigare. Ersätt <KeyVaultName> med namnet på din Azure Key Vault-instans.

export KEY_VAULT_NAME=<KeyVaultName>

go run Kör sedan kommandot för att skapa en nyckelvalvshemlighet.

go run main.go

Kontrollera att nyckelvalvshemligheten har skapats med Hjälp av Azure PowerShell, Azure CLI eller Azure-portalen.

Nästa steg