3.4 caap-policy-diagnostic

Fires during the central access policy step of AccessCheck, for two unrelated conditions distinguished by the kind field: a CAAP SACL that failed to evaluate, and a staged policy that would have decided differently from the effective one.

Event type string: caap-policy-diagnostic.

KeyTypeMeaning
subjectmapSubject record (§2.1).
object_contextbin or nilCaller-supplied object identifier.
kindstringsacl-error or staging-mismatch.
phasestringWhich phase of CAAP evaluation produced the diagnostic.
policy_sidbin or nilThe policy involved. nil for staging-mismatch.
rule_indexuint or nilThe rule involved. nil for staging-mismatch.
reasonstring or nilDiagnostic text, for sacl-error.
requested_accessuintThe mask the caller requested.
effective_granted_accessuintTotal granted under the effective policy.
staged_granted_accessuintTotal the staged policy would have granted.
object_results_differboolWhether staged and effective differed for this object.
processmapProcess record (§2.2).

Every key is always present; several are nil depending on kind.

3.4.1 kind = sacl-error #

A central access rule's SACL could not be evaluated. policy_sid, rule_index and reason identify what failed and where.

This is a defect in the policy, not in the access. The access is still decided; the event says a rule that should have participated could not.

3.4.2 kind = staging-mismatch #

A staged policy — one being trialled before it takes effect — would have produced a different result from the policy actually in force. This is the mechanism's whole purpose: run the new policy in parallel and report where it would have changed something, before it can break anything.

policy_sid and rule_index are nil here. The mismatch is a property of the whole evaluation, not attributable to one rule.

3.4.3 The limits of the mismatch report #

Worth knowing before building anything on it.

It carries the two total granted masks and a boolean. It does not identify which rule differed, and it does not report which audit events would have changed.

For a mismatch that is purely in SACL behaviour, the two masks can be equal while object_results_differ is true. A consumer comparing only the masks will conclude nothing changed.

Edit this page