@@ -14,7 +14,6 @@ function cacheBuiltIn {
1414 $htCacheDefinitionsPolicy = $using :htCacheDefinitionsPolicy
1515 $htCacheDefinitionsPolicySet = $using :htCacheDefinitionsPolicySet
1616 $htCacheDefinitionsRole = $using :htCacheDefinitionsRole
17- $htRoleDefinitionIdsUsedInPolicy = $using :htRoleDefinitionIdsUsedInPolicy
1817 $ValidPolicyEffects = $using :ValidPolicyEffects
1918 $htHashesBuiltInPolicy = $using :htHashesBuiltInPolicy
2019 # vars
@@ -78,14 +77,6 @@ function cacheBuiltIn {
7877
7978 if (-not [string ]::IsNullOrWhiteSpace($builtinPolicyDefinition.properties.policyRule.then.details.roleDefinitionIds )) {
8079 $script :htCacheDefinitionsPolicy .(($builtinPolicyDefinition.Id ).ToLower()).RoleDefinitionIds = $builtinPolicyDefinition.properties.policyRule.then.details.roleDefinitionIds
81- foreach ($roledefinitionId in $builtinPolicyDefinition.properties.policyRule.then.details.roleDefinitionIds ) {
82- if (-not $htRoleDefinitionIdsUsedInPolicy .(($roledefinitionId ).ToLower())) {
83- $script :htRoleDefinitionIdsUsedInPolicy .(($roledefinitionId ).ToLower()) = @ {
84- UsedInPolicies = [System.Collections.ArrayList ]@ ()
85- }
86- }
87- $null = $script :htRoleDefinitionIdsUsedInPolicy .(($roledefinitionId ).ToLower()).UsedInPolicies.Add($builtinPolicyDefinition.Id )
88- }
8980 }
9081 else {
9182 $script :htCacheDefinitionsPolicy .(($builtinPolicyDefinition.Id ).ToLower()).RoleDefinitionIds = ' n/a'
@@ -166,14 +157,6 @@ function cacheBuiltIn {
166157
167158 if (-not [string ]::IsNullOrWhiteSpace($staticPolicyDefinition.properties.policyRule.then.details.roleDefinitionIds )) {
168159 $script :htCacheDefinitionsPolicy .(($staticPolicyDefinition.Id ).ToLower()).RoleDefinitionIds = $staticPolicyDefinition.properties.policyRule.then.details.roleDefinitionIds
169- foreach ($roledefinitionId in $staticPolicyDefinition.properties.policyRule.then.details.roleDefinitionIds ) {
170- if (-not $htRoleDefinitionIdsUsedInPolicy .(($roledefinitionId ).ToLower())) {
171- $script :htRoleDefinitionIdsUsedInPolicy .(($roledefinitionId ).ToLower()) = @ {
172- UsedInPolicies = [System.Collections.ArrayList ]@ ()
173- }
174- }
175- $null = $script :htRoleDefinitionIdsUsedInPolicy .(($roledefinitionId ).ToLower()).UsedInPolicies.Add($staticPolicyDefinition.Id )
176- }
177160 }
178161 else {
179162 $script :htCacheDefinitionsPolicy .(($staticPolicyDefinition.Id ).ToLower()).RoleDefinitionIds = ' n/a'
@@ -236,22 +219,23 @@ function cacheBuiltIn {
236219 }
237220
238221 if ($builtInCapability -eq ' RoleDefinitions' ) {
239- # Write-Host "`$ignoreARMLocation = '$ignoreARMLocation'" -ForegroundColor Yellow
222+
223+ # region subscriptionScope
240224 if ($ignoreARMLocation ) {
241- $currentTask = ' Caching built-in Role definitions'
225+ $currentTask = ' Caching built-in Role definitions (subscriptionScope) '
242226 Write-Host " $currentTask "
243- $uri = " $ ( $azAPICallConf [' azAPIEndpointUrls' ].' ARM' ) /subscriptions/$ ( $azAPICallConf [' checkContext' ].Subscription.Id) /providers/Microsoft.Authorization/roleDefinitions?api-version=2022-05 -01-preview&`$ filter=type eq 'BuiltInRole'"
227+ $uri = " $ ( $azAPICallConf [' azAPIEndpointUrls' ].' ARM' ) /subscriptions/$ ( $azAPICallConf [' checkContext' ].Subscription.Id) /providers/Microsoft.Authorization/roleDefinitions?api-version=2023-07 -01-preview&`$ filter=type eq 'BuiltInRole'"
244228 }
245229 else {
246- $currentTask = " Caching built-in Role definitions (Location: '$ ( $ARMLocation ) ')"
230+ $currentTask = " Caching built-in Role definitions (Location: '$ ( $ARMLocation ) ') (subscriptionScope) "
247231 Write-Host " $currentTask "
248- $uri = " $ ( $azAPICallConf [' azAPIEndpointUrls' ]." ARM$ ( $ARMLocation ) " ) /subscriptions/$ ( $azAPICallConf [' checkContext' ].Subscription.Id) /providers/Microsoft.Authorization/roleDefinitions?api-version=2022-05 -01-preview&`$ filter=type eq 'BuiltInRole'"
232+ $uri = " $ ( $azAPICallConf [' azAPIEndpointUrls' ]." ARM$ ( $ARMLocation ) " ) /subscriptions/$ ( $azAPICallConf [' checkContext' ].Subscription.Id) /providers/Microsoft.Authorization/roleDefinitions?api-version=2023-07 -01-preview&`$ filter=type eq 'BuiltInRole'"
249233 }
250234
251235 $method = ' GET'
252236 $requestRoleDefinitionAPI = AzAPICall - AzAPICallConfiguration $azAPICallConf - uri $uri - method $method - currentTask $currentTask
253237
254- Write-Host " $ ( $requestRoleDefinitionAPI.Count ) built-in Role definitions returned"
238+ Write-Host " $ ( $requestRoleDefinitionAPI.Count ) built-in Role definitions returned (subscriptionScope) "
255239 foreach ($roleDefinition in $requestRoleDefinitionAPI ) {
256240 if (
257241 (
@@ -276,7 +260,7 @@ function cacheBuiltIn {
276260 $roleCapable4RoleAssignmentsWrite = $false
277261 }
278262
279- ($script :htCacheDefinitionsRole ).($roleDefinition.name ) = @ {
263+ ($script :htCacheDefinitionsRole ).($roleDefinition.name ) = @ {
280264 Id = ($roleDefinition.name )
281265 Name = ($roleDefinition.properties.roleName )
282266 IsCustom = $false
@@ -291,6 +275,67 @@ function cacheBuiltIn {
291275 }
292276
293277 }
278+ # endregion subscriptionScope
279+
280+ # region tenantScope
281+ if ($ignoreARMLocation ) {
282+ $currentTask = ' Caching built-in Role definitions (tenantScope)'
283+ Write-Host " $currentTask "
284+ $uri = " $ ( $azAPICallConf [' azAPIEndpointUrls' ].' ARM' ) /providers/Microsoft.Authorization/roleDefinitions?api-version=2023-07-01-preview&`$ filter=type eq 'BuiltInRole'"
285+ }
286+ else {
287+ $currentTask = " Caching built-in Role definitions (Location: '$ ( $ARMLocation ) ') (tenantScope)"
288+ Write-Host " $currentTask "
289+ $uri = " $ ( $azAPICallConf [' azAPIEndpointUrls' ]." ARM$ ( $ARMLocation ) " ) /providers/Microsoft.Authorization/roleDefinitions?api-version=2023-07-01-preview&`$ filter=type eq 'BuiltInRole'"
290+ }
291+
292+ $method = ' GET'
293+ $requestRoleDefinitionTenantScopeAPI = AzAPICall - AzAPICallConfiguration $azAPICallConf - uri $uri - method $method - currentTask $currentTask
294+
295+ Write-Host " $ ( $requestRoleDefinitionTenantScopeAPI.Count ) built-in Role definitions returned (tenantScope)"
296+ foreach ($roleDefinition in $requestRoleDefinitionTenantScopeAPI ) {
297+ if (-not $htCacheDefinitionsRole .($roleDefinition.name )) {
298+ Write-Host " tenantScope role: '$ ( $roleDefinition.properties.roleName ) ' - $ ( $roleDefinition.name ) "
299+ if (
300+ (
301+ $roleDefinition.properties.permissions.actions -contains ' Microsoft.Authorization/roleassignments/write' -or
302+ $roleDefinition.properties.permissions.actions -contains ' Microsoft.Authorization/roleassignments/*' -or
303+ $roleDefinition.properties.permissions.actions -contains ' Microsoft.Authorization/*/write' -or
304+ $roleDefinition.properties.permissions.actions -contains ' Microsoft.Authorization/*' -or
305+ $roleDefinition.properties.permissions.actions -contains ' */write' -or
306+ $roleDefinition.properties.permissions.actions -contains ' *'
307+ ) -and (
308+ $roleDefinition.properties.permissions.notActions -notcontains ' Microsoft.Authorization/roleassignments/write' -and
309+ $roleDefinition.properties.permissions.notActions -notcontains ' Microsoft.Authorization/roleassignments/*' -and
310+ $roleDefinition.properties.permissions.notActions -notcontains ' Microsoft.Authorization/*/write' -and
311+ $roleDefinition.properties.permissions.notActions -notcontains ' Microsoft.Authorization/*' -and
312+ $roleDefinition.properties.permissions.notActions -notcontains ' */write' -and
313+ $roleDefinition.properties.permissions.notActions -notcontains ' *'
314+ )
315+ ) {
316+ $roleCapable4RoleAssignmentsWrite = $true
317+ }
318+ else {
319+ $roleCapable4RoleAssignmentsWrite = $false
320+ }
321+
322+ ($script :htCacheDefinitionsRole ).($roleDefinition.name ) = @ {
323+ Id = ($roleDefinition.name )
324+ Name = ($roleDefinition.properties.roleName )
325+ IsCustom = $false
326+ AssignableScopes = ($roleDefinition.properties.assignableScopes )
327+ Actions = ($roleDefinition.properties.permissions.actions )
328+ NotActions = ($roleDefinition.properties.permissions.notActions )
329+ DataActions = ($roleDefinition.properties.permissions.dataActions )
330+ NotDataActions = ($roleDefinition.properties.permissions.notDataActions )
331+ Json = $roleDefinition
332+ LinkToAzAdvertizer = " <a class=`" externallink`" href=`" https://www.azadvertizer.net/azrolesadvertizer/$ ( $roleDefinition.name ) .html`" target=`" _blank`" rel=`" noopener`" >$ ( $roleDefinition.properties.roleName ) </a>"
333+ RoleCanDoRoleAssignments = $roleCapable4RoleAssignmentsWrite
334+ }
335+ }
336+
337+ }
338+ # endregion tenantScope
294339 }
295340 }
296341
0 commit comments