Auktorisering i Azure SDKs-biblioteken för Python

Auktorisering i Azure avgör vilka åtgärder autentiserade användare eller tjänster kan utföra på resurser. I den här artikeln beskrivs hur du implementerar auktorisering med hjälp av Azure SDKs för Python, som omfattar modeller, implementering, felsökning och metodtips. Detaljerad autentiseringskonfiguration finns i Autentisera Python-appar till Azure.

Introduction

Autentisering (AuthN) verifierar identiteten för en användare eller tjänst, medan auktorisering (AuthZ) definierar vad de kan göra. I Azure säkerställer auktorisering säker åtkomst till resurser, vilket är viktigt för att skydda program och data. Utvecklare kan implementera robust auktorisering med Azure SDKs för Python för att styra åtkomsten i olika arbetsflöden, från hantering av resurser till åtkomst till tjänstspecifika data.

Azure-auktoriseringsmodeller

Azure tillhandahåller flera auktoriseringsmekanismer för att hantera åtkomst. Att förstå dessa modeller är viktigt för effektiv åtkomstkontroll.

Azure rollbaserad åtkomstkontroll

Azure Role-Based Access Control (RBAC) tilldelar roller till identiteter i omfång som prenumerationer eller resursgrupper. Inbyggda roller inkluderar Ägare, Deltagare och Läsare, medan anpassade roller tillåter skräddarsydda behörigheter. När du tilldelar en roll i ett visst omfång får identiteten (till exempel en användare eller tjänst) behörigheter för alla resurser inom det omfånget och dess underordnade omfång. Om du till exempel tilldelar rollen Deltagare på prenumerationsnivå kan du hantera alla resurser i prenumerationen. Se Förstå omfånget för Azure RBAC.

Tjänstspecifika mekanismer

Vissa Azure-tjänster erbjuder unika auktoriseringsmetoder:

  • Azure Storage: Använder signaturer för delad åtkomst (SAS) och åtkomstkontrollistor (ACL) för dataåtkomst. Se Service-Specific auktoriseringsanmärkningar för Azure Storage.
  • Azure Key Vault: Rekommenderar RBAC framför äldre åtkomstprinciper. Se Service-Specific auktoriseringsanteckningar för Azure Key Vault.
  • Microsoft Graph: Använder OAuth 2.0-omfång och programbehörigheter. Se Tjänstespecifika auktoriseringsanteckningar för Microsoft Graph.

Använda auktorisering i Azure SDKs för Python

Azure SDKs för Python har inbyggt stöd för hantering av autentisering och auktorisering via azure-identity paketet. Klassen DefaultAzureCredential stöder olika autentiseringsmekanismer, till exempel hanterade identiteter och tjänstens huvudnamn, som anpassar sig till olika miljöer.

Exempel: Lista resursgrupper

Det här exemplet visar hur Azure SDKs för Python använder en autentiseringsuppgift (via DefaultAzureCredential) för att autentisera och hur auktorisering avgör om identiteten kan lista resursgrupper. Om identiteten saknar rollen Läsare eller högre i prenumerationens eller resursgruppens omfång returnerar det här anropet ett 403 Förbjudet-fel.

from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient

credential = DefaultAzureCredential()
client = ResourceManagementClient(credential, "<subscription-id>")
resource_groups = client.resource_groups.list()
for rg in resource_groups:
    print(rg.name)

Ersätt <subscription-id> med ditt Azure-prenumerations-ID, som vanligtvis är i form av 00000000-0000-0000-0000-000000000000.

Microsoft Graph med omfång

För att få åtkomst till Microsoft Graph använder du den officiella Microsoft Graph SDK för Python, som har stöd för både delegerade behörigheter och programbehörigheter.

Det här exemplet visar hur SDK använder en autentiseringsuppgift för att begära en åtkomsttoken med det nödvändiga auktoriseringsomfånget https://graph.microsoft.com/.default och få åtkomst till Microsoft Graph-resurser. Identiteten måste auktoriseras i Microsoft Entra-ID med lämpliga programbehörigheter (till exempel User.Read.All) för att hämta användardata. Annars misslyckas begäran med 403 Förbjuden.

Viktigt!

Se till att din app eller identitet har de User.Read.All eller andra behörigheter som krävs i Microsoft Entra-ID.

from azure.identity import DefaultAzureCredential
from msgraph.core import GraphClient

credential = DefaultAzureCredential()
client = GraphClient(credential=credential, scopes=["https://graph.microsoft.com/.default"])

response = client.get("/users")
users = response.json().get("value", [])
for user in users:
    print(user["displayName"])

Läs mer om denna SDK i den officiella självstudien Skapa Python-appar med Microsoft Graph .

Diagnostisera auktoriseringsfel

Auktoriseringsproblem orsakar ofta HTTP 403-otillåtna fel, vilket indikerar otillräcklig behörighet. Så här diagnostiserar du följande problem:

  • Kontrollera felmeddelanden: Granska svaret för mer information om saknade behörigheter.

  • Aktivera loggning: Använd Python loggning för att inspektera begäranden och svar.

    import logging
    logging.basicConfig(level=logging.DEBUG)
    
  • Verifiera åtkomst: Använd Azure CLI eller Azure-portalen för att kontrollera rolltilldelningar.

    az role assignment list --assignee <principal-id> --scope <scope>
    

    Ersätt <principal-id> med objekt-ID:t för din användare, tjänstens huvudnamn eller hanterade identitet. Ersätt <scope> med ett Azure-resursomfång, till exempel ett prenumerations-ID, ett resursgruppsnamn eller en resurs. Se Arbeta med omfång.

Arbeta med omfång

Du måste ofta ange ett omfång, som i följande exempel:

az role assignment list \
    --assignee <principal-id> \
    --scope <scope>

Här följer några vanliga omfångsformat:

Omfångsnivå Exempelvärde
Subscription /subscriptions/<subscription-id>
Resursgrupp /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>
Resursnamn /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/<provider-namespace>/<resource-type>/<resource-name>

Om du till exempel vill visa en lista över alla rolltilldelningar för en hanterad identitet på resursgruppsnivå:

az role assignment list \
  --assignee 12345678-90ab-cdef-1234-567890abcdef \
  --scope /subscriptions/<subscription-id>/resourceGroups/my-resource-group

Eller på prenumerationsnivå:

az role assignment list \
  --assignee 12345678-90ab-cdef-1234-567890abcdef \
  --scope /subscriptions/<subscription-id>

Om du vill hämta objekt-ID:t (<principal-id>) för en användare eller hanterad identitet använder du:

az ad user show --id <user-email> --query id
az identity show --name <identity-name> --resource-group <rg-name> --query principalId

Hantera åtkomst

Hantera åtkomst via rolltilldelningar med hjälp av:

  • Azure portal: Lägg till roller via IAM-tjänstmenyn (Åtkomstkontroll).

  • Azure CLI:

    az role assignment create --assignee <principal-id> --role <role-name> --scope <scope>
    

    Ersätt <principal-id> med objekt-ID:t för din användare, tjänstens huvudnamn eller hanterade identitet. Ersätt <scope> med ett Azure-resursomfång, till exempel ett prenumerations-ID, ett resursgruppsnamn eller ett resursnamn. Se Arbeta med omfång.

  • ARM-mallar: Används för deklarativ hantering.

För hanterade identiteter tilldelar du roller till den identitet som är associerad med resurser som virtuella datorer. Använd Azure portalens funktionen Kontrollera åtkomst eller Azure CLI för att verifiera gällande behörigheter.

Servicespecifika auktoriseringsanteckningar

I avsnittet Tjänstspecifika mekanismer har du lärt dig att vissa Azure tjänster erbjuder unika auktoriseringsmetoder. Det här avsnittet innehåller mer information om var och en av de tre Azure-tjänster som nämns.

Azure Storage

  • RBAC: Hanterar kontrollplansåtgärder.
  • SAS och ACL:er: Kontrollera åtkomsten till dataplanet, med stöd för Microsoft Entra-autentisering.

Exempel: Åtkomst till blobar med Microsoft Entra-ID

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

credential = DefaultAzureCredential()
client = BlobServiceClient(account_url="https://<account-name>.blob.core.windows.net", credential=credential)
containers = client.list_containers()
for container in containers:
    print(container.name)

Ersätt <account-name> med ditt Azure Storage-kontonamn.

Azure 密钥保管库

Använd RBAC i stället för äldre åtkomstprinciper för konsekvens. Åtkomstprinciper stöds fortfarande men rekommenderas inte.

Exempel: Hämta en hemlighet

from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient

credential = DefaultAzureCredential()
client = SecretClient(vault_url="https://<vault-name>.vault.azure.net", credential=credential)
secret = client.get_secret("my-secret")
print(secret.value)

Ersätt <vault-name> med ditt Key Vault-resursnamn.

Microsoft Graph

Använder OAuth 2.0-omfång för delegerade behörigheter och programbehörigheter för daemonappar. Ange omfång som du ser i det tidigare exemplet.

Metodtips

  • Minsta behörighet: Tilldela endast nödvändiga behörigheter, till exempel Läsare i stället för Deltagare.
  • Föredrar RBAC: Särskilt för Key Vault för enhetlig åtkomstkontroll.
  • Använd hanterade identiteter: Undvik att hantera autentiseringsuppgifter i kod.
  • Begränsa Graph-behörigheter: Begär specifika omfång för att minimera riskerna.

Nästa steg