TL;DR:使用Kubernetes Auth方法从Vault CLI登录Kubernetes Pod的正确方法是什么?
我想要创建定期快照从我的HashiCorp库筏存储。因此,我创建了一个Kubernetes CronJob,运行与我的Vault集群相同的映像,它按照计划执行以下命令:
vault operator raft snapshot save /backups/daily-$(date +"%Y-%m-%d-%H-%M").snap/backups是安装到Pod的持久卷。
当然,Pod需要认证到Vault。我启用了Kubernetes Auth方法。由Cron作业/作业创建的Pods是使用服务帐户vault-backups运行的。因此,我向Vault添加了一个角色vault_backups,该角色绑定到vault命名空间中的服务帐户vault-backups,并为其分配了一个新的策略raft_snapshots_read,其内容如下:
path "/sys/storage/raft/snapshot"
{
capabilities = ["read"]
}对于实际登录,我目前正在执行以下操作:
export VAULT_TOKEN=$(vault write auth/kubernetes/login \
role=vault_backups \
jwt=$(cat /run/secrets/kubernetes.io/serviceaccount/token) |\
grep -w token |\
awk '{print $2}')这个命令现在使用服务帐户vault-backups的JWT令牌来使用角色vault_backup登录。它返回包含令牌的格式化输出(默认情况下是table)。我使用令牌解析行以将其保存到VAULT_TOKEN中。
然后,成功地执行raft snapshot save命令,并将快照保存到卷中。
解决方案是可行的,但我不确定这是否是正确的方法。首先,解析输出感觉有点奇怪。特别是因为有vault login命令。但是对于vault login -method kubernetes,它失败了:
未知方法: kubernetes。使用“保险库列表”查看auth方法的完整列表。此外,一些auth方法只能通过HTTP获得。
vault auth list包含一个类型为kubernetes的条目,因此我假设它只能通过HTTP获得。
我知道可以选择将vault write auth/kubernetes/login的输出作为JSON,但是a)容器中没有安装任何东西来解析JSON (比如jq)和( b)这仍然是两个步骤过程,包括解析结果。只是更有条理。
那么,是否有更好的方式来实现登录呢?
提前感谢!
发布于 2022-07-19 12:33:16
在我看到的其他教程中,有一个参数-field=,它可以用于筛选特定字段的vault write输出。
因此,登录现在看起来如下:
export VAULT_TOKEN=$(vault write -field=token auth/kubernetes/login \
role=vault_backups \
jwt=$(cat /run/secrets/kubernetes.io/serviceaccount/token))不管怎样,谢谢。
https://serverfault.com/questions/1105922
复制相似问题