当前位置: 首页 > 知识库问答 >
问题:

新令牌不允许访问策略

伯俊弼
2023-03-14

已设置Hashicorp Vault docker容器,但在使用生成的令牌而不是根时,似乎无法获取数据库凭据。

error occurred: permission denied

重新创建的步骤:

我创建了最新的容器,获得了根令牌并使用它进行身份验证。

运行以下命令:

export VAULT_ADDR='http://127.0.0.1:8200'
vault secrets enable database
vault auth enable approle
vault write sys/policy/test policy='path "database/roles/" {capabilities = ["create", "read", "update", "delete", "list"]} path "auth/approle/login" { capabilities = [ "create", "read" ]} path "database/creds/" {capabilities = ["create", "read", "update", "delete", "list"]} path "secret/dbcreds" {capabilities = ["create", "update", "read"]} path "sys/mounts/" {capabilities = [ "create", "read", "update", "delete", "list" ]} path "database/" { capabilities = [ "create", "read", "update", "delete", "list" ]}'
vault write database/config/mssql plugin_name="mssql-database-plugin" root_rotation_statements="ALTER LOGIN [{{username}}] WITH PASSWORD = '{{password}}'" connection_url="sqlserver://{{username}}:{{password}}@sql:1433" allowed_roles="*,test" username="***MY_USER***" password="***MY_PASS***"
vault write database/roles/Tenant_1 db_name=mssql creation_statements="CREATE LOGIN [{{name}}] WITH PASSWORD = '{{password}}';USE [Tenant_1];CREATE USER [{{name}}] FOR LOGIN [{{name}}];ALTER ROLE [db_owner] ADD MEMBER [{{name}}];" default_ttl="1h" max_ttl="24h"
vault write auth/approle/role/test secret_id_ttl=0 token_num_uses=0 token_ttl=20m token_max_ttl=30m secret_id_num_uses=0 policies="default, test"
vault read auth/approle/role/test/role-id
vault write -f auth/approle/role/test/secret-id
vault write auth/approle/login role_id=***role_id*** secret_id=***secret_id***
vault secrets enable -version=2 kv  

我还尝试将“vault write”替换为“vault kv put”,并成功执行所有命令。

所以我叫GEThttp://127.0.0.1:8200/v1/database/creds/Tenant_1,使用标题:

X-Vault-Token
**Root-Token**

它起作用了。

如果我打电话过去http://127.0.0.1:8200/v1/auth/approle/login使用有效的角色/机密id,我成功地取回令牌。但是,如果我尝试在GET调用中使用此令牌而不是根,则会拒绝权限。

查看策略配置,在我看来/database/creds是策略的一部分。

如果我对生成的令牌进行查找:

Key                 Value
---                 -----
accessor            PNe8WQiXnZvlFNEJekXO2es4
creation_time       1555517775
creation_ttl        20m
display_name        approle
entity_id           acc7558b-02b1-328d-4705-74f00ab9524b
expire_time         2019-04-17T16:36:15.6815637Z
explicit_max_ttl    0s
id                  s.iGkfsCUS6JX58SiDl8pfFN2K
issue_time          2019-04-17T16:16:15.6815627Z
meta                map[role_name:test]
num_uses            0
orphan              true
path                auth/approle/login
policies            [default test]
renewable           true
ttl                 16m35s
type                service

我看起来不错!?

有什么想法吗?

共有1个答案

衡翰藻
2023-03-14

好吧,这浪费了好几个小时,但是对于其他有类似问题的人来说,有一个解决方案

我的策略从最后开始就丢失了/*,因此即使令牌有效,它也没有访问这些凭据的权限。

 类似资料:
  • 我已将以下策略附加到IAM用户: 现在,有了附加了上述策略的IAM用户的访问凭据,我试图运行以下命令: 其中,文件policy.json的内容为: 我得到了一个 调用PutBucket策略操作时发生错误(AccessDended):拒绝访问 现在我想知道为什么? 用户的策略语句允许对资源执行: 这就是我试图用我的上述政策所做的。那么,为什么访问被拒绝?

  • 问题内容: 我看到以下错误: 使用此代码: 是什么原因引起的,如何解决? 问题答案: 在当前域之外发出ajax请求时,Javascript是受限制的。 例1:您的域名为example.com,并且您想向test.com提出请求=>您不能。 例2:您的域名是example.com,并且您想向inner.example.com发送请求,但是您不能。 例3:您的域名为example.com:80,并且您

  • 我不熟悉,它代表。我混淆了它的两个术语:访问令牌和刷新令牌。 用户注册/登录站点后,我创建和。 将刷新标记保存在数据库或cookie中。 15分钟后,用户标记访问令牌过期。 如果用户空闲2小时,我将从cookie或DB中删除刷新令牌,否则我将使用刷新令牌续订访问令牌。 有什么优化的方法可以达到这个目的吗?

  • 我已经阅读了JWT和访问令牌和刷新令牌。我知道您必须在很短的时间(分钟)内设置访问令牌过期,并在过期时使用刷新令牌获取新的访问令牌。 我不清楚三件事: 谁检查访问令牌是否过期?客户端是否通过发送过期的访问令牌和刷新来检查并请求新的访问代码? 谁检查刷新令牌是否过期?(显然刷新令牌也需要过期,尽管需要更长的时间才能过期)。 在我看来,如果刷新令牌过期,则必须提示用户重新登录。在某些情况下(移动应用)

  • 本文向大家介绍oauth 刷新访问令牌,包括了oauth 刷新访问令牌的使用技巧和注意事项,需要的朋友参考一下 示例 资源

  • 若授权服务器给客户端颁发了刷新令牌,客户端通过使用按附录B“application/x-www-form-urlencoded”格式在HTTP请求实体正文中发送下列UTF-8字符编码的参数向令牌端点发起刷新请求: grant_type 必需的。值必须设置为“refresh_token”。 refresh_token 必需的。颁发给客户端的刷新令牌。 scope 可选的。如3.3节所述的访问请求的范