无法启用 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 资源上发送。
我们正在使用 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 资源上发送。