我有一个通过 terraform 创建的 cosmos 数据库帐户,其中有多个数据库。当我进入数据浏览器时,API 类型显示为 NOSQL API,类型为“GlobalDocumentDB”。我们在下文中强制执行了一项安全策略,其中规定“Cosmos DB 数据库帐户应禁用本地身份验证方法”。当我检查 terraform 文档时,它提到:“local_authentication_disabled -(可选)禁用本地身份验证并确保仅 MSI 和 AAD 可以专门用于身份验证。默认为 false。只能在使用 SQL API 时设置。”
您能否帮助我了解如何在我的情况下禁用此功能,而不影响现有数据库。在身份验证方面,我计划向 Web 应用程序托管身份授予 RBAC 角色,并在 Web 应用程序的环境变量中添加“COSMOS_ENDPOINT=”(值 = azurerm_cosmosdb_account.cosmos_account.endpoint)。
我认为
Terraform
文档只是令人困惑/过时 - CosmosDB
目前没有“SQL API
”。 我有相同的 NOSQL
配置并且 local_authentication_disabled
工作得很好:
resource "azurerm_cosmosdb_account" "db" {
name = <name>
location = <location>
resource_group_name = <rgname>
offer_type = "Standard"
kind = "GlobalDocumentDB"
local_authentication_disabled = true
...
}
不确定“不影响现有数据库”的含义 - 在 CosmosDB 帐户级别启用或禁用基于本地/秘密的身份验证,因此如果您禁用它,它将适用于所有帐户的数据库。您也可以通过
Terraform
添加授权的 RBAC 读取器/写入器身份:
resource "azurerm_cosmosdb_sql_role_assignment" "cache_role_assignment" {
for_each = toset([for user in authorized_users : user.object_id])
resource_group_name = <rgname>
account_name = azurerm_cosmosdb_account.db.name
role_definition_id = azurerm_cosmosdb_sql_role_definition.custom_role.id # or built-in role_id
scope = azurerm_cosmosdb_account.db.id
principal_id = each.value
}