fai-managed-identity-setup — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited fai-managed-identity-setup (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Configure Managed Identity with RBAC for credential-free Azure service access.
| Type | Use When |
|---|---|
| System-assigned | Single service, lifecycle tied to resource |
| User-assigned | Shared across services, pre-created |
resource functionApp 'Microsoft.Web/sites@2023-12-01' = {
name: appName
location: location
identity: { type: 'SystemAssigned' }
// ...
}var roles = {
openAIUser: '5e0bd9bd-7b93-4f28-af87-19fc36ad61bd'
blobReader: '2a2b9908-6ea1-4ae2-8e65-a410df84e7d1'
kvSecretsUser: '4633458b-17de-408a-b874-0445c86b69e6'
}
resource openAIRole 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(openAI.id, app.id, roles.openAIUser)
scope: openAI
properties: {
principalId: functionApp.identity.principalId
roleDefinitionId: subscriptionResourceId(
'Microsoft.Authorization/roleDefinitions', roles.openAIUser)
principalType: 'ServicePrincipal'
}
}from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from openai import AzureOpenAI
token_provider = get_bearer_token_provider(
DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)
client = AzureOpenAI(
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
azure_ad_token_provider=token_provider,
api_version="2024-10-21",
)var client = new AzureOpenAIClient(
new Uri(endpoint), new DefaultAzureCredential());| Service | Role | Purpose |
|---|---|---|
| Azure OpenAI | Cognitive Services OpenAI User | Call completions/embeddings |
| Blob Storage | Storage Blob Data Reader | Read documents |
| Key Vault | Key Vault Secrets User | Read secrets |
| AI Search | Search Index Data Reader | Query indexes |
| App Config | App Configuration Data Reader | Read config |
| Cosmos DB | Cosmos DB Built-in Data Contributor | Read/write data |
| Issue | Cause | Fix |
|---|---|---|
| 403 Forbidden | Role not assigned or wrong scope | Verify role + scope, wait 5min for propagation |
| Token acquisition fails | MI not enabled on resource | Enable identity in resource config |
| Works locally, fails in Azure | Local uses different credential | DefaultAzureCredential tries MI first in Azure |
| Multiple identities conflict | Both system + user assigned | Specify clientId for user-assigned |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.