无法启用 SQL 审核并将日志发送到启用了 Pvt 端点的存储帐户

Not able to enable SQL Auditing and sending the logs to a Pvt Endpoint enabled Storage Account

我们正在使用 Terraform 部署基础设施。我们的环境中有着陆区。我已经部署了 Azure SQL DB PaaS 并为专用终结点启用了它。我想在 SQL 服务器上启用审核,以便它可以将审核日志发送到启用了专用端点的存储帐户 存储帐户的专用终结点和 SQL 都在同一子网中 下面提供了我的 SQL 服务器的 TF 代码

resource "azurerm_mssql_server" "primary" {
  resource_group_name           = module.resourcegroup.resource_group.name
  location                      = module.resourcegroup.resource_group.location
  name                          = module.names-mssql-server.location.mssql_server.name_unique
  tags                          = module.resourcegroup.resource_group.tags
  administrator_login           = local.mssql_admin_username
  administrator_login_password  = random_password.mssql_primary.result
  public_network_access_enabled = false
  version                       = "12.0"
  azuread_administrator {
    login_username = data.azuread_group.sqladmin.name
    object_id      = data.azuread_group.sqladmin.id
  }
  identity {
    type = "SystemAssigned"
  }
  extended_auditing_policy {
    storage_endpoint                        = module.storageaccount.storage_account.self.primary_blob_endpoint
    storage_account_access_key              = module.storageaccount.storage_account.self.primary_access_key
    storage_account_access_key_is_secondary = false
    retention_in_days                       = 30
  }
}

我在应用 Terraform 时不断遇到的错误是:

│ Error: waiting for creation of Blob Auditing Policies Server: (Name "sql-primary-predev-cus-cb17" / Resource Group "rg-xxxx-predev-cus-409d"): Code="BlobAuditingInsufficientStorageAccountPermissions" Message="Insufficient read or write permissions on storage account 'stqb2sal908f'. "
│ 
│   with azurerm_mssql_server.primary,
│   on resources.sql.tf line 39, in resource "azurerm_mssql_server" "primary":
│   39: resource "azurerm_mssql_server" "primary

” 我什至已将 SQL 服务器的“存储帐户贡献者”角色授予具有以下块的存储帐户:

resource "azurerm_role_assignment" "regular-storage-account-sql-role" {
  scope                = module.storageaccount.storage_account.self.id
  role_definition_name = "Storage Account Contributor"
  principal_id         = azurerm_mssql_server.primary.identity.0.principal_id
}

我注意到的另一件事是,如果我转到门户以通过门户启用审核,当我尝试 select 存储帐户时,它不会向我显示存储帐户。 我们专用终结点的专用 DNS 区域位于中心 VNET 和资源组中,作为登陆区体系结构的一部分。

我的 SQL 服务器网络设置如屏幕截图所示。

使用新的 azurerm_mssql_server_extended_auditing_policy 资源解决这个问题。

示例:

resource "azurerm_mssql_server_extended_auditing_policy" "testsql" {
  server_id         = azurerm_mssql_server.testsql.id
  storage_endpoint  = azurerm_storage_account.testsql.primary_blob_endpoint
  # do not pass the storage account key
  depends_on        = [azurerm_role_assignment.audit_contributor]
}

resource "azurerm_role_assignment" "audit_contributor" {
  scope                = azurerm_storage_account.audit_testsql.id
  role_definition_name = "Storage Blob Data Contributor"
  principal_id         = azurerm_sql_server.mssql_server.identity[0].principal_id
}

此资源中的存储帐户密钥是可选的。要利用 mssql 服务器控制的身份访问存储帐户,API 无需提供存储帐户密钥。

审核需要对防火墙后的存储帐户进行额外访问。 但是,在存储帐户的范围内,权限是“Storage Blob Data Contributor”而不是“Contributor”。 |这是 Microsoft 文档:将审核写入 VNet 和防火墙后面的存储帐户 | Docs

Original Post | Github 您可能会看到:不幸的是,Azure API 问题阻止了这些参数在 mssql_server 资源上发送。