Capability Library · Pack detail

azure v1.0.0

Azure Resource Manager read surface: subscription, resource-group and resource inventory, plus Microsoft.CostManagement usage query (a POST-shaped read) — financial data at the read floor.

Review state: draft· Not in the distributable release manifest

Release identity

SHA-256 of the pack file bytes: f1d5b3da180bf6e24c24b643a8955fbb3fff9c68cdbb7c2f1ccf3c74dab137fc

Not in the distributable release manifest. The binary carries a digest-bound manifest of the distributable library; a pack whose bytes differ from its manifest entry — endpoint, tier, allowlist, or credential edited, with provider, version, and review block preserved — fails the digest check, loses distributability, and renders MODIFIED rather than as the shipped reviewed artifact. Review state and artifact status are different facts: the first is a documentation-review declaration, the second is the identity of the exact bytes.

Capabilities (4)

azure.subscriptions.list v1.0.0R0

Action
read
Endpoint
GET https://management.azure.com/subscriptions?api-version=2022-12-01
Connector
http
Custody
customer_vault
Credential ref
secret-ref-azure-client-credentials-token
Data class
internal

List all subscriptions the credential's tenant exposes to it: display names, subscription ids, states and managing tenants — the account-structure inventory. The registered path covers the collection read only — single-subscription reads (GET /subscriptions/{subscriptionId}) are not registered by this pack.

azure.resourcegroups.list v1.0.0R0

Action
read
Endpoint
GET https://management.azure.com/subscriptions/SUBSCRIPTION_ID/resourcegroups?api-version=2021-04-01
Connector
http
Custody
customer_vault
Credential ref
secret-ref-azure-client-credentials-token
Data class
internal

List all resource groups in one subscription: names, locations, provisioning states and tags — the organisational layout of the estate. SUBSCRIPTION_ID is a placeholder the deployment binds to a concrete subscription before enabling. The registered path covers the collection read only — single-resource-group reads are not registered by this pack.

azure.resources.list v1.0.0R0

Action
read
Endpoint
GET https://management.azure.com/subscriptions/SUBSCRIPTION_ID/resources?api-version=2021-04-01
Connector
http
Custody
customer_vault
Credential ref
secret-ref-azure-client-credentials-token
Data class
internal

List all resources in one subscription: resource ids, names, types, locations, SKUs and tags — the full deployed-estate inventory an audit path starts from. The documented $filter and $expand query options narrow or enrich the same read. SUBSCRIPTION_ID is a placeholder the deployment binds to a concrete subscription before enabling. The registered path covers the collection read only — single-resource reads are not registered by this pack.

azure.costmanagement.query v1.0.0R0

Action
read
Endpoint
POST https://management.azure.com/subscriptions/SUBSCRIPTION_ID/providers/Microsoft.CostManagement/query?api-version=2025-03-01
Connector
http
Custody
customer_vault
Credential ref
secret-ref-azure-client-credentials-token
Data class
financial

Query usage and cost data at subscription scope. This is a POST-shaped read and is described as one: the request body is a query definition (type such as Usage or ActualCost, timeframe, and a dataset carrying aggregation, granularity, grouping and filter) and the response is columns and rows of cost data — nothing is created or changed at the provider, so the declared action is read at the R0 floor. This is subscription financial data at the read floor — a lower bound: an R0 financial read can still be a serious confidentiality risk. The read moves no money, so no cost ceiling is declared on the AAES action. The documented scope path segment supports billing-account, resource-group and management-group scopes too; this registration binds subscription scope only. SUBSCRIPTION_ID is a placeholder the deployment binds to a concrete subscription before enabling.

Credential reference

The pack names a reference, never a secret. Installing a pack registers capabilities and makes them governable; registration is not connectivity. The credential is created at the provider and held in the client's own secret manager under the reference the pack names, and deployment testing is still required to show the credential path works and cannot be bypassed.

Reference
secret-ref-azure-client-credentials-token
Custody
customer_vault
Injection
header (Authorization)

A Microsoft Entra access token for a dedicated least-privilege app registration, held in the client's own secret manager. The stored material must be the complete Authorization header value: the scheme 'Bearer', one separating space, then the token — 'Bearer <token>'. customer_vault is the only generally-supported production custody model here — identity_federation and customer_broker are refused at startup and inline is lab-only. The reviewed token process is the OAuth 2.0 client credentials grant against the v2.0 endpoint: an external deployment process holds the app registration's client id and client secret, POSTs grant_type=client_credentials with scope=https://management.azure.com/.default to https://login.microsoftonline.com/<tenant>/oauth2/v2.0/token, receives an access token (Microsoft documents expires_in, approximately one hour), and writes the complete header value under this reference; there are no refresh tokens in this flow, so renewal is the external process repeating the grant — the executor injects the stored value verbatim and performs no token lifecycle itself. Revocation is removing the client secret from the app registration or disabling the app: that stops future token issuance (a repeated grant fails closed), but the client credentials flow has no refresh tokens and no documented per-token revocation — an already-minted token remains valid until its expiry (approximately one hour), so treat the token lifetime as the exposure window. A certificate client assertion is the documented stronger alternative to a shared secret and is the deployment's review. Least privilege: RBAC Reader on the subscription covers the three ARM inventory reads; for the Cost Management query, Microsoft's cost-scope documentation shows subscription Reader already grants read-only access to Cost Analysis, Forecast and the Query API, so plain Reader can suffice — the purpose-built Cost Management Reader role is the tighter alternative, and Enterprise Agreement subscriptions additionally require the 'AO view charges' billing setting to be enabled. Grant nothing broader. Executor hygiene: the value must live only in executor memory for the lifetime of a call, must never be written to logs, traces or diagnostics, and must not appear in crash dumps; a deployment that cannot meet that bar must not enable the pack.

Resources

  • azure-subscriptions-collection (api, internal): https://management.azure.com/subscriptions
  • azure-subscription (api, internal): https://management.azure.com/subscriptions/SUBSCRIPTION_ID
  • azure-costmanagement-scope (api, financial): https://management.azure.com/subscriptions/SUBSCRIPTION_ID/providers/Microsoft.CostManagement

Pack notes and exclusions

Every endpoint here is on the shared Azure management host management.azure.com, which stays real — it is the documented authority for ARM, not a tenant placeholder. SUBSCRIPTION_ID is a path placeholder the deployment binds to a concrete subscription before enabling; the paths are otherwise the documented ARM shapes with pinned api-version query values, and the review binds those versions — Microsoft documents api-version as required on every one of these operations. The credential targets login.microsoftonline.com for token minting, which is also a real shared host, but token minting is the external process's call, not a capability: the executor injects the minted value and never calls the token endpoint itself, so no capability allowlists it. Tiering rationale: all four capabilities sit at R0, the read floor. The Cost Management query is a POST by HTTP shape but a read by effect — the request body is a query definition (type, timeframe, dataset with aggregation, grouping and filter) and the response is rows of cost data; nothing is created or changed at the provider. It is registered as read with the POST shape stated plainly in the description, the same honesty the GCP pack applies to getIamPolicy. Cost data is financial at the read floor — a lower bound: an R0 financial read can still be a serious confidentiality risk. The read moves no money, so no cost ceiling is declared on the AAES action; per-request API behaviour at the provider is the deployment's review. Documented exclusions: this pack does not register resource group or resource create/update/delete, deployments (Microsoft.Resources/deployments), role assignments or any Microsoft.Authorization write, Microsoft.Billing operations, Cost Management exports (which write query results to storage), or tenant- and management-group-scope variants of the registered lists — subscription scope only, except azure.subscriptions.list, which is the tenant-level subscriptions collection (GET /subscriptions) by design. Every list read here describes the collection read only — single-resource reads and resource-group-scoped resource listing are not registered by this pack.

Review record

Draft review record dated 2026-09-21 · Reviewer: aaes-eng (an opaque id that resolves internally to the responsible reviewer)

A pack review is not a vendor or examiner attestation. A retrieval date says when a source page was read; it does not by itself establish what the page said then. No pack is vendor-endorsed, and none has been connectivity-tested against a live vendor tenant.