Skip to content

Commit c5e595c

Browse files
authored
Added Dynamic Access Policy (#77)
* Feat: Added Key-Vault Secret Resource * Feat : Added Dynamic Access Policy * Feat : Added Key Vault Contributor Role Assignment
1 parent 625e7ea commit c5e595c

File tree

2 files changed

+53
-3
lines changed

2 files changed

+53
-3
lines changed

main.tf

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,18 @@ resource "azurerm_key_vault" "key_vault" {
6666
phone = contact.value.phone
6767
}
6868
}
69+
dynamic "access_policy" {
70+
for_each = var.use_dynamic_access_policy ? var.access_policies : []
71+
content {
72+
tenant_id = data.azurerm_client_config.current_client_config.tenant_id
73+
object_id = access_policy.value.object_id
74+
certificate_permissions = access_policy.value.certificate_permissions
75+
key_permissions = access_policy.value.key_permissions
76+
secret_permissions = access_policy.value.secret_permissions
77+
storage_permissions = access_policy.value.storage_permissions
78+
}
79+
}
80+
6981

7082
lifecycle {
7183
ignore_changes = [
@@ -90,7 +102,7 @@ resource "azurerm_key_vault_secret" "key_vault_secret" {
90102
##-----------------------------------------------------------------------------
91103
resource "azurerm_key_vault_access_policy" "readers_policy" {
92104
provider = azurerm.main_sub
93-
for_each = toset(var.enable_rbac_authorization && var.enabled && !var.managed_hardware_security_module_enabled ? [] : var.reader_objects_ids)
105+
for_each = toset(var.use_dynamic_access_policy || var.enable_rbac_authorization && var.enabled && !var.managed_hardware_security_module_enabled ? [] : var.reader_objects_ids)
94106

95107
object_id = each.value
96108
tenant_id = data.azurerm_client_config.current_client_config.tenant_id
@@ -114,7 +126,7 @@ resource "azurerm_key_vault_access_policy" "readers_policy" {
114126

115127
resource "azurerm_key_vault_access_policy" "admin_policy" {
116128
provider = azurerm.main_sub
117-
for_each = toset(var.enable_rbac_authorization && var.enabled && !var.managed_hardware_security_module_enabled ? [] : var.admin_objects_ids)
129+
for_each = toset(var.use_dynamic_access_policy || var.enable_rbac_authorization && var.enabled && !var.managed_hardware_security_module_enabled ? [] : var.reader_objects_ids)
118130

119131
object_id = each.value
120132
tenant_id = data.azurerm_client_config.current_client_config.tenant_id
@@ -180,7 +192,7 @@ resource "azurerm_key_vault_access_policy" "admin_policy" {
180192
##-----------------------------------------------------------------------------
181193
resource "azurerm_role_assignment" "rbac_keyvault_administrator" {
182194
provider = azurerm.main_sub
183-
for_each = toset(var.enable_rbac_authorization && var.enabled && !var.managed_hardware_security_module_enabled ? var.admin_objects_ids : [])
195+
for_each = toset(var.enable_rbac_authorization && var.enabled && var.keyvault_admin_enabled && !var.managed_hardware_security_module_enabled ? var.admin_objects_ids : [])
184196

185197
scope = azurerm_key_vault.key_vault[0].id
186198
role_definition_name = "Key Vault Administrator"
@@ -205,6 +217,15 @@ resource "azurerm_role_assignment" "rbac_keyvault_reader" {
205217
principal_id = each.value
206218
}
207219

220+
resource "azurerm_role_assignment" "rbac_keyvault_contributor" {
221+
provider = azurerm.main_sub
222+
for_each = toset(var.enable_rbac_authorization && var.enabled && !var.managed_hardware_security_module_enabled ? var.contributor_objects_ids : [])
223+
224+
scope = azurerm_key_vault.key_vault[0].id
225+
role_definition_name = "Key Vault Contributor"
226+
principal_id = each.value
227+
}
228+
208229
##-----------------------------------------------------------------------------
209230
##Below resource will deploy private endpoint for key vault.
210231
##-----------------------------------------------------------------------------

variables.tf

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ variable "secrets" {
2929
default = {}
3030
}
3131

32+
variable "use_dynamic_access_policy" {
33+
description = "If true, use dynamic access policy block within azurerm_key_vault. If false, use separate azurerm_key_vault_access_policy resource."
34+
type = bool
35+
default = false
36+
}
3237

3338
variable "managedby" {
3439
type = string
@@ -271,3 +276,27 @@ variable "network_acls" {
271276
})
272277
default = {}
273278
}
279+
280+
variable "access_policies" {
281+
type = list(object({
282+
object_id = string,
283+
certificate_permissions = list(string),
284+
key_permissions = list(string),
285+
secret_permissions = list(string),
286+
storage_permissions = list(string),
287+
}))
288+
default = []
289+
description = "Map of access policies for an object_id (user, service principal, security group) to backend."
290+
}
291+
292+
variable "keyvault_admin_enabled" {
293+
type = bool
294+
default = false
295+
description = "Controls whether to assign Key Vault Administrator (true) or Key Vault Contributor (false) roles to the specified principals."
296+
}
297+
298+
variable "contributor_objects_ids" {
299+
type = list(string)
300+
default = []
301+
description = "List of principal IDs (Object IDs) that will be assigned the Key Vault Contributor role when keyvault_admin_enabled is set to false. These can be User, Group, or Service Principal Object IDs from Azure Active Directory."
302+
}

0 commit comments

Comments
 (0)