在 HashiCorp 保险库中搜索值

有没有办法在 Hashicorp Vault 中搜索值?我正在尝试编写 Golang 代码来搜索并列出值出现在保险库中的所有位置。它类似于 golang 在目录上的 walk 函数。有没有人有一个好的方法?我正在考虑使用并发来搜索保险库中的值。谢谢


下面是我想出的代码示例。我正在研究如何通过使用并发来加快速度。有没有办法同时遍历一个目录?


func walkDir(client *api.Client, path string) {

    var value *api.Secret

    var err error

    if path != "" {

        value, err = client.Logical().List(path)

    } else {

        path = vault_path

        value, err = client.Logical().List(path)

    }

    if err != nil {

        fmt.Println(err)

    }

    var datamap map[string]interface{}

    datamap = value.Data

    data := datamap["keys"].([]interface{})

    for _, item := range data {

        itemString := item.(string)

        if strings.HasSuffix(itemString, "/") {

            walkDir(client, path+itemString)

        } else {

            //its a secret

            data := read(client, path+itemString)


            if *searchKey!="" && searchForKey(data,*searchKey){

                fmt.Println(path + itemString)

            }

            if *searchValue!="" && searchForValue(data,*searchValue){

                fmt.Println(path + itemString)

            }

        }

    }

}


func read(client *api.Client, path string) map[string]interface{} {

    value, err := client.Logical().Read(path)

    if err != nil {

        fmt.Println(err)

    }

    values := value.Data

    return values

}


func searchForValue(mapp map[string]interface{}, searchValue string) bool {

    for _, value := range mapp {

        if searchValue == value {

            return true

        }

    }

    return false

}


func searchForKey(mapp map[string]interface{}, searchKey string) bool {

    for key := range mapp {

        if searchKey == key {

            return true

        }

    }

    return false

}


慕田峪9158850
浏览 137回答 1
1回答

皈依舞

您可以LIST在 Vault 中“目录”(我假设您只是在查看kv引擎)。所以把它当作一个普通的文件系统来对待:从根开始,列出条目,检查每个条目的内容是否有那个值,然后遍历每个条目,列出它的内容,等等。https://www.vaultproject.io/api-docs/secret/kv/kv-v1#list-secrets
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go