GitOpsHQ Docs
Governance & Security

Policy and Approvals

Complete guide to approval policy templates, policy bindings, approval workflows, quorum rules, and governance decisions.

Approval policies define rules that require human approval before high-risk operations can proceed. They provide governance guardrails across the entire deployment lifecycle — from release deployments and promotions to cluster operations and infrastructure changes. Policies ensure that sensitive actions are reviewed by the right people before execution.

Key Concept

Approval policies separate intent from execution. When a user requests a protected action, the system pauses execution, notifies eligible approvers, and waits for the required quorum before proceeding. Every step is audited.

Approval Workflow

The following diagram shows the complete lifecycle of an approval-gated action:

Loading diagram…

Approval Policy Templates

Policy templates are reusable policy definitions managed at /approval-policies. They define the rules, approvers, and conditions without being bound to specific resources.

Template Structure

FieldDescriptionExample
NameDescriptive policy nameProduction Deploy Approval
DescriptionWhat this policy protects and whyRequires SRE approval before production deployments
ScopeWhere this policy can be boundproject, cluster, environment, organization
Required ApproversWho can approveUsers, teams, org roles
Quorum RulesHow many approvals are needed2 approvals from SRE team
ConditionsWhen this policy appliesenvironment == production
requesterCanApproveWhether the requester can approve their own requestfalse (default)

Managing Templates

Create Template

Navigate to Approval Policies and click Create Policy. Define the name, description, and scope.

Define Approvers

Specify who can approve requests matching this policy. Options include specific users, teams, or organization roles.

Set Quorum Rules

Configure how many approvals are required and the quorum calculation method.

Add Conditions

Optionally restrict when this policy applies (e.g., only for production, only outside business hours).

Save and Bind

Save the template and bind it to specific resources (projects, clusters, environments).

Policy Bindings

Policy bindings attach templates to specific resources. A single template can be bound to multiple resources, and a single resource can have multiple policies bound to it.

Binding Levels

LevelApplies ToExample
OrganizationAll projects and clusters in the orgRequire approval for any production deploy
ProjectAll actions within a specific projectRequire approval for api-platform deploys
ClusterAll operations on a specific clusterRequire approval for production cluster commands
EnvironmentActions targeting a specific environmentRequire approval for production environment changes

Binding Resolution

When an action is initiated, the system evaluates all bindings that match:

Loading diagram…

Policy Stacking

When multiple policies apply to the same action, all policies must be satisfied. For example, if an org-level policy requires 1 approval and a project-level policy requires 2 approvals from SRE, the action needs both conditions met before proceeding.

Quorum Rules

Quorum rules determine how many approvals are required for a policy to pass. The quorum model uses the AccessApprovalQuorum structure:

Quorum FieldDescriptionExample
minApprovalsMinimum number of approvals required2
minDistinctTeamsApprovals must come from at least N different teams2 (requires cross-team review)
requiredUserIdsSpecific users who must approve regardless of count["user-uuid-1", "user-uuid-2"]
requiredTeamIdsAt least one approval from each listed team is required["sre-team-uuid"]
requiredOrgRolesAt least one approval from a user holding each listed org role["tech-lead"]

All quorum fields are combined with AND logic. There is no percentage-based, unanimous, or time-limited quorum mode as separate types.

Example: A production deployment policy might require:

  • At least 2 approvals total (minApprovals: 2)
  • Approvals from at least 2 different teams (minDistinctTeams: 2)
  • At least 1 approval from the SRE team (requiredTeamIds)
  • At least 1 approval from a user with the tech-lead role (requiredOrgRoles)
  • The requester cannot be one of the approvers (requesterCanApprove: false)

Condition Constraints

Policies can include conditions that control when the policy applies:

The real AccessApprovalPolicyConditions model supports these fields:

Condition FieldDescriptionExample
environmentsApply only when targeting specific environments["production", "staging"]
weekdaysApply only on specific days of the week["saturday", "sunday"]
startHourStart of the active time window (24h format)18 (6 PM)
endHourEnd of the active time window (24h format)9 (9 AM)
timezoneTimezone for the time windowEurope/Istanbul
requireReasonRequire a justification from the requestertrue

Always-On Policy

A policy that applies to every deployment regardless of timing or context:

Name: Production Deploy Gate
Scope: Environment (production)
Conditions: None (always applies)
Quorum: minApprovals 2, requiredTeamIds [SRE]
requesterCanApprove: false

Off-Hours Policy

Additional approval required for changes made outside business hours:

Name: Off-Hours Change Gate
Scope: Organization
Conditions:
  startHour: 18, endHour: 9
  weekdays: [saturday, sunday]
  timezone: Europe/Istanbul
  requireReason: true
Quorum: minApprovals 1

Production-Only Policy

Applies only to production deployments, not to staging or development:

Name: Production Release Approval
Scope: Project
Conditions:
  environments: [production]
Quorum: minApprovals 2, requiredTeamIds [security]
requesterCanApprove: false

Protected High-Risk Actions

The following actions can be gated behind approval policies:

Project Actions

ActionDescriptionRisk Level
Release DeployDeploying a release to an environmentHigh
Promotion ExecutePromoting changes between environmentsHigh
Rollback ExecuteRolling back a deploymentHigh
Project DeletePermanently deleting a projectCritical
Environment FreezeFreezing an environment to block changesMedium
Environment UnfreezeUnfreezing an environmentMedium
Environment Policy UpdateChanging environment policiesMedium

Cluster Actions

ActionDescriptionRisk Level
Cluster SyncForcing ArgoCD sync on a clusterMedium
Cluster RollbackRolling back ArgoCD application stateHigh
Cluster RestartRolling restart of deploymentsHigh
Cluster ScaleChanging replica countsMedium
Manifest ApplyApplying raw manifests to a clusterHigh
Command ExecutionRunning arbitrary commands on clusterCritical
Resource DeleteDeleting resources from a clusterCritical
Token IssueIssuing cluster access tokensCritical

Security Actions

ActionDescriptionRisk Level
Break-Glass InitiateStarting a break-glass override sessionCritical

Approvals Inbox

The approvals inbox at /approvals provides a unified queue for all pending approval requests.

Inbox Features

FeatureDescription
Unified QueueAll pending approvals across projects and clusters in one view
FiltersFilter by type (cluster, project, release, promotion, rollback)
Can-Approve IndicatorShows whether you are eligible to approve each request
Request DetailsView requester, action, resource, justification, and diffs
Approve / RejectTake action with optional comments
Progress TrackingSee how many approvals have been received vs. required

Approval Request Details

Each approval request shows:

FieldDescription
RequesterWho initiated the action
ActionThe specific action being requested
ResourceThe target resource (project, cluster, environment, release)
JustificationReason provided by the requester
Diff / PayloadWhat will change if approved (manifests, configuration diffs)
PoliciesWhich policies triggered this approval gate
ProgressCurrent approval count vs. required quorum
TimelineChronological list of all decisions and events

Request Lifecycle

Loading diagram…

Self-Approval Prevention

By default, the person who initiated an action cannot approve their own request. This enforces separation of duties (SoD).

ConfigurationBehavior
requesterCanApprove: false (default)Requester is excluded from eligible approvers
requesterCanApprove: trueRequester can approve their own request (use with caution)

Separation of Duties

Disabling self-approval prevention is strongly discouraged for production environments. It is provided for development and testing scenarios where strict governance is not required.

Break-Glass Override

In emergencies, a break-glass session can bypass approval requirements. Break-glass is designed for incidents where the normal approval process would cause unacceptable delay.

Break-Glass Flow

Initiate Break-Glass Session

An authorized user starts a break-glass session with a mandatory reason/justification and an action scope.

Time-Limited Override

The session is active for a limited duration (configurable, e.g., 30 minutes to 4 hours). During this window, actions matching the session scope bypass approval policies.

Execute Protected Actions

Perform the emergency operations. Each action is executed immediately without waiting for approvals.

Session Closure

The session ends automatically when the time limit expires, or the user explicitly revokes it. All actions performed during the session are prominently logged.

Break-Glass Audit Trail

Every break-glass action creates enhanced audit entries:

  • Session ID: Links all actions to the break-glass session
  • Justification: The reason provided when initiating the session
  • Bypassed Policies: Which approval policies were overridden
  • Actor: The user who performed each action
  • Duration: Total time the session was active
  • Prominent Flag: Break-glass events are visually highlighted in the audit log

Audit Visibility

Break-glass events are always logged — they cannot be suppressed or hidden. They appear prominently in the audit log and trigger notifications to security-focused team members.

Troubleshooting

ErrorMeaningResolution
422 policy violationsAction blocked by governance checks during delivery or promotionReview the violation details and satisfy the policy requirements
403 you are not an eligible approver for this requestYou are not listed as an eligible approver for this policyA different eligible user must approve
409 already reviewedYou already approved/rejected this requestNo action needed — your decision is recorded
404 request not foundThe approval request no longer existsIt may have been cancelled

Best Practices

  1. Start lightweight, increase strictness over time — Begin with simple approval requirements and add complexity as your governance needs evolve
  2. Always require production approvals — Production deployments should never be un-gated
  3. Monitor approval latency — Track how long approvals take and optimize escalation paths to reduce deployment delays
  4. Use conditions to avoid over-gating — Don't require approval for every action in every environment; focus on production and critical operations
  5. Enable self-approval prevention — Separation of duties is a fundamental governance principle
  6. Review break-glass events — Every break-glass session should be followed up with a review to understand why normal processes were insufficient
  7. Review stale requests regularly — Approval requests that sit indefinitely create confusion; cancel and resubmit if circumstances have changed
  8. Document policies clearly — Use descriptive names and descriptions so approvers understand what they are approving and why
  9. Test policies in staging first — Validate that your policies work as expected before applying them to production
  10. Combine with notifications — Ensure approvers receive timely notifications via Slack, email, or other channels to minimize delays

On this page