Skip to content
Open
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
c90afbc
updates
Mar 24, 2025
f05580f
updates
Mar 24, 2025
b9c3af1
updates
Mar 24, 2025
807cf2c
updates
Mar 24, 2025
39c06cd
updates
Mar 24, 2025
aa9e333
updates
Mar 24, 2025
2390ad9
updates
Mar 25, 2025
3df6a55
updates
Mar 25, 2025
93098d2
updates
Mar 26, 2025
31198a5
updates
Mar 26, 2025
dc36188
updates
Mar 26, 2025
7b59dd4
updates
Mar 26, 2025
3b7fb31
updates
Mar 26, 2025
6cd47c3
updates
Mar 26, 2025
50ccaad
updates
Mar 27, 2025
387b052
updates
Mar 27, 2025
fe70a1b
updates
Mar 27, 2025
59c8d7b
updates
Mar 31, 2025
52b8c3e
updates
Mar 31, 2025
e41e2ab
pushing new AVM version
Mar 31, 2025
0365b86
updates
Apr 1, 2025
205199c
updates
Apr 1, 2025
3fb061e
updates
Apr 1, 2025
d2068a1
updates
Apr 1, 2025
b173f98
updates
Apr 1, 2025
42e6ae1
updates
Apr 1, 2025
553a85b
updates
Apr 1, 2025
1d7732b
updates
Apr 1, 2025
d59cb28
updates
Apr 1, 2025
8fa3464
updates
Apr 1, 2025
1b552b0
updates
Apr 1, 2025
cedc883
updates
Apr 1, 2025
846d71b
updates
Apr 1, 2025
cc1e0fa
updates
Apr 1, 2025
809f206
updates
Apr 1, 2025
6bea310
updates
Apr 1, 2025
f0249ce
updates
Apr 2, 2025
29775d1
updates
Apr 2, 2025
4c09e8a
updates
Apr 2, 2025
af7ed09
updates
Apr 2, 2025
44e4e7c
updates
Apr 2, 2025
3bb60d3
updates
Apr 2, 2025
ac7e26d
updates
Apr 2, 2025
83b54c3
updates
Apr 2, 2025
b6e4a5d
updates
Apr 8, 2025
bf30d50
Merge branch 'anf-fslogix' of https://github.com/Azure/avdaccelerator…
Apr 8, 2025
111721d
updates
Apr 10, 2025
1e24c63
updates
Apr 10, 2025
a886f48
updates
Apr 10, 2025
c40c772
updates
Apr 10, 2025
15fe4dd
updates
Apr 10, 2025
d4e6dc6
updates
Apr 10, 2025
73732aa
Merge pull request #777 from Azure/main
danycontre Apr 10, 2025
f0b56cf
updates
Apr 10, 2025
13df835
updates
Apr 10, 2025
1ab370e
updates
Apr 14, 2025
c4e3be4
updates
Apr 15, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1,424 changes: 1,424 additions & 0 deletions avm/1.1.0/ptn/authorization/policy-assignment/README.md

Large diffs are not rendered by default.

204 changes: 204 additions & 0 deletions avm/1.1.0/ptn/authorization/policy-assignment/main.bicep
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
metadata name = 'Policy Assignments (All scopes)'
metadata description = 'This module deploys a Policy Assignment at a Management Group, Subscription or Resource Group scope.'

targetScope = 'managementGroup'

@sys.description('Required. Specifies the name of the policy assignment. Maximum length is 24 characters for management group scope, 64 characters for subscription and resource group scopes.')
param name string

@sys.description('Optional. This message will be part of response in case of policy violation.')
param description string = ''

@sys.description('Optional. The display name of the policy assignment. Maximum length is 128 characters.')
@maxLength(128)
param displayName string = ''

@sys.description('Required. Specifies the ID of the policy definition or policy set definition being assigned.')
param policyDefinitionId string

@sys.description('Optional. Parameters for the policy assignment if needed.')
param parameters object = {}

@sys.description('Optional. The managed identity associated with the policy assignment. Policy assignments must include a resource identity when assigning \'Modify\' policy definitions.')
@allowed([
'SystemAssigned'
'UserAssigned'
'None'
])
param identity string = 'SystemAssigned'

@sys.description('Optional. The Resource ID for the user assigned identity to assign to the policy assignment.')
param userAssignedIdentityId string = ''

@sys.description('Optional. The IDs Of the Azure Role Definition list that is used to assign permissions to the identity. You need to provide either the fully qualified ID in the following format: \'/providers/Microsoft.Authorization/roleDefinitions/c2f4ef07-c644-48eb-af81-4b1b4947fb11\'. See https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles for the list IDs for built-in Roles. They must match on what is on the policy definition.')
param roleDefinitionIds array = []

@sys.description('Optional. The policy assignment metadata. Metadata is an open ended object and is typically a collection of key-value pairs.')
param metadata object = {}

@sys.description('Optional. The messages that describe why a resource is non-compliant with the policy.')
param nonComplianceMessages array = []

@sys.description('Optional. The policy assignment enforcement mode. Possible values are Default and DoNotEnforce. - Default or DoNotEnforce.')
@allowed([
'Default'
'DoNotEnforce'
])
param enforcementMode string = 'Default'

@sys.description('Optional. The Target Scope for the Policy. The name of the management group for the policy assignment. If not provided, will use the current scope for deployment.')
param managementGroupId string = managementGroup().name

@sys.description('Optional. An array of additional management group IDs to assign RBAC to for the policy assignment if it has an identity.')
param additionalManagementGroupsIDsToAssignRbacTo array = []

@sys.description('Optional. An array of additional Subscription IDs to assign RBAC to for the policy assignment if it has an identity, only supported for Management Group Policy Assignments.')
param additionalSubscriptionIDsToAssignRbacTo array = []

@sys.description('Optional. An array of additional Resource Group Resource IDs to assign RBAC to for the policy assignment if it has an identity, only supported for Management Group Policy Assignments.')
param additionalResourceGroupResourceIDsToAssignRbacTo array = []

@sys.description('Optional. The Target Scope for the Policy. The subscription ID of the subscription for the policy assignment.')
param subscriptionId string = ''

@sys.description('Optional. The Target Scope for the Policy. The name of the resource group for the policy assignment.')
param resourceGroupName string = ''

@sys.description('Optional. The policy excluded scopes.')
param notScopes array = []

@sys.description('Optional. Location for all resources.')
param location string = deployment().location

@sys.description('Optional. The policy property value override. Allows changing the effect of a policy definition without modifying the underlying policy definition or using a parameterized effect in the policy definition.')
param overrides array = []

@sys.description('Optional. The resource selector list to filter policies by resource properties. Facilitates safe deployment practices (SDP) by enabling gradual roll out policy assignments based on factors like resource location, resource type, or whether a resource has a location.')
param resourceSelectors array = []

@sys.description('Optional. Enable/Disable usage telemetry for module.')
param enableTelemetry bool = true

#disable-next-line no-deployments-resources
resource avmTelemetry 'Microsoft.Resources/deployments@2024-03-01' = if (enableTelemetry) {
name: take(
'46d3xbcp.ptn.authorization-policyassignment.${replace('-..--..-', '.', '-')}.${substring(uniqueString(deployment().name, location), 0, 4)}',
64
)
location: location
properties: {
mode: 'Incremental'
template: {
'$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#'
contentVersion: '1.0.0.0'
resources: []
outputs: {
telemetry: {
type: 'String'
value: 'For more information, see https://aka.ms/avm/TelemetryInfo'
}
}
}
}
}

module policyAssignment_mg 'modules/management-group.bicep' = if (empty(subscriptionId) && empty(resourceGroupName)) {
name: '${uniqueString(deployment().name, location)}-PolicyAssignment-MG-Module'
scope: managementGroup(managementGroupId)
params: {
name: name
policyDefinitionId: policyDefinitionId
displayName: !empty(displayName) ? displayName : ''
description: !empty(description) ? description : ''
parameters: !empty(parameters) ? parameters : {}
identity: identity
userAssignedIdentityId: userAssignedIdentityId
roleDefinitionIds: !empty(roleDefinitionIds) ? roleDefinitionIds : []
metadata: !empty(metadata) ? metadata : {}
nonComplianceMessages: !empty(nonComplianceMessages) ? nonComplianceMessages : []
enforcementMode: enforcementMode
notScopes: !empty(notScopes) ? notScopes : []
location: location
overrides: !empty(overrides) ? overrides : []
resourceSelectors: !empty(resourceSelectors) ? resourceSelectors : []
additionalManagementGroupsIDsToAssignRbacTo: additionalManagementGroupsIDsToAssignRbacTo
additionalSubscriptionIDsToAssignRbacTo: additionalSubscriptionIDsToAssignRbacTo
additionalResourceGroupResourceIDsToAssignRbacTo: additionalResourceGroupResourceIDsToAssignRbacTo
}
}

// Create additional role assignments at different management group scopes if needed

module policyAssignment_sub 'modules/subscription.bicep' = if (!empty(subscriptionId) && empty(resourceGroupName)) {
name: '${uniqueString(deployment().name, location)}-PolicyAssignment-Sub-Module'
scope: subscription(subscriptionId)
params: {
name: name
policyDefinitionId: policyDefinitionId
displayName: !empty(displayName) ? displayName : ''
description: !empty(description) ? description : ''
parameters: !empty(parameters) ? parameters : {}
identity: identity
userAssignedIdentityId: userAssignedIdentityId
roleDefinitionIds: !empty(roleDefinitionIds) ? roleDefinitionIds : []
metadata: !empty(metadata) ? metadata : {}
nonComplianceMessages: !empty(nonComplianceMessages) ? nonComplianceMessages : []
enforcementMode: enforcementMode
notScopes: !empty(notScopes) ? notScopes : []
subscriptionId: subscriptionId
location: location
overrides: !empty(overrides) ? overrides : []
resourceSelectors: !empty(resourceSelectors) ? resourceSelectors : []
}
}

module policyAssignment_rg 'modules/resource-group.bicep' = if (!empty(resourceGroupName) && !empty(subscriptionId)) {
name: '${uniqueString(deployment().name, location)}-PolicyAssignment-RG-Module'
scope: resourceGroup(subscriptionId, resourceGroupName)
params: {
name: name
policyDefinitionId: policyDefinitionId
displayName: !empty(displayName) ? displayName : ''
description: !empty(description) ? description : ''
parameters: !empty(parameters) ? parameters : {}
identity: identity
userAssignedIdentityId: userAssignedIdentityId
roleDefinitionIds: !empty(roleDefinitionIds) ? roleDefinitionIds : []
metadata: !empty(metadata) ? metadata : {}
nonComplianceMessages: !empty(nonComplianceMessages) ? nonComplianceMessages : []
enforcementMode: enforcementMode
notScopes: !empty(notScopes) ? notScopes : []
subscriptionId: subscriptionId
location: location
overrides: !empty(overrides) ? overrides : []
resourceSelectors: !empty(resourceSelectors) ? resourceSelectors : []
}
}

@sys.description('Policy Assignment Name.')
output name string = empty(subscriptionId) && empty(resourceGroupName)
? policyAssignment_mg.outputs.name
: (!empty(subscriptionId) && empty(resourceGroupName)
? policyAssignment_sub.outputs.name
: policyAssignment_rg.outputs.name)

@sys.description('Policy Assignment principal ID.')
output principalId string = empty(subscriptionId) && empty(resourceGroupName)
? policyAssignment_mg.outputs.principalId
: (!empty(subscriptionId) && empty(resourceGroupName)
? policyAssignment_sub.outputs.principalId
: policyAssignment_rg.outputs.principalId)

@sys.description('Policy Assignment resource ID.')
output resourceId string = empty(subscriptionId) && empty(resourceGroupName)
? policyAssignment_mg.outputs.resourceId
: (!empty(subscriptionId) && empty(resourceGroupName)
? policyAssignment_sub.outputs.resourceId
: policyAssignment_rg.outputs.resourceId)

@sys.description('The location the resource was deployed into.')
output location string = empty(subscriptionId) && empty(resourceGroupName)
? policyAssignment_mg.outputs.location
: (!empty(subscriptionId) && empty(resourceGroupName)
? policyAssignment_sub.outputs.location
: policyAssignment_rg.outputs.location)
Loading