Dela via


Ansluta till Azure Cosmos DB med hjälp av en hanterad identitet (Azure AI Search)

Den här artikeln beskriver hur du konfigurerar en indexeraranslutning till en Azure Cosmos DB-databas med hjälp av en hanterad identitet i stället för att ange autentiseringsuppgifter i anslutningssträng."

Du kan använda en systemtilldelad hanterad identitet eller en användartilldelad hanterad identitet. Hanterade identiteter är Microsoft Entra-inloggningar och kräver Azure-rolltilldelningar för åtkomst till data i Azure Cosmos DB.

Förutsättningar

Begränsningar

Indexerarens stöd för Azure Cosmos DB för Gremlin- och MongoDB-samlingar är för närvarande i förhandsversion. För närvarande kräver en förhandsgranskningsbegränsning att Azure AI Search ansluter med hjälp av nycklar. Du kan fortfarande konfigurera en hanterad identitet och rolltilldelning, men Azure AI Search använder bara rolltilldelningen för att hämta nycklar för anslutningen. Den här begränsningen innebär att du inte kan konfigurera en rollbaserad metod om indexerarna ansluter till Gremlin eller MongoDB.

Skapa en rolltilldelning i Azure Cosmos DB

  1. Logga in för att Azure Portal och hitta ditt Cosmos DB för NoSQL-konto.

  2. Välj Åtkomstkontroll (IAM) .

  3. Välj Lägg till och välj sedan Rolltilldelning.

  4. I listan över jobbfunktionsroller väljer du Cosmos DB-kontoläsare.

  5. Välj Nästa.

  6. Välj Hanterad identitet och välj sedan Medlemmar.

  7. Filtrera efter systemtilldelade hanterade identiteter eller användartilldelade hanterade identiteter. Du bör se den hanterade identitet som du skapade tidigare för söktjänsten. Om du inte har någon kan du läsa Konfigurera sökning för att använda en hanterad identitet. Om du redan har konfigurerat en, men den inte är tillgänglig, kan du ge den några minuter.

  8. Välj identiteten och spara rolltilldelningen.

Mer information finns i Konfigurera rollbaserad åtkomstkontroll med Microsoft Entra-ID för ditt Azure Cosmos DB-konto.

Ange en hanterad identitet i en anslutningssträng

När du har en rolltilldelning kan du konfigurera en anslutning till Azure Cosmos DB för NoSQL som fungerar under den rollen.

Indexerare använder ett datakällaobjekt för anslutningar till en extern datakälla. I det här avsnittet beskrivs hur du anger en systemtilldelad hanterad identitet eller en användartilldelad hanterad identitet på en datakälla anslutningssträng. Du hittar fler anslutningssträng exempel i artikeln hanterad identitet.

Dricks

Du kan skapa en datakällaanslutning till CosmosDB i Azure Portal, ange antingen en system- eller användartilldelad hanterad identitet och sedan visa JSON-definitionen för att se hur anslutningssträng formuleras.

Systemtilldelad hanterad identitet

REST API, Azure Portal och .NET SDK stöder med hjälp av en systemtilldelad hanterad identitet.

När du ansluter med en systemtilldelad hanterad identitet är den enda ändringen av datakällans definition formatet för egenskapen "autentiseringsuppgifter". Ange ett databasnamn och ett ResourceId som inte har någon kontonyckel eller lösenord. ResourceId måste innehålla prenumerations-ID för Azure Cosmos DB, resursgruppen och Azure Cosmos DB-kontonamnet.

  • För SQL-samlingar kräver anslutningssträng inte "ApiKind".
  • För SQL-samlingar lägger du till "IdentityAuthType=AccessToken" om rollbaserad åtkomst tillämpas som den enda autentiseringsmetoden. Det är inte tillämpligt för MongoDB- och Gremlin-samlingar.
  • För MongoDB-samlingar lägger du till "ApiKind=MongoDb" i anslutningssträng och använder ett REST API för förhandsversion.
  • För Gremlin-grafer lägger du till "ApiKind=Gremlin" i anslutningssträng och använder ett REST API för förhandsversion.

Här är ett exempel på hur du skapar en datakälla för att indexera data från ett Cosmos DB-konto med hjälp av REST-API:et Skapa datakälla och en hanterad identitet anslutningssträng. Den hanterade identiteten anslutningssträng format är samma för REST API, .NET SDK och Azure Portal.

POST https://[service name].search.windows.net/datasources?api-version=2024-07-01
{
    "name": "my-cosmosdb-ds",
    "type": "cosmosdb",
    "credentials": {
        "connectionString": "ResourceId=/subscriptions/[subscription-id]/resourceGroups/[rg-name]/providers/Microsoft.DocumentDB/databaseAccounts/[cosmos-account-name];Database=[cosmos-database];ApiKind=SQL;IdentityAuthType=[AccessToken | AccountKey]"
    },
    "container": { "name": "[my-cosmos-collection]", "query": null },
    "dataChangeDetectionPolicy": null

 
}

Användartilldelad hanterad identitet

När du ansluter med en användartilldelad hanterad identitet finns det två ändringar i datakällans definition:

  • Först är formatet för egenskapen "autentiseringsuppgifter" databasnamnet och ett ResourceId som inte har någon kontonyckel eller lösenord. ResourceId måste innehålla prenumerations-ID för Azure Cosmos DB, resursgruppen och Azure Cosmos DB-kontonamnet.

    • För SQL-samlingar kräver anslutningssträng inte "ApiKind".
    • För SQL-samlingar lägger du till "IdentityAuthType=AccessToken" om rollbaserad åtkomst tillämpas som den enda autentiseringsmetoden. Det är inte tillämpligt för MongoDB- och Gremlin-samlingar.
    • För MongoDB-samlingar lägger du till "ApiKind=MongoDb" i anslutningssträng
    • För Gremlin-grafer lägger du till "ApiKind=Gremlin" i anslutningssträng.
  • För det andra lägger du till en "identitetsegenskap" som innehåller samlingen med användartilldelade hanterade identiteter. Endast en användartilldelad hanterad identitet ska anges när datakällan skapas. Ange att den ska skriva "userAssignedIdentities".

Här är ett exempel på hur du skapar ett indexerardatakällans objekt med hjälp av REST-API:et.

POST https://[service name].search.windows.net/datasources?api-version=2024-07-01

{
    "name": "[my-cosmosdb-ds]",
    "type": "cosmosdb",
    "credentials": {
        "connectionString": "ResourceId=/subscriptions/[subscription-id]/resourceGroups/[rg-name]/providers/Microsoft.DocumentDB/databaseAccounts/[cosmos-account-name];Database=[cosmos-database];ApiKind=SQL;IdentityAuthType=[AccessToken | AccountKey]"
    },
    "container": { 
        "name": "[my-cosmos-collection]", "query": null 
    },
    "identity" : { 
        "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
        "userAssignedIdentity": "/subscriptions/[subscription-id]/resourcegroups/[rg-name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[my-user-managed-identity-name]" 
    },
    "dataChangeDetectionPolicy": null
}

Anslutningsinformation och behörigheter för fjärrtjänsten verifieras vid körning under indexeringskörningen. Om indexeraren lyckas är anslutningssyntaxen och rolltilldelningarna giltiga. Mer information finns i Köra eller återställa indexerare, färdigheter eller dokument.

Felsökning

För Azure Cosmos DB för NoSQL kontrollerar du om kontot har begränsad åtkomst till utvalda nätverk. Du kan utesluta eventuella brandväggsproblem genom att prova anslutningen utan begränsningar.

Om du nyligen roterade dina Azure Cosmos DB-kontonycklar för Gremlin eller MongoDB måste du vänta upp till 15 minuter på att den hanterade identiteten anslutningssträng ska fungera.

Se även