Delen via


Azure Cosmos DB voor Cassandra integreren met Service Connector

Op deze pagina ziet u ondersteunde verificatiemethoden en -clients en ziet u voorbeeldcode die u kunt gebruiken om Azure Cosmos DB voor Apache Cassandra te verbinden met andere cloudservices met behulp van serviceconnector. Mogelijk kunt u nog steeds verbinding maken met Azure Cosmos DB voor Cassandra in andere programmeertalen zonder serviceconnector te gebruiken. Op deze pagina ziet u ook de standaardnamen en waarden van omgevingsvariabelen (of Spring Boot-configuratie) die u krijgt wanneer u de serviceverbinding maakt.

Ondersteunde rekenservices

Serviceconnector kan worden gebruikt om de volgende rekenservices te verbinden met Azure Cosmos DB voor Apache Cassandra:

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

Ondersteunde verificatietypen en clienttypen

In de onderstaande tabel ziet u welke combinaties van clienttypen en verificatiemethoden worden ondersteund voor het verbinden van uw rekenservice met Azure Cosmos DB voor Apache Cassandra met behulp van serviceconnector. Een 'Ja' geeft aan dat de combinatie wordt ondersteund, terwijl een 'Nee' aangeeft dat deze niet wordt ondersteund.

Client-type Door het systeem toegewezen beheerde identiteit Door de gebruiker toegewezen beheerde identiteit Geheim/verbindingsreeks Service-principal
.NET Ja Ja Ja Ja
Go Ja Ja Ja Ja
Java Ja Ja Ja Ja
Java - Spring Boot Nee No Ja Nr.
Node.js Ja Ja Ja Ja
Python Ja Ja Ja Ja
Geen Ja Ja Ja Ja

Deze tabel geeft aan dat alle combinaties van clienttypen en verificatiemethoden in de tabel worden ondersteund, met uitzondering van het Java - Spring Boot-clienttype, dat alleen de methode Secret/verbindingsreeks ondersteunt. Alle andere clienttypen kunnen elk van de verificatiemethoden gebruiken om verbinding te maken met Azure Cosmos DB voor Apache Cassandra met behulp van serviceconnector.

Namen van standaardomgevingsvariabelen of toepassingseigenschappen en voorbeeldcode

Raadpleeg de verbindingsgegevens en voorbeeldcode in de volgende tabellen, afhankelijk van het verificatietype en het clienttype van uw verbinding, om uw rekenservices te verbinden met Azure Cosmos DB voor Apache Cassandra. Raadpleeg het artikel Over interne serviceconnector voor meer informatie over naamconventies .

Door het systeem toegewezen beheerde identiteit

Naam van standaardomgevingsvariabele Beschrijving Voorbeeldwaarde
AZURE_COSMOS_LISTKEYURL De URL voor het ophalen van de verbindingsreeks https://management.azure.com/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<Azure-Cosmos-DB-account>/listKeys?api-version=2021-04-15
AZURE_COSMOS_SCOPE Het bereik van uw beheerde identiteit https://management.azure.com/.default
AZURE_COSMOS_RESOURCEENDPOINT Uw resource-eindpunt https://<Azure-Cosmos-DB-account>.documents.azure.com:443/
AZURE_COSMOS_CONTACTPOINT Azure Cosmos DB voor Apache Cassandra-contactpunt <Azure-Cosmos-DB-account>.cassandra.cosmos.azure.com
AZURE_COSMOS_PORT Cassandra-verbindingspoort 10350
AZURE_COSMOS_KEYSPACE Cassandra-keyspace <keyspace>
AZURE_COSMOS_USERNAME Cassandra-gebruikersnaam <username>

Voorbeeldcode

Raadpleeg de stappen en code hieronder om verbinding te maken met Azure Cosmos DB voor Cassandra met behulp van een door het systeem toegewezen beheerde identiteit.

  1. Afhankelijkheden installeren

    dotnet add package CassandraCSharpDriver --version 3.19.3
    dotnet add package Azure.Identity
    
  2. Haal een toegangstoken op voor de beheerde identiteit of service-principal met behulp van de clientbibliotheek Azure.Identity. Gebruik het toegangstoken en AZURE_COSMOS_LISTKEYURL haal het wachtwoord op. Haal de verbindingsgegevens op uit de omgevingsvariabelen die zijn toegevoegd door Service Connector en maak verbinding met Azure Cosmos DB voor Cassandra. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.

    using System;
    using System.Security.Authentication;
    using System.Net.Security;
    using System.Net.Http;
    using System.Security.Authentication;
    using System.Security.Cryptography.X509Certificates;
    using System.Threading.Tasks;
    using Cassandra;
    using Azure.Identity;
    
    public class Program
    {
    	public static async Task Main()
    	{
            var cassandraContactPoint = Environment.GetEnvironmentVariable("AZURE_COSMOS_CONTACTPOINT");
            var userName = Environment.GetEnvironmentVariable("AZURE_COSMOS_USERNAME");
            var cassandraPort = Int32.Parse(Environment.GetEnvironmentVariable("AZURE_COSMOS_PORT"));
            var cassandraKeyspace = Environment.GetEnvironmentVariable("AZURE_COSMOS_KEYSPACE");
            var listKeyUrl = Environment.GetEnvironmentVariable("AZURE_COSMOS_LISTKEYURL");
            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 password.
            var httpClient = new HttpClient();
            httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken.Token}");
            var response = await httpClient.POSTAsync(listKeyUrl);
            var responseBody = await response.Content.ReadAsStringAsync();
            var keys = JsonConvert.DeserializeObject<Dictionary<string, string>>(responseBody);
            var password = keys["primaryMasterKey"];
    
            // Connect to Azure Cosmos DB for Cassandra
            var options = new Cassandra.SSLOptions(SslProtocols.Tls12, true, ValidateServerCertificate);
            options.SetHostNameResolver((ipAddress) => cassandraContactPoint);
            Cluster cluster = Cluster
                .Builder()
                .WithCredentials(userName, password)
                .WithPort(cassandraPort)
                .AddContactPoint(cassandraContactPoint).WithSSL(options).Build();
            ISession session = await cluster.ConnectAsync();
        }
    
        public static bool ValidateServerCertificate
    	(
            object sender,
            X509Certificate certificate,
            X509Chain chain,
            SslPolicyErrors sslPolicyErrors
        )
        {
            if (sslPolicyErrors == SslPolicyErrors.None)
                return true;
    
            Console.WriteLine("Certificate error: {0}", sslPolicyErrors);
            // Do not allow this client to communicate with unauthenticated servers.
            return false;
        }
    }
    
    

Door de gebruiker toegewezen beheerde identiteit

Naam van standaardomgevingsvariabele Beschrijving Voorbeeldwaarde
AZURE_COSMOS_LISTKEYURL De URL voor het ophalen van de verbindingsreeks https://management.azure.com/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<Azure-Cosmos-DB-account>/listKeys?api-version=2021-04-15
AZURE_COSMOS_SCOPE Het bereik van uw beheerde identiteit https://management.azure.com/.default
AZURE_COSMOS_RESOURCEENDPOINT Uw resource-eindpunt https://<Azure-Cosmos-DB-account>.documents.azure.com:443/
AZURE_COSMOS_CONTACTPOINT Azure Cosmos DB voor Apache Cassandra-contactpunt <Azure-Cosmos-DB-account>.cassandra.cosmos.azure.com
AZURE_COSMOS_PORT Cassandra-verbindingspoort 10350
AZURE_COSMOS_KEYSPACE Cassandra-keyspace <keyspace>
AZURE_COSMOS_USERNAME Cassandra-gebruikersnaam <username>
AZURE_COSMOS_CLIENTID Uw client-id <client-ID>

Voorbeeldcode

Raadpleeg de stappen en code hieronder om verbinding te maken met Azure Cosmos DB voor Cassandra met behulp van een door de gebruiker toegewezen beheerde identiteit.

  1. Afhankelijkheden installeren

    dotnet add package CassandraCSharpDriver --version 3.19.3
    dotnet add package Azure.Identity
    
  2. Haal een toegangstoken op voor de beheerde identiteit of service-principal met behulp van de clientbibliotheek Azure.Identity. Gebruik het toegangstoken en AZURE_COSMOS_LISTKEYURL haal het wachtwoord op. Haal de verbindingsgegevens op uit de omgevingsvariabelen die zijn toegevoegd door Service Connector en maak verbinding met Azure Cosmos DB voor Cassandra. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.

    using System;
    using System.Security.Authentication;
    using System.Net.Security;
    using System.Net.Http;
    using System.Security.Authentication;
    using System.Security.Cryptography.X509Certificates;
    using System.Threading.Tasks;
    using Cassandra;
    using Azure.Identity;
    
    public class Program
    {
    	public static async Task Main()
    	{
            var cassandraContactPoint = Environment.GetEnvironmentVariable("AZURE_COSMOS_CONTACTPOINT");
            var userName = Environment.GetEnvironmentVariable("AZURE_COSMOS_USERNAME");
            var cassandraPort = Int32.Parse(Environment.GetEnvironmentVariable("AZURE_COSMOS_PORT"));
            var cassandraKeyspace = Environment.GetEnvironmentVariable("AZURE_COSMOS_KEYSPACE");
            var listKeyUrl = Environment.GetEnvironmentVariable("AZURE_COSMOS_LISTKEYURL");
            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 password.
            var httpClient = new HttpClient();
            httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken.Token}");
            var response = await httpClient.POSTAsync(listKeyUrl);
            var responseBody = await response.Content.ReadAsStringAsync();
            var keys = JsonConvert.DeserializeObject<Dictionary<string, string>>(responseBody);
            var password = keys["primaryMasterKey"];
    
            // Connect to Azure Cosmos DB for Cassandra
            var options = new Cassandra.SSLOptions(SslProtocols.Tls12, true, ValidateServerCertificate);
            options.SetHostNameResolver((ipAddress) => cassandraContactPoint);
            Cluster cluster = Cluster
                .Builder()
                .WithCredentials(userName, password)
                .WithPort(cassandraPort)
                .AddContactPoint(cassandraContactPoint).WithSSL(options).Build();
            ISession session = await cluster.ConnectAsync();
        }
    
        public static bool ValidateServerCertificate
    	(
            object sender,
            X509Certificate certificate,
            X509Chain chain,
            SslPolicyErrors sslPolicyErrors
        )
        {
            if (sslPolicyErrors == SslPolicyErrors.None)
                return true;
    
            Console.WriteLine("Certificate error: {0}", sslPolicyErrors);
            // Do not allow this client to communicate with unauthenticated servers.
            return false;
        }
    }
    
    

Verbindingsreeks

Waarschuwing

Microsoft raadt u aan de veiligste verificatiestroom te gebruiken die beschikbaar is. De verificatiestroom die in deze procedure wordt beschreven, vereist een zeer hoge mate van vertrouwen in de toepassing en brengt risico's met zich mee die niet aanwezig zijn in andere stromen. U moet deze stroom alleen gebruiken wanneer andere veiligere stromen, zoals beheerde identiteiten, niet haalbaar zijn.

SpringBoot-clienttype

Naam van standaardomgevingsvariabele Beschrijving Voorbeeldwaarde
spring.data.cassandra.contact-points Azure Cosmos DB voor Apache Cassandra-contactpunt <Azure-Cosmos-DB-account>.cassandra.cosmos.azure.com
spring.data.cassandra.port Cassandra-verbindingspoort 10350
spring.data.cassandra.keyspace-name Cassandra-keyspace <keyspace>
spring.data.cassandra.username Cassandra-gebruikersnaam <username>
spring.data.cassandra.password Cassandra-wachtwoord <password>
spring.data.cassandra.local-datacenter Azure-regio <Azure-region>
spring.data.cassandra.ssl SSL-status true

Andere clienttypen

Naam van standaardomgevingsvariabele Beschrijving Voorbeeldwaarde
AZURE_COSMOS_CONTACTPOINT Azure Cosmos DB voor Apache Cassandra-contactpunt <Azure-Cosmos-DB-account>.cassandra.cosmos.azure.com
AZURE_COSMOS_PORT Cassandra-verbindingspoort 10350
AZURE_COSMOS_KEYSPACE Cassandra-keyspace <keyspace>
AZURE_COSMOS_USERNAME Cassandra-gebruikersnaam <username>
AZURE_COSMOS_PASSWORD Cassandra-wachtwoord <password>

Voorbeeldcode

Raadpleeg de stappen en code hieronder om verbinding te maken met Azure Cosmos DB voor Cassandra met behulp van een verbindingsreeks.

  1. Afhankelijkheden installeren

    dotnet add package CassandraCSharpDriver --version 3.19.3
    
  2. Haal de verbindingsgegevens op uit de omgevingsvariabelen die zijn toegevoegd door Service Connector en maak verbinding met Azure Cosmos DB voor Cassandra.

    using System;
    using System.Security.Authentication;
    using System.Net.Security;
    using System.Security.Authentication;
    using System.Security.Cryptography.X509Certificates;
    using System.Threading.Tasks;
    using Cassandra;
    
    public class Program
    {
    	public static async Task Main()
    	{
            var cassandraContactPoint = Environment.GetEnvironmentVariable("AZURE_COSMOS_CONTACTPOINT");
            var userName = Environment.GetEnvironmentVariable("AZURE_COSMOS_USERNAME");
            var password = Environment.GetEnvironmentVariable("AZURE_COSMOS_PASSWORD");
            var cassandraPort = Int32.Parse(Environment.GetEnvironmentVariable("AZURE_COSMOS_PORT"));
            var cassandraKeyspace = Environment.GetEnvironmentVariable("AZURE_COSMOS_KEYSPACE");
    
            var options = new Cassandra.SSLOptions(SslProtocols.Tls12, true, ValidateServerCertificate);
            options.SetHostNameResolver((ipAddress) => cassandraContactPoint);
            Cluster cluster = Cluster
                .Builder()
                .WithCredentials(userName, password)
                .WithPort(cassandraPort)
                .AddContactPoint(cassandraContactPoint).WithSSL(options).Build();
            ISession session = await cluster.ConnectAsync();
        }
    
        public static bool ValidateServerCertificate
    	(
            object sender,
            X509Certificate certificate,
            X509Chain chain,
            SslPolicyErrors sslPolicyErrors
        )
        {
            if (sslPolicyErrors == SslPolicyErrors.None)
                return true;
    
            Console.WriteLine("Certificate error: {0}", sslPolicyErrors);
            // Do not allow this client to communicate with unauthenticated servers.
            return false;
        }
    }
    
    

Zie Een Apache Cassandra-app bouwen met .NET SDK en Azure Cosmos DB voor meer informatie.

Service-principal

Naam van standaardomgevingsvariabele Beschrijving Voorbeeldwaarde
AZURE_COSMOS_LISTKEYURL De URL voor het ophalen van de verbindingsreeks https://management.azure.com/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<Azure-Cosmos-DB-account>/listKeys?api-version=2021-04-15
AZURE_COSMOS_SCOPE Het bereik van uw beheerde identiteit https://management.azure.com/.default
AZURE_COSMOS_RESOURCEENDPOINT Uw resource-eindpunt https://<Azure-Cosmos-DB-account>.documents.azure.com:443/
AZURE_COSMOS_CONTACTPOINT Azure Cosmos DB voor Apache Cassandra-contactpunt <Azure-Cosmos-DB-account>.cassandra.cosmos.azure.com
AZURE_COSMOS_PORT Cassandra-verbindingspoort 10350
AZURE_COSMOS_KEYSPACE Cassandra-keyspace <keyspace>
AZURE_COSMOS_USERNAME Cassandra-gebruikersnaam <username>
AZURE_COSMOS_CLIENTID Uw client-id <client-ID>
AZURE_COSMOS_CLIENTSECRET Uw clientgeheim <client-secret>
AZURE_COSMOS_TENANTID Uw tenant-id <tenant-ID>

Voorbeeldcode

Raadpleeg de stappen en code hieronder om verbinding te maken met Azure Cosmos DB voor Cassandra met behulp van een service-principal.

  1. Afhankelijkheden installeren

    dotnet add package CassandraCSharpDriver --version 3.19.3
    dotnet add package Azure.Identity
    
  2. Haal een toegangstoken op voor de beheerde identiteit of service-principal met behulp van de clientbibliotheek Azure.Identity. Gebruik het toegangstoken en AZURE_COSMOS_LISTKEYURL haal het wachtwoord op. Haal de verbindingsgegevens op uit de omgevingsvariabelen die zijn toegevoegd door Service Connector en maak verbinding met Azure Cosmos DB voor Cassandra. Als u de onderstaande code gebruikt, moet u het gedeelte van het codefragment verwijderen voor het verificatietype dat u wilt gebruiken.

    using System;
    using System.Security.Authentication;
    using System.Net.Security;
    using System.Net.Http;
    using System.Security.Authentication;
    using System.Security.Cryptography.X509Certificates;
    using System.Threading.Tasks;
    using Cassandra;
    using Azure.Identity;
    
    public class Program
    {
    	public static async Task Main()
    	{
            var cassandraContactPoint = Environment.GetEnvironmentVariable("AZURE_COSMOS_CONTACTPOINT");
            var userName = Environment.GetEnvironmentVariable("AZURE_COSMOS_USERNAME");
            var cassandraPort = Int32.Parse(Environment.GetEnvironmentVariable("AZURE_COSMOS_PORT"));
            var cassandraKeyspace = Environment.GetEnvironmentVariable("AZURE_COSMOS_KEYSPACE");
            var listKeyUrl = Environment.GetEnvironmentVariable("AZURE_COSMOS_LISTKEYURL");
            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 password.
            var httpClient = new HttpClient();
            httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken.Token}");
            var response = await httpClient.POSTAsync(listKeyUrl);
            var responseBody = await response.Content.ReadAsStringAsync();
            var keys = JsonConvert.DeserializeObject<Dictionary<string, string>>(responseBody);
            var password = keys["primaryMasterKey"];
    
            // Connect to Azure Cosmos DB for Cassandra
            var options = new Cassandra.SSLOptions(SslProtocols.Tls12, true, ValidateServerCertificate);
            options.SetHostNameResolver((ipAddress) => cassandraContactPoint);
            Cluster cluster = Cluster
                .Builder()
                .WithCredentials(userName, password)
                .WithPort(cassandraPort)
                .AddContactPoint(cassandraContactPoint).WithSSL(options).Build();
            ISession session = await cluster.ConnectAsync();
        }
    
        public static bool ValidateServerCertificate
    	(
            object sender,
            X509Certificate certificate,
            X509Chain chain,
            SslPolicyErrors sslPolicyErrors
        )
        {
            if (sslPolicyErrors == SslPolicyErrors.None)
                return true;
    
            Console.WriteLine("Certificate error: {0}", sslPolicyErrors);
            // Do not allow this client to communicate with unauthenticated servers.
            return false;
        }
    }
    
    

Volgende stappen

Volg de onderstaande zelfstudies voor meer informatie over Service Connector.