Provisioning Privilege Bundle
also called Capability Role Bundle, Permission-Bearing Resource
Packaging the permissions a workload needs together with the infrastructure it gets, so a single self-service call produces a running and correctly-entitled service - and the platform rather than each team becomes the grantor of access.
A team asks for a streaming job. The compute takes 4 minutes to create. The permissions take 9 days: a ticket to security, a hand-written policy, a review, a correction, another review. The expensive part of provisioning is almost never the infrastructure, it is the entitlement, and that is the part most self-service platforms leave out, which is why their users still file tickets.
A privilege bundle moves the entitlement into the same primitive as the infrastructure. One declared resource says what the workload is, and a controller creates the compute, the storage, the secrets binding and the role that lets them work together.
Why it matters
Time to first success is the best predictor of whether a platform is adopted, and a 9-day permission queue dominates it. Collapsing that to minutes moves the adoption curve more than any portal.
The security argument is stronger than the convenience one. Hand-written policies written once per team are reviewed once and then drift, and the reviewer sees a different document every time. One named bundle, reconciled continuously, means security audits a single artefact and every workload using it is provably identical.
Implementation patterns
- One declarative resource per workload class, carrying the workload's identity, the resources it needs and the named role version it runs as.
- Version the bundle as a named role and let a service pin a version, so widening it for a new capability is opt-in rather than retroactive across every existing workload.
- Per-field overrides recorded in the resource, so the platform can query which services run on defaults and which have overridden them. That query is what makes changing a default survivable.
- A narrow extension path: a supported way to attach one extra policy to one workload without leaving the platform, instrumented so every use is visible. That list is honest roadmap input.
- Derive the role from a declared dependency list where workloads genuinely differ, rather than widening one bundle until it is indefensible.
Industry example
Instacart's 2023 engineering write-up on its Flink self-serve platform describes provisioning a new streaming service through a single endpoint backed by a custom Kubernetes controller, where one custom resource carries the permissions the job requires, its Kubernetes resources and a default Flink configuration. The team had run Flink on EMR since 2021 and listed the absence of secret and configuration management and of fine-grained permissions among its reasons to move.
Lyft's Clutch, open-sourced in July 2020, applies the same idea to operational actions rather than provisioning: its stated purpose is to let infrastructure teams build workflows carrying domain-specific safety mechanisms and access controls, with auditing built in. Both are the same structural move - the platform becomes the place where privilege is granted, so privilege stops being a per-team artefact.
Failure scenarios
- The widening ratchet. Each new consumer needs one more permission, and within a year every workload can reach every data store. Nobody made that decision; it accumulated.
- The default that was a deploy. A one-line change to a default memory or checkpoint setting alters behaviour for every workload that never overrode it, so the blast radius is the estate.
- The unremovable field. Forty workloads declare a field the platform wants to rename, and a refactor becomes a migration with forty owners.
- Controller as a pager. When the reconciler is down nothing provisions and drift goes uncorrected silently.
- Audit mismatch. The bundle grants what the class needs at its widest, so a quiet workload holds permissions it has never used - exactly what a least-privilege review flags.
Trade-offs
What is gained is days of lead time and one auditable artefact instead of many. What is paid is permanent: a security review on the platform's own roadmap, a fleet-wide default, and a published schema it cannot change freely. The bill arrives with the first consumer whose needs sit just outside the bundle - if the only answers are "widen it for everyone" or "you are off the platform", the platform accumulates either excess privilege or defectors.
When not to use it
Below roughly ten consumers, a reviewed Terraform module plus a documented role template achieves the same outcome with no controller and no pager, and a platform team of three that adds a reconciler has spent its capacity. Skip the shared bundle when workloads genuinely differ in what they touch: one bundle is then either too wide to defend at audit or too narrow to use, and per-workload policy generated from a declared dependency list is the right shape. It is also wrong where a regulator requires a named human to approve each grant; there the platform prepares the grant rather than issuing it.
Interview question
Q: "Your platform provisions infrastructure in 4 minutes and teams still wait 9 days to ship. You propose bundling the IAM policy into the provisioning resource. What has the platform just taken on, and how would you change a default six months later without causing an incident?"
What a strong answer covers: that the platform is now the grantor and inherits a security review per capability; that the default is a fleet-wide blast radius; the override-visibility query as the precondition for any default change; a staged rollout by cohort with the old value pinnable; and that the custom resource is a published API with a deprecation cost.
Quick check
Quiz: What does a platform take on the day its provisioning API also grants permissions? It becomes the grantor: every new capability is a privilege-escalation review, the shared default is a fleet-wide change surface, and the schema is a public API it cannot refactor freely.
Flashcard: Why does bundling permissions with provisioning move adoption more than a portal does? — Because the queue removed is the 9-day entitlement review rather than the 4-minute infrastructure creation.