Skip to main content

Azure SRE Agent governance reference

Facts an architecture or security review asks for: what the service creates, which identities and roles it uses, how egress is routed, the order in which authorisation controls are evaluated, what persists and where, what the telemetry contains, and how it is billed.

Identity, permissions and tool access policy come from the Microsoft Learn articles listed under sources, read on 14 September 2026. The rest comes from an architecture review draft of the same date, which drew on Microsoft release announcements and the product documentation at sre.azure.com. The service changes quickly and Microsoft's own pages disagree with each other in places, so the conflicts are listed near the end rather than smoothed over. Re-verify pricing, regions, and preview status before a figure is used to authorise spend or a production deployment.

Access control has three layers, and they are configured in different places:

LayerControlsConfigured at
User rolesWhat people can do with the agentAzure IAM on the agent resource
Run modesWhether the agent asks before actingPer response plan and per scheduled task
Agent permissionsWhat the agent can reach in Azure, with on-behalf-of as the fallbackRBAC roles on resource groups

For the portal walkthrough see Azure SRE Agent portal surfaces, for the lab build see Set up an Azure SRE Agent, and for the reasoning behind the controls, plus a diagram of how the whole service fits together, see About Azure SRE Agent in a governed estate.

Service status​

CapabilityStatus
Core serviceGA, March 2026
VNet egress integrationGA, around August 2026
Network audit and workspace inspectGA
Tool access policies (allow, ask, deny)GA
Agent hooksGA
GitHub Enterprise and bring your own GitHub AppPreview
Managed connectors (SaaS catalogue)Preview
Private Plugins MarketplacePreview
Inbound private endpoint to the agentNot supported

Resource model​

The agent is an ARM resource of type Microsoft.App/agents. The runtime is built on the Azure Container Apps platform, which is why the VNet subnet must be delegated to Microsoft.App/environments.

Resource created at provisioningPurpose
Microsoft.App/agentsThe agent
User-assigned managed identityThe identity that holds the agent's RBAC
System-assigned managed identityInternal infrastructure operations, and the default reader for Key Vault secrets such as a GitHub App private key
Application InsightsAgent actions, tool calls, model calls, approval decisions
Log Analytics workspaceBacking store for Application Insights

Two API surfaces:

  • Control plane, ARM. Create, configure and delete the agent and its sub-resources. This is what Bicep and Terraform reach.
  • Data plane, a per-agent hostname of the form https://<agent>.<region>.azuresre.ai. Chat, threads, repository connections, knowledge upload and hook configuration.

Regions​

An agent lives in one region in one subscription, and the region cannot be changed after creation. It can manage resources in any region or subscription where its identity holds permissions.

Supported: Australia East, Canada Central, East US 2, France Central, Italy North, Korea Central, South Africa North, Southeast Asia, Sweden Central, UK South.

The subscription must be registered for the service. An empty region dropdown means it is not.

Execution boundaries​

ComponentRuns inRoleHolds credentials
Agent reasoningMicrosoft-managed runtimeProcesses messages, selects tools, builds responsesNo
Tool executionPer-agent sandbox, a micro VMFile operations, bash, code analysis, MCP toolsNo, receives per-call tokens
Identity sidecarSeparate serviceIssues and manages tokensYes, exclusively
Network proxySeparate serviceValidates and routes every outbound requestInjects tokens in transit

Isolation is per agent: dedicated sandbox, separate database, separate blob storage, its own proxy instance, its own managed identity. Sandbox placement respects regional boundaries; Microsoft's stated example is that East US 2 sandboxes stay within Central US, North Central US or Canada Central.

One tool call runs as a fresh process with only explicitly declared environment variables, and the whole process tree terminates when it finishes. Token lifetimes: managed identity tokens about an hour, OAuth tokens refreshed 20 minutes before expiry, action tokens single use, blob SAS tokens an hour with refresh 15 minutes early.

The code interpreter in the sandbox has bash, Python and roughly 700 preinstalled packages. Arbitrary runtime installation is not available; extra packages are pre-installed into the base disk image through Workspace configuration.

Identity​

The agent's identities​

Two managed identities are created with the agent.

IdentityWhat it isWhat it is for
User-assigned managed identityA standalone identity resource in the agent's resource groupThe one you manage: assign RBAC roles to it, and select it in connector dropdowns
System-assigned managed identityAn internal identity used by the agent's infrastructureNothing you configure, it is managed automatically

The user-assigned identity appears in the resource group as an id-* resource, and its object (principal) ID is what role assignments use. Three ways to find it:

  • Agent portal, Settings then Azure settings. The name is in the Managed Identity field, and Go to Identity opens it in the Azure portal.
  • Azure portal, in the agent's resource group.
  • Azure CLI, which queries the agent through the container apps resource type rather than Microsoft.App/agents:
az resource show --resource-group <RESOURCE_GROUP_NAME> --name <AGENT_NAME> --resource-type Microsoft.App/containerApps --query identity.userAssignedIdentities

Permission levels​

Chosen at creation. The level decides which RBAC roles are assigned to the user-assigned identity on the resource groups you select.

LevelWhat it grantsBehaviour
ReaderCore monitoring roles plus resource-type-specific reader rolesRead-only diagnostics. Prompts for temporary elevation through on-behalf-of when it needs to act
PrivilegedCore monitoring roles plus resource-type-specific contributor roles, chosen from the resource types detected in the managed resource groups, for example Container App Contributor where Container Apps are presentTakes approved actions directly

Four roles are assigned at either level.

RoleScopeWhat it allows
ReaderResource groupView resources and properties
Log Analytics ReaderResource groupQuery logs and workspaces
Monitoring ReaderResource groupAccess metrics and monitoring data
Monitoring ContributorSubscriptionAcknowledge and close Azure Monitor alerts, and update monitoring settings

With no resource groups assigned at creation, the identity has no permissions at all.

Permissions follow resource group membership. Adding a resource group to the agent's scope assigns the identity's roles to it; removing one revokes all access to it. Individual permissions cannot be removed, only whole resource groups.

az role assignment create --assignee <AGENT_MANAGED_IDENTITY_ID> --role Reader --scope /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>
az role assignment create --assignee <AGENT_MANAGED_IDENTITY_ID> --role Reader --scope /subscriptions/<SUBSCRIPTION_ID>
az role assignment create --assignee <AGENT_MANAGED_IDENTITY_ID> --role Contributor --scope /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>

Microsoft's guidance is Reader at subscription scope for read-only breadth, and specific roles at resource group scope for write access.

The permission flow (managed identity if it holds the role, on-behalf-of if it does not) applies to everything the agent does: interactive chat, incident threads, scheduled runs, and autonomous operation.

On-behalf-of elevation​

When the managed identity lacks permission, the agent surfaces an approve prompt and executes under the approver's credentials, which it does not cache.

  • Only SRE Agent Administrator role holders can authorise it.
  • Personal Microsoft accounts can never authorise it, whatever role they hold. Work or school accounts only.
  • It applies in both run modes. An action beyond the identity's permissions pauses even in autonomous mode, including during autonomous incident response.
  • A user signed in with a personal account cannot authorise, so an administrator on a work or school account has to.

Human roles​

Assigned through IAM on the agent resource. The user who creates the agent automatically receives SRE Agent Administrator.

RoleCanCannot
SRE Agent ReaderView threads, logs, incidentsChat, request actions, modify anything
SRE Agent Standard UserChat, run diagnostics, request actions, manage scheduled tasks, upload knowledge, add repository connectorsApprove actions, create custom agents, delete resources
SRE Agent AuthorCreate custom agents, author response plans, configure incident managementChat, approve, upload knowledge, add repository connectors, create scheduled tasks
SRE Agent AdministratorEverything, including approvals, connectors, settings, deletion, on-behalf-of authorisation, hooks, network mode changes

What each role reaches, by area:

AreaReaderStandard UserAuthorAdministrator
ChatView threadsSend messages, start threadsView threadsFull access, approve actions, delete threads
Agent CanvasView custom agentsView custom agentsCreate, edit, delete custom agentsCreate, edit, delete custom agents
Knowledge baseBrowse documentsBrowse and uploadBrowse documentsUpload and delete
Code repository connectorsView connectorsView, add, editView connectorsAdd, edit, delete
Response plansView plansView plansCreate, edit, deleteCreate, edit, delete
Managed resourcesView resourcesView resourcesView resourcesAdd, remove
Scheduled tasksNoneCreate, edit, deleteNoneCreate, edit, delete
SettingsView settingsView settingsView settingsModify settings, stop or delete the agent

Four behaviours that surprise people:

  • Author alone cannot chat (no threads/write) and cannot add repositories or upload knowledge in the portal (no Microsoft.App/agents/memory/write). Assign Standard User alongside Author, or assign Administrator.
  • The ARM extension paths Microsoft.App/agents/{agent}/repositories and Microsoft.App/agents/{agent}/githubAuths use extendedAgents permissions, which Author does include. The same operation can therefore succeed through ARM and fail in the portal for the same user.
  • Azure Owner and Contributor are control-plane roles and do not grant SRE Agent data actions. A user with no SRE Agent role sees an Access Required screen, with a banner offering to auto-assign Administrator when they hold Owner or Contributor on the resource.
  • Enforcement is in the backend, not the UI. An insufficient role returns a 403 that can have an empty body, and buttons are not consistently disabled beforehand. Check the SRE Agent role assignment before troubleshooting Key Vault, ARM or networking.
az role assignment create --assignee user@company.com --role "SRE Agent Administrator" --scope <agent-resource-id>
az resource show --resource-group <RESOURCE_GROUP_NAME> --name <AGENT_NAME> --resource-type Microsoft.App/agents --query id -o tsv

Connector identities​

ConnectorIdentity
Azure resource operations (ARM, CLI, diagnostics)User-assigned managed identity
Outlook, TeamsManaged identity plus a named human's OAuth token, stored in a connector resource
Azure Data Explorer (Kusto)Managed identity, granted Viewer on the cluster. No OAuth sign-in
Azure DevOpsManaged identity, granted access to the organisation
GitHub (github.com)OAuth sign-in. No managed identity is used for the connection itself
GitHub Enterprise CloudGitHub App installation token, private key in Key Vault
Custom MCPEndpoint credentials you supply, optionally a managed identity for downstream Azure calls
Key VaultUser-assigned managed identity, falling back to system-assigned

For GitHub Enterprise Cloud (<tenant>.ghe.com), bring your own GitHub App is the only supported model; OAuth and personal access tokens are unavailable for those hosts. The App's private key sits in Key Vault as a PEM secret, the agent's identity holds Key Vault Secrets User, and installation tokens are minted at runtime. Using the unversioned secret URI picks up rotation automatically.

Network​

Egress modes​

ModeBehaviour
Unrestricted (default)Any internet endpoint reachable
LimitedDeny all outbound, allow an explicit wildcard host list
Azure VNetAll non-platform egress routes through a delegated subnet in your VNet

Settings persist across mode changes. Once a VNet is connected the other mode cards are disabled until it is disconnected.

Routing​

TrafficPathConfigurable
Log Analytics, Application Insights, AKS, databases, Key VaultYour VNetYes, default
On-premises over ExpressRoute or VPNYour VNetYes, if routes allow
Orchestration, model endpoints, telemetryMicrosoft-managed infraNo
Package registries (PyPI, npm, NuGet, apt)Managed infra by toggle, or your VNet with FQDN rulesYes
Code repositories (GitHub, GitHub Enterprise, Azure DevOps)Managed infra by toggle, or your VNet with FQDN rulesYes, per provider
Remote MCP serversManaged infra by toggle, or your VNetYes
Additional hostnamesManaged infra for listed hostsYes
Connector trafficPublic internetNo
Inbound to the agentNot supportedNo

Subnet​

  • Size /27 or larger per the GA announcement. The Learn network article still says /28 minimum with /26 for larger fleets.
  • Delegated to Microsoft.App/environments.
  • Same region as the agent.
  • Empty and dedicated.

Set under Settings, Workspace configuration, Networking.

Operator browser allowlist​

Separate from agent egress. These need to be reachable over both HTTP and WebSocket from operator workstations.

DomainPurpose
*.azuresre.aiAgent portal, API, real-time chat
sre.azure.comAgent management portal
portal.azure.comAzure portal
api.applicationinsights.ioApplication Insights query API
api.loganalytics.ioLog Analytics query API
api.loganalytics.azure.comLog Analytics query API, Azure domain
*.ods.opinsights.azure.comLog Analytics workspace ingestion
management.azure.comAzure Resource Manager
login.microsoftonline.comEntra ID authentication
*.login.microsoft.comEntra ID regional endpoints

Zscaler and several corporate proxies block *.azuresre.ai by default. A blocked WebSocket presents as an unresponsive chat rather than an error.

When a destination is denied or unroutable, the agent reports the failure in its investigation output, for example a connection timeout to a Log Analytics workspace, and carries on with what it can reach.

Authorisation​

Precedence​

Evaluated in this order for every tool call.

RungControlBehaviour
1, highestHooksScripts or LLM judges evaluate the call. Allow skips everything below. Deny blocks. A user-defined hook returning allow overrides tool access policies including a global deny; system hooks cannot. Overrides are audit-logged. Only administrators can create hooks.
2Tool access policiesAllow, ask or deny by tool-name glob. Deny blocks. Allow skips default approval, even in Review mode.
3Default approvalConnector ask settings and tools flagged RequiresApproval pause for a human.
4, lowestRun modeReview pauses for approval, Autonomous auto-approves.

Tool access policy scopes​

ScopeSet byRules allowedCovers
GlobalAdministratorAllow, ask, denyEvery custom agent and conversation on the agent
Custom agentAdministrator or authorAllow onlyConversations for that custom agent
ThreadAny userAllow onlyOne conversation

Only the global scope can deny. Narrower scopes widen access inside the global boundary and can never weaken a global deny.

Rules are evaluated in this order when the agent calls a tool:

  1. Deny, global only. A match blocks the tool.
  2. Allow, any scope. A match runs the tool immediately, even in Review mode.
  3. Ask, global only. A match pauses for approval in Review mode, and auto-approves in Autonomous mode.
  4. No match. Default behaviour applies.

Where a tool matches both allow and ask, allow wins, which is what makes a thread-level allow work as a temporary override for a tool the user has already validated.

Patterns are globs on tool names, with * as the wildcard, and toolGlob(argGlob) for tools that execute commands.

PatternMatches
RunAzCliWriteCommandsAny Azure CLI write command
bash(az * delete *)Any az ... delete ... command through the bash and shell tools
RunKubectlReadCommand(kubectl get *)Any kubectl get command
*All tools

Tool names that accept argument patterns:

Tool nameWhat it runs
RunInTerminalTerminal commands
RunShellCommandShell commands
RunAzCliReadCommandsAzure CLI read operations
RunAzCliWriteCommandsAzure CLI write operations
RunKubectlReadCommandkubectl read operations
RunKubectlWriteCommandkubectl write operations
ExecutePythonCodePython scripts
RunPsqlReadCommandPostgreSQL read queries
ValidatePsqlCommandPostgreSQL command validation
GeneratePdfReportPDF report generation

The aliases bash, shell and execute_bash expand to all command-string tools (Azure CLI, kubectl, shell) but not to Python or PDF tools, so Python patterns have to name ExecutePythonCode directly. Limit is 1,000 patterns per scope.

Global policies are set in the portal under Settings then Permissions, or through the data-plane API. The three endpoints:

curl -X PUT "https://<agent>/api/v2/agent/settings/global" -H "Content-Type: application/json" -d '{"permissions":{"allow":["RunAzCliReadCommands","RunKubectlReadCommand(kubectl get *)"],"ask":["RunKubectlWriteCommand(kubectl apply *)"],"deny":["bash(az * delete *)","RunKubectlWriteCommand(kubectl delete *)"]}}'
curl -X PUT "https://<agent>/api/v2/extendedAgent/<custom-agent>/permissions" -H "Content-Type: application/json" -d '{"allow":["RunKubectlWriteCommand(kubectl apply *)"]}'
curl -X PUT "https://<agent>/api/v2/threads/<thread-id>/permissions" -H "Content-Type: application/json" -d '{"allow":["RunKubectlWriteCommand(kubectl apply -f deploy.yaml)"]}'

How the four controls combine​

Reading across: the leftmost control that has an opinion decides, and everything to its right is skipped.

HookAccess policyConnector or RequiresApprovalRun modeResult
AllowskippedskippedskippedExecutes immediately
DenyskippedskippedskippedBlocked
AskskippedskippedskippedUser approves
No policyDenyskippedskippedBlocked
No policyAllowskippedskippedExecutes immediately
No policyAsknoneReviewUser approves
No policyAsknoneAutonomousAuto-approved
No policyNo matchAskReviewUser approves
No policyNo matchAskAutonomousAuto-approved
No policyNo matchNoAnyExecutes

No policy means no hooks configured, or hooks with no opinion on this tool. No match means no access policy rule covered it.

Run modes​

Review proposes and waits. Autonomous executes and reports.

Modes are set per response plan and per scheduled task; the agent-level setting applies only when nothing more specific does. Response plans and scheduled tasks default to Autonomous. The agent-level default is Review.

Review mode shows approve and deny for Azure infrastructure operations, meaning CLI, ARM and equivalent writes. Sending email, posting to Teams and querying external data sources proceed without that prompt.

Hooks​

Events: Stop, fired when the agent is about to return a final response, and PostToolUse, fired after a tool finishes successfully. Hooks run at agent level and custom-agent level, and both fire when both match, agent level first.

Two implementations: a prompt hook where an LLM returns a JSON decision, and a command hook running bash or Python in the sandbox.

Limits: 64 KB scripts, timeout 1 to 300 seconds, failMode of allow or block, and a rejection cap of 1 to 25 (default 3) for prompt Stop hooks. A Stop hook that rejects without a reason is treated as approval.

hooks:
PostToolUse:
- type: command
matcher: "Bash|ExecuteShellCommand"
timeout: 30
failMode: block
script: |
#!/usr/bin/env python3
import sys, json, re
context = json.load(sys.stdin)
command = context.get('tool_input', {}).get('command', '')
dangerous = [r'\brm\s+-rf\b', r'\bsudo\b', r'\bchmod\s+777\b']
for pattern in dangerous:
if re.search(pattern, command):
print(json.dumps({"decision": "block", "reason": f"Blocked: {pattern}"}))
sys.exit(0)
print(json.dumps({"decision": "allow"}))

Data​

What persists​

Raw query results are not written to a separate store. Chat and tool messages, including result summaries and excerpts, are serialised into the conversation thread.

DataStorageRetention
Conversation threadsPer-agent databaseUntil manually deleted
Session insightsDatabase and blobPersistent
Memory filesBlobPersistent across sessions
Thread filesBlobTied to the thread

There is no automatic expiry on threads, and no documented customer-managed key support for the agent's own stores.

Residency​

  • Content and conversation history are stored in the agent's region, wherever the managed resources are.
  • Inference may occur outside the agent's region, for both Anthropic and Azure OpenAI models.
  • For agents inside the EU Data Boundary using Azure OpenAI, inference stays within that boundary.
  • Anthropic models are not covered by EU Data Boundary commitments. Prompts, responses and resource analysis may be processed in the United States.
  • Anthropic is the default provider in most commercial regions. Azure OpenAI is the default in the EU, EFTA and UK, where Anthropic is opt-in with an explicit acknowledgement.
  • Anthropic is unavailable in government clouds (GCC, GCC High, DoD) and sovereign clouds.
  • Anthropic operates as a non-Microsoft provider managed by Microsoft, under the Microsoft Product Terms and DPA.
  • Neither Microsoft nor Anthropic uses the data to train models, and data is isolated by tenant and subscription.

Encryption at rest is Azure-managed, and external communication is HTTPS.

Telemetry​

Nine custom event types land in the customEvents table of the agent's Application Insights instance.

EventCapturesVolume
AgentToolExecutionEvery tool call: name, input, output, invoking sub-agentHigh
ModelGenerationEvery model call: input and output tokens, model ID, threadHigh
AgentResponseChat responses returned to a userHigh
AgentExecutionSession start and endMedium
MetaAgentRouting and orchestration decisionsMedium
AgentHandoffCross-agent handoffsMedium
AgentAzCliExecutionAzure CLI commands the agent ranLow
IncidentActivitySnapshotIncident lifecycle and outcomeLow
ApprovalDecisionA human approving or rejecting an actionLow

Present on every event: gen_ai.agent.id, gen_ai.agent.name, TraceId, SpanId, ParentSpanId, ThreadId, LogTimestamp, CorrelationId. TraceId follows one request from input through every tool call to the final response; ThreadId groups a whole conversation or incident.

Fields worth knowing by name:

EventFieldMeaning
AgentToolExecutionEventTypeToolStart or ToolEnd, paired on CallId
ToolNameFor example RunAzCliWriteCommands, SearchResource
ToolInputThe arguments, including the actual command text
ToolOutputThe result, on ToolEnd
SubAgentNameWhich agent invoked it
IncidentActivitySnapshotIncidentPlatformPagerDuty, ServiceNow, Azure Monitor
IncidentMitigatedByAgentTrue if the agent resolved it
IncidentAssistedByAgentTrue if it helped without resolving
AgentAutonomyLevelautonomous or review
ResponsePlanId, ResponsePlanCustomWhich plan handled it
IncidentCreatedOn, IncidentHandledOn, IncidentMitigatedOnThe three timestamps MTTR comes from
ModelGenerationEventTypeModelGenerationStart, End or Error
ModelIdWhich model served the call
InputTokens, OutputTokensToken counts behind cost attribution

ToolInput and ToolOutput carry real command text and real query results, so the workspace inherits the classification of the most sensitive system the agent can read. The workspace created at provisioning keeps whatever default retention it lands with.

Example, every write-class action in the last week:

customEvents
| where name in ("AgentToolExecution", "AgentAzCliExecution")
| where tostring(customDimensions.EventType) == "ToolStart"
| where tostring(customDimensions.ToolName) has_any ("Write", "AzCli", "Kubectl", "Terminal", "Shell", "Python")
| where timestamp > ago(7d)
| project timestamp,
Tool = tostring(customDimensions.ToolName),
Command = tostring(customDimensions.ToolInput),
Agent = tostring(customDimensions.SubAgentName),
Thread = tostring(customDimensions.ThreadId),
Trace = tostring(customDimensions.TraceId)
| sort by timestamp desc

Example, anything that ran unsupervised in the last month:

customEvents
| where name == "IncidentActivitySnapshot"
| where timestamp > ago(30d)
| where tostring(customDimensions.AgentAutonomyLevel) == "autonomous"
| summarize Incidents = count(),
Mitigated = countif(tostring(customDimensions.IncidentMitigatedByAgent) == "True")
by Plan = tostring(customDimensions.ResponsePlanId),
Service = tostring(customDimensions.IncidentImpactedService)
| sort by Incidents desc

Example, token burn by agent and model:

customEvents
| where name == "ModelGeneration"
| where tostring(customDimensions.EventType) == "ModelGenerationEnd"
| where timestamp > ago(30d)
| extend Agent = tostring(customDimensions.AgentName),
Model = tostring(customDimensions.ModelId),
InTok = toint(customDimensions.InputTokens),
OutTok = toint(customDimensions.OutputTokens)
| summarize Calls = count(), Input = sum(InTok), Output = sum(OutTok)
by Agent, Model, Day = bin(timestamp, 1d)
| sort by Day desc, Output desc

Deployment​

Prerequisites:

  • Microsoft.App resource provider registered on the subscription.
  • Owner, or Contributor plus User Access Administrator, on the subscription, because role assignment needs Microsoft.Authorization/roleAssignments/write.
  • Owner or User Access Administrator on every resource group assigned to the agent.
  • The subscription registered for the service in a supported region.
  • *.azuresre.ai reachable from operator workstations, WebSockets included.
  • For VNet mode, an empty dedicated delegated subnet in the agent's region.

Microsoft publishes templates in the microsoft/sre-agent repository with four backends, Bicep by default, Terraform through the azapi provider, PowerShell, and azd, all driving one config directory and all supporting --what-if or --dry-run.

Deployment runs in two phases:

PhaseMechanismCovers
InfrastructureARM, through Bicep or TerraformResource group, managed identity, Log Analytics, Application Insights, the agent, RBAC assignments, connectors, skills, subagents, tools
Data planeapply-extras.sh against *.azuresre.aiCode repositories, hooks, HTTP triggers, knowledge files, plugin configuration

Hooks are data-plane objects, not ARM sub-resources. If the pipeline runner cannot get a data-plane token (az login --scope "https://azuresre.dev/.default"), the script skips them and prints what it missed.

The template CLI also provides export (config directory from a running agent), clone (export and redeploy under a new name), diff (local config against the live agent), and verify (a 22-point check across connectors, skills, subagents and hooks).

Cost​

Billing is in Azure agent units (AAU), a unit shared with other prebuilt Azure agents, with two components.

Always-on flow: 4 AAU per agent-hour, charged from creation until deletion. Stopping an agent does not stop it.

Active flow: token-based since 15 April 2026, metered across four token types at per-model rates. The earlier 0.25 AAU per second model is superseded.

ModelInputOutputCache readCache write
Claude Opus 4.610050010125
GPT 5.3 Codex352803.50
GPT 5.2352803.50

Rates are AAU per 1M tokens.

Microsoft's published per-task figures:

ScenarioTokens (in / out / cache read / cache write)Opus 4.6GPT 5.3 Codex
Quick question20K / 2K / 15K / 5Kabout 3.8 AAUabout 1.3 AAU
Incident investigation200K / 15K / 150K / 50Kabout 35.3 AAUabout 11.7 AAU
Full remediation500K / 40K / 400K / 100Kabout 86.5 AAUabout 30.1 AAU

Microsoft's worked example assumes roughly 0.10 USD per AAU, and a Japanese regional figure from April 2026 of about 16.0 JPY per AAU is consistent with it. The unit price varies by region and Microsoft may revise it, so the pricing calculator is the only number to budget against.

Controls and adjacent charges:

  • Monthly AAU allocation limit per agent, minimum 500, maximum 1,000,000, set under Settings, Agent consumption. Increases take effect immediately, decreases next month.
  • Time spent waiting for a human approval is not billed as active flow.
  • Incident filters on response plans limit what the agent investigates at all.
  • Azure Monitor ingestion driven by agent queries, third-party integration costs, and data egress are billed separately and are not part of AAU.

Constraints​

AreaConstraint
HostingThe reasoning runtime and the per-agent sandbox run on Microsoft-managed infrastructure, not in the customer subscription. Only the agent ARM resource, its identity, and its Application Insights and Log Analytics resources live in the tenant
HostingSandbox placement respects regional boundaries but not the agent's own region. Microsoft's stated example places East US 2 sandboxes in Central US, North Central US or Canada Central
LifecycleSandbox image, runtime version and patch cadence are not customer-managed. The templates expose an upgradeChannel property and nothing finer
NetworkVNet integration is egress only; no inbound private endpoint to the agent
NetworkConnector traffic does not route through the VNet
NetworkPlatform traffic (orchestration, model, telemetry) is never configurable
NetworkNetwork audit covers egress-policy decisions only
IdentityPermissions are revocable only by whole resource group
IdentityPersonal Microsoft accounts cannot authorise on-behalf-of
IdentityAuthor role cannot chat or add repositories in the portal
AuthorisationUser-defined hooks can override a global deny
AuthorisationReview mode gates Azure infrastructure operations only
DeploymentHooks and repositories are data-plane only, not ARM sub-resources
DeploymentRegion is immutable, and one agent covers one region
RuntimeAbout 700 preinstalled packages, no arbitrary runtime install
RuntimeNuGet preinstalls must be .NET CLI tools, not libraries
DataNo documented customer-managed key support for the agent's stores
DataThread retention is until manually deleted
DataAnthropic sits outside the EU Data Boundary and is unavailable in government and sovereign clouds
AvailabilityTen regions, subscription registration required
CostStopping an agent does not stop always-on billing
CostHitting the AAU limit makes the agent unavailable for the rest of the month

Known documentation conflicts​

TopicConflictValue used here
VNet subnet sizeThe Learn network article says /28 minimum; the GA announcement says /27 or larger/27 minimum
VNet maturityThe Learn network article is still titled preview; the August 2026 announcement declares GAGA, with the preview-era limitations assumed to hold until restated
Region countThe general FAQ lists three regions; the regions reference lists tenThe list of ten
Active flow meteringThe 2026 billing announcement describes 0.25 AAU per second; the pricing and billing article describes token metering from 15 April 2026Token metering
Private Log Analytics accessThe February 2026 blog says the agent runs outside your VNet and needs an Azure Function proxy; the network integration article and the GA announcement say VNet mode reaches private endpoints directlyVNet mode, with the proxy pattern still valid for non-VNet and cross-subscription cases

Sources​

Microsoft Learn, read 14 September 2026:

  • User roles and permissions, for the four built-in roles, the per-area access matrix, the Author role gaps, the ARM extension paths, and portal enforcement behaviour.
  • Agent permissions, for permission levels, the four preconfigured roles and their scopes, the role assignment commands, and the on-behalf-of constraints.
  • Agent identity, for the two managed identities, connector authentication, and how to find the user-assigned identity.
  • Tool access policies, for the three scopes, evaluation order, pattern syntax, tool names, the control-combination matrix, the API endpoints, and the 1,000 pattern limit.

Everything else (regions, execution boundaries, egress routing, data residency, telemetry events, pricing, constraints) comes from the architecture review draft of 14 September 2026 summarised in About Azure SRE Agent in a governed estate, which cites Microsoft Learn, sre.azure.com and Microsoft announcements in turn. Deployment as code is in Azure SRE Agent Terraform reference.