Skip to content

docs(cloud-security): the AWS front_doors preflight check - #328

Merged
maximelb merged 2 commits into
masterfrom
solve/aws-front-doors-docs-s1aws
Jul 30, 2026
Merged

docs(cloud-security): the AWS front_doors preflight check#328
maximelb merged 2 commits into
masterfrom
solve/aws-front-doors-docs-s1aws

Conversation

@maximelb

Copy link
Copy Markdown
Contributor

What was asked

S1 (AWS serverless/edge collectors — legion_cloudsec_host#119) adds a front_doors credential
check. Document it, per the rule that a per-provider onboarding scope change lands with the
collector that needs it.

What was done

Added the front_doors row to the AWS provider test coverage table in
docs/cloud-security/provider-setup/aws.md, plus a note on why it probes the per-function Lambda
reads rather than a representative list call: a missing lambda:ListFunctionUrlConfigs grant fails
SILENTLY — every function then reads as having no URL, so a function anyone on the internet can
invoke looks private.

No new onboarding scope is needed, so the setup instructions are unchanged. That was verified two
ways: against both managed policy documents (SecurityAudit grants lambda:List*,
lambda:GetPolicy, apigateway:GET, elasticloadbalancing:Describe*; ViewOnlyAccess grants the
ELBv2 describes and apigateway:GET), and live — the front_doors check passes against a role
carrying only those two managed policies.

Testing

Docs-only. Markdown table + admonition, matching the surrounding style.

🤖 Generated with Claude Code

https://claude.ai/code/session_01L7CkEf1fEa9Y8dBn5Utrx1

S1 adds a Lambda / API Gateway / load-balancer collector family and, with it, a
`front_doors` credential check. Document what it means when it fails, and why it
probes the per-function reads rather than a representative list call: a missing
lambda:ListFunctionUrlConfigs grant fails silently — every function reads as
having no URL, so a function anyone on the internet can invoke looks private.

No new onboarding scope: SecurityAudit + ViewOnlyAccess already grant every call
(verified against both managed policy documents and against a live role carrying
only those two).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L7CkEf1fEa9Y8dBn5Utrx1
lcbill
lcbill previously approved these changes Jul 30, 2026
Comment thread docs/cloud-security/provider-setup/aws.md Outdated
Comment thread docs/cloud-security/provider-setup/aws.md Outdated
@maximelb

Copy link
Copy Markdown
Contributor Author

Open findings (inline threads above):

  • ViewOnlyAccess does not grant lambda:GetPolicy (verified against the current default policy version), so "Both … grant everything it needs" is wrong per-policy — only the union holds.
  • The stated failure mode is not the code's: a denied ListFunctionUrlConfigs poisons the account's Lambda coverage (CoverageError), it does not make functions read as having no URL. Same wording is in producer/aws/test.go and both PR bodies.

…r-policy grants

Two inaccuracies in the note, both caught in review:

- The two managed policies grant the Lambda reads BETWEEN them, not each on its
  own: ViewOnlyAccess carries `lambda:List*` but not `lambda:GetPolicy`.
- A denied ListFunctionUrlConfigs does not make functions read as private — the
  collector poisons its Lambda coverage instead. The check's value is catching a
  hand-rolled least-privilege policy at connect time rather than leaving the
  Lambda inventory unreadable on every sweep.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L7CkEf1fEa9Y8dBn5Utrx1
@maximelb
maximelb marked this pull request as ready for review July 30, 2026 15:37
@maximelb
maximelb merged commit 455d518 into master Jul 30, 2026
7 checks passed
@maximelb
maximelb deleted the solve/aws-front-doors-docs-s1aws branch July 30, 2026 15:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants