你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用服务连接器集成 Azure Cosmos DB for Cassandra

本页显示了支持的身份验证方法和客户端,还演示了可用于使用服务连接器将 Azure Cosmos DB for Apache Cassandra 连接到其他云服务的示例代码。 即使不使用服务连接器,你可能仍然可以使用其他编程语言连接到 Azure Cosmos DB for Cassandra。 此页面还显示了你在创建服务连接时获得的默认环境变量名称和值(或 Spring Boot 配置)。

受支持的计算服务

服务连接器可用于将以下计算服务连接到 Azure Cosmos DB for Apache Cassandra:

  • Azure 应用程序服务
  • Azure Container Apps
  • Azure Functions
  • Azure Kubernetes 服务 (AKS)
  • Azure Spring Apps

受支持的身份验证类型和客户端类型

下表显示了使用服务连接器将计算服务连接到 Azure Cosmos DB for Apache Cassandra 时支持哪些客户端类型和身份验证方法的组合。 “是”表示支持该组合,“否”表示不支持该组合。

客户端类型 系统分配的托管标识 用户分配的托管标识 机密/连接字符串 服务主体
.NET
Go
Java
Java - Spring Boot No
Node.js
Python

此表指示支持客户端类型和身份验证方法的所有组合,但 Java - Spring Boot 客户端类型除外,它们仅支持机密/连接字符串方法。 所有其他客户端类型都可通过服务连接器使用任何身份验证方法连接到 Azure Cosmos DB for Apache Cassandra。

默认环境变量名称或应用程序属性和示例代码

根据连接的身份验证类型和客户端类型,参考下表中的连接详细信息和示例代码,将计算服务连接到 Azure Cosmos DB for Apache Cassandra。 有关命名约定的详细信息,请参阅服务连接器内部一文。

系统分配的托管标识

默认环境变量名称 说明 示例值
AZURE_COSMOS_LISTKEYURL 用户获取连接字符串的 URL 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 托管标识范围 https://management.azure.com/.default
AZURE_COSMOS_RESOURCEENDPOINT 资源终结点 https://<Azure-Cosmos-DB-account>.documents.azure.com:443/
AZURE_COSMOS_CONTACTPOINT Azure Cosmos DB for Apache Cassandra 接触点 <Azure-Cosmos-DB-account>.cassandra.cosmos.azure.com
AZURE_COSMOS_PORT Cassandra 连接端口 10350
AZURE_COSMOS_KEYSPACE Cassandra 密钥空间 <keyspace>
AZURE_COSMOS_USERNAME Cassandra 用户名 <username>

代码示例

请参考以下步骤和代码,使用系统分配的托管标识连接到 Azure Cosmos DB for Cassandra。

  1. 安装依赖项

    dotnet add package CassandraCSharpDriver --version 3.19.3
    dotnet add package Azure.Identity
    
  2. 使用 Azure.Identity 客户端库获取托管标识或服务主体的访问令牌。 使用访问令牌和 AZURE_COSMOS_LISTKEYURL 获取密码。 从服务连接器添加的环境变量中获取连接信息,并连接到 Azure Cosmos DB for Cassandra。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。

    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;
        }
    }
    
    

用户分配的托管标识

默认环境变量名称 说明 示例值
AZURE_COSMOS_LISTKEYURL 用户获取连接字符串的 URL 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 托管标识范围 https://management.azure.com/.default
AZURE_COSMOS_RESOURCEENDPOINT 资源终结点 https://<Azure-Cosmos-DB-account>.documents.azure.com:443/
AZURE_COSMOS_CONTACTPOINT Azure Cosmos DB for Apache Cassandra 接触点 <Azure-Cosmos-DB-account>.cassandra.cosmos.azure.com
AZURE_COSMOS_PORT Cassandra 连接端口 10350
AZURE_COSMOS_KEYSPACE Cassandra 密钥空间 <keyspace>
AZURE_COSMOS_USERNAME Cassandra 用户名 <username>
AZURE_COSMOS_CLIENTID 客户端 ID <client-ID>

代码示例

请参考以下步骤和代码,使用用户分配的托管标识连接到 Azure Cosmos DB for Cassandra。

  1. 安装依赖项

    dotnet add package CassandraCSharpDriver --version 3.19.3
    dotnet add package Azure.Identity
    
  2. 使用 Azure.Identity 客户端库获取托管标识或服务主体的访问令牌。 使用访问令牌和 AZURE_COSMOS_LISTKEYURL 获取密码。 从服务连接器添加的环境变量中获取连接信息,并连接到 Azure Cosmos DB for Cassandra。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。

    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;
        }
    }
    
    

连接字符串

警告

Microsoft 建议使用最安全的可用身份验证流。 本过程中介绍的身份验证流程需要非常高的信任度,并携带其他流中不存在的风险。 请仅在无法使用其他更安全的流(例如托管标识)时才使用此流。

SpringBoot 客户端类型

默认环境变量名称 说明 示例值
spring.data.cassandra.contact-points Azure Cosmos DB for Apache Cassandra 接触点 <Azure-Cosmos-DB-account>.cassandra.cosmos.azure.com
spring.data.cassandra.port Cassandra 连接端口 10350
spring.data.cassandra.keyspace-name Cassandra 密钥空间 <keyspace>
spring.data.cassandra.username Cassandra 用户名 <username>
spring.data.cassandra.password Cassandra 密码 <password>
spring.data.cassandra.local-datacenter Azure 区域 <Azure-region>
spring.data.cassandra.ssl SSL 状态

其他客户端类型

默认环境变量名称 说明 示例值
AZURE_COSMOS_CONTACTPOINT Azure Cosmos DB for Apache Cassandra 接触点 <Azure-Cosmos-DB-account>.cassandra.cosmos.azure.com
AZURE_COSMOS_PORT Cassandra 连接端口 10350
AZURE_COSMOS_KEYSPACE Cassandra 密钥空间 <keyspace>
AZURE_COSMOS_USERNAME Cassandra 用户名 <username>
AZURE_COSMOS_PASSWORD Cassandra 密码 <password>

代码示例

请参考以下步骤和代码,使用连接字符串连接到 Azure Cosmos DB for Cassandra。

  1. 安装依赖项

    dotnet add package CassandraCSharpDriver --version 3.19.3
    
  2. 从服务连接器添加的环境变量中获取连接信息,并连接到 Azure Cosmos DB for 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;
        }
    }
    
    

有关详细信息,请参阅使用 .NET SDK 和 Azure Cosmos DB 生成 Apache Cassandra 应用

服务主体

默认环境变量名称 说明 示例值
AZURE_COSMOS_LISTKEYURL 用户获取连接字符串的 URL 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 托管标识范围 https://management.azure.com/.default
AZURE_COSMOS_RESOURCEENDPOINT 资源终结点 https://<Azure-Cosmos-DB-account>.documents.azure.com:443/
AZURE_COSMOS_CONTACTPOINT Azure Cosmos DB for Apache Cassandra 接触点 <Azure-Cosmos-DB-account>.cassandra.cosmos.azure.com
AZURE_COSMOS_PORT Cassandra 连接端口 10350
AZURE_COSMOS_KEYSPACE Cassandra 密钥空间 <keyspace>
AZURE_COSMOS_USERNAME Cassandra 用户名 <username>
AZURE_COSMOS_CLIENTID 客户端 ID <client-ID>
AZURE_COSMOS_CLIENTSECRET 客户端密码 <client-secret>
AZURE_COSMOS_TENANTID 租户 ID <tenant-ID>

代码示例

请参考以下步骤和代码,使用服务主体连接到 Azure Cosmos DB for Cassandra。

  1. 安装依赖项

    dotnet add package CassandraCSharpDriver --version 3.19.3
    dotnet add package Azure.Identity
    
  2. 使用 Azure.Identity 客户端库获取托管标识或服务主体的访问令牌。 使用访问令牌和 AZURE_COSMOS_LISTKEYURL 获取密码。 从服务连接器添加的环境变量中获取连接信息,并连接到 Azure Cosmos DB for Cassandra。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。

    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;
        }
    }
    
    

后续步骤

参考下面列出的教程来详细了解服务连接器。