AccessRequest
TOC
OverviewAvailabilityUnderstanding AccessRequestWhat It RepresentsHow It Relates to AccessPolicyHow It Is Created and ProcessedExampleReading StatusOperational NotesWhat's NextOverview
AccessRequest is a namespace-scoped runtime record for approval-gated proxy access to a Connector.
It binds together:
- the subject that is asking for access
- the target
Connector - the runtime context object that the access is for
In the Connectors Approval model, AccessPolicy defines the rule, while AccessRequest tracks one actual access attempt.
In most cases, users do not create AccessRequest manually. It is created automatically when a workload tries to use a Connector through Connectors CSI Driver without already having the required connectors/proxy permission.
Read this document after Connectors Approval & Permission Gating and AccessPolicy.
In this document, use a Connector means using the Connector's secretless access path through Connectors Proxy, typically from a workload that consumes Connector configuration through Connectors CSI Driver.
It does not mean reading the Connector object itself or calling Connectors API.
An AccessRequest belongs to the Connector namespace, because it tracks access to one specific Connector.
The requesting subject and the runtime context object can be in another namespace. This is common when a shared Connector is used by workloads from project or tenant namespaces.
Availability
AccessRequest is part of the Connectors Approval capability.
Before using this workflow, enable:
enable-connectors-approvalenable-connector-proxy-permissions
For more information, see Feature Flags.
Understanding AccessRequest
What It Represents
An AccessRequest records one concrete runtime request, not a reusable policy.
Its key fields are:
spec.subject: who is requesting access. In approval-gated CSI scenarios, this is typically the workload ServiceAccount.spec.connectorRef: which Connector is being requested. The referenced Connector is always in the same namespace as theAccessRequest.spec.context.objectRef: which runtime object this request is bound to. Currently onlyPodis supported.
This resource is intentionally runtime-oriented:
- it tracks approval progress for one workload context
- it grants temporary permission only after checks pass
- it becomes irrelevant after that workload context ends
How It Relates to AccessPolicy
AccessPolicy answers these questions:
- which Connectors require approval-gated access
- which checks must pass
- which permission should be granted after approval
AccessRequest answers a different question:
- for this specific subject, Connector, and Pod context, has access been approved and synced yet
That is the main boundary between the two documents:
- AccessPolicy explains the reusable rule
AccessRequestexplains one runtime evaluation of that rule
When an AccessRequest first matches policies, the controller stores snapshots of the matched AccessPolicy.spec entries into status.policies. This keeps an in-flight request stable even if the original policy changes later.
For the policy schema, see AccessPolicy API Reference.
How It Is Created and Processed
The typical flow is:
- A workload tries to use a Connector through
Connectors Proxyor Connectors CSI Driver. - If the workload already has the required
connectors/proxypermission for that Connector and Pod context, noAccessRequestis needed. - If that permission is missing, the CSI flow creates or reuses an
AccessRequest. - The controller validates the Pod context, resolves the target Connector, and matches
AccessPolicyresources withcheckGrantedPermission. - The controller finds matching check resources, such as an
ApprovalTask, and records their results instatus.policies[].matchedChecks. - After all matched checks pass, the system creates a temporary
RoleandRoleBindingfor the requesting subject. - When the Pod completes, is deleted, or the Connector is no longer valid, the temporary permission is cleaned up.
This means AccessRequest is the runtime bridge between approval status and actual RBAC permission syncing.
Example
The following example shows the shape of one request:
This example shows an important pattern:
- the
AccessRequestis stored in the Connector namespace:connectors-shared - the requesting ServiceAccount is in the workload namespace:
cicd - the request is bound to one Pod, not to every future Pod that uses the same ServiceAccount
Reading Status
AccessRequest.status tells you where the runtime approval flow is currently blocked or completed.
Important conditions include:
ContextObjectValid: whether the bound Pod still exists and is still activeConnectorResolved: whether the referenced Connector still existsAccessPolicyMatched: whether any approval-orientedAccessPolicymatched this requestAccessCheckReady: whether the matched checks are passed, pending, or rejectedAccessPermissionSync: whether the temporary permission has been synced, is still pending, or has already been cleaned upReady: the overall result derived from the conditions above
Common interpretations:
- Approval is still waiting:
AccessCheckReady = Unknownwith reasonPending - Access is granted and usable:
Ready = TrueandAccessPermissionSync = Truewith reasonSynced - Access is rejected:
AccessCheckReady = Falsewith reasonRejected - Permission was cleaned up after runtime ended:
AccessPermissionSync = Truewith reasonPermissionCleanUp
Operational Notes
AccessRequest.specis immutable after creation. If the subject, Connector, or context changes, the system uses a different request.AccessRequestusually exists only for approval-gated access. If no approval policy matches, it does not become a reusable permission record.- The generated permission is scoped both to the requested Connector and to the runtime Pod context, which helps enforce least privilege.
What's Next
- Revisit the overall flow in Connectors Approval & Permission Gating
- Revisit the policy design in AccessPolicy
- Learn the schema in AccessRequest API Reference
- Learn how approval rules are defined in AccessPolicy API Reference