-
Notifications
You must be signed in to change notification settings - Fork 247
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
Consider supporting Tang offline provisioning #1474
Comments
Not requiring networking on first boot for Tang encryption could also provide some breathing room in some situations wrt network configuration. For FCOS/RHCOS, the Tang UX issue is related but I don't think it significantly helps it. |
More details on the use case for this. It's not so much about provisioning in a separate environment, but rather about making provisioning more stable with you have multiple Tang servers. Imagine you have e.g. 5 Tang servers for availability (threshold 1). Currently, all 5 servers need to be online at provisioning time in order for Clevis to bind the LUKS device. With offline mode, we no longer need to contact the Tang servers on first boot. And for subsequent boots, unlocks will respect the threshold of 1. So at no point will the process require all 5 servers to be online. |
I think the right way to support this is by adding a config spec field, rather than teaching Ignition to parse the custom Clevis pin. |
Specifically, I think this should work:
I think the advertisement is best treated as an opaque blob, rather than trying to parse out its fields. There's already precedent for embedding opaque JSON as a string (the If the |
Expand schema for 3_4_exp with an advertisement field to allow for Ignition to support Tang offline provisioning by passing the supplied adv field during first boot device bind. Fixes coreos#1474
Expand schema for 3_4_exp with an advertisement field to allow for Ignition to support Tang offline provisioning by passing the supplied advertisement field during first boot's device bind. Fixes coreos#1474
cc @jlebon for any thoughts |
Opportunistically doing the reopen check seems reasonable, though the non-determinism introduced by probing is a bit awkward. And hmm, I guess this races with network startup too? The probing won't be able to retry forever because it's optional. And networking might come up after we've finished retrying. |
Expand schema for 3_4_exp with an advertisement field to allow for Ignition to support Tang offline provisioning by passing the supplied advertisement field during first boot's device bind. Fixes coreos#1474
Expand schema for 3_4_exp with an advertisement field to allow for Ignition to support Tang offline provisioning by passing the supplied advertisement field during first boot's device bind. Fixes coreos#1474
Oh, good point about racing with network startup. Do you think it's better not to check at all than to do it best-effort? |
Expand schema for 3_4_exp with an advertisement field to allow for Ignition to support Tang offline provisioning by passing the supplied advertisement field during first boot's device bind. Fixes coreos#1474
Expand schema for 3_4_exp with an advertisement field to allow for Ignition to support Tang offline provisioning by passing the supplied advertisement field during first boot's device bind. Fixes coreos#1474
I'm not sure. I think opportunistically doing something seems a bit uncharacteristic of Ignition's otherwise deterministic stance so far. I also think users wanting to use the offline provisioning feature might get confused seeing Ignition still trying to reach the Tang servers over the network. So overall, I'm inclined to just skip it for now. But it's not a strongly-held opinion. |
Yeah, that's fair. Discussed this with @prestist OOB and we agreed that the nondeterminism of the extra checks could be surprising to users. So in #1474 (comment), we'll drop the third bullet and the second half of the second bullet. |
Expand schema for 3_4_exp with an advertisement field to allow for Ignition to support Tang offline provisioning by passing the supplied advertisement field during first boot's device bind. Fixes coreos#1474
Expand schema for 3_4_exp with an advertisement field to allow for Ignition to support Tang offline provisioning by passing the supplied advertisement field during first boot's device bind. Fixes coreos#1474
Expand schema for 3_4_exp with an advertisement field to allow for Ignition to support Tang offline provisioning by passing the supplied advertisement field during first boot's device bind. Fixes coreos#1474
Expand schema for 3_4_exp with an advertisement field to allow for Ignition to support Tang offline provisioning by passing the supplied advertisement field during first boot's device bind. Fixes coreos#1474
Expand schema for 3_4_exp with an advertisement field to allow for Ignition to support Tang offline provisioning by passing the supplied advertisement field during first boot's device bind. Fixes coreos#1474
Expand schema for 3_4_exp with an advertisement field to allow for Ignition to support Tang offline provisioning by passing the supplied advertisement field during first boot's device bind. Fixes coreos#1474
Expand schema for 3_4_exp with an advertisement field to allow for Ignition to support Tang offline provisioning by passing the supplied advertisement field during first boot's device bind. Fixes coreos#1474
Expand schema for 3_4_exp with an advertisement field to allow for Ignition to support Tang offline provisioning by passing the supplied advertisement field during first boot's device bind. Fixes coreos#1474
Expand schema for 3_4_exp with an advertisement field to allow for Ignition to support Tang offline provisioning by passing the supplied advertisement field during first boot's device bind. Fixes coreos#1474
Expand schema for 3_4_exp with an advertisement field to allow for Ignition to support Tang offline provisioning by passing the supplied advertisement field during first boot's device bind. Fixes coreos#1474
Feature Request
Environment
Applicable to any environment where disk encryption is desirable.
Desired Feature
I was recently made aware that Tang supports offline provisioning by obtaining the advertisement out of band and passing it directly to Clevis (see the final paragraphs of this section).
This could be useful for example to provision a machine in one environment, and then move it into its final location where a secure connection to the Tang server is available for subsequent boots. (Edit: actually the use case that motivated this RFE is described in #1474 (comment).)
We should consider adding support for this in Ignition.
Other Information
Using a custom pin for this almost works:
There are two problems however:
needsNetwork
controls networking for both first boot and subsequent boots, but we don't actually need the network on first boot and one may not even be available.disks
stage by default will close and reopen the devices as a sanity-check; re-opening will fail if Clevis can't reach the Tang server.The text was updated successfully, but these errors were encountered: