Lösenordslösa anslutningar för Azure-tjänster

Kommentar

Lösenordslösa anslutningar är en språkagnostisk funktion som omfattar flera Azure-tjänster. Även om den aktuella dokumentationen fokuserar på några språk och tjänster håller vi för närvarande på att ta fram ytterligare dokumentation för andra språk och tjänster.

Den här artikeln beskriver säkerhetsutmaningarna med lösenord och introducerar lösenordslösa anslutningar för Azure-tjänster.

Säkerhetsutmaningar med lösenord och hemligheter

Lösenord och hemliga nycklar bör användas med försiktighet, och utvecklare får aldrig placera dem på en osäker plats. Många appar ansluter till serverdelsdatabas, cache, meddelanden och händelsetjänster med hjälp av användarnamn, lösenord och åtkomstnycklar. Om dessa autentiseringsuppgifter exponeras kan de användas för att få obehörig åtkomst till känslig information, till exempel en försäljningskatalog som du har skapat för en kommande kampanj eller kunddata som måste vara privata.

Att bädda in lösenord i själva programmet utgör en enorm säkerhetsrisk av många skäl, inklusive identifiering via en kodlagringsplats. Många utvecklare externaliserar sådana lösenord med hjälp av miljövariabler så att program kan läsa in dem från olika miljöer. Detta flyttar dock bara risken från själva koden till en körningsmiljö. Alla som får åtkomst till miljön kan stjäla lösenord, vilket i sin tur ökar risken för dataexfiltrering.

Följande kodexempel visar hur du ansluter till Azure Storage med hjälp av en lagringskontonyckel. Många utvecklare dras till den här lösningen eftersom de känner sig bekanta med alternativ som de har arbetat med tidigare, även om det inte är en idealisk lösning. Om ditt program för närvarande använder åtkomstnycklar kan du överväga att migrera till lösenordslösa anslutningar.

// Connection using secret access keys
BlobServiceClient blobServiceClient = new(
    new Uri("https://<storage-account-name>.blob.core.windows.net"),
    new StorageSharedKeyCredential("<storage-account-name>", "<your-access-key>"));

Utvecklare måste vara noggranna för att aldrig exponera dessa typer av nycklar eller hemligheter på en osäker plats. Många företag har strikta säkerhetskrav för att ansluta till Azure-tjänster utan att exponera lösenord för utvecklare, operatörer eller någon annan. De använder ofta ett valv för att lagra och läsa in lösenord i program och minska risken ytterligare genom att lägga till krav och procedurer för lösenordsrotation. Den här metoden ökar i sin tur driftskomplexiteten och leder ibland till avbrott i programanslutningen.

Lösenordslösa anslutningar och Nolltillit

Nu kan du använda lösenordslösa anslutningar i dina appar för att ansluta till Azure-baserade tjänster utan att behöva rotera lösenord. I vissa fall behöver du bara konfiguration – ingen ny kod krävs. Nolltillit använder principen "lita aldrig på, verifiera alltid och utan autentiseringsuppgifter". Det innebär att skydda all kommunikation genom att lita på datorer eller användare först när identiteten har verifierats och innan de beviljas åtkomst till serverdelstjänster.

Det rekommenderade autentiseringsalternativet för säkra, lösenordslösa anslutningar är att använda hanterade identiteter och rollbaserad åtkomstkontroll i Azure (RBAC) i kombination. Med den här metoden behöver du inte spåra och hantera många olika hemligheter för hanterade identiteter manuellt eftersom dessa uppgifter hanteras på ett säkert sätt internt av Azure.

Du kan konfigurera lösenordslösa anslutningar till Azure-tjänster med hjälp av Service Anslut eller eller så kan du konfigurera dem manuellt. Tjänst Anslut eller möjliggör hanterade identiteter i appvärdtjänster som Azure Spring Apps, Azure App Service och Azure Container Apps. Service Anslut or konfigurerar även serverdelstjänster med lösenordslösa anslutningar med hanterade identiteter och Azure RBAC och återfuktar program med nödvändig anslutningsinformation.

Om du inspekterar körningsmiljön för ett program som har konfigurerats för lösenordslösa anslutningar kan du se hela anslutningssträng. Anslutningssträng innehåller till exempel en databasserveradress, ett databasnamn och en instruktion för att delegera autentisering till ett Azure-autentiseringstillägg, men den innehåller inga lösenord eller hemligheter.

Följande video visar lösenordslösa anslutningar från appar till Azure-tjänster, med Java-program som exempel. Liknande täckning för andra språk kommer.


Introduktion till StandardAzureCredential

Lösenordslösa anslutningar till Azure-tjänster via Microsoft Entra-ID och rollbaserad åtkomstkontroll (RBAC) 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 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 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 annan dokumentation beskrivs hur du migrerar till den här konfigurationen för en specifik tjänst i detalj. En .NET-app 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.

ServiceBusClient serviceBusClient = new(
    new Uri("https://<your-service-bus-namespace>.blob.core.windows.net"),
    new DefaultAzureCredential());

Se även

En mer detaljerad förklaring av lösenordslösa anslutningar finns i utvecklarguiden Konfigurera lösenordslösa anslutningar mellan flera Azure-appar och -tjänster.