Autentisera en hanterad identitet med Azure Active Directory för att få åtkomst till Azure Service Bus resurser

Hanterade identiteter för Azure-resurser är en funktion mellan Azure som gör att du kan skapa en säker identitet som är associerad med distributionen där programkoden körs. Du kan sedan associera den identiteten med åtkomstkontrollroller som ger anpassade behörigheter för åtkomst till specifika Azure-resurser som ditt program behöver.

Med hanterade identiteter hanterar Azure-plattformen den här körningsidentiteten. Du behöver inte lagra och skydda åtkomstnycklar i programkoden eller konfigurationen, varken för själva identiteten eller för de resurser som du behöver komma åt. En Service Bus klientapp som körs i ett Azure App Service-program eller på en virtuell dator med aktiverade hanterade entiteter för Stöd för Azure-resurser behöver inte hantera SAS-regler och nycklar eller andra åtkomsttoken. Klientappen behöver bara slutpunktsadressen för Service Bus Messaging-namnområdet. När appen ansluter binder Service Bus den hanterade entitetens kontext till klienten i en åtgärd som visas i ett exempel senare i den här artikeln. När den är associerad med en hanterad identitet kan din Service Bus-klient utföra alla auktoriserade åtgärder. Auktorisering beviljas genom att associera en hanterad entitet med Service Bus roller.

Viktigt

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

Översikt

När ett säkerhetsobjekt (en användare, grupp eller ett program) försöker komma åt en Service Bus entitet måste begäran auktoriseras. Med Azure AD är åtkomst till en resurs en tvåstegsprocess.

  1. Först autentiseras säkerhetsobjektets identitet och en OAuth 2.0-token returneras. Resursnamnet för att begära en token är https://servicebus.azure.net.
  2. Därefter skickas token som en del av en begäran till Service Bus-tjänsten för att ge åtkomst till den angivna resursen.

Autentiseringssteget kräver att en programbegäran innehåller en OAuth 2.0-åtkomsttoken vid körning. Om ett program körs inom en Azure-entitet, till exempel en virtuell Azure-dator, en VM-skalningsuppsättning eller en Azure-funktionsapp, kan den använda en hanterad identitet för att komma åt resurserna.

Auktoriseringssteget kräver att en eller flera Azure-roller tilldelas till säkerhetsobjektet. Azure Service Bus tillhandahåller Azure-roller som omfattar uppsättningar med behörigheter för Service Bus resurser. De roller som tilldelas till ett säkerhetsobjekt avgör vilka behörigheter som huvudkontot ska ha. Mer information om hur du tilldelar Azure-roller till Azure Service Bus finns i Inbyggda Azure-roller för Azure Service Bus.

Inbyggda program och webbprogram som gör begäranden till Service Bus kan också auktorisera med Azure AD. Den här artikeln visar hur du begär en åtkomsttoken och använder den för att auktorisera begäranden för Service Bus resurser.

Tilldela Azure-roller för åtkomsträttigheter

Azure Active Directory (Azure AD) tillåter åtkomsträttigheter till skyddade resurser via rollbaserad åtkomstkontroll i Azure (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 komma åt Service Bus entiteter och du kan också definiera anpassade roller för åtkomst till data.

När en Azure-roll tilldelas till ett Azure AD säkerhetsobjekt ger Azure åtkomst till dessa resurser för det säkerhetsobjektet. Åtkomsten kan begränsas till prenumerationsnivån, resursgruppen eller Service Bus namnområdet. Ett Azure AD säkerhetsobjekt kan vara en användare, en grupp, ett programtjänsthuvudnamn eller en hanterad identitet för Azure-resurser.

Inbyggda Azure-roller för Azure Service Bus

För Azure Service Bus skyddas redan hanteringen av namnrymder och alla relaterade resurser via Azure Portal och Azure-resurshanterings-API:et med hjälp av Azure RBAC-modellen. Azure tillhandahåller de inbyggda Azure-rollerna nedan 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åde och dess entiteter (köer, ämnen, prenumerationer och filter)
  • Azure Service Bus datasändare: Använd den här rollen för att tillåta att meddelanden skickas till Service Bus köer och ämnen.
  • Azure Service Bus datamottagare: Använd den här rollen om du vill tillåta att meddelanden tas emot från Service Bus köer och prenumerationer.

Resursomfång

Innan du tilldelar en Azure-roll till ett säkerhetsobjekt ska du bestämma vilken åtkomstomfattning som säkerhetsobjektet ska ha. Bästa praxis föreskriver 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. För närvarande stöder Azure Portal inte tilldelning av användare/grupper/hanterade identiteter till Service Bus Azure-roller på 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
    
  • Service Bus namnområde: Rolltilldelningen sträcker sig över hela topologin för Service Bus under namnområdet och till den konsumentgrupp som är associerad med den.

  • 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.

Anteckning

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

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.

Aktivera hanterade identiteter på en virtuell dator

Innan du kan använda hanterade identiteter för Azure-resurser för att auktorisera Service Bus resurser från den virtuella datorn måste du först aktivera hanterade identiteter för Azure-resurser på den virtuella datorn. Mer information om hur du aktiverar hanterade identiteter för Azure-resurser finns i någon av följande artiklar:

Bevilja behörigheter till en hanterad identitet i Azure AD

Om du vill auktorisera en begäran till Service Bus-tjänsten från en hanterad identitet i ditt program måste den hanterade identiteten läggas till i en Service Bus RBAC-roll (Azure Service Bus dataägare, Azure Service Bus datasändare Azure Service Bus Datamottagare) i lämpligt omfång (prenumeration, resursgrupp eller namnområde). När Azure-rollen tilldelas till en hanterad identitet beviljas den hanterade identiteten åtkomst till Service Bus entiteter i det angivna omfånget. Beskrivningar av Service Bus roller finns i avsnittet inbyggda Azure-roller för Azure Service Bus. Mer information om hur du tilldelar Azure-roller finns i Autentisera och auktorisera med Azure Active Directory för åtkomst till Service Bus resurser.

Använda Service Bus med hanterade identiteter för Azure-resurser

Om du vill använda Service Bus med hanterade identiteter måste du tilldela identiteten rollen och lämpligt omfång. Proceduren i det här avsnittet använder ett enkelt program som körs under en hanterad identitet och som har åtkomst Service Bus resurser.

Här använder vi ett exempelwebbprogram som finns i Azure App Service. Stegvisa instruktioner för att skapa ett webbprogram finns i Skapa en ASP.NET Core webbapp i Azure

När programmet har skapats följer du dessa steg:

  1. Gå till Inställningar och välj Identitet.

  2. Välj Status för att vara .

  3. Spara inställningen genom att välja Spara.

    Managed identity for a web app

När du har aktiverat den här inställningen skapas en ny tjänstidentitet i Azure Active Directory (Azure AD) och konfigureras till den App Service värden.

Tilldela Azure-roller med hjälp av Azure Portal

Tilldela en av de Service Bus rollerna till den hanterade tjänstidentiteten i önskat omfång (Service Bus namnområde, resursgrupp, prenumeration). Detaljerade steg finns i Tilldela Azure-roller med hjälp av Azure Portal.

Anteckning

En lista över tjänster som stöder hanterade identiteter finns i Tjänster som stöder hanterade identiteter för Azure-resurser.

Kör appen

Ändra nu standardsidan för ASP.NET program som du skapade. Du kan använda webbprogramkoden från den här GitHub lagringsplatsen.

Sidan Default.aspx är din landningssida. Koden finns i filen Default.aspx.cs. Resultatet är ett minimalt webbprogram med några inmatningsfält och med knappar för att skicka och ta emot som ansluter till Service Bus för att antingen skicka eller ta emot meddelanden.

Observera hur ServiceBusClient-objektet initieras med hjälp av en konstruktor som tar en TokenCredential. DefaultAzureCredential härleds från TokenCredential och kan skickas hit. Därför finns det inga hemligheter att behålla och använda. 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.

När du har genomfört dessa ändringar publicerar och kör du programmet. Du kan enkelt hämta rätt publiceringsdata genom att ladda ned och sedan importera en publiceringsprofil i Visual Studio:

Get publish profile

Om du vill skicka eller ta emot meddelanden anger du namnet på namnområdet och namnet på den entitet som du skapade. Klicka sedan på skicka eller ta emot.

Anteckning

  • Den hanterade identiteten fungerar endast i Azure-miljön, på apptjänster, virtuella Azure-datorer och skalningsuppsättningar. För .NET-program tillhandahåller 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

Mer information om Service Bus meddelanden finns i följande avsnitt: