使用 LDAP 用户名作为实体名称
Use LDAP username as the entity name
我正在使用 Hashicorp Vault 1.9.0 并启用了 LDAP 身份验证方法,该方法按预期正常工作,但我遇到了一个问题:
LDAP 是我们唯一的身份验证方法(当然,除了 Token 之外)并且 LDAP 用户不是事先在 Vault 中创建的。因此,当某些用户首次登录 Vault 时,Vault 会自动创建用户实体,使用通用名称,例如“entity_1fb81714”,并将 LDAP 用户名添加为该实体的别名。这工作得很好(但可能会更好)。有没有办法将 Vault 配置为使用 LDAP 用户名(与别名中使用的相同)作为实体名称,而不是通用的“entity_xxx”?
实体名称:
实体别名:
可以做,但是看到维护的时候可能会放弃...
所以你有一个随机名称的实体,“内部”有一个 entity-alias 具有给定用户的 sAMAccountName
属性。
背景
实体创建不是由 ldap 身份验证后端完成的。如果 Vault 找不到具有匹配实体别名的现有实体,将创建一个实体。
所以基本上它是这样做的:
- 尝试查找其中包含该别名的现有实体
- 如果找到 none,则创建一个新实体
问题是 Vault 不能使用实体别名属性值作为名称,因为您可以为任何给定实体使用多个实体别名。其他身份验证后端(如 Github)可能具有不同的实体别名属性。 Vault 无法决定应该使用哪一个,因此选择了一个随机名称。
可以完成
要为您的实体使用可预测的名称,您必须使用您选择的名称和别名预先创建实体,以便在用户使用时显示首先登录,Vault 会去寻找它。
出于以下三个原因,我建议您学会接受随机名称:
- 管理层
- 竞争条件
- 许可费用
管理
当用户来来去去时,您将不得不轮询您的 Active Directory 以获取更改和 create/delete 实体别名。请记住,Vault 不会验证实体别名是否有效,这是您的工作。不是一段复杂的代码,但它不会自行编写和维护,您可能有更好的事情要做。
竞争条件
即使有同步机制,在脚本的两次传递之间,用户登录 Vault 时仍然会发生变化。该用户将获得一个随机的实体名称。您的脚本可以解决这个问题并在下一个 运行 上修复它,但这会使您的同步代码更加复杂。
许可证
Vault Enterprise 按实体授予许可。为 Active Directory 中的每个人创建一个实体别名可能会很昂贵。您的脚本也可以解决这个问题,仅为给定组的成员创建实体别名,但是...您明白了。
你可能会这样:如果你想控制实体名称
在 ixe013 回答之后,我决定制作一个脚本来查找“entity_xxx”默认名称并将它们更改为 LDAP 适当的用户名。
成功了!
脚本的主要部分如下所示。
# GET THE VAULT ENTITY LIST
entity_list=$(curl --header "X-Vault-Token: $TOKEN" --request LIST "https://VAULT-SERVER/v1/identity/entity/name" | jq --raw-output .data.keys[])
# FOR EACH ENTITY
for e in $entity_list
do
# GET THE ENTITY INFORMATION
entity_info=$(curl --header "X-Vault-Token: $TOKEN" --request GET "https://VAULT-SERVER/v1/identity/entity/name/$e")
# GET THE LDAP USERNAME
user=$(echo $entity_info | jq --raw-output '.data.aliases[] | select(.mount_type=="ldap") | .name')
# VERIFY IF LDAP USERNAME EXISTS AND IT IS DIFFERENT FROM ENTITY NAME
if [[ $user != "" && $user != $e ]]
then
# GET THE ENTITY ID
id=$(echo $entity_info | jq --raw-output .data.id)
# FIX THE ENTITY NAME
curl --header "X-Vault-Token: $TOKEN" --request POST "https://VAULT-SERVER/v1/identity/entity/id/$id" <<EOF
{
"name": "$user"
}
EOF
fi
done
我正在使用 Hashicorp Vault 1.9.0 并启用了 LDAP 身份验证方法,该方法按预期正常工作,但我遇到了一个问题:
LDAP 是我们唯一的身份验证方法(当然,除了 Token 之外)并且 LDAP 用户不是事先在 Vault 中创建的。因此,当某些用户首次登录 Vault 时,Vault 会自动创建用户实体,使用通用名称,例如“entity_1fb81714”,并将 LDAP 用户名添加为该实体的别名。这工作得很好(但可能会更好)。有没有办法将 Vault 配置为使用 LDAP 用户名(与别名中使用的相同)作为实体名称,而不是通用的“entity_xxx”?
实体名称:
实体别名:
可以做,但是看到维护的时候可能会放弃...
所以你有一个随机名称的实体,“内部”有一个 entity-alias 具有给定用户的 sAMAccountName
属性。
背景
实体创建不是由 ldap 身份验证后端完成的。如果 Vault 找不到具有匹配实体别名的现有实体,将创建一个实体。
所以基本上它是这样做的:
- 尝试查找其中包含该别名的现有实体
- 如果找到 none,则创建一个新实体
问题是 Vault 不能使用实体别名属性值作为名称,因为您可以为任何给定实体使用多个实体别名。其他身份验证后端(如 Github)可能具有不同的实体别名属性。 Vault 无法决定应该使用哪一个,因此选择了一个随机名称。
可以完成
要为您的实体使用可预测的名称,您必须使用您选择的名称和别名预先创建实体,以便在用户使用时显示首先登录,Vault 会去寻找它。
出于以下三个原因,我建议您学会接受随机名称:
- 管理层
- 竞争条件
- 许可费用
管理
当用户来来去去时,您将不得不轮询您的 Active Directory 以获取更改和 create/delete 实体别名。请记住,Vault 不会验证实体别名是否有效,这是您的工作。不是一段复杂的代码,但它不会自行编写和维护,您可能有更好的事情要做。
竞争条件
即使有同步机制,在脚本的两次传递之间,用户登录 Vault 时仍然会发生变化。该用户将获得一个随机的实体名称。您的脚本可以解决这个问题并在下一个 运行 上修复它,但这会使您的同步代码更加复杂。
许可证
Vault Enterprise 按实体授予许可。为 Active Directory 中的每个人创建一个实体别名可能会很昂贵。您的脚本也可以解决这个问题,仅为给定组的成员创建实体别名,但是...您明白了。
你可能会这样:如果你想控制实体名称
在 ixe013 回答之后,我决定制作一个脚本来查找“entity_xxx”默认名称并将它们更改为 LDAP 适当的用户名。
成功了!
脚本的主要部分如下所示。
# GET THE VAULT ENTITY LIST
entity_list=$(curl --header "X-Vault-Token: $TOKEN" --request LIST "https://VAULT-SERVER/v1/identity/entity/name" | jq --raw-output .data.keys[])
# FOR EACH ENTITY
for e in $entity_list
do
# GET THE ENTITY INFORMATION
entity_info=$(curl --header "X-Vault-Token: $TOKEN" --request GET "https://VAULT-SERVER/v1/identity/entity/name/$e")
# GET THE LDAP USERNAME
user=$(echo $entity_info | jq --raw-output '.data.aliases[] | select(.mount_type=="ldap") | .name')
# VERIFY IF LDAP USERNAME EXISTS AND IT IS DIFFERENT FROM ENTITY NAME
if [[ $user != "" && $user != $e ]]
then
# GET THE ENTITY ID
id=$(echo $entity_info | jq --raw-output .data.id)
# FIX THE ENTITY NAME
curl --header "X-Vault-Token: $TOKEN" --request POST "https://VAULT-SERVER/v1/identity/entity/id/$id" <<EOF
{
"name": "$user"
}
EOF
fi
done