Dela via


Autentisera Go-appar till Azure-tjänster under lokal utveckling med hjälp av utvecklarkonton

När utvecklare skapar molnprogram felsöker de vanligtvis och testar program på sin lokala arbetsstation. När ett program körs på en utvecklares arbetsstation under den lokala utvecklingen måste det fortfarande autentiseras mot alla Azure-tjänster som används av appen. Den här artikeln beskriver hur du använder en utvecklares Azure-autentiseringsuppgifter för att autentisera appen till Azure under den lokala utvecklingen.

Ett diagram som visar hur en Go-app under lokal utveckling använder utvecklarens autentiseringsuppgifter för att ansluta till Azure genom att hämta dessa autentiseringsuppgifter från lokalt installerade utvecklingsverktyg.

För att en app ska kunna autentisera till Azure under lokal utveckling med utvecklarens Azure-autentiseringsuppgifter måste en utvecklare vara inloggad på Azure från Azure CLI eller Azure Developer CLI. Azure SDK för Go kan identifiera att utvecklaren är inloggad från något av dessa verktyg och sedan hämta nödvändiga autentiseringsuppgifter från cacheminnet för autentiseringsuppgifter för att autentisera appen till Azure som den inloggade användaren.

Den här metoden är enklast att konfigurera för ett utvecklingsteam eftersom den utnyttjar utvecklarnas befintliga Azure-konton. En utvecklares konto kommer dock sannolikt att ha fler behörigheter än vad som krävs av programmet, vilket överskrider de behörigheter som appen kommer att köras med i produktion. Alternativt kan du skapa huvudnamn för programtjänsten som ska användas under den lokala utvecklingen, som kan begränsas till att endast ha den åtkomst som krävs av appen.

1 – Skapa Microsoft Entra-säkerhetsgrupp för lokal utveckling

Eftersom det nästan alltid finns flera utvecklare som arbetar med ett program rekommenderar vi att du först skapar en Microsoft Entra-säkerhetsgrupp för att kapsla in de roller (behörigheter) som appen behöver i den lokala utvecklingen. Den här metoden erbjuder följande fördelar.

  • Varje utvecklare är säker på att ha samma roller tilldelade eftersom roller tilldelas på gruppnivå.
  • Om en ny roll behövs för appen behöver den bara läggas till i Microsoft Entra-gruppen för appen.
  • Om en ny utvecklare ansluter till teamet måste de helt enkelt läggas till i rätt Microsoft Entra-grupp för att få rätt behörighet att arbeta med appen.

Om du har en befintlig Microsoft Entra-säkerhetsgrupp för ditt utvecklingsteam kan du använda den gruppen. I annat fall utför du följande steg för att skapa en Microsoft Entra-säkerhetsgrupp.

Kommandot az ad group create används för att skapa grupper i Microsoft Entra ID. Parametrarna --display-name och --main-nickname krävs. Namnet som ges till gruppen ska baseras på namnet på programmet. Det är också användbart att inkludera en fras som "local-dev" i gruppens namn för att ange syftet med gruppen.

az ad group create \
    --display-name MyDisplay \
    --mail-nickname MyDisplay  \
    --description "<group-description>"

Kopiera värdet för egenskapen id i kommandots utdata. Det här är objekt-ID:t för gruppen. Du behöver det i senare steg. Du kan också använda kommandot az ad group show för att hämta den här egenskapen.

Om du vill lägga till medlemmar i gruppen behöver du objekt-ID för Azure-användare. Använd az ad user list för att visa en lista över tillgängliga tjänsthuvudnamn. --filter-parameterkommando accepterar OData-stilfilter och kan användas för att filtrera listan baserat på användarens visningsnamn som visas. Parametern --query begränsar utdata till kolumner av intresse.

az ad user list \
    --filter "startswith(displayName, 'Bob')" \
    --query "[].{objectId:id, displayName:displayName}" \
    --output table

Kommandot az ad group member add kan sedan användas för att lägga till medlemmar i grupper.

az ad group member add \
    --group <group-name> \
    --member-id <object-id>

Not

Som standard är skapandet av Microsoft Entra-säkerhetsgrupper begränsat till vissa privilegierade roller i en katalog. Om du inte kan skapa en grupp kontaktar du en administratör för din katalog. Om du inte kan lägga till medlemmar i en befintlig grupp kontaktar du gruppägaren eller en katalogadministratör. Mer information finns i Hantera Microsoft Entra-grupper och gruppmedlemskap.

2 – Tilldela roller till Microsoft Entra-gruppen

Därefter måste du bestämma vilka roller (behörigheter) din app behöver på vilka resurser och tilldela dessa roller till din app. I det här exemplet tilldelas rollerna till den Microsoft Entra-grupp som skapades i steg 1. Roller kan tilldelas i ett resurs-, resursgrupps- eller prenumerationsomfång. Det här exemplet visar hur du tilldelar roller i resursgruppens omfång eftersom de flesta program grupperar alla sina Azure-resurser i en enda resursgrupp.

En användare, grupp eller tjänstens huvudprincip tilldelas en roll i Azure med hjälp av kommandot az role assignment create. Du kan ange en grupp med dess objekt-ID.

az role assignment create --assignee <objectId> \
    --scope /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName> \
    --role "<roleName>" 

Om du vill hämta de rollnamn som kan tilldelas använder du kommandot az role definition list.

az role definition list --query "sort_by([].{roleName:roleName, description:description}, &roleName)" --output table

Om du till exempel vill tillåta medlemmar i en grupp med ett objekt-ID för bbbbbbbb-1111-2222-3333-cccccccccccc läsa, skriva och ta bort åtkomst till Azure Storage-blobcontainrar och data i alla lagringskonton i msdocs-go-sdk-auth-example resursgrupp i prenumerationen med ID aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e, tilldelar du rollen Storage Blob Data Contributor till gruppen med hjälp av följande kommando.

az role assignment create --assignee bbbbbbbb-1111-2222-3333-cccccccccccc \
    --scope /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-go-sdk-auth-example \
    --role "Storage Blob Data Contributor"

Information om hur du tilldelar behörigheter på resurs- eller prenumerationsnivå med hjälp av Azure CLI finns i artikeln Tilldela Azure-roller med hjälp av Azure CLI-.

3 – Logga in på Azure med hjälp av Azure CLI eller Azure Developer CLI

Öppna en terminal på utvecklararbetsstationen och logga in på Azure från Azure CLI-.

az login

4 – Implementera DefaultAzureCredential i ditt program

Om du vill autentisera Azure SDK-klientobjekt till Azure bör ditt program använda klassen DefaultAzureCredential. I det här scenariot kontrollerar DefaultAzureCredential sekventiellt om utvecklaren har loggat in på Azure med hjälp av Azure CLI eller Azure Developer CLI. Om utvecklaren är inloggad i Azure med något av dessa verktyg används de autentiseringsuppgifter som används för att logga in på verktyget av appen för att autentisera till Azure.

Lägg först till azidentity-paketet i ditt program.

go get github.com/Azure/azure-sdk-for-go/sdk/azidentity

För alla Go-kod som skapar ett Azure SDK-klientobjekt i din app vill du sedan:

  1. Importera azidentity-paketet.
  2. Skapa en instans av typ DefaultAzureCredential.
  3. Skicka instansen av DefaultAzureCredential typ till Azure SDK-klientkonstruktorn.

Ett exempel på dessa steg visas i följande kodsegment.

import (
	"context"

	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)

const (
	account       = "https://<replace_with_your_storage_account_name>.blob.core.windows.net/"
	containerName = "sample-container"
	blobName      = "sample-blob"
	sampleFile    = "path/to/sample/file"
)

func main() {
    // create a credential
    cred, err := azidentity.NewDefaultAzureCredential(nil)
    if err != nil {
      // TODO: handle error
    }
    
    // create a client for the specified storage account
    client, err := azblob.NewClient(account, cred, nil)
    if err != nil {
      // TODO: handle error
    }
    
    // TODO: perform some action with the azblob Client
    // _, err = client.DownloadFile(context.TODO(), <containerName>, <blobName>, <target_file>, <DownloadFileOptions>)
}