MoonPolicy extension for finite attribute sampling, tenant invariants and release regression gates
Dependencies
moon run cmd/main -- release-audit examples/moonpolicy/saas/before.json examples/moonpolicy/saas/after.json examples/moonpolicy/saas/seeds.json examples/moonpolicy/saas/plan.json| 责任范围 | 实现来源 |
|---|---|
| 策略 JSON、角色继承、属性条件、拒绝语义、原始决策轨迹、基础差异及原生用例回放 | eisem/moon_policy 0.1.0 |
| 声明有限属性取值,枚举缺失、布尔、整数边界等组合,超限不输出部分样本 | release_samples.mbt、release_plan.mbt |
| 检查所有新版允许请求的租户隔离与禁止动作不变量,缺失租户元数据返回不确定 | release_audit.mbt |
| 分动作设置新增授权和撤权预算;重复请求只计一次 | release_audit.mbt |
| 导出上游原生回归用例,输出采样范围与机器可读审查报告 | release_run.mbt、release_audit.mbt |
moon run cmd/main -- audit examples/saas/before.policy examples/saas/after.policy examples/saas/universe.txt
moon run cmd/main -- audit examples/ai-tools/before.policy examples/ai-tools/after.policy examples/ai-tools/universe.txt
moon run cmd/main -- audit examples/finance/before.policy examples/finance/after.policy examples/finance/universe.txt json
moon run cmd/main -- audit examples/finance/before.policy examples/finance/after.policy examples/finance/universe.txt attribution
moon run cmd/main -- verify examples/finance/before.policy examples/finance/universe.txt examples/finance/expected-before.txt
moon run cmd/main -- impact examples/saas/after.policy examples/saas/universe.txt
moon run cmd/main -- audit examples/saas/before.policy examples/saas/after.policy examples/saas/universe.txt groups
moon run cmd/main -- audit examples/saas/before.policy examples/saas/after.policy examples/saas/universe.txt witnesses
moon run cmd/main -- scope examples/saas/universe.txt read,export
moon run cmd/main -- audit examples/finance/before.policy examples/finance/after.policy examples/finance/universe.txt structuralpolicy NAME
inherit CHILD_ROLE PARENT_ROLE
rule ID permit|deny ROLES ACTIONS RESOURCE_KINDS RESOURCE_IDS any|same|other CONDITIONSprincipal ID TENANT ROLE1,ROLE2 KEY=VALUE,...
resource ID KIND TENANT KEY=VALUE,...
request PRINCIPAL_ID ACTION RESOURCE_ID KEY=VALUE,...
matrix ACTION1,ACTION2moon check --target js
moon test --target js
moon build --target js
moon info
moon fmtpub(all) struct AccessPolicy {
name : String
role_inheritance : Array[RoleInheritance]
rules : Array[AccessRule]
} derive(Eq, Debug)pub(all) struct AccessRule {
id : String
effect : RuleEffect
roles : Array[String]
actions : Array[String]
resource_kinds : Array[String]
resource_ids : Array[String]
tenant_relation : TenantRelation
conditions : Array[AttributeCondition]
} derive(Eq, Debug)pub(all) struct ActionBudget {
action : String
max_new_grants : Int
max_revocations : Int
} derive(Debug)pub(all) struct AttributeCondition {
source : AttributeSource
key : String
operator : AttributeOperator
value : String
} derive(Eq, Debug)pub(all) struct AttributedChange {
request : AccessRequest
kind : ChangeKind
cause : ChangeCause
changed_rule_ids : Array[String]
role_edges_changed : Bool
} derive(Debug)pub(all) struct AuditReport {
before_name : String
after_name : String
requests_considered : Int
changes : Array[DecisionChange]
diagnostics : Array[Diagnostic]
complete : Bool
} derive(Eq, Debug)pub(all) struct ChangeGroup {
principal_tenant : String
resource_tenant : String
action : String
new_grants : Int
revocations : Int
unchanged : Int
inconclusive : Int
} derive(Debug)pub(all) struct DecisionChange {
request : AccessRequest
before : Decision
after : Decision
kind : ChangeKind
} derive(Eq, Debug)pub(all) struct DecisionExpectation {
principal_id : String
action : String
resource_id : String
expected : DecisionKind
} derive(Debug)pub(all) struct Diagnostic {
code : String
severity : DiagnosticSeverity
message : String
} derive(Eq, Debug)pub(all) struct ExpectationResult {
expectation : DecisionExpectation
actual : DecisionKind
matched_requests : Int
passed : Bool
} derive(Debug)pub(all) struct MatrixExpansion {
universe : RequestUniverse
generated_requests : Int
diagnostics : Array[Diagnostic]
} derive(Debug)pub(all) struct ParsedExpectations {
expectations : Array[DecisionExpectation]
diagnostics : Array[Diagnostic]
} derive(Debug)pub(all) struct ParsedUniverse {
universe : RequestUniverse
diagnostics : Array[Diagnostic]
} derive(Debug)pub(all) struct ReleaseAttributeDomain {
source : AttributeSource
key : String
values : Array[AttributeValue?]
} derive(Debug)pub(all) struct ReleaseConfig {
action_budgets : Array[ActionBudget]
forbid_cross_tenant : Bool
tenant_attribute : String
forbidden_actions : Array[String]
} derive(Debug)pub(all) struct ReleasePlan {
config : ReleaseConfig
domains : Array[ReleaseAttributeDomain]
max_requests : Int
} derive(Debug)pub(all) struct ReleaseReport {
complete : Bool
requests_evaluated : Int
changes : Array[AccessChange]
findings : Array[ReleaseFinding]
verdict : GateVerdict
} derive(Debug)pub(all) struct RequestUniverse {
principals : Array[Principal]
resources : Array[AccessResource]
requests : Array[AccessRequest]
} derive(Eq, Debug)pub(all) struct RuleCoverage {
rule_id : String
matched_requests : Int
decisive_requests : Int
} derive(Debug)pub(all) struct RuleImpact {
rule_id : String
grants_when_removed : Int
revocations_when_removed : Int
example_grant : AccessRequest?
example_revocation : AccessRequest?
} derive(Debug)pub(all) struct RuleImpactReport {
policy_name : String
impacts : Array[RuleImpact]
diagnostics : Array[Diagnostic]
complete : Bool
} derive(Debug)pub(all) struct RuleTrace {
rule_id : String
effect : RuleEffect
matched : Bool
reason : String
} derive(Eq, Debug)pub(all) struct ScopeCoverage {
possible_requests : Int
represented_requests : Int
missing_requests : Int
missing_examples : Array[AccessRequest]
complete : Bool
diagnostics : Array[Diagnostic]
} derive(Debug)pub(all) struct StructuralDiff {
rules : Array[RuleDelta]
added_role_edges : Array[RoleInheritance]
removed_role_edges : Array[RoleInheritance]
} derive(Debug)pub(all) struct VerificationReport {
policy_name : String
passed : Int
failed : Int
inconclusive : Int
results : Array[ExpectationResult]
diagnostics : Array[Diagnostic]
} derive(Debug)pub(all) struct WitnessGroup {
kind : ChangeKind
action : String
resource_kind : String
cross_tenant : Bool
before_rules : Array[String]
after_rules : Array[String]
occurrences : Int
example : AccessRequest
} derive(Debug)pub(all) struct WitnessSelection {
groups : Array[WitnessGroup]
total_changed_requests : Int
omitted_groups : Int
complete : Bool
} derive(Debug)fn analyze_scope(universe : RequestUniverse, actions : Array[String], max_combinations : Int) -> ScopeCoveragefn attribute_changes(before : AccessPolicy, after : AccessPolicy, universe : RequestUniverse) -> Array[AttributedChange]fn audit_release(before : Policy, after : Policy, requests : Array[Request], config : ReleaseConfig) -> ReleaseReportfn compare_policies(before : AccessPolicy, after : AccessPolicy, universe : RequestUniverse) -> AuditReportfn condition_matches(condition : AttributeCondition, principal : Principal, resource : AccessResource, request : AccessRequest) -> Boolfn evaluate_request(policy : AccessPolicy, universe : RequestUniverse, request : AccessRequest) -> Decisionfn evaluate_validated(policy : AccessPolicy, universe : RequestUniverse, request : AccessRequest) -> Decisionfn expand_request_matrix(universe : RequestUniverse, actions : Array[String], max_requests : Int) -> MatrixExpansionfn generate_release_samples(seeds : Array[Request], domains : Array[ReleaseAttributeDomain], limit : Int) -> ReleaseSamplesfn glob_matches(pattern : String, value : String) -> Boolfn matching_rule_ids(policy : AccessPolicy, principal : Principal, resource : AccessResource, request : AccessRequest) -> Array[String]fn rule_match_trace(rule : AccessRule, roles : Array[String], principal : Principal, resource : AccessResource, request : AccessRequest) -> RuleTracefn run_moonpolicy_json(before : String, after : String, seeds : String, plan : ReleasePlan) -> ReleaseRun raise ReleaseInputErrorfn run_release_plan(before : Policy, after : Policy, seeds : Array[Request], plan : ReleasePlan) -> ReleaseRunfn select_witnesses(report : AuditReport, universe : RequestUniverse, max_groups : Int) -> WitnessSelectionfn verify_expectations(policy : AccessPolicy, universe : RequestUniverse, expectations : Array[DecisionExpectation]) -> VerificationReportInstall
Download zipMoonPolicy extension for finite attribute sampling, tenant invariants and release regression gates
Dependencies