stacklok / stacklok/mecatl

feat(mecak8s): expose opt-in Cedar authority policies for caller-scoped tool restrictions

Open
#1,368 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Go
Stars
152
Forks
16
Avg merge
14h 48m
Merged PRs (30d)
536

Description

Problem

Mecatl includes an opt-in Cedar-backed AuthorityEvaluator, but mecak8s does not expose the composition settings needed to select it. mecated provides --authority-evaluator=cedar and --cedar-authority-policy, while mecak8s has neither flag nor corresponding app.Config wiring.

This prevents a Kubernetes deployment from applying caller-identity-aware policy to built-in tools. For example, an OIDC-authenticated bot account should be denied WebSearch while other authenticated callers retain it.

Desired outcome

Make the Cedar authority evaluator available to mecak8s through operator-controlled deployment configuration.

Acceptance criteria

  • mecak8s exposes an explicit evaluator selection and static Cedar-policy source equivalent to mecated's --authority-evaluator and --cedar-authority-policy.
  • The settings are passed to app.Config.AuthorityEvaluator and app.Config.CedarAuthorityPolicy.
  • The Helm chart provides an operator-safe way to supply the policy file (for example, a mounted ConfigMap or Secret) and the corresponding command arguments.
  • Cedar remains opt-in; the existing local evaluator remains the default.
  • Selecting Cedar without a readable/valid policy fails startup rather than weakening enforcement.
  • With OIDC enabled, a Cedar policy can deny Tool::"WebSearch" for one exact (issuer, subject) bot principal, without denying it for another authenticated principal.
  • Add offline coverage for CLI/config-to-composition wiring and the bot-specific denial path; update the owning user/deployment documentation.

Notes

This is distinct from --permission-config: permission rules govern approval behavior generally, whereas Cedar is the identity-aware execution authority layer. Cedar is tightening-only: it may deny a carried capability but cannot grant a tool the session does not already carry.

Relevant code:

  • cmd/mecated/main.go — existing Cedar flags
  • cmd/mecak8s/flags.go — missing equivalent flags/config mapping
  • internal/app/root_authority.go — evaluator selection
  • internal/adapter/cedarauthority/cedar.go — policy evaluation and owner requirements
  • docs/adr/0234-authority-evaluator-port.md — authority-evaluator decision

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with cmd/mecak8s/flags.go and compare its configuration mapping with cmd/mecated/main.go, then read internal/app/root_authority.go and internal/adapter/cedarauthority/cedar.go. Inspect the Helm chart and the owning user/deployment documentation for configuration conventions. Done means Cedar flags and policy delivery reach app.Config, local remains the default, invalid policies fail startup, and offline coverage verifies wiring and bot-specific denial.

Written by the indexing model from the issue text.

Assessment

Tech stack
go, helm, kubernetes
Domain
authentication, cli, devops, infrastructure, security
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.