Migrera ett program för att använda lösenordslösa anslutningar med Azure Event Hubs
Artikel
Programbegäranden till Azure-tjänster måste autentiseras med hjälp av konfigurationer som 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. Traditionella autentiseringsmetoder som använder lösenord eller hemliga nycklar skapar säkerhetsrisker och komplikationer. Gå till hubben för lösenordslösa anslutningar för Azure-tjänster för att lära dig mer om fördelarna med att flytta till lösenordslösa anslutningar.
I följande självstudie beskrivs hur du migrerar ett befintligt program för att ansluta med lösenordslösa anslutningar. Samma migreringssteg bör gälla oavsett om du använder åtkomstnycklar, niska veze eller någon annan hemlighetsbaserad metod.
Konfigurera din lokala utvecklingsmiljö
Lösenordslösa anslutningar kan konfigureras för att fungera för både lokala och Azure-värdbaserade miljöer. I det här avsnittet använder du konfigurationer för att tillåta enskilda användare att autentisera till Azure Event Hubs för lokal utveckling.
Tilldela användarroller
När du utvecklar lokalt kontrollerar du att användarkontot som har åtkomst till Azure Event Hubs har rätt behörigheter. Du behöver rollerna Azure Event Hubs Data Receiver och Azure Event Hubs Data Sender för att läsa och skriva meddelandedata. 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. Läs mer om tillgängliga omfång för rolltilldelningar på översiktssidan för omfång .
I följande exempel tilldelas rollerna Azure Event Hubs Data Sender och Azure Event Hubs Data Receiver till ditt användarkonto. Den här rollen ger läs- och skrivåtkomst till händelsehubbens meddelanden.
Leta upp din händelsehubb i Azure-portalen med hjälp av huvudsökfältet eller det vänstra navigeringsfältet.
På översiktssidan för händelsehubben väljer du Åtkomstkontroll (IAM) på den vänstra menyn.
På sidan Åtkomstkontroll (IAM) väljer du fliken Rolltilldelningar .
Välj + Lägg till på den översta menyn och sedan Lägg till rolltilldelning från den resulterande nedrullningsbara menyn.
Använd sökrutan för att filtrera resultatet till önskad roll. I det här exemplet söker du efter Azure Event Hubs Data Sender och väljer matchande resultat och väljer sedan Nästa.
Under Tilldela åtkomst till väljer du Användare, grupp eller tjänstens huvudnamn och sedan + Välj medlemmar.
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.
Välj Granska + tilldela för att gå till den sista sidan och sedan Granska + tilldela igen för att slutföra processen.
Upprepa de här stegen för rollen Azure Event Hubs Data Receiver så att kontot kan skicka och ta emot meddelanden.
Om du vill tilldela en roll på resursnivå med hjälp av Azure CLI måste du först hämta resurs-ID:t med kommandot az eventhubs eventhub show . Du kan filtrera utdataegenskaperna med hjälp av parametern --query .
az eventhubs eventhub show \
--resource-group '<your-resource-group-name>' \
--namespace-name '<your-event-hubs-namespace>' \
--name '<your-event-hub-name>' \
--query id
Kopiera utdata Id från föregående kommando. Du kan sedan tilldela roller med kommandot az role för Azure CLI.
az role assignment create --assignee "<user@domain>" \
--role "Azure Event Hubs Data Receiver" \
--scope "<your-resource-id>"
az role assignment create --assignee "<user@domain>" \
--role "Azure Event Hubs Data Sender" \
--scope "<your-resource-id>"
Om du vill tilldela en roll på resursnivå med Hjälp av Azure PowerShell måste du först hämta resurs-ID:t med kommandot Get-AzResource .
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.
Logga in på Azure lokalt
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
Välj knappen Logga in längst upp till höger i Visual Studio.
Logga in med det Microsoft Entra-konto som du tilldelade en roll till tidigare.
Du måste installera Azure CLI för att arbeta med DefaultAzureCredential via Visual Studio Code.
Gå till Terminal > Ny terminal på huvudmenyn i Visual Studio Code.
Logga in på Azure via Azure CLI med följande kommando:
az login
Logga in på Azure med hjälp av PowerShell via följande kommando:
Connect-AzAccount
Uppdatera programkoden för att använda lösenordslösa anslutningar
Azure Identity-klientbiblioteket för vart och ett av följande ekosystem tillhandahåller en DefaultAzureCredential klass som hanterar lösenordslös autentisering till Azure:
DefaultAzureCredential stöder flera autentiseringsmetoder. Vilken metod som ska användas bestäms vid körning. Med den här metoden kan din app använda olika autentiseringsmetoder i olika miljöer (lokalt jämfört med produktion) utan att implementera miljöspecifik kod. Se föregående länkar för den ordning och de platser där DefaultAzureCredential autentiseringsuppgifterna söks.
Om du vill använda DefaultAzureCredential i ett .NET-program installerar du Azure.Identity paketet:
dotnet add package Azure.Identity
Lägg till följande kod överst i filen:
using Azure.Identity;
Identifiera de platser i koden som skapar ett EventHubProducerClient eller EventProcessorClient -objekt för att ansluta till Azure Event Hubs. Uppdatera koden så att den matchar följande exempel:
Identifiera de platser i koden som skapar en eller ConsumerClient en ProducerClient instans för att ansluta till Azure Event Hubs. Uppdatera koden så att den matchar följande exempel:
Identifiera de platser i koden som skapar ett EventHubProducerClient eller EventProcessorClient -objekt för att ansluta till Azure Event Hubs. Uppdatera koden så att den matchar följande exempel:
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
.build();
String eventHubNamespace = "https://" + namespace + ".servicebus.windows.net";
// Event Hubs producer
EventHubProducerClient producerClient = new EventHubClientBuilder()
.credential(eventHubNamespace, eventHubName, credential)
.buildProducerClient();
// Event Hubs processor
EventProcessorClient processorClient = new EventProcessorClientBuilder()
.consumerGroup(consumerGroupName)
.credential(eventHubNamespace, eventHubName, credential)
.checkpointStore(new SampleCheckpointStore())
.processEvent(eventContext -> {
System.out.println(
"Partition ID = " +
eventContext.getPartitionContext().getPartitionId() +
" and sequence number of event = " +
eventContext.getEventData().getSequenceNumber());
})
.processError(errorContext -> {
System.out.println(
"Error occurred while processing events " +
errorContext.getThrowable().getMessage());
})
.buildEventProcessorClient();
Installera paketet om du vill använda DefaultAzureCredential i ett Node.js program @azure/identity :
npm install --save @azure/identity
Lägg till följande kod överst i filen:
import { DefaultAzureCredential } from "@azure/identity";
Identifiera de platser i koden som skapar ett EventHubProducerClient eller EventHubConsumerClient -objekt för att ansluta till Azure Event Hubs. Uppdatera koden så att den matchar följande exempel:
Om du vill använda DefaultAzureCredential i ett Python-program installerar du azure-identity paketet:
pip install azure-identity
Lägg till följande kod överst i filen:
from azure.identity import DefaultAzureCredential
Identifiera de platser i koden som skapar ett EventHubProducerClient eller EventHubConsumerClient -objekt för att ansluta till Azure Event Hubs. Uppdatera koden så att den matchar följande exempel:
Se till att uppdatera händelsehubbens namnområde i URI:n för dina EventHubProducerClient eller EventProcessorClient objekten. Du hittar namnområdets namn på översiktssidan i Azure-portalen.
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. Med de roller som du har tilldelat till din användare i Azure kan din app 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. I avsnitten nedan beskrivs hur du konfigurerar ett distribuerat program för att ansluta till Azure Event Hubs med hjälp av en hanterad identitet. Hanterade identiteter ger en automatiskt hanterad identitet i Microsoft Entra ID som program kan använda vid anslutning till resurser som stöder autentisering med Microsoft Entra. Läs mer om hanterade identiteter:
Du kan skapa en användartilldelad hanterad identitet med hjälp av Azure-portalen eller Azure CLI. Ditt program använder identiteten för att autentisera till andra tjänster.
az identity create --name MigrationIdentity --resource-group <your-resource-group>
Associera den hanterade identiteten med din webbapp
Du måste konfigurera webbappen så att den använder den hanterade identitet som du skapade. Tilldela identiteten till din app med hjälp av antingen Azure-portalen eller Azure CLI.
az vm identity assign \
--resource-group <resource-group-name> \
--name <virtual-machine-name>
--identities <managed-identity-id>
Du kan tilldela en hanterad identitet till en AkS-instans (Azure Kubernetes Service) med kommandot az aks update .
az aks update \
--resource-group <resource-group-name> \
--name <cluster-name> \
--enable-managed-identity \
--assign-identity <managed-identity-id> \
--assign-kubelet-identity <managed-identity-id>
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-kommandona för Service Connector tilldelar automatiskt rätt roll till din identitet. Du kan läsa mer om Service Connector och vilka scenarier som stöds på översiktssidan.
Hämta klient-ID:t för den hanterade identitet som du skapade med kommandot az identity show . Kopiera värdet för senare användning.
az identity show \
--name MigrationIdentity \
--resource-group <your-resource-group> \
--query clientId
Använd lämpligt CLI-kommando för att upprätta tjänstanslutningen:
Därefter måste du bevilja behörigheter till den hanterade identitet som du skapade för att få åtkomst till din händelsehubb. Bevilja behörigheter genom att tilldela en roll till den hanterade identiteten, precis som du gjorde med din lokala utvecklingsanvändare.
Gå till översiktssidan för händelsehubben och välj Åtkomstkontroll (IAM) i det vänstra navigeringsfältet.
Välj Lägg till rolltilldelning
I sökrutan Roll söker du efter Azure Event Hubs Data Sender, som är en vanlig roll som används för att hantera dataåtgärder för köer. Du kan tilldela vilken roll som är lämplig för ditt användningsfall. Välj Azure Event Hubs Data Sender i listan och välj Nästa.
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.
I den utfällbara menyn söker du efter den hanterade identitet som du skapade med namn och väljer den i resultatet. Välj Välj för att stänga den utfällbara menyn.
Välj Nästa ett par gånger tills du kan välja Granska + tilldela för att slutföra rolltilldelningen.
Upprepa de här stegen för rollen Azure Event Hub Data Receiver .
Om du vill tilldela en roll på resursnivå med hjälp av Azure CLI måste du först hämta resurs-ID:t med kommandot az eventhubs eventhub show show. Du kan filtrera utdataegenskaperna med hjälp av parametern --query .
az eventhubs eventhub show \
--resource-group '<your-resource-group-name>' \
--namespace-name '<your-event-hubs-namespace>' \
--name '<your-event-hub-name>' \
--query id
Kopiera utdata-ID:t från föregående kommando. Du kan sedan tilldela roller med kommandot az role assignment i Azure CLI.
az role assignment create --assignee "<user@domain>" \
--role "Azure Event Hubs Data Receiver" \
--scope "<your-resource-id>"
az role assignment create --assignee "<user@domain>" \
--role "Azure Event Hubs Data Sender" \
--scope "<your-resource-id>"
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 rollkonfigurationerna hanterades åt dig när du körde CLI-kommandona för Service Connector.
Uppdatera programkoden
Du måste konfigurera programkoden för att söka efter den specifika hanterade identitet som du skapade när den distribuerades till Azure. I vissa scenarier förhindrar explicit inställning av den hanterade identiteten för appen även andra miljöidentiteter från att oavsiktligt identifieras och användas automatiskt.
På översiktssidan för hanterad identitet kopierar du klient-ID-värdet till Urklipp.
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
.managedIdentityClientId(managedIdentityClientId)
.build();
Skapa ett DefaultAzureCredentialClientIdOptions objekt med egenskapen managedIdentityClientId inställt på klient-ID:t. Skicka objektet till DefaultAzureCredential konstruktorn.
const credential = new DefaultAzureCredential({
managedIdentityClientId
});
Distribuera om koden till Azure när du har gjort den här ändringen för att konfigurationsuppdateringarna ska tillämpas.
Testa appen
När du har distribuerat den uppdaterade koden bläddrar du till ditt värdbaserade program i webbläsaren. Appen bör kunna ansluta till händelsehubben. 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.
Du kan läsa följande resurser för att utforska begreppen som beskrivs i den här artikeln mer ingående: