【问题标题】:How to set my own root token in HashiCorp Vault Docker Compose file如何在 HashiCorp Vault Docker Compose 文件中设置我自己的根令牌
【发布时间】:2018-10-05 05:58:41
【问题描述】:

使用我当前的 Vault docker compose 文件,我无法使用我在 docker compose 文件中设置的令牌登录。当 Vault 容器启动时 - 它提供自己的根令牌以在 Vault 服务器中进行身份验证。每当我们启动新容器时,这种情况就会不断变化,开发人员每次都必须从控制台记下它并使用该令牌登录 Vault。

我想将其设置为 docker compose 文件的一部分 - 我该怎么做。

请在下面找到我的 docker compose 文件:

version: '3'
services:
  myvault:
        image: vault
        container_name: myvault
        ports:
          - "192.168.99.100:8200:8200"
        environment:
           VAULT_SERVER: "http://192.168.99.100:8200"
           TOKEN: mysuper-secret-vault-token
        volumes:
          - ./file:/vault/file:rw
          - ./config:/vault/config:rw
        cap_add:
          - IPC_LOCK

【问题讨论】:

    标签: docker docker-compose hashicorp-vault


    【解决方案1】:

    首先,出于安全原因,根令牌不应用于身份验证,因为它可以做任何事情

    the Vault team recommends 根令牌仅用于足够的初始设置(通常,设置允许管理员获取更多有限令牌所需的身份验证方法和策略)或在紧急情况下,并在不再需要后立即撤销.如果需要一个新的根令牌,可以使用 operator generate-root 命令和相关的 API 端点即时生成一个。

    现在,关于创建根令牌,来自vault documentation

    创建根令牌只有三种方式:

    • 在保管库初始化时生成的初始根令牌 -- 此令牌没有过期
    • 通过使用另一个根令牌;过期的根令牌无法创建永不过期的根令牌
    • 在获得开封密钥持有人法定人数的许可下使用保管库操作员 generate-root(示例)

    对于您的情况,您可以考虑使用其他一些auth methods 来代替令牌身份验证,例如Userpass Auth Method

    Userpass Auth 将允许您为相同的用户角色设置相同的用户名/密码对。您可以创建一些脚本来启用此身份验证机制并为您的服务器的每个初始设置设置用户。

    【讨论】:

      【解决方案2】:

      @Learn Java 您可以通过在如下环境中传递 VAULT_DEV_ROOT_TOKEN_ID 来创建自己的根令牌,但要记住的一点是,这仅在您在开发模式下使用 vault 时有效,不完全推荐用于生产。

      访问https://www.vaultproject.io/docs/commands/server.html

      version: '3'
      services:
      myvault:
          image: vault
          container_name: myvault
          ports:
            - 8200:8200
          environment:
             VAULT_SERVER: "http://127.0.0.1:8200"
             VAULT_DEV_ROOT_TOKEN_ID: "my-token"
      

      【讨论】:

        【解决方案3】:

        遵循暖通空调文档 (https://hvac.readthedocs.io/en/stable/overview.html#initialize-the-client)

        我能够使用以下 python 脚本获取根令牌:

        import hvac
        from icecream import ic
        client = hvac.Client(url='http://localhost:8200')
        ic(client.is_authenticated())
        ic(client.sys.is_initialized())
        
        shares = 5
        threshold = 3
        
        result = client.sys.initialize(shares, threshold)
        ic(result['root_token'])
        ic(result['keys'])
        
        ic(client.sys.is_initialized())
        

        【讨论】:

          猜你喜欢
          • 2021-10-02
          • 2019-07-20
          • 2021-12-12
          • 2021-09-19
          • 2020-08-27
          • 2020-10-28
          • 2019-05-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多