0

保险柜版本 1.5.2

我的最终目标是在一些 Terraform 代码中使用 Vault 来检索临时凭证。问题是即使当前令牌是 5 分钟令牌,Terraform 也会始终生成新的子令牌。这意味着当前的 VAULT_TOKEN 必须是某种超级根令牌,因为我尝试使用 LDAP 后端登录,而我尝试使用的策略或令牌角色并不重要,似乎我永远无法生成新的令牌。

要复制 Terraform 正在做的事情:

vault login -address vault.example -ca-cert ca.pem -method ldap -path ldap_users user=botman
Couldn't start vault with IPC_LOCK. Disabling IPC_LOCK, please use --privileged or --cap-add IPC_LOCK
Password (will be hidden):
s.<token>

我拥有政策定义的所有许可,一切似乎都很好。

现在尝试创建一个子令牌:

vault token create -address vault.example -ca-cert ca.pem -role superrole
Error creating token: Error making API request.

URL: POST https://vault.example/v1/auth/token/create/superrole
Code: 400. Errors:

* restricted use token cannot generate child tokens

删除-role参数,我们得到同样的错误。

我试过到处寻找我缺少的东西,但唯一可以创建子令牌的令牌似乎是根令牌。

如果我错过了一些非常简单的事情,我深表歉意。

我附上了一个示例策略(我尝试了很多策略,但这个似乎是最极端的)

path "auth/*" {
  capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}

任何帮助表示赞赏。

编辑:

我花时间设置了一些 approles 来测试一下。我添加了与 LDAP 后端完全相同的策略。通过approle,我可以获得一个令牌,然后从初始令牌创建新令牌。我查看了 LDAP 文档,看看我是否遗漏了某处说您无法从源自 LDAP 的令牌创建子令牌并且我找不到任何东西:https ://www.vaultproject.io/docs/auth/ ldap.html

编辑2:

LDAP 身份验证后端的 Pulumi 配置

    return vault.ldap.AuthBackend(
        resource_name="vault-ldap-{}".format(ldap.name),
        binddn=bind_dn,
        bindpass=bind_pass,
        certificate=cert,
        description=ldap.desc,
        discoverdn=False,
        groupattr="cn",
        groupdn=ldap.groupdn,
        groupfilter="(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={{.UserDN}}))",
        insecure_tls=False,
        path="ldap_{}".format(ldap.name),
        starttls=False,
        tls_max_version="tls12",
        tls_min_version="tls10",
        token_explicit_max_ttl=14 * 60 * 60 * 24,
        token_max_ttl=7 * 60 * 60 * 24,
        token_num_uses=56,
        url=url,
        userattr="samaccountname",
        userdn=ldap.userdn,
        opts=opts,
    )
4

1 回答 1

1

我看到您的 LDAP 后端正在设置token_num_uses。从这个文档这个讨论中,token_num_uses设置为非零值将阻止令牌创建子令牌。

LDAP 被破坏并为 AppRole 工作的原因是 LDAP 后端正在应用该token_num_uses属性,而我猜 AppRole 后端不是。

于 2020-08-30T03:52:21.207 回答