Genomgång: Integrerad autentisering för Python-appar med Azure-tjänster
Azure Active Directory (Azure AD) tillsammans med Azure Key Vault ett omfattande och praktiskt sätt för program att autentisera med Azure-tjänster samt tjänster från tredje part där åtkomstnycklar är inblandade.
När du har ge lite bakgrund förklarar den här genomgången dessa autentiseringsfunktioner i kontexten för exemplet, github.com/Azure-Samples/python-integrated-authentication.
För enkelhetens skull har exemplet redan distribuerats till Azure så att du kan se hur det fungerar. Om du vill distribuera exemplet till din egen Azure-prenumeration innehåller lagringsplatsen även Azure CLI-distributionsskript.
Del 1: Bakgrund
Även om många Azure-tjänster enbart är beroende av rollbaserad åtkomstkontroll för auktorisering, kontrollerar vissa tjänster åtkomsten till sina respektive resurser med hjälp av hemligheter eller nycklar. Sådana tjänster omfattar Azure Storage, databaser, Cognitive Services, Key Vault och Event Hubs.
När du skapar en molnapp som använder resurser i dessa tjänster använder du Azure Portal, Azure CLI eller Azure PowerShell för att skapa och konfigurera nycklar för din app som är knutna till specifika åtkomstprinciper. Dessa nycklar förhindrar åtkomst till de appspecifika resurserna av annan obehörig kod.
I den här allmänna designen måste molnappar vanligtvis hantera dessa nycklar och autentisera med varje tjänst individuellt, en process som kan vara både omedveten och felbenägen. Hantering av nycklar direkt i appkod riskerar också att exponera dessa nycklar i källkontrollen och nycklar kan lagras på oskyddade utvecklararbetsstationen.
Som tur är har Azure två specifika tjänster som förenklar processen och ger bättre säkerhet:
Azure Key Vault ger säker molnbaserad lagring för åtkomstnycklar (tillsammans med kryptografiska nycklar och certifikat som inte beskrivs i den här artikeln). Med hjälp Key Vault åtkomst till sådana nycklar endast vid körning så att de aldrig visas direkt i källkoden.
Med Azure Active Directory (Azure AD) hanterade identiteter behöver appen bara autentiseras en gång med Active Directory. Appen autentiseras sedan automatiskt med andra Azure-tjänster, inklusive Key Vault. Därför behöver din kod aldrig bekymra sig om nycklar eller andra autentiseringsuppgifter för dessa Azure-tjänster. Dessutom kan du köra samma kod både lokalt och i molnet med minimala konfigurationskrav.
Genom att använda Azure AD och Key Vault tillsammans behöver din app aldrig autentisera sig själv med enskilda Azure-tjänster och kan enkelt och säkert komma åt alla nycklar som behövs för tjänster från tredje part.
Viktigt
Den här artikeln använder den vanliga allmänna termen "nyckel" för att referera till vad som lagras som "hemligheter" i Azure Key Vault, till exempel en åtkomstnyckel för en REST API. Den här användningen bör inte förväxlas Key Vault hanteringen avkryptografisk nyckel, som är en separat funktion från Key Vault hemligheter.
Exempelscenario för molnapp
Överväg följande scenario för att få en djupare förståelse för Azures autentiseringsprocess:
En huvudapp exponerar en offentlig (icke-autentiserad) API-slutpunkt som svarar på HTTP-begäranden med JSON-data. Exempelslutpunkten som visas i den här artikeln implementeras som en enkel Flask-app som distribueras till Azure App Service.
För att generera svaret anropar API:et ett API från tredje part som kräver en åtkomstnyckel. Appen hämtar åtkomstnyckeln från Azure Key Vault vid körning.
Innan dess svar returneras skriver API:et ett meddelande till en Azure Storage Queue för senare bearbetning. (Den specifika bearbetningen av dessa meddelanden är inte relevant för huvudscenariot.)

Anteckning
Även om en offentlig API-slutpunkt vanligtvis skyddas av en egen åtkomstnyckel, förutsätter vi i den här artikeln att slutpunkten är öppen och oauticerad. Det här antagandet undviker eventuell förvirring mellan appens autentiseringsbehov och de för en extern anropare av den här slutpunkten. Det här scenariot visar inte en sådan extern anropare.