Cosmos db 使用 terraform 禁用 nosql 本地身份验证

问题描述 投票:0回答:1

我有一个通过 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)。

azure terraform azure-web-app-service azure-cosmosdb terraform-provider-azure
1个回答
0
投票

我认为

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
}
© www.soinside.com 2019 - 2024. All rights reserved.