This module creates an Azure Policy definition and assigns it to a list of scopes IDs (Azure Susbcriptions or Resource Groups).
Module version | Terraform version | OpenTofu version | AzureRM version |
---|---|---|---|
>= 8.x.x | Unverified | 1.8.x | >= 4.0 |
>= 7.x.x | 1.3.x | >= 3.0 | |
>= 6.x.x | 1.x | >= 3.0 | |
>= 5.x.x | 0.15.x | >= 2.0 | |
>= 4.x.x | 0.13.x / 0.14.x | >= 2.0 | |
>= 3.x.x | 0.12.x | >= 2.0 | |
>= 2.x.x | 0.12.x | < 2.0 | |
< 2.x.x | 0.11.x | < 2.0 |
If you want to contribute to this repository, feel free to use our pre-commit git hook configuration which will help you automatically update and format some files for you by enforcing our Terraform code module best-practices.
More details are available in the CONTRIBUTING.md file.
This module is optimized to work with the Claranet terraform-wrapper tool
which set some terraform variables in the environment needed by this module.
More details about variables set by the terraform-wrapper
available in the documentation.
locals {
policy_tags_rule = <<RULE
{
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Compute/virtualMachineScaleSets"
},
{
"not": {
"field": "[concat('tags[', parameters('tagName'), ']')]",
"equals": "[parameters('tagValue')]"
}
}
]
},
"then": {
"effect": "modify",
"details": {
"roleDefinitionIds": [
"/providers/Microsoft.Authorization/roleDefinitions/9980e02c-c2be-4d73-94e8-173b1dc7cf3c"
],
"operations": [
{
"operation": "addOrReplace",
"field": "[concat('tags[', parameters('tagName'), ']')]",
"value": "[parameters('tagValue')]"
}
]
}
}
}
RULE
policy_tags_parameters = <<PARAMETERS
{
"tagName": {
"type": "String",
"metadata": {
"displayName": "Tag Name",
"description": "Name of the tag, such as 'environment'"
}
},
"tagValue": {
"type": "String",
"metadata": {
"displayName": "Tag Value",
"description": "Value of the tag, such as 'production'"
}
}
}
PARAMETERS
policy_assignments = {
production = {
display_name = "VMSS tags checking for my production subscription"
description = "VMSS tags checking for my production subscription"
scope_id = "/subscriptions/xxxxx"
scope_type = "subscription"
location = module.azure_region.location
parameters = jsonencode({
environment = {
value = "production"
},
managed_by = {
value = "Claranet"
}
})
identity_type = "SystemAssigned"
enforce = false
},
preproduction = {
display_name = "VMSS tags checking for my Management group ABCD"
description = "VMSS tags checking for my Management group ABCD"
scope_id = "/providers/Microsoft.Management/managementGroups/group1"
scope_type = "management-group"
location = module.azure_region.location
parameters = jsonencode({
managed_by = {
value = "Claranet"
}
})
identity_type = "None"
enforce = true
}
}
}
module "policy_tags" {
source = "claranet/policy/azurerm"
version = "x.x.x"
display_name = "VMSS tagging policy"
rule_content = local.policy_tags_rule
parameters_content = local.policy_tags_parameters
assignments = local.policy_assignments
}
Name | Version |
---|---|
azurecaf | ~> 1.2.28 |
azurerm | ~> 4.0 |
No modules.
Name | Type |
---|---|
azurerm_management_group_policy_assignment.main | resource |
azurerm_policy_definition.main | resource |
azurerm_resource_group_policy_assignment.main | resource |
azurerm_resource_policy_assignment.main | resource |
azurerm_subscription_policy_assignment.main | resource |
azurecaf_name.policy | data source |
Name | Description | Type | Default | Required |
---|---|---|---|---|
assignments | Map with maps to configure assignments. Map key is the name of the assignment. | map(object({ |
n/a | yes |
custom_name | The name of the policy definition. Defaults generated. | string |
"" |
no |
description | The description of the policy definition. | string |
"" |
no |
display_name | The display name of the policy definition. | string |
n/a | yes |
mgmt_group_name | Create the Policy Definition at the Management Group level. | string |
null |
no |
mode | The policy mode that allows you to specify which resource types will be evaluated. The value can be All , Indexed or NotSpecified . |
string |
"All" |
no |
name_prefix | Optional prefix for the generated name. | string |
"" |
no |
name_suffix | Optional suffix for the generated name. | string |
"" |
no |
parameters_content | Parameters for the policy definition. This field is a json object that allows you to parameterize your policy definition. | string |
n/a | yes |
rule_content | The policy rule for the policy definition. This is a json object representing the rule that contains an if and a then block. | string |
n/a | yes |
Name | Description |
---|---|
definition_id | Azure policy definition ID. |
resource | Azure policy resource object. |
Microsoft Azure documentation: docs.microsoft.com/en-us/azure/governance/policy/how-to/programmatically-create