-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Private Keys for Agent ↔ Tenant association during registration #4
Comments
Here's one way this approach might work (WF1):
This is the most convenient workflow, but it does mean that the SHIELD Core is in charge of the key material for some (albeit small) window of time. A more rigorously secure workflow might look like this (WF2):
(these workflows differ only in who generates the keypair, and when). For comparison, here is the workflow we are currently proposing (WFP):
aside: I don't personally think WFP qualifies as "cumbersome" These three workflows all look fairly equal in terms of steps, involved systems, and level of complexity, so the base case (everything is manual) is identical. Let's consider the more automated deployment scenarios of BOSH and Kubernetes. BOSHHere is what the proposed workflow, WFP, looks like when deploying under BOSH:
Notably, the handling of key material is 100% taken care of by automated systems, and the operator can remain unaware of the existence of the key. If they want to, they can retrieve the public key from CredHub, post-deployment, for visual verification in the approval screens of the SHIELD Web UI (or CLI). Here is what WF2 looks like under BOSH (WF2-B1):
This has the disadvantage that it does not work under BOSH's runtime-config, so it is impossible to colocate the agent transparently based on deployment composition. Ideally, I should be able to do this:
And every deployment would get a unique key. To make this possible, we have to amend the application of WF1 on BOSH, resulting in (WF2-B2):
The added bounce through CredHub involves a new system (with a CLI we have heretofore not needed). This is more complicated, but not untenable. KubenetesLet's turn to Kubernetes. A bespoke "vanilla" deployment (i.e. not using any CRDs, Operators, or ex post facto configuration) looks like this for the proposed workflow (WFP-K1):
Applying WF2 to Kubernetes is more of the same from the non-runtime-config BOSH story, (WF2-K1):
A (Secure) CompromiseI believe the crux of the disagreement between people who prefer WF2 over WFP boils down to agent autonomy, which is a policy decision that is best left to operators (we should concern ourselves with Mechanism, not Policy). The WFP workflow gives greater power/convenience to people deploying agents, whereas the WF2 workflow gives greater control to the people operating tenants. In the spirit of mechanism, not policy, what if we do this:
I think this allows us to support both workflows. If you are convenience-minded: enable automatic registration and let your deployment tooling generate unique keys and identities (given a tenant UUID to start from). When it is time to approve keys that show up in the web interface, you can either blindly approve them (super-convenience-minded) or verify the public key against what you think you deployed (security+convience, or the trust but verify model). If you are security-minded: disable automatic registration and manually provision all of your keys ahead of time. Some Historical ContextThe two real-world systems I've been basing this analysis (and indeed most of the design of the agent registration protocol) are Puppet auto-enrollment and SSH Host Keys. Section 4.1 of RFC-4251 deals with the (now common) practice of trust-on-first-use:
|
Hearing no concerns, complaints, or rebuttals, we will adopt the following:
|
@thomasmitchell raised this concern in a discussion we had offline; moving it here so that we can discuss.
The text was updated successfully, but these errors were encountered: