demo_solution/modules/repo_terraform.azurerm.key_vault/access_policy.tf (76 lines of code) (raw):

locals { access_policies = [ for p in var.access_policies : merge({ group_names = [] object_ids = [] user_principal_names = [] application_names = [] certificate_permissions = [] key_permissions = [] secret_permissions = [] storage_permissions = [] }, p) ] group_names = distinct(flatten(local.access_policies[*].group_names)) user_principal_names = distinct(flatten(local.access_policies[*].user_principal_names)) application_names = distinct(flatten(local.access_policies[*].application_names)) group_object_ids = { for g in data.azuread_group.main : lower(g.display_name) => g.id } user_object_ids = { for u in data.azuread_user.main : lower(u.user_principal_name) => u.id } application_object_ids = { for a in data.azuread_service_principal.main : lower(a.display_name) => a.id } flattened_access_policies = concat( flatten([ for p in local.access_policies : flatten([ for i in p.object_ids : { object_id = i certificate_permissions = p.certificate_permissions key_permissions = p.key_permissions secret_permissions = p.secret_permissions storage_permissions = p.storage_permissions } ]) ]), flatten([ for p in local.access_policies : flatten([ for a in p.application_names : { object_id = local.application_object_ids[lower(a)] certificate_permissions = p.certificate_permissions key_permissions = p.key_permissions secret_permissions = p.secret_permissions storage_permissions = p.storage_permissions } ]) ]), flatten([ for p in local.access_policies : flatten([ for n in p.group_names : { object_id = local.group_object_ids[lower(n)] certificate_permissions = p.certificate_permissions key_permissions = p.key_permissions secret_permissions = p.secret_permissions storage_permissions = p.storage_permissions } ]) ]), flatten([ for p in local.access_policies : flatten([ for n in p.user_principal_names : { object_id = local.user_object_ids[lower(n)] certificate_permissions = p.certificate_permissions key_permissions = p.key_permissions secret_permissions = p.secret_permissions storage_permissions = p.storage_permissions } ]) ]) ) grouped_access_policies = { for p in local.flattened_access_policies : p.object_id => p... } combined_access_policies = [ for k, v in local.grouped_access_policies : { object_id = k certificate_permissions = distinct(flatten(v[*].certificate_permissions)) key_permissions = distinct(flatten(v[*].key_permissions)) secret_permissions = distinct(flatten(v[*].secret_permissions)) storage_permissions = distinct(flatten(v[*].storage_permissions)) } ] # service_principal_object_id = data.azurerm_client_config.main.service_principal_object_id # self_permissions = { # object_id = local.service_principal_object_id # tenant_id = data.azurerm_client_config.main.tenant_id # key_permissions = ["create", "delete", "get"] # secret_permissions = ["delete", "get", "set"] # } }