Управління доступом користувачів до баз даних є критичною задачею для будь-якої організації. Особливо важливо це стає, коли мова йде про хмарні сервіси, такі як Azure SQL Server, де доступ до баз даних зазвичай здійснюється через ідентифікацію та ролі. У цій статті ми розглянемо використання інструменту Terraform для автоматизації процесу керування користувачами та їх ролями у Azure SQL Server.
Одним із ключових завдань є створення інфраструктури за допомогою Terraform. Ми хочемо створити інфраструктуру, яка включає в себе Linux-додаток служби .NET та базу даних Azure SQL Server, і використовувати призначений користувачем ідентифікатор для забезпечення безпеки доступу до бази даних з нашого API.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
resource "azurerm_user_assigned_identity" "sql_server_managed_identity" { name = "sql-server-${local.domain}-managed-identity" location = azurerm_resource_group.app_resource_group.location resource_group_name = azurerm_resource_group.app_resource_group.name } resource "azurerm_mssql_server" "sql_server" { name = "sql-${local.domain}-business" resource_group_name = azurerm_resource_group.app_resource_group.name location = azurerm_resource_group.app_resource_group.location version = "12.0" minimum_tls_version = "1.2" azuread_administrator { azuread_authentication_only = false login_username = azurerm_user_assigned_identity.sql_server_managed_identity.name object_id = azurerm_user_assigned_identity.sql_server_managed_identity.principal_id } identity { type = "UserAssigned" identity_ids = [azurerm_user_assigned_identity.sql_server_managed_identity.id] } primary_user_assigned_identity_id = azurerm_user_assigned_identity.sql_server_managed_identity.id } resource "azurerm_mssql_database" "sql_database_test" { depends_on = [azurerm_mssql_server.sql_server] name = "sqldb-${local.domain}-test" server_id = azurerm_mssql_server.sql_server.id collation = "SQL_Latin1_General_CP1_CI_AI" read_scale = false ledger_enabled = false sku_name = "S3" zone_redundant = false tags = local.app_tags } resource "mssql_user" "web" { server { host = azurerm_mssql_server.sql_server.fully_qualified_domain_name azuread_managed_identity_auth { user_id = azurerm_user_assigned_identity.sql_server_managed_identity.id } } database = azurerm_mssql_database.sql_database_test.name username = azurerm_user_assigned_identity.sql_server_managed_identity.name object_id = azurerm_user_assigned_identity.sql_server_managed_identity.client_id roles = ["db_datareader", "db_datawriter"] timeouts { default = "2m" } } |