Dela via


Autentisera en hanterad identitet med Microsoft Entra-ID för att få åtkomst till Azure Service Bus-resurser

Hanterade identiteter för Azure-resurser ger Azure-tjänster en automatiskt hanterad identitet i Microsoft Entra ID. Du kan använda den här identiteten för att autentisera till alla tjänster, till exempel Azure Service Bus som stöder Microsoft Entra-autentisering, utan att ha autentiseringsuppgifter i koden. Om du inte är bekant med hanterade identiteter läser du Hanterade identiteter för Azure-resurser innan du fortsätter att läsa igenom den här artikeln.

Här följer de övergripande stegen för att använda en hanterad identitet för att få åtkomst till en Service Bus-entitet:

  1. Aktivera hanterad identitet för din klientapp eller -miljö. Du kan till exempel aktivera hanterad identitet för din Azure App Service-app, Azure Functions-app eller en virtuell dator där appen körs. Här är de artiklar som hjälper dig med det här steget:

  2. Tilldela Azure Service Bus Data Owner, Azure Service Bus Data Sender eller Azure Service Bus Data Receiver-rollen till den hanterade identiteten i lämpligt omfång (Azure-prenumeration, resursgrupp, Service Bus-namnområde eller Service Bus-kö eller ämne). Anvisningar om hur du tilldelar en roll till en hanterad identitet finns i Tilldela Azure-roller med hjälp av Azure-portalen.

  3. I ditt program använder du den hanterade identiteten och slutpunkten till Service Bus-namnområdet för att ansluta till namnområdet.

    I .NET använder du till exempel den ServiceBusClient-konstruktor som tar TokenCredential och fullyQualifiedNamespace (en sträng, till exempel: cotosons.servicebus.windows.net) parametrar för att ansluta till Service Bus med hjälp av den hanterade identiteten. Du skickar in DefaultAzureCredential, som härleds från TokenCredential och använder den hanterade identiteten. I DefaultAzureCredentialOptionsanger du ManagedIdentityClientId till ID för klientens hanterade identitet.

    string fullyQualifiedNamespace = "<your namespace>.servicebus.windows.net>";
    string userAssignedClientId = "<your managed identity client ID>";
    
    var credential = new DefaultAzureCredential(
        new DefaultAzureCredentialOptions
        {
            ManagedIdentityClientId = userAssignedClientId
        });
    
    var sbusClient = new ServiceBusClient(fullyQualifiedNamespace, credential);
    

    Viktigt!

    Du kan inaktivera lokal autentisering eller SAS-nyckelautentisering för ett Service Bus-namnområde och endast tillåta Microsoft Entra-autentisering. Stegvisa instruktioner finns i Inaktivera lokal autentisering.

Inbyggda Azure-roller för Azure Service Bus

Microsoft Entra auktoriserar åtkomst till skyddade resurser via rollbaserad åtkomstkontroll i Azure (RBAC). Azure Service Bus definierar en uppsättning inbyggda Azure-roller som omfattar vanliga uppsättningar med behörigheter som används för att få åtkomst till Service Bus-entiteter. Du kan också definiera anpassade roller för åtkomst till data.

Azure tillhandahåller följande inbyggda Azure-roller för att auktorisera åtkomst till ett Service Bus-namnområde:

  • Azure Service Bus-dataägare: Använd den här rollen för att ge fullständig åtkomst till Service Bus-namnområdet och dess entiteter (köer, ämnen, prenumerationer och filter)
  • Azure Service Bus-datasändare: Använd den här rollen om du vill tillåta att meddelanden skickas till Service Bus-köer och -ämnen.
  • Azure Service Bus-datamottagare: Använd den här rollen för att tillåta mottagning av meddelanden från Service Bus-köer och prenumerationer.

Om du vill tilldela en roll till en hanterad identitet i Azure-portalen använder du sidan Åtkomstkontroll (IAM). Gå till den här sidan genom att välja Åtkomstkontroll (IAM)sidan Service Bus-namnområde eller Service Bus-kösida eller Service Bus-ämnessida . Stegvisa instruktioner för att tilldela en roll finns i Tilldela Azure-roller med hjälp av Azure-portalen.

Resursomfång

Innan du tilldelar en Azure-roll till en hanterad identitet ska du bestämma omfånget för åtkomst som den hanterade identiteten ska ha. Bästa praxis kräver att det alltid är bäst att endast bevilja minsta möjliga omfång.

I följande lista beskrivs de nivåer där du kan begränsa åtkomsten till Service Bus-resurser, med början med det smalaste omfånget:

  • , ämne eller prenumeration: Rolltilldelning gäller för den specifika Service Bus-entiteten.

  • Service Bus-namnområde: Rolltilldelningen sträcker sig över hela topologin för Service Bus under namnområdet.

  • Resursgrupp: Rolltilldelning gäller för alla Service Bus-resurser under resursgruppen.

  • Prenumeration: Rolltilldelning gäller för alla Service Bus-resurser i alla resursgrupper i prenumerationen.

    Kommentar

    Tänk på att Azure-rolltilldelningar kan ta upp till fem minuter att sprida.

För närvarande stöder Inte Azure-portalen tilldelning av användare, grupper eller hanterade identiteter till Service Bus Azure-roller på ämnets prenumerationsnivå. Här är ett exempel på hur du använder Azure CLI-kommandot az-role-assignment-create för att tilldela en identitet till en Service Bus Azure-roll:

az role assignment create \
    --role $service_bus_role \
    --assignee $assignee_id \
    --scope /subscriptions/$subscription_id/resourceGroups/$resource_group/providers/Microsoft.ServiceBus/namespaces/$service_bus_namespace/topics/$service_bus_topic/subscriptions/$service_bus_subscription

Mer information om hur inbyggda roller definieras finns i Förstå rolldefinitioner. Information om hur du skapar anpassade Azure-roller finns i Anpassade Azure-roller.

Använda SDK:er

I .NET initieras ServiceBusClient-objektet med hjälp av en konstruktor som tar ett fullständigt kvalificerat namnområde och en TokenCredential. DefaultAzureCredential Härleds från TokenCredential, som automatiskt använder den hanterade identitet som konfigurerats för appen. Flödet av den hanterade identitetskontexten till Service Bus och handskakningen för auktorisering hanteras automatiskt av tokenautentiseringsuppgifterna. Det är en enklare modell än att använda SAS.

var client = new ServiceBusClient('cotosons.servicebus.windows.net', new DefaultAzureCredential());

Du skickar och tar emot meddelanden som vanligt med hjälp av ServiceBusSender och ServiceBusReceiver eller ServiceBusProcessor.

Fullständiga stegvisa instruktioner för att skicka och ta emot meddelanden med hjälp av en hanterad identitet finns i följande snabbstarter. Dessa snabbstarter har koden för att använda tjänstens huvudnamn för att skicka och ta emot meddelanden, men koden är densamma för att använda en hanterad identitet.

Kommentar

Den hanterade identiteten fungerar endast i Azure-miljön, på apptjänster, virtuella Azure-datorer och skalningsuppsättningar. För .NET-program ger Microsoft.Azure.Services.AppAuthentication-biblioteket, som används av Service Bus NuGet-paketet, en abstraktion över det här protokollet och stöder en lokal utvecklingsupplevelse. Med det här biblioteket kan du också testa koden lokalt på utvecklingsdatorn med ditt användarkonto från Visual Studio, Azure CLI 2.0 eller Active Directory Integrated Authentication. Mer information om lokala utvecklingsalternativ med det här biblioteket finns i Tjänst-till-tjänst-autentisering till Azure Key Vault med hjälp av .NET.

Nästa steg

Se det här .NET-webbprogramexemplet på GitHub, som använder en hanterad identitet för att ansluta till Service Bus för att skicka och ta emot meddelanden. Lägg till identiteten för apptjänsten i rollen Som Azure Service Bus-dataägare .