我将 Hashicorp 保险库用作机密存储,并通过 Ubuntu 20.04 上的 apt 存储库安装它。
之后,我添加了访问 UI 的根密钥,并且可以使用 UI 添加或删除机密。
每当我尝试使用命令行添加或获取机密时,都会收到以下错误:
jarvis@saki:~$ vault kv get secret/vault
Get "https://127.0.0.1:8200/v1/sys/internal/ui/mounts/secret/vault": http: server gave HTTP response to HTTPS client
Run Code Online (Sandbox Code Playgroud)
我的保险库配置如下所示:
# Full configuration options can be found at https://www.vaultproject.io/docs/configuration
ui = true
#mlock = true
#disable_mlock = true
storage "file" {
path = "/opt/vault/data"
}
#storage "consul" {
# address = "127.0.0.1:8500"
# path = "vault"
#}
# HTTP listener
#listener "tcp" {
# address = "127.0.0.1:8200"
# tls_disable = …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Spring Vault 提供集中式服务,为我们的微服务生态系统提供存储和检索凭证信息的功能。然而,我们的组织目前使用 cyber-ark 来集中凭证,所以我正在寻找的是构建一个基于 Spring Vault 的抽象服务,并为 Harshicorp Vault 使用 cyber-arkas 存储引擎。
cyber-ark spring-boot spring-cloud hashicorp-vault spring-vault
我已经使用 HashiCorp Vault 六个月了,我的所有秘密都来自配置服务。我正在使用spring.cloud.config.token连接我所有的客户端服务,但是当保险库令牌每 30 天左右过期时,问题就出现了。对于较低的环境,令牌到期是可以接受的,因为我们可以一次又一次地重新部署,但生产,我们不能重新部署。因此,决定使用 AWS IAM 角色,可以连接到保管库并且不会有任何过期。
我已关注此官方 链接,但在启动应用程序时遇到以下问题。
我已经用谷歌搜索了它,但没有得到一个有效的解决方案。
我在我的客户端服务 (my-client-service) 的 bootstrap.yml 文件中使用以下代码
引导程序.yml
spring:
application:
name: my-client-service
cloud:
config:
enabled: true
uri: 'https://localhost:8080'
vault:
enabled: true
uri: 'https://localhost:8090'
port: 443
scheme: https
namespace: 'vault-namespace/aus'
authentication: AWS_IAM
fail-fast: true
aws-iam:
role: aus-vault-role
aws-path: aws
generic:
enabled: true
backend: kv
profile-separator: '/'
default-context: my-client-service
application-name: my-client-service
config:
order: -1000
Run Code Online (Sandbox Code Playgroud)
Vault 身份验证 ARN 到 AWS
vault write auth/aws/config/sts/<account_number> sts_role=arn:aws:iam::<account_number>:role/role_name
Run Code Online (Sandbox Code Playgroud)
将 ARN 与保险柜策略相关联
我为同一个账户创建了一个 IAM 角色,该角色映射到一个 …
amazon-web-services amazon-iam spring-cloud hashicorp-vault spring-vault
我正在以下Vault Configuration
示例中引用:https://spring.io/guides/gs/vault-config/。当我执行代码时,出现以下错误。
错误:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'vaultPropertySourceLocator' defined in class path resource [org/springframework/cloud/vault/config/VaultBootstrapPropertySourceConfiguration.class]: Unsatisfied dependency expressed through method 'vaultPropertySourceLocator' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'vaultTemplate' defined in class path resource [org/springframework/cloud/vault/config/VaultBootstrapConfiguration.class]: Unsatisfied dependency expressed through method 'vaultTemplate' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'vaultSessionManager' defined in class path resource [org/springframework/cloud/vault/config/VaultBootstrapConfiguration.class]: Unsatisfied dependency expressed through method 'vaultSessionManager' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: …
Run Code Online (Sandbox Code Playgroud) 我正在研究如何使用Vault 0.11.1和Spring Vault 2.0.2.RELEASE。我已经建立了一个开发保管箱:
vault server -dev
Run Code Online (Sandbox Code Playgroud)
并添加了一些数据
vault kv put secret/certs/jan cert=ABCD
Run Code Online (Sandbox Code Playgroud)
我可以在Spring Vault中阅读
@Autowired
private VaultOperations operations;
String path = "secret/data/certs/jan";
System.out.println(operations.read(path).getData());
Run Code Online (Sandbox Code Playgroud)
注意,奇怪的是,我必须在路径中插入“ data /”才能再次找到它。
删除数据也可以:
operations.delete(path);
Run Code Online (Sandbox Code Playgroud)
但是用写数据
Secret secret = new Secret("ABCD");
operations.write(path, secret);
Run Code Online (Sandbox Code Playgroud)
失败于
org.springframework.vault.VaultException: Status 400 secret/data/certs/jan: no data provided
Run Code Online (Sandbox Code Playgroud)
秘密是一个简单的bean:
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Secret {
String cert;
}
Run Code Online (Sandbox Code Playgroud)
和杰森转换似乎很好:
DEBUG org.springframework.web.client.RestTemplate - Writing [Secret(cert=ABCD)] using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@add0edd]
Run Code Online (Sandbox Code Playgroud)
只是想写一个字符串
operations.write(path, "foo=bar");
Run Code Online (Sandbox Code Playgroud)
也失败:
Status 400 secret/data/certs/jan: failed to parse JSON input: invalid character 'o' in …
Run Code Online (Sandbox Code Playgroud) 我使用 Spring boot 设置了项目,在启动时加载各个组件。每个单独的包都包含自己的数据源、进程等。我可以简单地使用它,它工作得很好
@SpringBootApplication(scanBasePackages = {
"com.package1",
"com.package2",
"com.package3"
})
public class Application extends SpringBootServletInitializer{
public static void main(String[] args){
SpringApplication.run(Application.class,args)
}
}
Run Code Online (Sandbox Code Playgroud)
但目前,单个项目的数量正在变得越来越大。是否可以将要扫描的组件/包列表放入外部属性文件或 spring Vault 中?我不确定如何检索它,是否可以在启动前检索属性?
编辑:
目前我尝试过这个:
@Import(AppConfig.class)
public class Application extends SpringBootServletInitializer{
public static void main(String[] args){
SpringApplication.run(Application.class,args)
}
}
@Configuration
@ComponentScan(basePackages = {$app.packages})
@EnableAutoConfiguration
public class AppConfig {
}
//in my properties file
app.packages = ["com.package1","com.package2","com.package3"]
Run Code Online (Sandbox Code Playgroud)
但它不起作用
我已将所有配置详细信息添加到 Vault 中。您可以在下面的附图中看到详细信息。这遵循特定的路径,即kv/unistad/dev/workflow/camunda/1.0
但是,当我尝试使用Vault.NET和以下 nuget 包读取此信息时
Install-Package Vault
Run Code Online (Sandbox Code Playgroud)
我的代码看起来像这样:
var endpoint = "http://openblue-bridge.com:32270";
var token = "s.inklpUdNxet1ZJtaCLMpEIPA";
var vaultClient = new VaultClient(new Uri(endpoint), token);
string project = "unistad";
string environment = "dev";
string appVersion = "1.0";
var secretPath = $"kv/{project}/{environment}/workflow/camunda/{appVersion}";
// Use client to read a key-value secret.
var secrets = await vaultClient.Secret.Read< Dictionary<string, string>> (secretPath);
Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码时,出现以下错误:
版本化 K/V 秘密引擎的路径无效。请参阅 API 文档以了解要使用的适当 API 端点。如果使用 Vault CLI,请使用“vault kv get”执行此操作。
我不知道如何修复这个错误。任何帮助将非常感激。
在我的应用程序中,我们从我的应用程序进行两次调用以从 Vault 获取机密,如下所示:
登录 Vault :对 https::/v1/auth/approle/login 进行 POST 调用——它将以 role_id 和 Secret_id 作为负载,响应将是 client_token。
获取机密:对 https::/v1/secret/data/abc/dev/xyz.json 进行 GET 调用 - 它将采用 X-Vault-Token 和 X-Vault-Namespace 标头,并给出如下响应:
{ "request_id": "......", "lease_id": "", "renewable": false, "lease_duration": 0, "data": { "data": { "name": "ABC" }, "元数据": { "created_time": "...", "deletion_time": "", "destroyed": false, "version": 1 } }
现在我想使用 Spring Cloud Vault Dependency 来使事情通过它进行。请为我提供适当的插图来完成这项工作?
我正在尝试在 bean 中运行 Vault 容器,并使用它来创建 VaultTemplate bean 以进一步在测试中使用
@TestConfiguration
@TestPropertySource("classpath:application.yml")
public class TestsConfiguration {
@Container
public static VaultContainer vaultContainer = new VaultContainer();
@Bean
@Order(1)
public VaultEndpoint vaultEndpoint() {
vaultContainer
.withVaultToken("00000000-0000-0000-0000-000000000000")
.withExposedPorts(8200);
vaultContainer.start();
return VaultEndpoint.create(vaultContainer.getContainerIpAddress(), vaultContainer.getMappedPort(8200));
}
@Bean
@Order(2)
public VaultTemplate vaultTemplate(VaultEndpoint vaultEndpoint) {
return new VaultTemplate(vaultEndpoint, new TokenAuthentication("00000000-0000-0000-0000-000000000000"));
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试通过 VaultOperations 编写一些 kv 时,我得到:
“https://localhost:32998/v1/my/secret”的 GET 请求出现 I/O 错误:无法识别的 SSL 消息,纯文本连接?;嵌套异常是 javax.net.ssl.SSLException:无法识别的 SSL 消息,纯文本连接?
我怎么解决这个问题?
spring-vault ×9
spring ×3
spring-boot ×3
java ×2
spring-cloud ×2
amazon-iam ×1
consul-kv ×1
containers ×1
cyber-ark ×1
java-8 ×1
package ×1
testing ×1
vault ×1