:) This is most definitely a hack. The issue is that once you start using Puppet to push out secure-data that HostA might need, but HostB should never be able to get — you run into this problem. If HostB is broken into and its 'node type' is changed (whether by hostname, or editing a custom puppet fact), it can suddenly get data for HostA.
I am actually thinking that the 'Subject Alternative Name' may be the best place for this kind of data — but I'm wondering whether theres any place in Puppet where I an implement a hack that allows puppet to parse through these fields and determine if they're valid. IE, perhaps in auth.conf? Or maybe theres a way to use a 'prerun' command in puppet.conf that I can feed the clients certificate to? Any thoughts there? —Matt On Apr 26, 2011, at 2:54 AM, Jeff McCune wrote: > On Tue, Apr 26, 2011 at 4:10 AM, Matt Wise <w...@wiredgeek.net> wrote: >> I'm working out some security issues here and wanted to throw something out >> there... I'll be digging in tonight to see whether something like this is >> possible, so I'd appreciate feedback quickly if anyone happens to know if >> this is possible. Imagine a scenario where our individual hosts actually >> tell the puppet server which 'config' they want. This is our environment, >> and its not changeable. (The short explanation — its done this way because >> we provision nodes in several clouds where hostnames are not known until >> after a host has booted). For now, our nodes actually check in and say "I >> want XYZ class". >> >> I'd like to have our nodes able to do this ONCE ... only when they generate >> their CSR. After that, I'd like their 'base_class' to be embedded in the CSR >> (And subsequently the CERT), so that a client cannot later change its mind >> about what kind of host it is. Essentially I'm thinking the process would be >> something like this: >> >> Client: >> -) fill in 'base_class' somewhere (puppet.conf?) >> -) run puppet... host generates private key, and csr, and submits it to the >> puppet ca master >> >> Server: >> -) process signs CSR and provides Cert back to host (this is automated in >> our case, but not with autosign.conf) >> >> Client: >> -) begin actual puppet run.. request real configuration >> >> Server: >> -) read 'base_class' from certificate, and fill in $base_class with that >> data .. >> >> >> Thoughts? Any ideas on a good way to work this out? > > > This feels like quite a hack, but I agree with you there's no really > good way for Puppet to do this today. The agent can set the > environment (puppet environment) it wants, but that doesn't really > give you what you want. > > I would normally accomplish this using a custom fact, but you > mentioned this is security related so I see the desire to get the base > class embedded into the certificate data. Practically speaking, the > certificate cannot be forged once signed. > > You can easily change the certificate name in the request using: > > puppet agent --certname=my_base_class > > But! You're going to run into duplicate certificate names, which will > be a pain to manage. Better instead, you could prefix each > certificate name with the FQDN, or some other unique identifier and a > character not valid for DNS hostnames: > > puppet agent --certname="$(facter fqdn)::my_base_class" > > You can then match against this in your puppet manifests or your > External Node Classifier by splitting out the string to the right of > the double colons. > > Hope this helps, > -- > Jeff McCune > Professional Services, Puppet Labs > @0xEFF > > -- > You received this message because you are subscribed to the Google Groups > "Puppet Users" group. > To post to this group, send email to puppet-users@googlegroups.com. > To unsubscribe from this group, send email to > puppet-users+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/puppet-users?hl=en. > -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To post to this group, send email to puppet-users@googlegroups.com. To unsubscribe from this group, send email to puppet-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.