Dela via


Konfigurera lösenordslösa anslutningar mellan flera Azure-appar och -tjänster

Program kräver ofta säkra anslutningar mellan flera Azure-tjänster samtidigt. Till exempel kan en Azure App Service-företagsinstans ansluta till flera olika lagringskonton, en Azure SQL-databasinstans, en Service Bus med mera.

Hanterade identiteter är det rekommenderade autentiseringsalternativet för säkra, lösenordslösa anslutningar mellan Azure-resurser. Utvecklare behöver inte spåra och hantera många olika hemligheter för hanterade identiteter manuellt, eftersom de flesta av dessa uppgifter hanteras internt av Azure. I den här självstudien beskrivs hur du hanterar anslutningar mellan flera tjänster med hanterade identiteter och Azure Identity-klientbiblioteket.

Jämför typerna av hanterade identiteter

Azure tillhandahåller följande typer av hanterade identiteter:

  • Systemtilldelade hanterade identiteter är direkt kopplade till en enda Azure-resurs. När du aktiverar en systemtilldelad hanterad identitet på en tjänst skapar Azure en länkad identitet och hanterar administrativa uppgifter för den identiteten internt. När Azure-resursen tas bort tas även identiteten bort.
  • Användartilldelade hanterade identiteter är oberoende identiteter som skapas av en administratör och kan associeras med en eller flera Azure-resurser. Identitetens livscykel är oberoende av dessa resurser.

Du kan läsa mer om metodtips och när du ska använda systemtilldelade identiteter jämfört med användartilldelade identiteter i rekommendationerna om bästa praxis för identiteter.

Utforska StandardAzureCredential

Hanterade identiteter implementeras vanligtvis i programkoden via en klass som anropas DefaultAzureCredential från Azure.Identity klientbiblioteket. DefaultAzureCredential stöder flera autentiseringsmetoder och avgör automatiskt vilka som ska användas vid körning. Du kan läsa mer om den här metoden i Översikt över DefaultAzureCredential.

Anslut en Azure-värdbaserad app till flera Azure-tjänster

Du har fått i uppgift att ansluta en befintlig app till flera Azure-tjänster och databaser med lösenordslösa anslutningar. Programmet är ett ASP.NET Core-webb-API som finns i Azure App Service, men stegen nedan gäller även för andra Azure-värdmiljöer, till exempel Azure Spring Apps, Virtual Machines, Container Apps och AKS.

Den här självstudien gäller för följande arkitekturer, även om den kan anpassas till många andra scenarier samt genom minimala konfigurationsändringar.

Diagram showing the user assigned identity relationships.

Följande steg visar hur du konfigurerar en app för att använda en systemtilldelad hanterad identitet och ditt lokala utvecklingskonto för att ansluta till flera Azure-tjänster.

Skapa en systemtilldelad hanterad identitet

  1. I Azure-portalen navigerar du till det värdbaserade program som du vill ansluta till andra tjänster.

  2. På sidan Tjänstöversikt väljer du Identitet.

  3. Växla statusinställningen till för att aktivera en systemtilldelad hanterad identitet för tjänsten.

    Screenshot showing how to assign a system assigned managed identity.

Tilldela roller till den hanterade identiteten för varje ansluten tjänst

  1. Gå till översiktssidan för det lagringskonto som du vill ge åtkomst till din identitet.

  2. Välj Åtkomstkontroll (IAM) i navigeringen för lagringskontot.

  3. Välj + Lägg till och sedan Lägg till rolltilldelning.

    Screenshot showing how to assign a system-assigned identity.

  4. I sökrutan Roll söker du efter Storage Blob Data Contributor, som ger behörighet att utföra läs- och skrivåtgärder på blobdata. Du kan tilldela vilken roll som är lämplig för ditt användningsfall. Välj Storage Blob Data-deltagare i listan och välj Nästa.

  5. På skärmen Lägg till rolltilldelning går du till alternativet Tilldela åtkomst till och väljer Hanterad identitet. Välj sedan +Välj medlemmar.

  6. I den utfällbara menyn söker du efter den hanterade identitet som du skapade genom att ange namnet på din apptjänst. Välj den systemtilldelade identiteten och välj sedan Välj för att stänga den utfällbara menyn.

    Screenshot showing how to select a system-assigned identity.

  7. Välj Nästa ett par gånger tills du kan välja Granska + tilldela för att slutföra rolltilldelningen.

  8. Upprepa den här processen för de andra tjänster som du vill ansluta till.

Överväganden för lokal utveckling

Du kan också aktivera åtkomst till Azure-resurser för lokal utveckling genom att tilldela roller till ett användarkonto på samma sätt som du tilldelade roller till din hanterade identitet.

  1. När du har tilldelat rollen Storage Blob Data Contributor till din hanterade identitet, under Tilldela åtkomst till, väljer du användaren, gruppen eller tjänstens huvudnamn den här gången. Välj + Välj medlemmar för att öppna den utfällbara menyn igen.

  2. Sök efter det user@domain-konto eller Microsoft Entra-säkerhetsgrupp som du vill bevilja åtkomst till via e-postadress eller namn och välj sedan det. Detta bör vara samma konto som du använder för att logga in på dina lokala utvecklingsverktyg med, till exempel Visual Studio eller Azure CLI.

Kommentar

Du kan också tilldela dessa roller till en Microsoft Entra-säkerhetsgrupp om du arbetar i ett team med flera utvecklare. Du kan sedan placera alla utvecklare i gruppen som behöver åtkomst för att utveckla appen lokalt.

Implementera programkoden

I projektet lägger du till en referens till Azure.Identity NuGet-paketet. Det här biblioteket innehåller alla nödvändiga entiteter för att implementera DefaultAzureCredential. Du kan också lägga till andra Azure-bibliotek som är relevanta för din app. I det här exemplet läggs paketen Azure.Storage.Blobs och Azure.KeyVault.Keys till för att ansluta till Blob Storage och Key Vault.

dotnet add package Azure.Identity
dotnet add package Azure.Storage.Blobs
dotnet add package Azure.KeyVault.Keys

Överst Program.cs i filen lägger du till följande using-instruktioner:

using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Security.KeyVault.Keys;

I filen i Program.cs projektkoden skapar du instanser av de nödvändiga tjänster som appen ansluter till. Följande exempel ansluter till Blob Storage och Service Bus med motsvarande SDK-klasser.

var blobServiceClient = new BlobServiceClient(
    new Uri("https://<your-storage-account>.blob.core.windows.net"),
    new DefaultAzureCredential(credOptions));

var serviceBusClient = new ServiceBusClient("<your-namespace>", new DefaultAzureCredential());
var sender = serviceBusClient.CreateSender("producttracking");

När den här programkoden körs lokalt DefaultAzureCredential söker du i en autentiseringskedja efter de första tillgängliga autentiseringsuppgifterna. Om är Managed_Identity_Client_ID null lokalt använder den automatiskt autentiseringsuppgifterna från din lokala Azure CLI- eller Visual Studio-inloggning. Du kan läsa mer om den här processen i översikten över Azure Identity Library.

När programmet distribueras till Azure DefaultAzureCredential hämtar variabeln Managed_Identity_Client_ID automatiskt från App Service-miljön. Det värdet blir tillgängligt när en hanterad identitet är associerad med din app.

Den här övergripande processen säkerställer att din app kan köras på ett säkert sätt lokalt och i Azure utan att det behövs några kodändringar.

Anslut flera appar med flera hanterade identiteter

Även om apparna i föregående exempel alla har samma åtkomstkrav för tjänsten, är verkliga miljöer ofta mer nyanserade. Tänk dig ett scenario där flera appar alla ansluter till samma lagringskonton, men två av apparna också har åtkomst till olika tjänster eller databaser.

Diagram showing multiple user-assigned managed identities.

Om du vill konfigurera den här konfigurationen i koden kontrollerar du att programmet registrerar separata tjänster för att ansluta till varje lagringskonto eller databas. Se till att hämta rätt hanterade identitetsklient-ID:er för varje tjänst när du konfigurerar DefaultAzureCredential. Följande kodexempel konfigurerar följande tjänstanslutningar:

  • Två anslutningar till separata lagringskonton med en delad användartilldelad hanterad identitet
  • En anslutning till Azure Cosmos DB- och Azure SQL-tjänster med en andra delad användartilldelad hanterad identitet
// Get the first user-assigned managed identity ID to connect to shared storage
const clientIdStorage = Environment.GetEnvironmentVariable("Managed_Identity_Client_ID_Storage");

// First blob storage client that using a managed identity
BlobServiceClient blobServiceClient = new BlobServiceClient(
    new Uri("https://<receipt-storage-account>.blob.core.windows.net"),
    new DefaultAzureCredential()
    {
        ManagedIdentityClientId = clientIDstorage
    });

// Second blob storage client that using a managed identity
BlobServiceClient blobServiceClient2 = new BlobServiceClient(
    new Uri("https://<contract-storage-account>.blob.core.windows.net"),
    new DefaultAzureCredential()
    {
        ManagedIdentityClientId = clientIDstorage
    });


// Get the second user-assigned managed identity ID to connect to shared databases
var clientIDdatabases = Environment.GetEnvironmentVariable("Managed_Identity_Client_ID_Databases");

// Create an Azure Cosmos DB client
CosmosClient client = new CosmosClient(
    accountEndpoint: Environment.GetEnvironmentVariable("COSMOS_ENDPOINT", EnvironmentVariableTarget.Process),
    new DefaultAzureCredential()
    {
        ManagedIdentityClientId = clientIDdatabases
    });

// Open a connection to Azure SQL using a managed identity
string ConnectionString1 = @"Server=<azure-sql-hostname>.database.windows.net; User Id=ClientIDOfTheManagedIdentity; Authentication=Active Directory Default; Database=<database-name>";

using (SqlConnection conn = new SqlConnection(ConnectionString1))
{
    conn.Open();
}

Du kan också associera en användartilldelad hanterad identitet samt en systemtilldelad hanterad identitet till en resurs samtidigt. Detta kan vara användbart i scenarier där alla appar kräver åtkomst till samma delade tjänster, men en av apparna har också ett mycket specifikt beroende av en ytterligare tjänst. Genom att använda en systemtilldelad identitet ser du också till att identiteten som är kopplad till den specifika appen tas bort när appen tas bort, vilket kan hjälpa dig att hålla miljön ren.

Diagram showing user-assigned and system-assigned managed identities.

Dessa typer av scenarier utforskas mer ingående i rekommendationerna om bästa praxis för identiteter.

Nästa steg

I den här självstudien har du lärt dig hur du migrerar ett program till lösenordslösa anslutningar. Du kan läsa följande resurser för att utforska begreppen som beskrivs i den här artikeln mer ingående: