Skip to content

Commit 9838fd0

Browse files
author
Harish Kumar
committed
fixes for enrolling recovery keys
* add machine id entity metadata for a node in the vault * Add policy so node token can write (not update or read) recovery key in vault kv
1 parent b50241c commit 9838fd0

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

mkosi.images/terraform/share/terraform/pki.tf

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ resource "vault_cert_auth_backend_role" "node" {
264264
vault_policy.node-cert-self-renew.name,
265265
vault_policy.ssh-host-self-signer.name,
266266
vault_policy.consul-gossip.name,
267+
vault_policy.node-recovery-keys.name,
267268
]
268269
}
269270

@@ -277,6 +278,22 @@ resource "vault_policy" "node-cert-self-renew" {
277278
EOP
278279
}
279280

281+
resource "vault_policy" "node-recovery-keys" {
282+
name = "node-recovery-keys"
283+
284+
policy = <<-EOP
285+
# Allow nodes to create recovery keys for their own machine-id only (write-once, no read/update)
286+
# No read allowed because node does not need to read its own recovery key,
287+
# it is only needed to be read by admins to recover the node
288+
# No update allowed to avoid compromised node may update recovery key
289+
# Any update of recovery keys (even for rotating recovery keys) need admin actions
290+
# For which admin key should be used
291+
path "secrets/mangos/recovery-keys/{{identity.entity.metadata.machine_id}}/*" {
292+
capabilities = ["create"]
293+
}
294+
EOP
295+
}
296+
280297
resource "vault_identity_group" "vault-servers" {
281298
name = "vault-servers"
282299
type = "internal"

resources/mangosctl/mangosctl.sh

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,11 @@ do_enroll() {
489489
entity_name=$(vault write -field=name identity/lookup/entity alias_name=${HOSTNAME}.mangos alias_mount_accessor=${node_auth_accessor})
490490
echo $entity_name
491491

492+
step "Setting machine-id as entity metadata"
493+
machine_id=$(cat /etc/machine-id)
494+
vault write identity/entity/name/${entity_name} metadata=machine_id="${machine_id}"
495+
greenln Success
496+
492497
for group in ${!groups[@]}
493498
do
494499
do_step "Adding host to group '${group}'" chronic do_entity addgroup ${entity_name} ${group}
@@ -1046,7 +1051,11 @@ do_bootstrap() {
10461051
CONSUL_HTTP_TOKEN=${consul_mgmt_token} \
10471052
do_step "Final Terraform run" run_terraform_apply
10481053

1049-
do_step "Enrolling recovery keys for encrypted partitions" enroll_recovery_keys "$(systemd-creds decrypt /var/lib/private/vault.root_token)"
1054+
echo
1055+
echo "Bootstrap complete! Next steps:"
1056+
echo " 1. Run: mangosctl sudo enroll -g vault-server -g consul-server -g nomad-server 127.0.0.1"
1057+
echo " 2. This will enroll the bootstrap node's identity and recovery keys"
1058+
echo
10501059
}
10511060

10521061
set_agent_token() {

0 commit comments

Comments
 (0)