docs(access): resource ACLs — restricting sensors and configs by scope - #394
Open
maximelb wants to merge 4 commits into
Open
docs(access): resource ACLs — restricting sensors and configs by scope#394maximelb wants to merge 4 commits into
maximelb wants to merge 4 commits into
Conversation
Adds a user-facing guide for resource ACLs: the acl: scope tag, the acl hive scope record, what is gated (content) versus what stays visible (existence and metadata), the acl.set / acl.get permissions and why acl.set is admin-tier, a step-by-step setup with the CLI, and the behaviours that surprise people — restriction follows current tags and therefore applies retroactively to history, an unbacked or disabled or expired scope locks rather than unlocks, scope tags cannot carry a TTL, D&R rules cannot write them, and propagation is bounded at five minutes so removing a member is not instant revocation. Also covers outputs (excluded by default, opt in with acl_scopes), D&R rule acl_scopes, the redaction marker on configuration records and why writing it back is refused, the extension-API-key gotcha for restricted playbooks and configs, an error-code table and a troubleshooting section. Adds acl.set / acl.get to the permissions reference, a nav entry, a note on the reserved acl: namespace in Sensor Tags, and a pointer from Designing Access, which previously had no answer for "how do I take access away". Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Contributor
Author
|
/lc-review |
lcbill
previously approved these changes
Sep 8, 2026
A verification pass against the merged implementation found several claims that were wrong or would have misled a reader: - D&R acl_scopes is an egress guard, not an advisory declaration. It decides whether `service request` / `extension request` / `start ai agent` may run on a restricted event, and a rule declaring nothing is refused on every restricted event. Also: clearing the last scope needs acl.set, and `dr set --detect/--respond` silently drops the field. - The --enabled rule was stated too broadly. A create with no metadata flags is enabled by default; it is adding --comment/--expiry/--tag-add without --enabled that produces a disabled, locking scope. - `limacharlie sync` does support the acl hive (--hive-acl, and it is in --all); the page previously said it did not. Replaced with the real caveat: pulling as a non-member captures redaction markers and the push back is refused. - The web app has an ACL Scopes page; the page implied CLI only. - acl.set is not a bypass for a temporary live stream. - Exporting query results to an output drops every restricted record regardless of scopes or acl_scopes. - Propagation bound is ~6 minutes (TTL plus fuzz), not 5. - Error table: hive tag refusals are 400/UNAUTHORIZED, not 401/UNAUTHORIZED_ACL_TAG; only 403 and 401 carry error_code; added the INVALID write-back refusals and ACL_SCOPES_UNAVAILABLE. - A read-path resolution failure fails closed *silently*, so "sees nothing" has a third cause beyond a disabled scope and a typo. Adds: searching restricted data, auditing ACL changes, infrastructure as code, what resource ACLs do not restrict (LC operations, deletion, billing, indicator searches), the need to tag at least one sensor, the installation-key acl.set requirement, and that acl.set.<scope> grants nothing. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
lcbill
previously approved these changes
Sep 8, 2026
…opes Both SDKs and the CLI support the acl hive, but ext-infrastructure builds its sync list entry by entry and has no acl entry, so an organization managed through that extension still needs scope records maintained separately. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
lcbill
previously approved these changes
Sep 8, 2026
acl hive support in the extension is new, so the page should not assert either state flatly. Says what happens when it is present (same read-and-write permission rule as every other hive, so acl.get plus acl.set) and what happens when it is not. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
lcbill
approved these changes
Sep 8, 2026
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.
User-facing documentation for resource ACLs. New page at
docs/7-administration/access/resource-acls.md, plus a nav entry and three small edits to existing pages.The page
Written for an administrator who wants to compartmentalise part of an organization — a mail feed with message bodies, an HR fleet, a customer covered by a separate agreement — and has to decide whether to do that with a separate org, a group, or a resource ACL.
acl:<scope>tag on a resource, anaclhive record listing the scope's members, and the rule that both the ordinary permission check and scope membership must pass.acl.set/acl.get, which roles carry them, and a plain statement thatacl.setis confidentiality-equivalent to unrestricted read while granting no implicit read.acl.set".acl_scopes, live streams inherit the opener's scopes, and the retention-output caveat.acl_scopes, the redaction marker on config records and why writing it back is refused, and the extension-API-key gotcha for restricted playbooks and configs.The behaviours that surprise people
These get their own section because every one of them is counter-intuitive and at least one is a footgun:
Other changes
acl.set/acl.getadded to the permissions reference.acl:namespace" section in Sensor Tags, since that page currently tells people tags are free-form.Verification
limacharlieCLI (5.6.3), not from memory. Theacl_scopesoutput parameter was traced through the SDK's form encoding to confirm a YAML list in--input-filearrives as a list.markdownlint-cli2clean; all relative links resolve.🤖 Generated with Claude Code