Autentisera klienter för onlineslutpunkter

GÄLLER FÖR:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (aktuell)

Den här artikeln beskriver hur du autentiserar klienter för att utföra kontrollplans- och dataplansåtgärder på onlineslutpunkter.

En kontrollplansåtgärd styr en slutpunkt och ändrar den. Kontrollplansåtgärder omfattar åtgärder för att skapa, läsa, uppdatera och ta bort (CRUD) på onlineslutpunkter och onlinedistributioner.

En dataplansåtgärd använder data för att interagera med en onlineslutpunkt utan att ändra slutpunkten. En dataplansåtgärd kan till exempel bestå av att skicka en bedömningsbegäran till en onlineslutpunkt och få ett svar.

Förutsättningar

Innan du följer stegen i den här artikeln kontrollerar du att du har följande förutsättningar:

Förbereda en användaridentitet

Du behöver en användaridentitet för att utföra kontrollplansåtgärder (d.v.s. CRUD-åtgärder) och dataplansåtgärder (dvs. skicka bedömningsbegäranden) på onlineslutpunkten. Du kan använda samma användaridentitet eller olika användaridentiteter för kontrollplanets och dataplanets åtgärder. I den här artikeln använder du samma användaridentitet för både kontrollplans- och dataplansåtgärder.

Information om hur du skapar en användaridentitet under Microsoft Entra-ID finns i Konfigurera autentisering. Du behöver identitets-ID senare.

Tilldela behörigheter till identiteten

I det här avsnittet tilldelar du behörigheter till den användaridentitet som du använder för att interagera med slutpunkten. Du börjar med att antingen använda en inbyggd roll eller genom att skapa en anpassad roll. Därefter tilldelar du rollen till din användaridentitet.

Använda en inbyggd roll

Den AzureML Data Scientist inbyggda rollen kan användas för att hantera och använda slutpunkter och distributioner och den använder jokertecken för att inkludera följande RBAC-åtgärder för kontrollplanet :

  • Microsoft.MachineLearningServices/workspaces/onlineEndpoints/write
  • Microsoft.MachineLearningServices/workspaces/onlineEndpoints/delete
  • Microsoft.MachineLearningServices/workspaces/onlineEndpoints/read
  • Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/action
  • Microsoft.MachineLearningServices/workspaces/onlineEndpoints/listKeys/action
  • Microsoft.MachineLearningServices/workspaces/onlineEndpoints/regenerateKeys/action

och för att inkludera följande RBAC-åtgärd för dataplanet :

  • Microsoft.MachineLearningServices/workspaces/onlineEndpoints/score/action

Du kan också använda den Azure Machine Learning Workspace Connection Secrets Reader inbyggda rollen för att komma åt hemligheter från arbetsyteanslutningar och den innehåller följande RBAC-åtgärder för kontrollplanet :

  • Microsoft.MachineLearningServices/workspaces/connections/listsecrets/action
  • Microsoft.MachineLearningServices/workspaces/metadata/secrets/read

Om du använder de här inbyggda rollerna behövs ingen åtgärd i det här steget.

(Valfritt) Skapa en anpassad roll

Du kan hoppa över det här steget om du använder inbyggda roller eller andra färdiga anpassade roller.

  1. Definiera omfånget och åtgärderna för anpassade roller genom att skapa JSON-definitioner av rollerna. Med följande rolldefinition kan användaren till exempel CRUD en onlineslutpunkt under en angiven arbetsyta.

    custom-role-for-control-plane.json:

    {
        "Name": "Custom role for control plane operations - online endpoint",
        "IsCustom": true,
        "Description": "Can CRUD against online endpoints.",
        "Actions": [
            "Microsoft.MachineLearningServices/workspaces/onlineEndpoints/write",
            "Microsoft.MachineLearningServices/workspaces/onlineEndpoints/delete",
            "Microsoft.MachineLearningServices/workspaces/onlineEndpoints/read",
            "Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/action",
            "Microsoft.MachineLearningServices/workspaces/onlineEndpoints/listKeys/action",
            "Microsoft.MachineLearningServices/workspaces/onlineEndpoints/regenerateKeys/action"
        ],
        "NotActions": [
        ],
        "AssignableScopes": [
            "/subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>"
        ]
    }
    

    Med följande rolldefinition kan användaren skicka bedömningsbegäranden till en onlineslutpunkt under en angiven arbetsyta.

    custom-role-for-scoring.json:

    {
        "Name": "Custom role for scoring - online endpoint",
        "IsCustom": true,
        "Description": "Can score against online endpoints.",
        "Actions": [
            "Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*/action"
        ],
        "NotActions": [
        ],
        "AssignableScopes": [
            "/subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>"
        ]
    }
    
  2. Använd JSON-definitionerna för att skapa anpassade roller:

    az role definition create --role-definition custom-role-for-control-plane.json --subscription <subscriptionId>
    
    az role definition create --role-definition custom-role-for-scoring.json --subscription <subscriptionId>
    

    Kommentar

    Om du vill skapa anpassade roller behöver du en av tre roller:

    • ägare
    • administratör för användaråtkomst
    • en anpassad roll med Microsoft.Authorization/roleDefinitions/write behörighet (för att skapa/uppdatera/ta bort anpassade roller) och Microsoft.Authorization/roleDefinitions/read behörighet (för att visa anpassade roller).

    Mer information om hur du skapar anpassade roller finns i Anpassade Azure-roller.

  3. Verifiera rolldefinitionen:

    az role definition list --custom-role-only -o table
    
    az role definition list -n "Custom role for control plane operations - online endpoint"
    az role definition list -n "Custom role for scoring - online endpoint"
    
    export role_definition_id1=`(az role definition list -n "Custom role for control plane operations - online endpoint" --query "[0].id" | tr -d '"')`
    
    export role_definition_id2=`(az role definition list -n "Custom role for scoring - online endpoint" --query "[0].id" | tr -d '"')`
    

Tilldela rollen till identiteten

  1. Om du använder den AzureML Data Scientist inbyggda rollen använder du följande kod för att tilldela rollen till din användaridentitet.

    az role assignment create --assignee <identityId> --role "AzureML Data Scientist" --scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>
    
  2. Om du använder den Azure Machine Learning Workspace Connection Secrets Reader inbyggda rollen kan du använda följande kod för att tilldela rollen till din användaridentitet.

    az role assignment create --assignee <identityId> --role "Azure Machine Learning Workspace Connection Secrets Reader" --scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>
    
  3. Om du använder en anpassad roll använder du följande kod för att tilldela rollen till din användaridentitet.

    az role assignment create --assignee <identityId> --role "Custom role for control plane operations - online endpoint" --scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>
    
    az role assignment create --assignee <identityId> --role "Custom role for scoring - online endpoint" --scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>
    

    Kommentar

    Om du vill tilldela anpassade roller till användaridentiteten behöver du en av tre roller:

    • ägare
    • administratör för användaråtkomst
    • en anpassad roll som tillåter Microsoft.Authorization/roleAssignments/write behörighet (för att tilldela anpassade roller) och Microsoft.Authorization/roleAssignments/read (för att visa rolltilldelningar).

    Mer information om de olika Azure-rollerna och deras behörigheter finns i Azure-roller och Tilldela Azure-roller med Hjälp av Azure-portalen.

  4. Bekräfta rolltilldelningen:

    az role assignment list --scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>
    

Hämta Microsoft Entra-token för kontrollplansåtgärder

Utför det här steget om du planerar att utföra kontrollplansåtgärder med REST API, som använder token direkt.

Om du planerar att använda andra sätt som Azure Mašinsko učenje CLI (v2), Python SDK (v2) eller Azure Mašinsko učenje Studio behöver du inte hämta Microsoft Entra-token manuellt. I stället skulle användaridentiteten redan autentiseras under inloggningen och token hämtas och skickas automatiskt åt dig.

Du kan hämta Microsoft Entra-token för kontrollplansåtgärder från Azure-resursslutpunkten: https://management.azure.com.

  1. Logga in på Azure.

    az login
    
  2. Om du vill använda en specifik identitet använder du följande kod för att logga in med identiteten:

    az login --identity --username <identityId>
    
  3. Använd den här kontexten för att hämta token.

    export CONTROL_PLANE_TOKEN=`(az account get-access-token --resource https://management.azure.com --query accessToken | tr -d '"')`
    

(Valfritt) Verifiera resursslutpunkten och klient-ID:t för Microsoft Entra-token

När du har hämtat Microsoft Entra-token kan du kontrollera att token är för rätt Azure-resursslutpunkt management.azure.com och rätt klient-ID genom att avkoda token via jwt.ms, vilket returnerar ett json-svar med följande information:

{
    "aud": "https://management.azure.com",
    "oid": "<your-object-id>"
}

Skapa en slutpunkt

I följande exempel skapas slutpunkten med en systemtilldelad identitet (SAI) som slutpunktsidentitet. SAI är standardidentitetstypen för den hanterade identiteten för slutpunkter. Vissa grundläggande roller tilldelas automatiskt för SAI. Mer information om rolltilldelning för en systemtilldelad identitet finns i Automatisk rolltilldelning för slutpunktsidentitet.

CLI kräver inte att du uttryckligen anger kontrollplanstoken. I stället autentiserar CLI az login dig under inloggningen och token hämtas och skickas automatiskt åt dig.

  1. Skapa en YAML-fil för slutpunktsdefinition.

    endpoint.yml:

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
    name: my-endpoint
    auth_mode: aad_token
    
  2. Du kan ersätta auth_mode med key för nyckelautentisering eller aml_token för Azure Mašinsko učenje tokenautentisering. I det här exemplet använder aad_token du för Microsoft Entra-tokenautentisering.

    az ml online-endpoint create -f endpoint.yml
    
  3. Kontrollera slutpunktens status:

    az ml online-endpoint show -n my-endpoint
    
  4. Om du vill åsidosätta auth_mode (till exempel till aad_token) när du skapar en slutpunkt kör du följande kod:

    az ml online-endpoint create -n my-endpoint --auth_mode aad_token
    
  5. Om du vill uppdatera den befintliga slutpunkten och ange auth_mode (till exempel till aad_token) kör du följande kod:

    az ml online-endpoint update -n my-endpoint --set auth_mode=aad_token
    

Skapa en distribution

Information om hur du skapar en distribution finns i Distribuera en ML-modell med en onlineslutpunkt eller Använd REST för att distribuera en modell som en onlineslutpunkt. Det finns ingen skillnad i hur du skapar distributioner för olika autentiseringslägen.

Följande kod är ett exempel på hur du skapar en distribution. Mer information om hur du distribuerar onlineslutpunkter finns i Distribuera en ML-modell med en onlineslutpunkt (via CLI)

  1. Skapa en YAML-fil för distributionsdefinition.

    blue-deployment.yml:

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
    name: blue
    endpoint_name: my-aad-auth-endp1
    model:
      path: ../../model-1/model/
    code_configuration:
      code: ../../model-1/onlinescoring/
      scoring_script: score.py
    environment: 
      conda_file: ../../model-1/environment/conda.yml
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
    instance_type: Standard_DS3_v2
    instance_count: 1
    
  2. Skapa distributionen med YAML-filen. I det här exemplet anger du all trafik till den nya distributionen.

    az ml online-deployment create -f blue-deployment.yml --all-traffic
    

Hämta bedömnings-URI:n för slutpunkten

Om du planerar att använda CLI för att anropa slutpunkten behöver du inte hämta bedömnings-URI:n explicit, eftersom CLI hanterar den åt dig. Du kan dock fortfarande använda CLI för att hämta bedömnings-URI:n så att du kan använda den med andra kanaler, till exempel REST API.

scoringUri=$(az ml online-endpoint show -n my-endpoint --query "scoring_uri")

Hämta nyckeln eller token för dataplansåtgärder

En nyckel eller token kan användas för dataplansåtgärder, även om processen med att hämta nyckeln eller token är en kontrollplansåtgärd. Med andra ord använder du en kontrollplanstoken för att hämta nyckeln eller token som du senare använder för att utföra dina dataplansåtgärder.

För att hämta nyckeln eller Azure Mašinsko učenje token krävs att rätt roll tilldelas till användaridentiteten som begär den, enligt beskrivningen i auktorisering för kontrollplansåtgärder. För att hämta Microsoft Entra-token krävs inga extra roller för användaridentiteten.

Om du planerar att använda CLI för att anropa slutpunkten behöver du inte hämta nycklarna eller token för dataplansåtgärder uttryckligen, eftersom CLI hanterar den åt dig. Du kan dock fortfarande använda CLI för att hämta nycklar eller token för dataplansåtgärd så att du kan använda den med andra kanaler, till exempel REST API.

Om du vill hämta nycklar eller token för dataplansåtgärder använder du kommandot az ml online-endpoint get-credentials . Det här kommandot returnerar ett JSON-utdata som innehåller nycklar, token och/eller ytterligare information.

Dricks

Om du vill extrahera en specifik information från JSON-utdata används parametern --query för CLI-kommandot som ett exempel. Du kan dock använda alla lämpliga verktyg för detta ändamål.

När auth_mode slutpunkten är key

  • Nycklar returneras i fälten primaryKey och secondaryKey .
export DATA_PLANE_TOKEN=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query primaryKey)
export DATA_PLANE_TOKEN2=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query secondaryKey)

När auth_mode slutpunkten är aml_token

  • Token returneras i fältet accessToken .
  • Förfallotiden för token returneras i fältet expiryTimeUtc .
  • Uppdateringstiden för token returneras i fältet refreshAfterTimeUtc .
export DATA_PLANE_TOKEN=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query accessToken)
export EXPIRY_TIME_UTC=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query expiryTimeUtc)
export REFRESH_AFTER_TIME_UTC=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query refreshAfterTimeUtc)

När auth_mode slutpunkten är aad_token

  • Token returneras i fältet accessToken .
  • Förfallotiden för token returneras i fältet expiryTimeUtc .
export DATA_PLANE_TOKEN=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query accessToken)
export EXPIRY_TIME_UTC=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -g $RESOURCE_GROUP -w $WORKSPACE_NAME -o tsv --query expiryTimeUtc)

Verifiera resursslutpunkten och klient-ID:t för Microsoft Entra-token

När du har hämtat Entra-token kan du kontrollera att token är för rätt Azure-resursslutpunkt ml.azure.com och rätt klient-ID genom att avkoda token via jwt.ms, vilket returnerar ett json-svar med följande information:

{
    "aud": "https://ml.azure.com",
    "oid": "<your-object-id>"
}

Poängsätta data med hjälp av nyckeln eller token

Du kan använda az ml online-endpoint invoke för slutpunkter med en nyckel, en Azure Mašinsko učenje-token eller en Microsoft Entra-token. CLI hanterar nyckeln eller token automatiskt så att du inte behöver skicka den explicit.

az ml online-endpoint invoke -n my-endpoint -r request.json

Logga och övervaka trafik

Om du vill aktivera trafikloggning i diagnostikinställningarna för slutpunkten följer du stegen i Aktivera/inaktivera loggar.

Om diagnostikinställningen är aktiverad kan du kontrollera AmlOnlineEndpointTrafficLogs tabellen för att se autentiseringsläget och användaridentiteten.