到目前为止,我的配置工作正常。用户可以使用OIDC(链接到Azure AD)登录Vault Web界面。广告组也会传输到保险柜。因此,我可以将AD组分配到保管箱策略。登录到保险柜的用户可以签名SSH公钥。到目前为止一切顺利...
唯一缺少的部分是身份传播。我希望能够跟踪我的SSH主机上的用户。因此,我需要将用户名添加到SSH证书中。
因此,当用户签署她的SSH公钥时,我想将其用户名(电子邮件,全名,任何与她的真实身份相关的信息)添加为SSH证书的主体。
如果我理解正确,我的问题类似于this one,但我使用OIDC代替了用户密码引擎。
我尝试采用git-issue中建议的代码:
cat <<EOF > signer-clientrole.hcl
{
"allow_user_certificates": true,
"allowed_users": "root,{{identity.entity.aliases.$(vault auth list -format=json | jq -r '.["oidc/"].accessor').name}}",
"default_user": "",
"allow_user_key_ids": "false",
"default_extensions": [
{
"permit-pty": ""
}
],
"key_type": "ca",
"ttl": "60m0s"
}
EOF
vault write ssh/roles/clientrole @signer-clientrole.hcl
但是,当我想用在“主要” Web表单中输入的用户名签名证书时,会收到错误消息,提示不存在委托人。参见下图:
我希望我的问题变得清楚。我在Debian 10上使用Vault 1.4.2。
答案 0 :(得分:1)
对于那些遇到相同问题的人,我找到了解决问题的方法。
在配置OIDC角色时,我在sub
中使用bound_subject
来表示sub
,因为在所有相应的教程中都建议这样做,并且我对此值并不怀疑。 email
是在广告中标识用户的一种uuid。
所以我改用[DEBUG] identity: creating a new entity: alias="id:"..." canonical_id:"..." mount_type:"oidc" mount_accessor:"auth_oidc_..." mount_path:"auth/oidc/" name:"example_user@example.com"...
并查看server.log文件并找到以下条目:
bound_subject
因此,name
的值将作为identity.entity.aliases.$(vault auth list -format=json | jq -r '.["oidc/"].accessor')
后面的任何值写入ssh-keygen -Lf ssh-cert.pub
ssh-cert-v11.pub:
Type: ssh-rsa-cert-v01@openssh.com user certificate
Public key: RSA-CERT SHA256:...
Signing CA: RSA SHA256:...
Key ID: "vault-oidc-example-user@example.com-..."
Serial: ...
Valid: from ...
Principals:
example-user@example.com
Critical Options: (none)
Extensions:
...
(请参阅初始问题)。
因此,现在使用将电子邮件地址作为Web表单的主体使用即可:
查看证书属性也显示它有效:
TimeZone.current