Udostępnij za pośrednictwem


Integracja Azure Cosmos DB do Tabel z Service Connector

Na tej stronie przedstawiono obsługiwane metody uwierzytelniania i klientów oraz pokazano przykładowy kod, którego można użyć do połączenia usługi Azure Cosmos DB for Table z innymi usługami w chmurze przy użyciu łącznika usług. Nadal możesz nawiązać połączenie z usługą Azure Cosmos DB for Table w innych językach programowania bez używania łącznika usługi. Ta strona zawiera również domyślne nazwy zmiennych środowiskowych i wartości uzyskiwane podczas tworzenia połączenia z usługą.

Obsługiwane usługi obliczeniowe

Łącznik usługi może służyć do łączenia następujących usług obliczeniowych z usługą Azure Cosmos DB dla tabeli:

  • Azure App Service
  • Azure Container Apps (Aplikacje kontenerowe)
  • Azure Functions
  • Azure Kubernetes Service (AKS)
  • Azure Spring Apps

Obsługiwane typy uwierzytelniania i typy klientów

W poniższej tabeli pokazano, które kombinacje typów klientów i metod uwierzytelniania są obsługiwane do łączenia usługi obliczeniowej z usługą Azure Cosmos DB dla tabel przy użyciu łącznika usługi Service Connector. Wartość "Tak" wskazuje, że kombinacja jest obsługiwana, a wartość "Nie" wskazuje, że nie jest obsługiwana.

Typ klienta Tożsamość zarządzana przypisana przez system Tożsamość zarządzana przypisana przez użytkownika Sekret lub łańcuch połączenia Podmiot usługi
.NET Tak Tak Tak Tak
Java Tak Tak Tak Tak
Node.js Tak Tak Tak Tak
Python Tak Tak Tak Tak
Idź Tak Tak Tak Tak
None Tak Tak Tak Tak

Ta tabela wskazuje, że obsługiwane są wszystkie kombinacje typów klientów i metod uwierzytelniania w tabeli. Wszystkie typy klientów mogą używać dowolnej metody uwierzytelniania do nawiązywania połączenia z usługą Azure Cosmos DB dla tabel przy użyciu łącznika usługi.

Uwaga

Usługa Cosmos DB nie obsługuje natywnie uwierzytelniania za pośrednictwem tożsamości zarządzanej. W związku z tym łącznik usługi używa tożsamości zarządzanej do pobierania parametrów połączenia, a połączenie jest następnie ustanawiane przy użyciu tych parametrów połączenia.

Domyślne nazwy zmiennych środowiskowych lub właściwości aplikacji i przykładowy kod

Użyj poniższych szczegółów połączenia, aby połączyć usługi obliczeniowe z usługą Azure Cosmos DB dla tabeli. Dla każdego z poniższych przykładów zastąp teksty zastępcze <account-name>, <table-name>, <account-key>, <resource-group-name>, <subscription-ID>, <client-ID>, <client-secret> i <tenant-id> własnymi informacjami. Aby uzyskać więcej informacji na temat konwencji nazewnictwa, zapoznaj się z artykułem o wewnętrznych łącznikach usług.

Tożsamość zarządzana przypisana przez system

Domyślna nazwa zmiennej środowiskowej opis Przykładowa wartość
AZURE_COSMOS_LISTCONNECTIONSTRINGURL Adres URL umożliwiający pobranie parametry połączenia https://management.azure.com/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<table-name>/listConnectionStrings?api-version=2021-04-15
AZURE_COSMOS_SCOPE Zakres tożsamości zarządzanej https://management.azure.com/.default
AZURE_COSMOS_RESOURCEENDPOINT Punkt końcowy zasobu https://<table-name>.documents.azure.com:443/

Przykładowy kod

Zapoznaj się z poniższymi krokami i kodem, aby nawiązać połączenie z usługą Azure Cosmos DB dla tabeli przy użyciu tożsamości zarządzanej przypisanej przez system.

  1. Instalowanie zależności.
    dotnet add package Azure.Data.Tables
    dotnet add package Azure.Identity
    
  2. Uzyskaj token dostępu dla tożsamości zarządzanej lub jednostki usługi przy użyciu biblioteki klienta Azure.Identity. Użyj tokenu dostępu oraz AZURE_COSMOS_LISTCONNECTIONSTRINGURL, aby pobrać parametry połączenia. Pobierz informacje o połączeniu z zmiennych środowiskowych dodanych przez Service Connector i połącz się z usługą Azure Cosmos DB dla Table. Korzystając z poniższego kodu, odkomentuj fragment kodu dla typu uwierzytelniania, którego chcesz użyć.
    using System;
    using System.Security.Authentication;
    using System.Net.Security;
    using System.Net.Http;
    using System.Security.Authentication;
    using System.Threading.Tasks;
    using Azure.Data.Tables;
    using Azure.Identity;
    
    var endpoint = Environment.GetEnvironmentVariable("AZURE_COSMOS_RESOURCEENDPOINT");
    var listConnectionStringUrl = Environment.GetEnvironmentVariable("AZURE_COSMOS_LISTCONNECTIONSTRINGURL");
    var scope = Environment.GetEnvironmentVariable("AZURE_COSMOS_SCOPE");
    
    // Uncomment the following lines corresponding to the authentication type you want to use.
    // For system-assigned identity.
    // var tokenProvider = new DefaultAzureCredential();
    
    // For user-assigned identity.
    // var tokenProvider = new DefaultAzureCredential(
    //     new DefaultAzureCredentialOptions
    //     {
    //         ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTID");
    //     }
    // );
    
    // For service principal.
    // var tenantId = Environment.GetEnvironmentVariable("AZURE_COSMOS_TENANTID");
    // var clientId = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTID");
    // var clientSecret = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTSECRET");
    // var tokenProvider = new ClientSecretCredential(tenantId, clientId, clientSecret);
    
    // Acquire the access token. 
    AccessToken accessToken = await tokenProvider.GetTokenAsync(
        new TokenRequestContext(scopes: new string[]{ scope }));
    
    // Get the connection string.
    var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken.Token}");
    var response = await httpClient.POSTAsync(listConnectionStringUrl);
    var responseBody = await response.Content.ReadAsStringAsync();
    var connectionStrings = JsonConvert.DeserializeObject<Dictionary<string, List<Dictionary<string, string>>>(responseBody);
    var connectionString = connectionStrings["connectionStrings"].Find(connStr => connStr["description"] == "Primary Table Connection String")["connectionString"];
    
    // Connect to Azure Cosmos DB for Table
    TableServiceClient tableServiceClient = new TableServiceClient(connectionString);
    

Tożsamość zarządzana przypisana przez użytkownika

Domyślna nazwa zmiennej środowiskowej opis Przykładowa wartość
AZURE_COSMOS_LISTCONNECTIONSTRINGURL Adres URL umożliwiający pobranie ciągu połączenia https://management.azure.com/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<table-name>/listConnectionStrings?api-version=2021-04-15
AZURE_COSMOS_SCOPE Zakres zarządzanej tożsamości https://management.azure.com/.default
AZURE_COSMOS_CLIENTID Identyfikator tajny klienta <client-ID>
AZURE_COSMOS_RESOURCEENDPOINT Punkt końcowy zasobu https://<table-name>.documents.azure.com:443/

Przykładowy kod

Zapoznaj się z poniższymi krokami i kodem, aby nawiązać połączenie z usługą Azure Cosmos DB dla tabeli przy użyciu tożsamości zarządzanej przypisanej przez użytkownika.

Ponieważ usługa Cosmos DB nie obsługuje natywnie uwierzytelniania za pośrednictwem tożsamości zarządzanej, w poniższym przykładzie kodu używamy tożsamości zarządzanej do pobierania parametrów połączenia, a połączenie jest następnie ustanawiane przy użyciu tych parametrów połączenia.

  1. Instalowanie zależności.
    dotnet add package Azure.Data.Tables
    dotnet add package Azure.Identity
    
  2. Uzyskaj token dostępu dla tożsamości zarządzanej lub głównej usługi przy użyciu biblioteki klienta Azure.Identity. Użyj tokenu dostępu i AZURE_COSMOS_LISTCONNECTIONSTRINGURL, aby pobrać parametry połączenia. Uzyskaj informacje o połączeniu ze zmiennych środowiskowych dodanych przez łącznik usługi i połącz się z usługą Azure Cosmos DB dla tabeli. Korzystając z poniższego kodu, odkomentuj fragment kodu dla typu uwierzytelniania, którego chcesz użyć.
    using System;
    using System.Security.Authentication;
    using System.Net.Security;
    using System.Net.Http;
    using System.Security.Authentication;
    using System.Threading.Tasks;
    using Azure.Data.Tables;
    using Azure.Identity;
    
    var endpoint = Environment.GetEnvironmentVariable("AZURE_COSMOS_RESOURCEENDPOINT");
    var listConnectionStringUrl = Environment.GetEnvironmentVariable("AZURE_COSMOS_LISTCONNECTIONSTRINGURL");
    var scope = Environment.GetEnvironmentVariable("AZURE_COSMOS_SCOPE");
    
    // Uncomment the following lines corresponding to the authentication type you want to use.
    // For system-assigned identity.
    // var tokenProvider = new DefaultAzureCredential();
    
    // For user-assigned identity.
    // var tokenProvider = new DefaultAzureCredential(
    //     new DefaultAzureCredentialOptions
    //     {
    //         ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTID");
    //     }
    // );
    
    // For service principal.
    // var tenantId = Environment.GetEnvironmentVariable("AZURE_COSMOS_TENANTID");
    // var clientId = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTID");
    // var clientSecret = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTSECRET");
    // var tokenProvider = new ClientSecretCredential(tenantId, clientId, clientSecret);
    
    // Acquire the access token. 
    AccessToken accessToken = await tokenProvider.GetTokenAsync(
        new TokenRequestContext(scopes: new string[]{ scope }));
    
    // Get the connection string.
    var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken.Token}");
    var response = await httpClient.POSTAsync(listConnectionStringUrl);
    var responseBody = await response.Content.ReadAsStringAsync();
    var connectionStrings = JsonConvert.DeserializeObject<Dictionary<string, List<Dictionary<string, string>>>(responseBody);
    var connectionString = connectionStrings["connectionStrings"].Find(connStr => connStr["description"] == "Primary Table Connection String")["connectionString"];
    
    // Connect to Azure Cosmos DB for Table
    TableServiceClient tableServiceClient = new TableServiceClient(connectionString);
    

Ciąg połączenia

Domyślna nazwa zmiennej środowiskowej opis Przykładowa wartość
AZURE_COSMOS_CONNECTIONSTRING Azure Cosmos DB do ciągu połączeniowego dla tabeli DefaultEndpointsProtocol=https;AccountName=<account-name>;AccountKey=<account-key>;TableEndpoint=https://<table-name>.table.cosmos.azure.com:443/;

Ostrzeżenie

Firma Microsoft zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Przepływ uwierzytelniania opisany w tej procedurze wymaga bardzo wysokiego poziomu zaufania w aplikacji i niesie ze sobą ryzyko, które nie występują w innych przepływach. Tego przepływu należy używać tylko wtedy, gdy inne bezpieczniejsze przepływy, takie jak tożsamości zarządzane, nie są opłacalne.

Przykładowy kod

Zapoznaj się z poniższymi krokami i kodem, aby nawiązać połączenie z usługą Azure Cosmos DB for Table przy użyciu ciągu połączenia.

Ponieważ usługa Cosmos DB nie obsługuje natywnie uwierzytelniania za pośrednictwem tożsamości zarządzanej, w poniższym przykładzie kodu używamy tożsamości zarządzanej do pobierania parametrów połączenia, a połączenie jest następnie ustanawiane przy użyciu tych parametrów połączenia.

  1. Zainstaluj zależność.

    dotnet add package Azure.Data.Tables
    
  2. Pobierz parametry połączenia ze zmiennej środowiskowej dodanej przez łącznik usługi.

    using Azure.Data.Tables;
    using System; 
    
    TableServiceClient tableServiceClient = new TableServiceClient(Environment.GetEnvironmentVariable("AZURE_COSMOS_CONNECTIONSTRING"));
    

Jednostka usługi

Domyślna nazwa zmiennej środowiskowej opis Przykładowa wartość
AZURE_COSMOS_LISTCONNECTIONSTRINGURL Adres URL do uzyskania parametrów połączenia https://management.azure.com/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<table-name>/listConnectionStrings?api-version=2021-04-15
AZURE_COSMOS_SCOPE Zakres tożsamości zarządzanej https://management.azure.com/.default
AZURE_COSMOS_CLIENTID Tajny identyfikator klienta <client-ID>
AZURE_COSMOS_CLIENTSECRET Tajny klucz klienta <client-secret>
AZURE_COSMOS_TENANTID Identyfikator klienta <tenant-ID>
AZURE_COSMOS_RESOURCEENDPOINT Punkt końcowy zasobu https://<table-name>.documents.azure.com:443/

Przykładowy kod

Zapoznaj się z poniższymi krokami i kodem, aby nawiązać połączenie z usługą Azure Cosmos DB for Table przy użyciu jednostki usługi.

  1. Instalowanie zależności.
    dotnet add package Azure.Data.Tables
    dotnet add package Azure.Identity
    
  2. Uzyskaj token dostępu dla tożsamości zarządzanej lub głównego elementu usługi przy użyciu biblioteki klienta Azure.Identity. Użyj tokenu dostępu i AZURE_COSMOS_LISTCONNECTIONSTRINGURL, aby uzyskać parametry połączenia. Uzyskaj informacje o połączeniu ze zmiennych środowiskowych dodanych przez Service Connector i połącz się z Azure Cosmos DB dla usługi Tabel. Korzystając z poniższego kodu, usuń komentarz z części fragmentu kodu dla typu uwierzytelniania, którego chcesz użyć.
    using System;
    using System.Security.Authentication;
    using System.Net.Security;
    using System.Net.Http;
    using System.Security.Authentication;
    using System.Threading.Tasks;
    using Azure.Data.Tables;
    using Azure.Identity;
    
    var endpoint = Environment.GetEnvironmentVariable("AZURE_COSMOS_RESOURCEENDPOINT");
    var listConnectionStringUrl = Environment.GetEnvironmentVariable("AZURE_COSMOS_LISTCONNECTIONSTRINGURL");
    var scope = Environment.GetEnvironmentVariable("AZURE_COSMOS_SCOPE");
    
    // Uncomment the following lines corresponding to the authentication type you want to use.
    // For system-assigned identity.
    // var tokenProvider = new DefaultAzureCredential();
    
    // For user-assigned identity.
    // var tokenProvider = new DefaultAzureCredential(
    //     new DefaultAzureCredentialOptions
    //     {
    //         ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTID");
    //     }
    // );
    
    // For service principal.
    // var tenantId = Environment.GetEnvironmentVariable("AZURE_COSMOS_TENANTID");
    // var clientId = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTID");
    // var clientSecret = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTSECRET");
    // var tokenProvider = new ClientSecretCredential(tenantId, clientId, clientSecret);
    
    // Acquire the access token. 
    AccessToken accessToken = await tokenProvider.GetTokenAsync(
        new TokenRequestContext(scopes: new string[]{ scope }));
    
    // Get the connection string.
    var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken.Token}");
    var response = await httpClient.POSTAsync(listConnectionStringUrl);
    var responseBody = await response.Content.ReadAsStringAsync();
    var connectionStrings = JsonConvert.DeserializeObject<Dictionary<string, List<Dictionary<string, string>>>(responseBody);
    var connectionString = connectionStrings["connectionStrings"].Find(connStr => connStr["description"] == "Primary Table Connection String")["connectionString"];
    
    // Connect to Azure Cosmos DB for Table
    TableServiceClient tableServiceClient = new TableServiceClient(connectionString);
    

Następne kroki

Zapoznaj się z samouczkami wymienionymi poniżej, aby dowiedzieć się więcej o Service Connector.