1. Use cloudinit but give it a one time password to download the secrets on first boot.
2. Use certificates and your own CA.
3. Use the virtual serial console for first login.
4. Use cloudinit to add a custom software repo, then use that to install a custom package that does the initial work.