azure-role-selector
Select and configure appropriate Azure RBAC roles following the principle of least privilege for secure access control
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Select and configure appropriate Azure RBAC roles following the principle of least privilege for secure access control
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Automates the integration of Azure Application Insights telemetry into web applications for monitoring, diagnostics, and performance tracking
Visualize Azure resources, dependencies, and infrastructure architecture with diagrams and documentation tools
Create interactive HTML5 Canvas visualizations, graphics, and animations with modern JavaScript
Generate and manipulate Microsoft Word (.docx) documents programmatically using modern libraries
Create production-grade, distinctive frontend interfaces with modern UX/UI patterns for web applications
Build Model Context Protocol (MCP) servers to extend GitHub Copilot and AI agents with custom tools and data sources
| name | Azure Role Selector |
| description | Select and configure appropriate Azure RBAC roles following the principle of least privilege for secure access control |
This skill helps you choose the right Azure RBAC (Role-Based Access Control) roles and implement least-privilege access patterns for applications and users.
Use this skill when you need to:
| Role | Use Case | Permissions |
|---|---|---|
| Owner | Full control including access management | All actions + role assignments |
| Contributor | Manage resources but not access | All actions except role assignments |
| Reader | View-only access | Read all resources |
# List all operations for a service
az provider operation show --namespace Microsoft.Storage
# Search for specific permissions
az provider operation show --namespace Microsoft.KeyVault | grep "secrets/read"
# List all built-in roles
az role definition list --output table
# Search by name
az role definition list --name "*Storage Blob*" --output table
# Get detailed role permissions
az role definition list --name "Storage Blob Data Reader" --output json
# Resource-level (most restrictive - RECOMMENDED)
az role assignment create \
--assignee <principal-id> \
--role "Storage Blob Data Reader" \
--scope "/subscriptions/<sub-id>/resourceGroups/<rg>/providers/Microsoft.Storage/storageAccounts/<account>"
# Resource Group-level
az role assignment create \
--assignee <principal-id> \
--role "Storage Blob Data Reader" \
--scope "/subscriptions/<sub-id>/resourceGroups/<rg>"
# Subscription-level (least restrictive - use sparingly)
az role assignment create \
--assignee <principal-id> \
--role "Storage Blob Data Reader" \
--scope "/subscriptions/<sub-id>"
Requirements: App needs to read secrets from Key Vault
Solution:
# Enable Managed Identity
az webapp identity assign \
--name myapp \
--resource-group myrg
# Get principal ID
PRINCIPAL_ID=$(az webapp identity show \
--name myapp \
--resource-group myrg \
--query principalId -o tsv)
# Assign role at Key Vault scope
az role assignment create \
--assignee $PRINCIPAL_ID \
--role "Key Vault Secrets User" \
--scope "/subscriptions/<sub-id>/resourceGroups/myrg/providers/Microsoft.KeyVault/vaults/mykeyvault"
Requirements: Function needs to create and update blobs
Solution:
# Enable Managed Identity on Function App
az functionapp identity assign \
--name myfunc \
--resource-group myrg
# Get principal ID
PRINCIPAL_ID=$(az functionapp identity show \
--name myfunc \
--resource-group myrg \
--query principalId -o tsv)
# Assign role at storage account scope
az role assignment create \
--assignee $PRINCIPAL_ID \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/<sub-id>/resourceGroups/myrg/providers/Microsoft.Storage/storageAccounts/mystorage"
Requirements: GitHub Actions deploying to resource group
Solution:
# Create service principal
az ad sp create-for-rbac \
--name "github-actions-deploy" \
--role Contributor \
--scopes "/subscriptions/<sub-id>/resourceGroups/myrg" \
--sdk-auth
# Note: Limit to resource group, not subscription
# Use the output JSON in GitHub Secrets
Requirements: Security team needs view access
Solution:
# Assign Reader role at subscription level
az role assignment create \
--assignee <user-principal-name> \
--role "Reader" \
--scope "/subscriptions/<sub-id>"
# Plus Security Reader for security insights
az role assignment create \
--assignee <user-principal-name> \
--role "Security Reader" \
--scope "/subscriptions/<sub-id>"
When built-in roles are too broad:
{
"Name": "Custom Container Reader",
"IsCustom": true,
"Description": "Read-only access to specific blob containers",
"Actions": [
"Microsoft.Storage/storageAccounts/blobServices/containers/read"
],
"NotActions": [],
"DataActions": [
"Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read"
],
"NotDataActions": [],
"AssignableScopes": [
"/subscriptions/<subscription-id>/resourceGroups/<resource-group>"
]
}
Create the role:
az role definition create --role-definition custom-role.json
{
"Name": "App Deployer",
"IsCustom": true,
"Description": "Deploy web apps but cannot delete",
"Actions": [
"Microsoft.Web/sites/write",
"Microsoft.Web/sites/config/write",
"Microsoft.Web/sites/restart/action",
"Microsoft.Web/sites/read"
],
"NotActions": [
"Microsoft.Web/sites/delete"
],
"DataActions": [],
"NotDataActions": [],
"AssignableScopes": [
"/subscriptions/<subscription-id>"
]
}
| Scenario | Role | Scope | Notes |
|---|---|---|---|
| App reads secrets | Key Vault Secrets User | Key Vault | Use Managed Identity |
| App writes blobs | Storage Blob Data Contributor | Storage Account | Avoid account keys |
| CI/CD deploys apps | Website Contributor | Resource Group | Not subscription |
| Read SQL data | Custom role | Database | Use SQL auth + RBAC |
| Monitor metrics | Monitoring Reader | Resource or RG | For dashboards |
| Security audit | Security Reader | Subscription | View-only |
| Manage everything | Contributor | Resource Group | Not Owner |
# List all role assignments for a principal
az role assignment list \
--assignee <principal-id> \
--all \
--output table
# List assignments in a resource group
az role assignment list \
--resource-group myrg \
--output table
# Check effective permissions
az role assignment list \
--assignee <principal-id> \
--scope <scope> \
--include-inherited
Causes:
Solutions:
# Verify role assignment exists
az role assignment list --assignee <principal-id>
# Check if Managed Identity is enabled
az webapp identity show --name myapp --resource-group myrg
# Verify scope matches resource
az role assignment list --scope <full-resource-id>
Analysis:
# Get all permissions for a principal
az role assignment list --assignee <principal-id> --all
# Review actual permissions used (check Azure Advisor)
Resolution:
Causes:
Solutions:
# Check your permissions
az role assignment list --assignee <your-principal-id>
# Verify you can assign roles
az role definition list --name "User Access Administrator"
param([string]$ResourceName, [string]$ResourceGroup)
$identity = az webapp identity show `
--name $ResourceName `
--resource-group $ResourceGroup | ConvertFrom-Json
$assignments = az role assignment list `
--assignee $identity.principalId `
--all | ConvertFrom-Json
Write-Host "Managed Identity Permissions for $ResourceName"
Write-Host "Principal ID: $($identity.principalId)"
Write-Host ""
foreach ($assignment in $assignments) {
Write-Host "Role: $($assignment.roleDefinitionName)"
Write-Host "Scope: $($assignment.scope)"
Write-Host ""
}