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.

  1. Skapa en Azure-resursgrupp.

    az group create --name go-on-azure --location eastus
    

    Ändra --location parametern 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>
    

    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

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

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

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

    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/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"
    
  5. Skapa en main.go fil 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.

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

    go run main.go
    

Kontrollera att hemligheten för nyckelvalvet har skapats med Azure PowerShell, Azure CLI eller Azure Portal.

Nästa steg