@@ -3,6 +3,12 @@ locals {
33 (var. sp_client_id_secret_name ) = { value = data.azurerm_key_vault_secret.sp_client_id.value }
44 (var. sp_key_secret_name ) = { value = data.azurerm_key_vault_secret.sp_key.value }
55 }
6+
7+ secrets_objects_list = flatten ([for param in var . secret_scope : [
8+ for secret in param . secrets : {
9+ scope_name = param . scope_name , key = secret . key , string_value = secret . string_value
10+ }] if param . secrets != null
11+ ])
612}
713
814# Secret Scope with SP secrets for mounting Azure Data Lake Storage
@@ -18,3 +24,51 @@ resource "databricks_secret" "main" {
1824 string_value = each. value [" value" ]
1925 scope = databricks_secret_scope. main . id
2026}
27+
28+ # Custom additional Databricks Secret Scope
29+ resource "databricks_secret_scope" "this" {
30+ for_each = {
31+ for param in var . secret_scope : (param. scope_name ) => param
32+ if param . scope_name != null
33+ }
34+
35+ name = each. key
36+ initial_manage_principal = " users"
37+ }
38+
39+ resource "databricks_secret" "this" {
40+ for_each = { for entry in local . secrets_objects_list : " ${ entry . scope_name } .${ entry . key } " => entry }
41+
42+ key = each. value . key
43+ string_value = each. value . string_value
44+ scope = databricks_secret_scope. this [each . value . scope_name ]. id
45+ }
46+
47+ # At the nearest future, Azure will allow acquiring AAD tokens by service principals,
48+ # thus providing an ability to create Azure backed Key Vault with Terraform
49+ # https://github.com/databricks/terraform-provider-databricks/pull/1965
50+
51+ # # Azure Key Vault-backed Scope
52+ # resource "azurerm_key_vault_access_policy" "databricks" {
53+ # count = var.key_vault_secret_scope.key_vault_id != null ? 1 : 0
54+
55+ # key_vault_id = var.key_vault_secret_scope.key_vault_id
56+ # object_id = "9b38785a-6e08-4087-a0c4-20634343f21f" # Global 'AzureDatabricks' SP object id
57+ # tenant_id = data.azurerm_key_vault_secret.tenant_id.value
58+ #
59+ # secret_permissions = [
60+ # "Get",
61+ # "List",
62+ # ]
63+ # }
64+ #
65+ # resource "databricks_secret_scope" "external" {
66+ # count = var.key_vault_secret_scope.key_vault_id != null ? 1 : 0
67+ #
68+ # name = "external"
69+ # keyvault_metadata {
70+ # resource_id = var.key_vault_secret_scope.key_vault_id
71+ # dns_name = var.key_vault_secret_scope.dns_name
72+ # }
73+ # depends_on = [azurerm_key_vault_access_policy.databricks]
74+ # }
0 commit comments