Data/CommandRoleMap.psd1
|
@{ # ------------------------------------------------------------------------ # PSAutoRBAC command -> RBAC requirement knowledge base # ------------------------------------------------------------------------ # Each platform maps a command name (case-insensitive) to the *minimum* # role / permission set required to execute it successfully at the given # scope. Entries are intentionally conservative (least privilege). # # Schema per command entry: # Roles = @( 'BuiltInRoleName', ... ) # Azure RBAC / Entra role names # Actions = @( 'provider/operation', ... ) # underlying control-plane actions # ScopeLevel = 'Tenant' | 'ManagementGroup' | 'Subscription' | 'ResourceGroup' | 'Resource' | 'None' # Notes = 'free-text guidance' # # The map is data-driven on purpose: extend it without touching code. # Lookups fall back to the '*Default' entry for a platform when a command # is unknown, and Get-CommandRBACRequirement reports IsKnown = $false. # ------------------------------------------------------------------------ 'Azure PowerShell' = @{ 'Connect-AzAccount' = @{ Roles = @('Reader') Actions = @('*/read') ScopeLevel = 'Subscription' Notes = 'Authentication itself needs no RBAC role, but a usable session typically requires at least Reader to enumerate subscriptions and resources.' } 'New-AzResourceGroup' = @{ Roles = @('Contributor') Actions = @('Microsoft.Resources/subscriptions/resourceGroups/write') ScopeLevel = 'Subscription' Notes = 'Creating a resource group is a write at subscription scope.' } 'Remove-AzResourceGroup' = @{ Roles = @('Contributor') Actions = @('Microsoft.Resources/subscriptions/resourceGroups/delete') ScopeLevel = 'ResourceGroup' Notes = 'Deleting a resource group requires delete on the group and its contained resources.' } 'Set-AzResourceGroup' = @{ Roles = @('Contributor') Actions = @('Microsoft.Resources/subscriptions/resourceGroups/write') ScopeLevel = 'ResourceGroup' Notes = 'Updating tags / properties on a resource group is a write.' } 'New-AzRoleAssignment' = @{ Roles = @('Role Based Access Control Administrator') Actions = @('Microsoft.Authorization/roleAssignments/write') ScopeLevel = 'ResourceGroup' Notes = 'Creating role assignments requires roleAssignments/write. RBAC Administrator, User Access Administrator, or Owner grant this.' } 'Remove-AzRoleAssignment' = @{ Roles = @('Role Based Access Control Administrator') Actions = @('Microsoft.Authorization/roleAssignments/delete') ScopeLevel = 'ResourceGroup' Notes = 'Removing role assignments requires roleAssignments/delete.' } 'New-AzPolicyAssignment' = @{ Roles = @('Resource Policy Contributor') Actions = @('Microsoft.Authorization/policyAssignments/write') ScopeLevel = 'ResourceGroup' Notes = 'Assigning policy requires policyAssignments/write.' } 'New-AzResource' = @{ Roles = @('Contributor') Actions = @('Microsoft.Resources/deployments/write') ScopeLevel = 'ResourceGroup' Notes = 'Creating arbitrary resources requires write at the target scope; Contributor is the broad baseline.' } '*Default' = @{ Roles = @('Contributor') Actions = @('*/read', '*/write') ScopeLevel = 'Subscription' Notes = 'Unknown command; defaulting to Contributor as a conservative baseline. Validate and add an explicit mapping.' } } 'Microsoft Graph' = @{ 'Connect-MgGraph' = @{ Roles = @('Directory Readers') Actions = @('microsoft.directory/users/standard/read') ScopeLevel = 'Tenant' Notes = 'Sign-in plus delegated/app scopes; Directory Readers is the minimum to enumerate directory objects.' } 'New-MgGroup' = @{ Roles = @('Groups Administrator') Actions = @('microsoft.directory/groups/create') ScopeLevel = 'Tenant' Notes = 'Creating security groups requires Groups Administrator (or a custom role with groups/create).' } 'New-MgGroupMember' = @{ Roles = @('Groups Administrator') Actions = @('microsoft.directory/groups/members/update') ScopeLevel = 'Tenant' Notes = 'Adding members to a group requires group membership write.' } '*Default' = @{ Roles = @('Directory Readers') Actions = @('microsoft.directory/users/standard/read') ScopeLevel = 'Tenant' Notes = 'Unknown Graph command; defaulting to Directory Readers. Add an explicit mapping.' } } 'Microsoft Fabric' = @{ '*Default' = @{ Roles = @('Fabric Administrator') Actions = @('Microsoft.Fabric/capacities/read') ScopeLevel = 'Tenant' Notes = 'Fabric admin operations require Fabric Administrator or capacity-scoped roles. Add explicit mappings as commands are onboarded.' } } 'Microsoft Purview' = @{ '*Default' = @{ Roles = @('Purview Data Curator') Actions = @('Microsoft.Purview/accounts/read') ScopeLevel = 'Resource' Notes = 'Purview data-plane roles are managed in the Purview governance portal. Add explicit mappings as commands are onboarded.' } } } |