无法续订 LDAP 用户登录生成的 Hashicorp Vault 令牌

Cannot renew Hashicorp Vault token generate by LDAP user login

我有一个由 Consul 集群支持并与我的 LDAP 服务器集成的 Vault 服务器,它与我的 LDAP 服务器一起工作正常并且一切顺利,但唯一的问题是我无法更新这些生成的令牌登录。

重现

重现该行为的步骤:

  1. 运行 vault login -method=ldap username=myusername -renewable=true 得到token如下:
Password (will be hidden):                                                        
Success! You are now authenticated. The token information displayed below         
is already stored in the token helper. You do NOT need to run "vault login"       
again. Future Vault requests will automatically use this token.                   


Key                    Value                                                      
---                    -----                                                      
token                  s.wCQedkMmX61EJszE64HqPzhC                                 
token_accessor         qcxkggK00WxgwmxOC9Ht9vpc                                   
token_duration         24h                                                        
token_renewable        true                                                       
token_policies         ["default"]                                                
identity_policies      []                                                         
policies               ["default"]                                                
token_meta_username    myusername   
  1. root 用户身份登录并 运行 vault token lookup s.wCQedkMmX61EJszE64HqPzhC 检查令牌状态和 ttl:
Key                 Value                                    
---                 -----                                    
accessor            qcxkggK00WxgwmxOC9Ht9vpc                 
creation_time       1576051650                               
creation_ttl        24h                                      
display_name        ldap-myusername                    
entity_id           1fc1f68d-face-f9f1-468f-36b94e10fb3b     
expire_time         2019-12-12T08:07:30.56805754Z            
explicit_max_ttl    0s                                       
id                  s.wCQedkMmX61EJszE64HqPzhC               
issue_time          2019-12-11T08:07:30.568070919Z           
meta                map[username:myusername]           
num_uses            0                                        
orphan              true                                     
path                auth/ldap/login/myusername         
policies            [default]                                
**renewable           true**                                     
ttl                 23h55m5s                                 
type                service      

很明显token的renewable属性是truetypeservice,所以可以更新。

  1. 运行 vault token renew s.wCQedkMmX61EJszE64HqPzhC 更新上面给出的令牌。

  2. 当我再次查找令牌时,它的 ttl 没有任何变化。 运行 vault token lookup s.wCQedkMmX61EJszE64HqPzhC:

Key                 Value                                   
---                 -----                                   
accessor            qcxkggK00WxgwmxOC9Ht9vpc                
creation_time       1576051650                              
creation_ttl        24h                                     
display_name        ldap-myusername                   
entity_id           1fc1f68d-face-f9f1-468f-36b94e10fb3b    
expire_time         2019-12-12T08:07:30.56805754Z           
explicit_max_ttl    0s                                      
id                  s.wCQedkMmX61EJszE64HqPzhC              
issue_time          2019-12-11T08:07:30.568070919Z          
meta                map[username:myusername]          
num_uses            0                                       
orphan              true                                    
path                auth/ldap/login/myusername        
policies            [default]                               
renewable           true                                    
ttl                 23h53m24s                               
type                service                       

注意: 我尝试了使用 API 调用和自我更新的上述步骤,但结果与上面相同。

预期行为

对于 LDAP 令牌,我的预期行为是在 运行 vault token renew s.wCQedkMmX61EJszE64HqPzhC 之后,因为 root 令牌的 ttl 返回到 creation_ttl 值。

环境:

root@ubuntu:~# vault status                         
Key             Value                               
---             -----                               
Seal Type       shamir                              
Initialized     true                                
Sealed          false                               
Total Shares    5                                   
Threshold       3                                   
Version         1.3.0                               
Cluster Name    vault-cluster-11d62d58              
Cluster ID      a9704841-7f1c-1986-a880-a2c252f23ed2
HA Enabled      true                                
HA Cluster      https://10.1.10.1:8201          
HA Mode         active                              

root@ubuntu:~# vault version
Vault v1.3.0                
root@ubuntu:~# uname -a                                                                               
Linux ubuntu 4.15.0-45-generic #48-Ubuntu SMP Tue Jan 29 16:28:13 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux 

Vault 服务器配置文件:

listener "tcp" {                           
  address          = "0.0.0.0:8200"        
  cluster_address  = "10.1.10.1:8201"  
  tls_disable      = "true"                
}                                          

storage "consul" {                         
  address = "127.0.0.1:8500"               
  path    = "vault/"                       
}                                          

ui = true                                  
api_addr = "http://10.1.10.1:8200"     
cluster_addr = "https://10.1.10.1:8201"

更新:

您可以使用这个示例免费 LDAP 服务器配置。重现情况:

#Test LDAP server
vault write auth/ldap/config \
    url="ldap://ldap.forumsys.com:389" \
    userdn="uid=tesla,dc=example,dc=com" \
    userattr="uid" \
    groupattr="cn" \
    groupdn="dc=example,dc=com" \
    binddn="uid=tesla,dc=example,dc=com" \
    bindpass='password' \
    starttls=false

登录使用:vault login -method=ldap username=teslapassword 作为密码,然后尝试更新生成的令牌。

LDAP 身份验证后端的最大值 TTL 可以设置为 24h。这意味着生成的令牌不能在其创建后 24h 之后存在。

查看 运行

TTL
vault auth list --detailed

如果值为 system,则默认值为 32 days 或 Vault 配置文件中指定的值。

Max TTL 可以通过以下方式调整:

vault mount-tune -max-lease-ttl=<NEW TTL> auth/ldap

附加信息here

问题是 Vault 1.3.0 版本的一个错误,我已经为这个错误创建了一个 issue,这导致了下一个版本的 PR,问题在 1.3.2.