当前位置: 首页 > 面试题库 >

在Go中模拟Hashicorp保险库

空夕
2023-03-14
问题内容

有没有一种简单的方法可以在进行测试时模拟Hashicorp保险库?

我在Go中创建了一个可访问保险柜的服务,并希望为其创建适当的测试。

我没有找到我喜欢的简单解决方案(例如python中的moto)。我还尝试在docker中以dev模式使用Vault(采用系统测试路线),但我无法通过API写入文件。想法?


问题答案:

有没有一种简单的方法可以在Go测试中模拟HashiCorp Vault?

别。使用真实的东西!HashiCorp有助于提供实用程序功能,以快速启动服务器1。这使您的测试更加有用,并且经常可以作为开发人员如何设置本地开发服务器的可行指南。

这是一个非常基本的例子。测试框架非常灵活(这也使其相当复杂)。有关更多选项,请参阅软件包文档,包括在HA模式下运行多个服务器。在设置更复杂的场景时,我发现Vault自己的测试用例非常有用。

package main

import (
    "net"
    "testing"

    "github.com/hashicorp/vault/api"
    "github.com/hashicorp/vault/http"
    "github.com/hashicorp/vault/vault"
)

func TestVaultStuff(t *testing.T) {
    ln, client := createTestVault(t)
    defer ln.Close()

    // Pass the client to the code under test.
    myFunction(client)
}

func createTestVault(t *testing.T) (net.Listener, *api.Client) {
    t.Helper()

    // Create an in-memory, unsealed core (the "backend", if you will).
    core, keyShares, rootToken := vault.TestCoreUnsealed(t)
    _ = keyShares

    // Start an HTTP server for the core.
    ln, addr := http.TestServer(t, core)

    // Create a client that talks to the server, initially authenticating with
    // the root token.
    conf := api.DefaultConfig()
    conf.Address = addr

    client, err := api.NewClient(conf)
    if err != nil {
        t.Fatal(err)
    }
    client.SetToken(rootToken)

    // Setup required secrets, policies, etc.
    _, err = client.Logical().Write("secret/foo", map[string]interface{}{
        "secret": "bar",
    })
    if err != nil {
        t.Fatal(err)
    }

    return ln, client
}

1他们为所有项目提供测试服务器,而不仅仅是Vault。桥本(Mitchell
Hashimoto)在有关高级测试的演讲中解释了其合理性。



 类似资料:
  • 我正在测试Vault+Consul之间的集成,以保存我的秘密并将它们存储在多台机器中。我可以看到和插入/检索我的秘密从保险库没有问题。 现在,我正在尝试配置SpringCloud来使用来自Vault的秘密(我浏览了https://cloud.spring.io/spring-cloud-vault/reference/html/),我的bootstrap.yml与示例类似: 而且也管用!我的应用程

  • 基本上我们可以有一个只能读取一次的金库密钥吗?

  • 我正在寻找一个更好的解决方案的秘密旋转和发现保险库动态秘密是一个很好的一个。通过启用秘密引擎,例如数据库,应用程序/服务可以租赁动态秘密。 我注意到每次应用程序租用数据库机密时,Vault都会在数据库中创建一个新的用户/帐户。我明白,每个应用程序/服务需要是一个好公民,并根据租赁时间使用秘密。然而,在微服务环境中,实现bug可能导致服务请求太多动态机密,从而触发在数据库中创建太多帐户。 有什么方法

  • 使用模板启动存储库代理: 秘密是kv V2:

  • 我正在考虑在不久的将来在谷歌Kubernetes引擎上部署一个集群。我也一直在研究使用Hashicorp的Vault来管理我的集群可以访问的秘密。具体地说,我想利用动态秘密来提高安全性。 有更多使用Kubernetes和/或Vault经验的人能指出这种方法的任何潜在缺点吗?谢谢你。

  • 我需要存储用户提供给我的非常敏感的秘密(用户名+密码+证书以验证进入第三方API)。 我首先考虑的是AWS秘密管理器,它非常昂贵,而且IMHO主要用于基础设施机密(数据库密码、API密钥……),而不是客户提供的机密。现在,我正在决定使用AWS KMS(以及使用信封加密将加密的机密存储在数据库(AWS RDS)中)和Hashicorp Vault。 https://www.vaultproject.