Edge authentication not stated
infoedge-auth-unset
How a caller proves who it is decides what a leak costs: a password or a key in configuration can be copied and used from anywhere, a managed identity or an IAM role cannot. With security.edgeAuthDeclared set, the design has promised to say which on every such hop. Set auth on this edge: managed-identity, iam-role, service-account, workload-identity, api-key, oauth, mtls, basic or none.
- Severity
- info
- Selects
- every edge
- Components in scope
- 2,366
It looks at every edge, and fires when:
- — all of these hold:
- — the design requirement `security.edgeAuthDeclared` is true
- — the edge's `auth` has no value
- — the edge's target node:
- — the node is a sql-database, nosql-database, cache, object-store, queue, stream, key-management, ai-service or search-index
Edge '{{edge.from}}' -> '{{edge.to}}' reaches data, secrets or an AI service and does not say how it authenticates. Set auth on the edge.This rule is about an edge, so it belongs to a pair of nodes rather than one component.
This rule names no kind: it reads the design as a whole.
Reference designs whose broken twin names this rule in its header. The gate reads the same header, and fails when a rule no design trips.
# yaml-language-server: $schema=../schema/rule.schema.json # The design promises that every hop into stored data, secrets, queues and AI vendors says how it # authenticates, and this one does not. Whether the caller holds a password, a key in its # environment, or a cloud identity is the difference between a leak that bills and one that cannot # happen; the edge's `auth` is where the design says which. # Opt-in through security.edgeAuthDeclared, so a design that never talks about authentication is # not told about every hop it draws. # Tripped by: designs/reference/llm-gateway/design.broken.yaml schemaVersion: "1" type: "rule" id: "edge-auth-unset" severity: "info" select: edge: {} when: all: - requirement: "security.edgeAuthDeclared" equals: true - field: "auth" exists: false - to: kind: - "sql-database" - "nosql-database" - "cache" - "object-store" - "queue" - "stream" - "key-management" - "ai-service" - "search-index" message: "Edge '{{edge.from}}' -> '{{edge.to}}' reaches data, secrets or an AI service and does not say how it authenticates. Set auth on the edge."