Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Cosmos DB in Microsoft Fabric si basa esclusivamente sull'autenticazione di Microsoft Entra ID e sui ruoli predefiniti del piano dati per gestire l'autenticazione e l'autorizzazione. In questa guida, utilizzerai l'ID Microsoft Entra e l'account con cui sei connesso per collegarti a un artefatto di Cosmos DB in Microsoft Fabric.
Prerequisiti
Una capacità di Fabric esistente
- Se non si ha capacità di Fabric, attivare una versione di prova di Fabric.
Un database Cosmos DB esistente in Fabric
- Se non ne è già disponibile uno, creare un nuovo database Cosmos DB in Fabric.
Identità con l'autorizzazione lettura per il database in Fabric
- Per altre informazioni sulle autorizzazioni di Infrastruttura, vedere Controlli di accesso.
Recuperare l'endpoint di Cosmos DB
Ottenere prima di tutto l'endpoint per il database Cosmos DB in Fabric. Questo endpoint è necessario per connettersi usando Azure SDK.
Apri il portale Fabric (https://app.fabric.microsoft.com).
Navigare al database Cosmos DB esistente.
Selezionare l'opzione Impostazioni nella barra dei menu per il database.
Nella finestra di dialogo impostazioni passare alla sezione Connessione . Copia poi il valore del campo Endpoint del database NoSQL per Cosmos DB. Questo valore viene usato nei passaggi successivi.
Eseguire l'autenticazione da un notebook
I notebook di Fabric non hanno un modo per creare un oggetto credenziali di Azure valido usato dai servizi di Azure. Gli utenti eseguono l'autenticazione usando le utilità delle credenziali di Fabric NotebookUtils che richiedono l'ambito di autenticazione per Cosmos DB e producono un token in formato stringa. Questo richiede codice personalizzato per creare un oggetto credenziali di Azure valido.
Ecco un esempio di notebook che illustra come eseguire questa operazione.
Cella [1]:
#Install packages
%pip install azure-cosmos
Cella [2]:
#Imports and config values
import logging
from azure.cosmos.aio import CosmosClient
from azure.cosmos.exceptions import CosmosHttpResponseError
COSMOS_ENDPOINT = 'https://my-cosmos-endpoint.cosmos.fabric.microsoft.com:443/'
COSMOS_DATABASE_NAME = '{your-cosmos-artifact-name}'
COSMOS_CONTAINER_NAME = '{your-container-name}'
Il contenuto di Cell 3 crea un oggetto FabricTokenCredential() e contiene il codice necessario per produrre un oggetto credenziale valido per Cosmos DB SDK dalla stringa di token generata dalle utilità credenziali NotebookUtils di Fabric necessarie per autenticare un utente.
Cella [3]:
# Custom TokenCredential implementation for Fabric authentication in a notebook
%pip install azure-core
from azure.core.credentials import TokenCredential, AccessToken
import base64
import json
import notebookutils
from datetime import datetime, timezone
class FabricTokenCredential(TokenCredential):
def get_token(self, *scopes: str, claims: Optional[str] = None, tenant_id: Optional[str] = None,
enable_cae: bool = False, **kwargs: Any) -> AccessToken:
access_token = notebookutils.credentials.getToken("https://cosmos.azure.com/")
parts = access_token.split(".")
if len(parts) < 2:
raise ValueError("Invalid JWT format")
payload_b64 = parts[1]
# Fix padding
padding = (-len(payload_b64)) % 4
if padding:
payload_b64 += "=" * padding
payload_json = base64.urlsafe_b64decode(payload_b64.encode("utf-8")).decode("utf-8")
payload = json.loads(payload_json)
exp = payload.get("exp")
if exp is None:
raise ValueError("exp claim missing in token")
return AccessToken(token=access_token, expires_on=exp)
Cella [4]:
# Create a Cosmos client with the FabricTokenCredential() and run a query
async with CosmosClient(endpoint, credential=FabricTokenCredential()) as client:
container = client.get_database_client(COSMOS_DATABASE_NAME).get_container_client(COSMOS_CONTAINER_NAME)
query_text = "SELECT * FROM c"
results = container.query_items(query=query_text)
items = []
async for item in results:
items.append(item)
for item in items:
print(item)