我使用 MongoDB.Driver 库(版本 2.19.0)通过存储在 KeyVault 中的连接字符串从我的 Cosmos DB MongoDB API 帐户读取/写入文档。
现在我想使用托管身份而不是连接字符串进行身份验证,但是我们尝试了多种方法使用托管身份进行身份验证但没有成功。
任何人都可以帮助我们是否可以将 Azure Cosmos 的托管身份用于 MongoDB 帐户?
尝试在 C# 代码中使用托管身份。
根据这个
目前 Cosmos DB for Mongo DB(vCore 和 RU 模式)不支持托管身份验证。
或者,虽然您无法直接将 MSI 与 Cosmos DB MongoDB API 结合使用,但您仍然可以使用 托管身份 安全地从 Azure Key Vault 检索连接字符串。这样,您的应用程序不需要存储凭据,并且可以利用 MSI 进行 Key Vault 访问。
向托管身份授予访问密钥保管库中的密钥所需的权限,您可以使用以下代码:
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using MongoDB.Driver;
public class CosmosDBMongoService
{
private readonly IMongoDatabase _database;
public CosmosDBMongoService(string keyVaultUrl, string keyVaultSecretName, string dbName)
{
// Set up Azure Key Vault Client using Managed Identity
var client = new SecretClient(new Uri(keyVaultUrl), new DefaultAzureCredential());
// Retrieve the connection string stored as a secret in Key Vault
KeyVaultSecret secret = client.GetSecret(keyVaultSecretName);
string connectionString = secret.Value;
// Use the connection string to connect to Cosmos DB MongoDB API
var mongoClient = new MongoClient(connectionString);
_database = mongoClient.GetDatabase(dbName);
}
public IMongoCollection<T> GetCollection<T>(string collectionName)
{
return _database.GetCollection<T>(collectionName);
}
}
有关更多信息,请参阅 SO 中的类似问题。