Dela via


Migrera ett program för att använda lösenordslösa anslutningar med Azure Service Bus

Programbegäranden till Azure Service Bus måste autentiseras med antingen kontoåtkomstnycklar eller lösenordslösa anslutningar. Du bör dock prioritera lösenordslösa anslutningar i dina program när det är möjligt. I den här självstudien går vi igenom hur du migrerar från traditionella autentiseringsmetoder till säkrare och lösenordslösa anslutningar.

Säkerhetsrisker som är kopplade till åtkomstnycklar

Följande kodexempel visar hur du ansluter till Azure Service Bus med hjälp av en niska veze som innehåller en åtkomstnyckel. När du skapar en Service Bus genererar Azure dessa nycklar och niska veze automatiskt. Många utvecklare drar sig för den här lösningen eftersom de känner sig bekanta med de alternativ som de har arbetat med tidigare. Om ditt program för närvarande använder niska veze kan du överväga att migrera till lösenordslösa anslutningar med hjälp av stegen som beskrivs i det här dokumentet.

await using ServiceBusClient client = new("<CONNECTION-STRING>");

Anslutningssträngar bör användas med försiktighet. Utvecklare måste vara noggranna för att aldrig exponera nycklarna på en osäker plats. Alla som får åtkomst till nyckeln kan autentisera. Om en kontonyckel till exempel av misstag checkas in i källkontrollen, skickas via ett osäkert e-postmeddelande, klistras in i fel chatt eller visas av någon som inte borde ha behörighet, finns det risk för att en obehörig användare kommer åt programmet. Överväg i stället att uppdatera ditt program för att använda lösenordslösa anslutningar.

Migrera till lösenordslösa anslutningar

Många Azure-tjänster stöder lösenordslösa anslutningar via Microsoft Entra-ID och rollbaserad åtkomstkontroll (RBAC). De här teknikerna ger robusta säkerhetsfunktioner och kan implementeras med hjälp av DefaultAzureCredential Azure Identity-klientbiblioteken.

Viktigt!

Vissa språk måste implementeras DefaultAzureCredential explicit i koden, medan andra använder DefaultAzureCredential internt via underliggande plugin-program eller drivrutiner.

DefaultAzureCredential stöder flera autentiseringsmetoder och avgör automatiskt vilka som ska användas vid körning. Med den här metoden kan din app använda olika autentiseringsmetoder i olika miljöer (lokal utveckling jämfört med produktion) utan att implementera miljöspecifik kod.

Ordningen och platserna där DefaultAzureCredential sökningar efter autentiseringsuppgifter finns i översikten över Azure Identity Library och varierar mellan olika språk. När du till exempel arbetar lokalt med .NET DefaultAzureCredential autentiseras vanligtvis med det konto som utvecklaren använde för att logga in i Visual Studio, Azure CLI eller Azure PowerShell. När appen distribueras till Azure DefaultAzureCredential identifierar och använder den hanterade identiteten för den associerade värdtjänsten automatiskt, till exempel Azure App Service. Inga kodändringar krävs för den här övergången.

Kommentar

En hanterad identitet tillhandahåller en säkerhetsidentitet som representerar en app eller tjänst. Identiteten hanteras av Azure-plattformen och kräver inte att du etablerar eller roterar några hemligheter. Du kan läsa mer om hanterade identiteter i översiktsdokumentationen.

I följande kodexempel visas hur du ansluter till Service Bus med lösenordslösa anslutningar. I nästa avsnitt beskrivs hur du migrerar till den här installationen för en specifik tjänst i detalj.

Ett .NET-program kan skicka en instans av DefaultAzureCredential till konstruktorn för en tjänstklientklass. DefaultAzureCredential identifierar automatiskt de autentiseringsuppgifter som är tillgängliga i den miljön.

client = new ServiceBusClient(
    "<NAMESPACE-NAME>.servicebus.windows.net",
    new DefaultAzureCredential());

Steg för att migrera en app för att använda lösenordslös autentisering

Följande steg beskriver hur du migrerar ett befintligt program för att använda lösenordslösa anslutningar i stället för en nyckelbaserad lösning. Först konfigurerar du en lokal utvecklingsmiljö och tillämpar sedan dessa begrepp på en Värdmiljö för Azure-appar. Samma migreringssteg bör gälla oavsett om du använder åtkomstnycklar direkt eller via niska veze.

Konfigurera roller och användare för lokal utvecklingsautentisering

När du utvecklar lokalt kontrollerar du att användarkontot som har åtkomst till Service Bus har rätt behörigheter. I det här exemplet använder du rollen Azure Service Bus-dataägare för att skicka och ta emot data, även om fler detaljerade roller också är tillgängliga. Om du vill tilldela dig själv den här rollen måste du tilldelas rollen Administratör för användaråtkomst eller en annan roll som innehåller åtgärden Microsoft.Authorization/roleAssignments/write . Du kan tilldela Azure RBAC-roller till en användare med hjälp av Azure-portalen, Azure CLI eller Azure PowerShell. Du kan lära dig mer om tillgängliga omfång för rolltilldelningar på översiktssidan för omfång .

I det här scenariot tilldelar du behörigheter till ditt användarkonto som är begränsat till ett specifikt Service Bus-namnområde för att följa principen om minsta behörighet. Den här metoden ger användarna endast de minsta behörigheter som krävs och skapar säkrare produktionsmiljöer.

I följande exempel tilldelas rollen Azure Service Bus-dataägare till ditt användarkonto, vilket gör att du kan skicka och ta emot data.

Viktigt!

I de flesta fall tar det en minut eller två för rolltilldelningen att spridas i Azure, men i sällsynta fall kan det ta upp till åtta minuter. Om du får autentiseringsfel när du först kör koden väntar du en stund och försöker igen.

  1. Leta upp service bus-namnområdet i Azure-portalen med hjälp av huvudsökfältet eller det vänstra navigeringsfältet.

  2. På översiktssidan för Service Bus väljer du Åtkomstkontroll (IAM) på den vänstra menyn.

  3. På sidan Åtkomstkontroll (IAM) väljer du fliken Rolltilldelningar .

  4. Välj + Lägg till på den översta menyn och sedan Lägg till rolltilldelning från den resulterande nedrullningsbara menyn.

    En skärmbild som visar hur du tilldelar en roll.

  5. Använd sökrutan för att filtrera resultatet till önskad roll. I det här exemplet söker du efter Azure Service Bus-dataägare och väljer matchande resultat och väljer sedan Nästa.

  6. Under Tilldela åtkomst till väljer du Användare, grupp eller tjänstens huvudnamn och sedan + Välj medlemmar.

  7. I dialogrutan söker du efter ditt Microsoft Entra-användarnamn (vanligtvis din user@domain e-postadress) och väljer sedan Välj längst ned i dialogrutan.

  8. Välj Granska + tilldela för att gå till den sista sidan och sedan Granska + tilldela igen för att slutföra processen.

Logga in och migrera appkoden för att använda lösenordslösa anslutningar

För lokal utveckling kontrollerar du att du är autentiserad med samma Microsoft Entra-konto som du tilldelade rollen till för Service Bus-namnområdet. Du kan autentisera via Azure CLI, Visual Studio, Azure PowerShell eller andra verktyg som IntelliJ.

För lokal utveckling kontrollerar du att du är autentiserad med samma Microsoft Entra-konto som du tilldelade rollen till. Du kan autentisera via populära utvecklingsverktyg, till exempel Azure CLI eller Azure PowerShell. De utvecklingsverktyg som du kan autentisera med varierar mellan olika språk.

Logga in på Azure via Azure CLI med följande kommando:

az login

Uppdatera sedan koden så att den använder lösenordslösa anslutningar.

  1. Om du vill använda DefaultAzureCredential i ett .NET-program installerar du Azure.Identity paketet:

    dotnet add package Azure.Identity
    
  2. Lägg till följande kod överst i filen:

    using Azure.Identity;
    
  3. Identifiera koden som skapar ett ServiceBusClient objekt för att ansluta till Azure Service Bus. Uppdatera koden så att den matchar följande exempel:

     var serviceBusNamespace = $"{namespace}.servicebus.windows.net";
     ServiceBusClient client = new(
         serviceBusNamespace,
         new DefaultAzureCredential());
    

Köra appen lokalt

När du har gjort dessa kodändringar kör du programmet lokalt. Den nya konfigurationen bör hämta dina lokala autentiseringsuppgifter, till exempel Azure CLI, Visual Studio eller IntelliJ. De roller som du har tilldelat till din lokala utvecklingsanvändare i Azure gör att appen kan ansluta till Azure-tjänsten lokalt.

Konfigurera Azure-värdmiljön

När programmet har konfigurerats för att använda lösenordslösa anslutningar och körs lokalt kan samma kod autentisera till Azure-tjänster när den har distribuerats till Azure. Till exempel kan ett program som distribueras till en Azure App Service-instans som har en hanterad identitet aktiverad ansluta till Azure Service Bus.

Skapa den hanterade identiteten med hjälp av Azure-portalen

Följande steg visar hur du skapar en systemtilldelad hanterad identitet för olika webbvärdtjänster. Den hanterade identiteten kan på ett säkert sätt ansluta till andra Azure-tjänster med hjälp av de appkonfigurationer som du konfigurerade tidigare.

Vissa appvärdmiljöer stöder Service Connector, vilket hjälper dig att ansluta Azure-beräkningstjänster till andra säkerhetskopieringstjänster. Service Connector konfigurerar automatiskt nätverksinställningar och anslutningsinformation. Du kan läsa mer om Service Connector och vilka scenarier som stöds på översiktssidan.

Följande beräkningstjänster stöds för närvarande:

  • Azure App Service
  • Azure Spring Cloud
  • Azure Container Apps (förhandsversion)

I den här migreringsguiden använder du App Service, men stegen är liknande i Azure Spring Apps och Azure Container Apps.

Kommentar

Azure Spring Apps stöder för närvarande endast Service Connector med hjälp av niska veze.

  1. På huvudöversiktssidan för Din App Service väljer du Service Connector i det vänstra navigeringsfältet.

  2. Välj + Skapa på den översta menyn så öppnas panelen Skapa anslutning . Ange följande värden:

    • Tjänsttyp: Välj Service Bus.
    • Prenumeration: Välj den prenumeration som du vill använda.
    • Anslutningsnamn: Ange ett namn på anslutningen, till exempel connector_appservice_servicebus.
    • Klienttyp: Låt standardvärdet vara markerat eller välj den specifika klient som du vill använda.

    Välj Nästa: Autentisering.

  3. Kontrollera att Systemtilldelad hanterad identitet (rekommenderas) har valts och välj sedan Nästa: Nätverk.

  4. Låt standardvärdena vara markerade och välj sedan Nästa: Granska + Skapa.

  5. När Azure har verifierat dina inställningar väljer du Skapa.

Service Connector skapar automatiskt en systemtilldelad hanterad identitet för apptjänsten. Anslutningsappen tilldelar även den hanterade identiteten en Azure Service Bus Data Owner-roll för den servicebuss som du valde.

Du kan också aktivera hanterad identitet i en Azure-värdmiljö med hjälp av Azure CLI.

Du kan använda Service Connector för att skapa en anslutning mellan en Azure Compute-värdmiljö och en måltjänst med hjälp av Azure CLI. CLI hanterar automatiskt skapandet av en hanterad identitet och tilldelar rätt roll, enligt beskrivningen i portalinstruktionerna.

Om du använder en Azure App Service använder du az webapp connection kommandot:

az webapp connection create servicebus \
    --resource-group <resource-group-name> \
    --name <webapp-name> \
    --target-resource-group <target-resource-group-name> \
    --namespace <target-service-bus-namespace> \
    --system-identity

Om du använder Azure Spring Apps använder du az spring connection kommandot:

az spring connection create servicebus \
    --resource-group <resource-group-name> \
    --service <service-instance-name> \
    --app <app-name> \
    --deployment <deployment-name> \
    --target-resource-group <target-resource-group> \
    --namespace <target-service-bus-namespace> \
    --system-identity

Om du använder Azure Container Apps använder du az containerapp connection kommandot:

az containerapp connection create servicebus \
    --resource-group <resource-group-name> \
    --name <webapp-name> \
    --target-resource-group <target-resource-group-name> \
    --namespace <target-service-bus-namespace> \
    --system-identity

Tilldela roller till den hanterade identiteten

Därefter måste du bevilja behörigheter till den hanterade identitet som du skapade för att få åtkomst till din Service Bus. Du kan göra detta genom att tilldela en roll till den hanterade identiteten, precis som du gjorde med din lokala utvecklingsanvändare.

Om du har anslutit dina tjänster med hjälp av Service Connector behöver du inte slutföra det här steget. De nödvändiga konfigurationerna hanterades åt dig:

  • Om du valde en hanterad identitet när du skapade anslutningen skapades en systemtilldelad hanterad identitet för din app och tilldelades rollen Azure Service Bus-dataägare på Service Bus.

  • Om du valde niska veze lades niska veze till som en appmiljövariabel.

Testa appen

När du har gjort dessa kodändringar bläddrar du till ditt värdbaserade program i webbläsaren. Appen bör kunna ansluta till Service Bus. Tänk på att det kan ta flera minuter innan rolltilldelningarna sprids via din Azure-miljö. Ditt program är nu konfigurerat att köras både lokalt och i en produktionsmiljö utan att utvecklarna behöver hantera hemligheter i själva programmet.

Nästa steg

I den här självstudien har du lärt dig hur du migrerar ett program till lösenordslösa anslutningar.