Een toepassing migreren om verbindingen zonder wachtwoord te gebruiken met Azure Service Bus
Toepassingsaanvragen voor Azure Service Bus moeten worden geverifieerd met behulp van toegangssleutels voor accounts of verbindingen zonder wachtwoord. U moet echter waar mogelijk prioriteit geven aan verbindingen zonder wachtwoord in uw toepassingen. In deze zelfstudie wordt uitgelegd hoe u migreert van traditionele verificatiemethoden naar veiligere, wachtwoordloze verbindingen.
Beveiligingsrisico's met betrekking tot toegangssleutels
In het volgende codevoorbeeld ziet u hoe u verbinding maakt met Azure Service Bus met behulp van een verbindingsreeks die een toegangssleutel bevat. Wanneer u een Service Bus maakt, genereert Azure deze sleutels en verbindingsreeks automatisch. Veel ontwikkelaars trekken zich aan bij deze oplossing, omdat het bekend is met opties waarmee ze in het verleden hebben gewerkt. Als uw toepassing momenteel gebruikmaakt van verbindingsreeks s, kunt u overwegen om te migreren naar verbindingen zonder wachtwoord met behulp van de stappen die in dit document worden beschreven.
Verbindingsreeksen moeten voorzichtig worden gebruikt. Ontwikkelaars moeten ijverig zijn om de sleutels nooit beschikbaar te maken op een onbeveiligde locatie. Iedereen die toegang krijgt tot de sleutel, kan worden geverifieerd. Als een accountsleutel bijvoorbeeld per ongeluk is ingecheckt bij broncodebeheer, wordt verzonden via een onbeveiligde e-mail, in de verkeerde chat is geplakt of bekeken door iemand die niet gemachtigd mag zijn, bestaat het risico dat een kwaadwillende gebruiker toegang heeft tot de toepassing. In plaats daarvan kunt u overwegen uw toepassing bij te werken voor het gebruik van verbindingen zonder wachtwoord.
Migreren naar verbindingen zonder wachtwoord
Veel Azure-services ondersteunen verbindingen zonder wachtwoord via Microsoft Entra ID en op rollen gebaseerd toegangsbeheer (RBAC). Deze technieken bieden robuuste beveiligingsfuncties en kunnen worden geïmplementeerd met behulp van DefaultAzureCredential
de Azure Identity-clientbibliotheken.
Belangrijk
Sommige talen moeten expliciet in hun code worden geïmplementeerd DefaultAzureCredential
, terwijl andere intern worden gebruikt DefaultAzureCredential
via onderliggende invoegtoepassingen of stuurprogramma's.
DefaultAzureCredential
ondersteunt meerdere verificatiemethoden en bepaalt automatisch welke tijdens runtime moet worden gebruikt. Met deze aanpak kan uw app verschillende verificatiemethoden gebruiken in verschillende omgevingen (lokale ontwikkelomgeving versus productie) zonder omgevingsspecifieke code te implementeren.
De volgorde en locaties waarin DefaultAzureCredential
wordt gezocht naar referenties, vindt u in het overzicht van de Azure Identity-bibliotheek en verschilt per taal. Wanneer u bijvoorbeeld lokaal werkt met .NET, DefaultAzureCredential
wordt doorgaans geverifieerd met het account dat de ontwikkelaar heeft gebruikt om zich aan te melden bij Visual Studio, Azure CLI of Azure PowerShell. Wanneer de app wordt geïmplementeerd in Azure, DefaultAzureCredential
detecteert en gebruikt u automatisch de beheerde identiteit van de gekoppelde hostingservice, zoals Azure-app Service. Er zijn geen codewijzigingen vereist voor deze overgang.
Notitie
Een beheerde identiteit biedt een beveiligingsidentiteit die een app of service vertegenwoordigt. De identiteit wordt beheerd door het Azure-platform en u hoeft geen geheimen in te richten of te draaien. Meer informatie over beheerde identiteiten vindt u in de overzichtsdocumentatie .
In het volgende codevoorbeeld ziet u hoe u verbinding maakt met Service Bus met behulp van verbindingen zonder wachtwoord. In de volgende sectie wordt beschreven hoe u naar deze installatie voor een specifieke service migreert.
Een .NET-toepassing kan een exemplaar van DefaultAzureCredential
de constructor van een serviceclientklasse doorgeven. DefaultAzureCredential
detecteert automatisch de referenties die beschikbaar zijn in die omgeving.
client = new ServiceBusClient(
"<NAMESPACE-NAME>.servicebus.windows.net",
new DefaultAzureCredential());
Stappen voor het migreren van een app voor het gebruik van verificatie zonder wachtwoord
In de volgende stappen wordt uitgelegd hoe u een bestaande toepassing migreert om verbindingen zonder wachtwoord te gebruiken in plaats van een oplossing op basis van een sleutel. Eerst configureert u een lokale ontwikkelomgeving en past u deze concepten vervolgens toe op een azure-app-hostingomgeving. Dezelfde migratiestappen moeten van toepassing zijn, ongeacht of u rechtstreeks toegangssleutels gebruikt of via verbindingsreeks s.
Rollen en gebruikers configureren voor lokale ontwikkelingsverificatie
Zorg er bij het lokaal ontwikkelen voor dat het gebruikersaccount dat toegang heeft tot Service Bus, over de juiste machtigingen beschikt. In dit voorbeeld gebruikt u de rol Azure Service Bus-gegevenseigenaar om gegevens te verzenden en te ontvangen, maar er zijn ook meer gedetailleerde rollen beschikbaar. Als u uzelf deze rol wilt toewijzen, moet u de rol Beheerder voor gebruikerstoegang of een andere rol met de actie Microsoft.Authorization/roleAssignments/write krijgen toegewezen. U kunt Azure RBAC-rollen toewijzen aan een gebruiker met behulp van Azure Portal, Azure CLI of Azure PowerShell. Meer informatie over de beschikbare bereiken voor roltoewijzingen vindt u op de overzichtspagina van het bereik.
In dit scenario wijst u machtigingen toe aan uw gebruikersaccount dat is gericht op een specifieke Service Bus-naamruimte, om het principe van minimale bevoegdheden te volgen. Deze procedure biedt gebruikers alleen de minimale machtigingen die nodig zijn en maakt veiligere productieomgevingen.
In het volgende voorbeeld wordt de rol Azure Service Bus-gegevenseigenaar toegewezen aan uw gebruikersaccount, waarmee u gegevens kunt verzenden en ontvangen.
Belangrijk
In de meeste gevallen duurt het een of twee minuten voordat de roltoewijzing is doorgegeven in Azure, maar in zeldzame gevallen kan het maximaal acht minuten duren. Als u verificatiefouten ontvangt wanneer u de code voor het eerst uitvoert, wacht u even en probeert u het opnieuw.
Zoek in Azure Portal uw Service Bus-naamruimte met behulp van de hoofdzoekbalk of linkernavigatiebalk.
Selecteer op de overzichtspagina van Service Bus toegangsbeheer (IAM) in het menu aan de linkerkant.
Selecteer op de pagina Toegangsbeheer (IAM) het tabblad Roltoewijzingen .
Selecteer + Toevoegen in het bovenste menu en voeg vervolgens roltoewijzing toe in de resulterende vervolgkeuzelijst.
Gebruik het zoekvak om de resultaten te filteren op de gewenste rol. Zoek voor dit voorbeeld naar Azure Service Bus-gegevenseigenaar en selecteer het overeenkomende resultaat en kies vervolgens Volgende.
Selecteer onder Toegang toewijzen de optie Gebruiker, groep of service-principal en kies vervolgens + Leden selecteren.
Zoek in het dialoogvenster naar uw Microsoft Entra-gebruikersnaam (meestal uw user@domain e-mailadres) en kies Vervolgens onderaan het dialoogvenster Selecteren .
Selecteer Beoordelen + toewijzen om naar de laatste pagina te gaan en vervolgens opnieuw beoordelen en toewijzen om het proces te voltooien.
Aanmelden en de app-code migreren om wachtwoordloze verbindingen te gebruiken
Zorg ervoor dat u voor lokale ontwikkeling bent geverifieerd met hetzelfde Microsoft Entra-account waaraan u de rol hebt toegewezen voor de Service Bus-naamruimte. U kunt zich verifiëren via de Azure CLI, Visual Studio, Azure PowerShell of andere hulpprogramma's, zoals IntelliJ.
Zorg ervoor dat u voor lokale ontwikkeling bent geverifieerd met hetzelfde Microsoft Entra-account waaraan u de rol hebt toegewezen. U kunt zich verifiëren via populaire ontwikkelhulpprogramma's, zoals de Azure CLI of Azure PowerShell. De ontwikkelhulpprogramma's waarmee u zich kunt verifiëren, variëren per taal.
Meld u aan bij Azure via de Azure CLI met behulp van de volgende opdracht:
az login
Werk vervolgens uw code bij voor het gebruik van verbindingen zonder wachtwoord.
Als u wilt gebruiken
DefaultAzureCredential
in een .NET-toepassing, installeert u hetAzure.Identity
pakket:dotnet add package Azure.Identity
Voeg boven aan het bestand de volgende code toe:
using Azure.Identity;
Identificeer de code waarmee een
ServiceBusClient
object wordt gemaakt om verbinding te maken met Azure Service Bus. Werk uw code bij zodat deze overeenkomt met het volgende voorbeeld:var serviceBusNamespace = $"{namespace}.servicebus.windows.net"; ServiceBusClient client = new( serviceBusNamespace, new DefaultAzureCredential());
De app lokaal uitvoeren
Nadat u deze codewijzigingen hebt aangebracht, voert u uw toepassing lokaal uit. De nieuwe configuratie moet uw lokale referenties ophalen, zoals de Azure CLI, Visual Studio of IntelliJ. Met de rollen die u hebt toegewezen aan uw lokale dev-gebruiker in Azure, kan uw app lokaal verbinding maken met de Azure-service.
De Azure-hostingomgeving configureren
Zodra uw toepassing is geconfigureerd voor het gebruik van verbindingen zonder wachtwoord en lokaal wordt uitgevoerd, kan dezelfde code worden geverifieerd bij Azure-services nadat deze is geïmplementeerd in Azure. Een toepassing die is geïmplementeerd in een Azure-app Service-exemplaar waarvoor een beheerde identiteit is ingeschakeld, kan bijvoorbeeld verbinding maken met Azure Service Bus.
De beheerde identiteit maken met behulp van Azure Portal
De volgende stappen laten zien hoe u een door het systeem toegewezen beheerde identiteit maakt voor verschillende webhostingservices. De beheerde identiteit kan veilig verbinding maken met andere Azure-services met behulp van de app-configuraties die u eerder hebt ingesteld.
Sommige app-hostingomgevingen ondersteunen Service Connector, waarmee u Azure-rekenservices kunt verbinden met andere back-upservices. Service Connector configureert automatisch netwerkinstellingen en verbindingsgegevens. Meer informatie over Service Connector en welke scenario's worden ondersteund op de overzichtspagina.
De volgende rekenservices worden momenteel ondersteund:
- Azure App Service
- Azure Spring Cloud
- Azure Container Apps (preview)
Voor deze migratiehandleiding gebruikt u App Service, maar de stappen zijn vergelijkbaar in Azure Spring Apps en Azure Container Apps.
Notitie
Azure Spring Apps ondersteunt momenteel alleen Service Connector met behulp van verbindingsreeks s.
Selecteer serviceconnector in de linkernavigatiebalk op de hoofdpagina van uw App Service.
Selecteer + Maken in het bovenste menu en het deelvenster Verbinding maken wordt geopend. Voer de volgende waarden in:
- Servicetype: Kies Service Bus.
- Abonnement: Selecteer het abonnement dat u wilt gebruiken.
- Verbindingsnaam: voer een naam in voor uw verbinding, zoals connector_appservice_servicebus.
- Clienttype: laat de standaardwaarde geselecteerd of kies de specifieke client die u wilt gebruiken.
Selecteer Volgende: Verificatie.
Zorg ervoor dat door het systeem toegewezen beheerde identiteit (aanbevolen) is geselecteerd en kies vervolgens Volgende: Netwerken.
Laat de standaardwaarden geselecteerd en kies vervolgens Volgende: Beoordelen en maken.
Nadat uw instellingen door Azure zijn gevalideerd, selecteert u Maken.
De serviceconnector maakt automatisch een door het systeem toegewezen beheerde identiteit voor de app-service. De connector wijst ook de beheerde identiteit toe aan de rol Azure Service Bus-gegevenseigenaar voor de servicebus die u hebt geselecteerd.
U kunt ook beheerde identiteiten inschakelen in een Azure-hostingomgeving met behulp van de Azure CLI.
- Serviceconnector
- Azure App Service
- Azure Spring Apps
- Azure Container Apps
- Azure Virtual Machines
- Azure Kubernetes Service
U kunt Service Connector gebruiken om een verbinding te maken tussen een Azure Compute-hostingomgeving en een doelservice met behulp van de Azure CLI. De CLI verwerkt het maken van een beheerde identiteit automatisch en wijst de juiste rol toe, zoals wordt uitgelegd in de portalinstructies.
Als u een Azure-app Service gebruikt, gebruikt u de az webapp connection
volgende opdracht:
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
Als u Azure Spring Apps gebruikt, gebruikt u de az spring connection
opdracht:
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
Als u Azure Container Apps gebruikt, gebruikt u de az containerapp connection
opdracht:
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
Rollen toewijzen aan de beheerde identiteit
Vervolgens moet u machtigingen verlenen aan de beheerde identiteit die u hebt gemaakt voor toegang tot uw Service Bus. U kunt dit doen door een rol toe te wijzen aan de beheerde identiteit, net als bij uw lokale ontwikkelgebruiker.
Als u uw services hebt verbonden met behulp van de serviceconnector, hoeft u deze stap niet te voltooien. De benodigde configuraties zijn voor u verwerkt:
Als u een beheerde identiteit hebt geselecteerd tijdens het maken van de verbinding, is er een door het systeem toegewezen beheerde identiteit gemaakt voor uw app en is de rol Azure Service Bus-gegevenseigenaar toegewezen aan De Service Bus.
Als u verbindingsreeks hebt geselecteerd, is de verbindingsreeks toegevoegd als een omgevingsvariabele voor apps.
De app testen
Nadat u deze codewijzigingen hebt aangebracht, bladert u naar uw gehoste toepassing in de browser. Uw app moet verbinding kunnen maken met De Service Bus. Houd er rekening mee dat het enkele minuten kan duren voordat de roltoewijzingen zijn doorgegeven via uw Azure-omgeving. Uw toepassing is nu geconfigureerd om zowel lokaal als in een productieomgeving uit te voeren zonder dat de ontwikkelaars geheimen in de toepassing zelf hoeven te beheren.
Volgende stappen
In deze zelfstudie hebt u geleerd hoe u een toepassing migreert naar verbindingen zonder wachtwoord.