azureAKS connector id:
aks
Quick start
Run Cynative from an environment with a configured Azure CLI, environment, workload identity, or another source in Cynative’s Azure credential chain:Credential discovery
Cynative uses its Azure credential chain, based onDefaultAzureCredential sources. CLI, environment, workload identity, and other non-managed-identity sources are preferred; managed identity is tried last and is non-fatal (so a metadata probe on a non-Azure host does not abort the chain). Cynative reads no AZURE_* variable to authenticate — the azidentity chain does.
Credential sources
AZURE_TENANT_ID/AZURE_CLIENT_ID/AZURE_CLIENT_SECRET— environment service-principal identity (secret auth).AZURE_CLIENT_CERTIFICATE_PATH(andAZURE_CLIENT_CERTIFICATE_PASSWORDfor a password-protected certificate) — service-principal certificate auth.AZURE_USERNAME/AZURE_PASSWORD— username/password (ROPC) identity path.AZURE_FEDERATED_TOKEN_FILE— workload-identity federated token file.
AZURE_AUTHORITY_HOST and AZURE_CONFIG_DIR are read to auto-detect the target cloud — see Target selection.)
Registration and validation
After constructing the chain, Cynative eagerly validates it at startup by minting a test ARM control-plane token. Theazure and aks connectors register only if that probe succeeds (transient errors are retried once). A skip is shown loudly only when Azure is explicitly configured via the environment service-principal variables or under --verbose; an expired or not-logged-in az login is skipped quietly.
References:
- Authenticate Go apps to Azure — the azidentity credential model Cynative mirrors.
- EnvironmentCredential environment variables — the authoritative
AZURE_*variable spellings.
Target selection
Default target
The identity is whatever the credential chain resolves. The target subscription/resource is not a default — it is named per request inside the ARM URL path (for example/subscriptions/<id>/...). The Azure cloud defaults to auto-detected public (AzureCloud) unless overridden.
Changing the target
Change the identity by re-pointing the credential chain: runaz login, or set the environment service-principal variables. Target a subscription/resource per request by writing the subscription id into the ARM URL. Select the cloud with connectors.azure.cloud (or CYNATIVE_CONNECTORS_AZURE_CLOUD).
The vendor AZURE_AUTHORITY_HOST and AZURE_CONFIG_DIR variables are the cloud auto-detect signals under cloud: auto. Note: connectors.azure.cloud sets the ARM endpoint/audience Cynative targets and the cloud for environment, workload-identity, and managed-identity credentials, but the Azure CLI, Developer CLI, and PowerShell credentials mint tokens against their own active cloud — on a sovereign cloud, also run az cloud set --name ... so the CLI credential matches.
Request usage
Useauth_provider: "azure" and include an azure_auth object:
azure_auth.service is required. azure_auth.cloud is optional and defaults from the request host when omitted. The cloud field is a claim verified against the cloud Cynative resolved at startup — it cannot switch clouds per request; a mismatch is rejected.
Minimal example:
Hardening
Azure has no credential-downscoping primitive, so the in-process action gate is the sole client-side control. Each request is host-pinned, classified, and authorized against the configured RBAC role definition before an ARM token is injected.Host pinning
Cynative pins ARM requests to the configured or resolved Azure cloud, so a model-authored request cannot claim one Azure cloud while sending the token to another.Action authorization
Cynative resolves the request to a service via a cached catalog, classifies the requested ARM operation, and authorizes it against the configured Azure RBAC role definition. The gate fails closed: if the operation or the role definition cannot be resolved, the request is denied.Model-supplied-credential rejection
Requests carrying anAuthorization, Proxy-Authorization, or X-Ms-Authorization-Auxiliary header, or URL userinfo (user:pass@), fail closed. The Azure connector additionally rejects a SAS sig= query parameter.
Response redaction
Cynative redacts secret-shaped content and credential-named fields from responses before the model sees them. Treat returned Azure data as sensitive regardless.Sovereign clouds
Cynative supports Azure public cloud and sovereign clouds — Azure US Government (management.usgovcloudapi.net) and Azure China / 21Vianet (management.chinacloudapi.cn). The ARM endpoint, token audience, and Microsoft Entra ID authority are selected per cloud.
By default (connectors.azure.cloud: auto), Cynative detects the cloud by reading AZURE_AUTHORITY_HOST first, then the Azure CLI config ($AZURE_CONFIG_DIR/config, default ~/.azure/config, [cloud] name), falling back to the public cloud. Pin it explicitly where auto-detection is not reliable — for example managed identity on a sovereign host, where the cloud is not exposed without a network probe Cynative deliberately does not make.
Reading the startup posture
access=default(read-only)whenconnectors.azure.role_definitionisReader(case-insensitive);access=customfor any other role.enforced=client— Azure has no credential-downscoping primitive; the in-process per-operation RBAC check is the sole client-side control.role definition=<name> (<guid>)— the configured role name and its resolved GUID.(+aks)— the AKS connector is folded in.
Cynative configuration
Cloud environment
The Azure cloud the connector targets (shared with theaks connector). Default auto.
Exposure and authorization
The Azure RBAC role definition the per-operation action gate authorizes against. DefaultReader.
azure and aks connectors to be skipped with a clear reason.
Cache settings
The Azure service catalog is cached under<cache.dir>/azure. The role definition is fetched live per run and not cached.
AKS connector
The AKS connector provides Kubernetes API access to Azure Kubernetes Service clusters. It registers alongside theazure connector, sharing the same Azure credential chain.
Connector id: aks
How it works
For each request, Cynative lazily calls ARMListClusterUserCredentials for the target cluster and parses the returned kubeconfig. A bearer token is used if present; client certificate and key data are supplied to the TLS transport if present; otherwise Cynative falls back to a Microsoft Entra ID token for the fixed AKS API server audience.
The per-cluster ARM ListClusterUserCredentials retrieval happens lazily at request time and can still fail there, even if connector registration succeeded. The calling identity needs the Azure Kubernetes Service Cluster User Role (Microsoft.ContainerService/managedClusters/listClusterUserCredential/action).
The connector then applies the shared Kubernetes hardening model (host pinning, view RBAC gate, dial-time IP authorization, response redaction).
Request usage
Useauth_provider: "aks" and include an aks_auth object:
subscription_id is a GUID. resource_group is 1–90 letters, digits, underscores, parentheses, hyphens, or periods and does not end with a period. cluster_name is 1–63 letters, digits, hyphens, or underscores, starting and ending with a letter or digit.
Configuring the ClusterRole
The read-only ClusterRole the AKS connector authorizes against is configurable (defaultview). The Azure cloud is inherited from the shared connectors.azure.cloud setting.
view widens Cynative’s permitted verbs — including writes. See the shared Kubernetes hardening model for full details.
Defense at a glance (Azure + AKS)
Limitations
- Data-plane operations (Key Vault secrets, Blob/Queue/Table data, SQL/Cosmos data) are out of scope. Cynative is control-plane only and denies data-plane hosts at the network layer.
- No per-session credential downscoping. There is no primitive to reduce an existing Entra ID access token’s effective RBAC at request time — Azure RBAC is evaluated server-side by Azure Resource Manager per request.
- Sovereign cloud auto-detection is best-effort. It covers the Azure CLI / environment-variable credential sources but not managed identity on a sovereign host — pin
connectors.azure.cloudexplicitly there. Custom / private / partner clouds are not modeled; an unrecognized signal falls back to the public cloud. - Action authorization fails closed when operation or role-definition resolution fails.
- AKS requires
ListClusterUserCredentialson the target cluster. When the returned kubeconfig carries no static bearer or certificate (for example a cluster withdisableLocalAccounts), Cynative uses the Entra ID token. - There is no client-side credential downscoping for AKS. The in-process
viewgate, host pinning, and dial-time IP authorization are the only client-side controls. - The Azure connector is for ARM control-plane APIs. Use
aksfor Kubernetes API calls to AKS clusters.

