[Bounty $8k] fix(runtime): fail closed when policy engine is unavailable (fixes #3592)#3593
Open
Karry2019web wants to merge 1 commit into
Open
Conversation
…chestration-agent#3592) Add a PolicyEngine class that evaluates operation permissions with fail-closed semantics: when the engine is unavailable, all operations are denied rather than allowed through. Changes: - New src/common/policy.py with PolicyEngine class - Modified src/orchestrator/engine.py to gate task execution through policy - New tests/test_policy.py with unit and integration tests The policy gate is placed in _execute_task before any work begins. When the policy engine denies an operation or is unreachable, the task is rejected with a RuntimeError and on_error hooks are called.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #3592
Summary
Add a
PolicyEngineclass that evaluates whether an operation should be allowed or denied. When the policy engine is unavailable (network failure, service down, etc.), all operations fail closed — denied by default — to maintain security posture.Changes
src/common/policy.py—PolicyEngineclass with:is_available()— cached health check against policy backendevaluate(action, resource, context)— returnsPolicyDecision.ALLOW,DENY, orERRORDENYsrc/orchestrator/engine.py—OrchestrationEnginenow:policy_engineparameter (defaults to a no-endpoint engine that allows everything)_execute_taskthroughself.policy.evaluate()before any work beginson_errorhooks and returns immediatelytests/test_policy.py— 7 tests covering:Acceptance Criteria
Testing