1

我们正在使用 Terraform 来部署基础设施。我们的环境中有着陆区。我已经部署了 Azure SQL DB PaaS,并为专用终结点启用了它。我想在 SQL Server 上启用审核,以便它可以将审核日志发送到启用了专用端点的存储帐户 存储帐户和 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 Server 的“存储帐户贡献者”角色赋予了存储帐户,并带有以下块:

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
}

我注意到的另一件事是,如果我通过门户访问门户启用审核,当我尝试选择存储帐户时,它不会向我显示存储帐户。我们的专用端点的专用 DNS 区域位于 Hub VNET 和资源组中,作为登陆区域架构的一部分。

我的 SQL Server 网络设置显示在屏幕截图中。

在此处输入图像描述

4

1 回答 1

1

使用新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 不需要提供存储帐户密钥。

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

原始帖子中| 您可以在 Github 上看到:不幸的是,Azure API 问题阻止了这些参数在 mssql_server 资源上发送。

于 2021-10-05T04:44:43.367 回答