0.Core.Foundation/policy.tf (43 lines of code) (raw):
#########################################################################
# Policy (https://learn.microsoft.com/azure/governance/policy/overview) #
#########################################################################
variable policy {
type = object({
denyPasswordAuthLinux = object({
enable = bool
})
})
}
resource azurerm_subscription_policy_assignment deny_password_auth_linux {
count = var.policy.denyPasswordAuthLinux.enable ? 1 : 0
name = azurerm_policy_definition.deny_password_auth_linux.name
policy_definition_id = azurerm_policy_definition.deny_password_auth_linux.id
subscription_id = "/subscriptions/${data.azurerm_subscription.current.subscription_id}"
location = azurerm_resource_group.studio.location
identity {
type = "UserAssigned"
identity_ids = [
azurerm_user_assigned_identity.studio.id
]
}
}
resource azurerm_policy_definition deny_password_auth_linux {
name = "denyPasswordAuthLinux"
display_name = "Deny Linux VM password authentication"
policy_type = "Custom"
mode = "Indexed"
policy_rule = jsonencode({
if = {
allOf = [
{
field = "Microsoft.Compute/virtualMachines/storageProfile.osDisk.osType"
equals = "Linux"
},
{
field = "Microsoft.Compute/virtualMachines/osProfile.linuxConfiguration.disablePasswordAuthentication"
equals = "false"
}
]
},
then = {
effect = "deny"
}
})
}