当涉及到使用.Net实现解决方案时,Hashicorp文档还有很多需要改进的地方,而且VaultSharp文档不够全面,不足以涵盖多种场景。
我们有一个名称空间"egw“的Vault设置。我们有一个KV秘密引擎启用名称为"Expr“。我们在三个不同的路径上列出了秘密:“跨”、“设定”和“服务”。
我们不确定如何真正读取这些秘密,因为还不清楚名称空间、路径、挂载点等之间的区别。
这些文档到处都是,我们不清楚这些条款中的任何一个,因为错误的auth方法,示例应用程序对我们毫无用处。
我们正在使用LDAP Auth方法,这样我们就可以毫无问题地登录到我们的服务器上,这仅仅是获取我们遇到问题的秘密而已。
请有人向我们解释一下如何用VaultSharp阅读这些秘密?
更新:我们目前没有创建或分配角色。
有人能帮我理解一下为什么这段代码不能列出路径或获取秘密吗?我是做错了什么,还是不明白该怎么做?
IAuthMethodInfo authMethod = new LDAPAuthMethodInfo(_settings.LDAPUserName, _settings.LDAPPassword);
var vaultClientSettings = new VaultClientSettings(_settings.Address, authMethod);
IVaultClient vaultClient = new VaultClient(vaultClientSettings);
Secret<ListInfo> secret = await vaultClient.V1.Secrets.KeyValue.V2.ReadSecretPathsAsync("egw/Expr/data/");
ListInfo paths = secret.Data;
Secret<SecretData>? kv2Secret = await vaultClient.V1.Secrets.KeyValue.V2.ReadSecretAsync(path: "Expr/data/Trans", mountPoint:"egw/");
Dictionary<string, object> dataDictionary = kv2Secret.Data.Data;这是我得到的错误消息和StackTrace:
Message:
Newtonsoft.Json.JsonReaderException : Unexpected character encountered while parsing value: <. Path '', line 0, position 0.
Stack Trace:
JsonTextReader.ParseValue()
JsonReader.ReadAndMoveToContent()
JsonReader.ReadForType(JsonContract contract, Boolean hasConverter)
JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
JsonSerializer.Deserialize(JsonReader reader, Type objectType)
JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
JsonConvert.DeserializeObject[T](String value)
Polymath.MakeRequestAsync[TResponse](String resourcePath, HttpMethod httpMethod, Object requestData, IDictionary`2 headers, Boolean rawResponse, Action`1 postResponseAction)
Polymath.MakeVaultApiRequest[TResponse](String resourcePath, HttpMethod httpMethod, Object requestData, Boolean rawResponse, Action`1 postResponseAction, String wrapTimeToLive, Boolean unauthenticated)
LDAPAuthMethodLoginProvider.GetVaultTokenAsync()
Polymath.MakeVaultApiRequest[TResponse](String resourcePath, HttpMethod httpMethod, Object requestData, Boolean rawResponse, Action`1 postResponseAction, String wrapTimeToLive, Boolean unauthenticated)
Polymath.MakeVaultApiRequest[TResponse](String mountPoint, String path, HttpMethod httpMethod, Object requestData, Boolean rawResponse, Action`1 postResponseAction, String wrapTimeToLive, Boolean unauthenticated)
KeyValueSecretsEngineV2Provider.ReadSecretAsync(String path, Nullable`1 version, String mountPoint, String wrapTimeToLive)Update2:发现使用LDAP AuthMethod不能正常工作,不确定它是在Vault上设置的方式还是什么的。开始使用令牌,并能够读取秘密,但当我试图列出它们时,我被拒绝许可。
发布于 2022-07-19 17:12:15
名称空间为您的Vault服务提供了一种完全自我管理的方法。。这更多地是一个管理细节,而不是编程细节,您可以在很大程度上忽略这一点。最终,您只需要知道名称空间的名称空间是什么。
您的秘密引擎是秘密的实际所在,以及它们是如何存储的。。在大多数情况下,您使用的是KV (键值)机密引擎,版本2。
您列出的路径只描述您的秘密驻留在您的机密引擎中的位置。
所以根据你提供的信息:
egwExpr的KVTrans、Set和Serv.你可能会从这些路径上引用它.请注意,KV秘密引擎将其值存储在数据/路径中。,所以您必须在从机密引擎请求之后包含它。
egw/Expr/data/Transegw/Expr/data/Setegw/Expr/data/Serv请注意:如果您正在进行机器对机器的通信,那么您将真正想要考虑使用AppRole来访问这些秘密。使用LDAP完成所有这些都将是非常复杂的,它依赖于LDAP和Vault是活着的,而使用AppRoles则只需要Vault还活着,并且允许非常细粒度地访问机密。
https://stackoverflow.com/questions/73040905
复制相似问题