β Vault
API μ μ¬μ©νμ¬ λ―Όκ°μ 보λ₯Ό κ΄λ¦¬νλ μμ€ν .
β± λ―Όκ°μ 보
λΉλ°λ²νΈ, ν ν°, μΈμ¦μ λ±μ μνΈν ν΄μΌνλ μ΄λ ν κ²λ€
https://www.vaultproject.io/ μμ κ°λ°ν¨.
β Vault μ¬μ© μ΄μ
νλ‘μ νΈ λ΄μ 보μμ μΈ μμλ₯Ό κ³ λ €ν΄μΌ νλ κ°(κ³μ λ° ν¨μ€μλ = λ―Όκ°μ 보 λ±)λ€μ HTTP API ν΅μ μ μ΄μ©νμ¬ μΈλΆ(=git μ μ₯μ λ±)μ λ ΈμΆμν€μ§ μμ μνλ‘ μ¬μ©ν μ μκΈ° λλ¬Έμ 보μμ ν¨μ¨μ μ.
β κ°λ¨νκ² μ€νλ§λΆνΈ νλ‘μ νΈ μμ μ¬μ©ν΄λ³Έ Vault
1. Vault μ€μΉ λ° μ€ν νμΈ
$ brew install vault # vault μ€μΉ
$ vault server --dev --dev-root-token-id="00000000-0000-0000-0000-000000000000" # vault μλ² μ€ν
β https://www.vaultproject.io/docs/commands/server μ μμΈν μ€λͺ μ΄ μλ€.
βοΈ λ§μ½ Get "https://127.0.0.1:8200/v1/sys/internal/ui/mounts/secret/application/db": http: server gave HTTP response to HTTPS client μ΄λ¬ν μλ¬κ° λ°μνμμ κ²½μ°
↓↓ μλλ΄μ© μ€ν (ν°λ―Έλ)
$ export VAULT_ADDR='http://localhost:8200'
2. key/vaule μμ± λ° νμΈ
$ vault kv put secret/application username=mungmang password=12345 # key, vaule μμ±
Key Value
--- -----
created_time 2022-01-08T15:46:25.89734Z
custom_metadata <nil>
deletion_time n/a
destroyed false
version 1
$ vault kv get secret/application # path μΌλ‘ key, vaule μ‘°ν
======= Metadata =======
Key Value
--- -----
created_time 2022-01-08T15:46:25.89734Z
custom_metadata <nil>
deletion_time n/a
destroyed false
version 1
====== Data ======
Key Value
--- -----
password 12345
username mungmang
β https://learn.hashicorp.com/collections/vault/getting-started μ vault μ¬μ© λ°©λ²μ λν΄ μμΈν μ€λͺ ν΄μ€λ€.
3. SpringBoot project μ vault μ°λμ¬λΆ μ μ©
// build.gradle νμΌμ μλμ μ 보 μΆκ°
ext {
...
set('springCloudVersion', "2021.0.1-SNAPSHOT")
}
dependencies {
...
implementation 'org.springframework.cloud:spring-cloud-starter-vault-config'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
// application.ymlμ μλμ λ΄μ© μΆκ°
spring:
config:
import: vault://
cloud:
vault:
uri: http://localhost:8200
token: 00000000-0000-0000-0000-000000000000
kv:
backend: secret
default-context: application #secret μ΄νμ κ²½λ‘
β± μ°Έκ³ λ‘ Spring Cloude Vault 3.0 λ° Spring Boot 2.4 μ΄μμμ bootstrap.yml, bootstrap.properties κ° λμ΄μ μ¬μ©λμ§ μλλ€κ³ ν¨. κ·Έλ¦¬κ³ Spring Boot Config Data μ κ·Όλ°©μμ μ¬μ©νλ €λ©΄ spring: config: importμ Vault μμ€ν
μ λ°μΈλ© νκΈ° μν μμ± μ€μ μ΄ νμν¨. (Spring Boot μ Config Data API)
μλ, application.ymlμ spring:cloud:bootstrap:enabled: true or pom.xml or build.gradle νμΌμ spring-cloud-starter-bootstrap importμ νμ¬ bootstrap.yml μ νμ±νλ₯Ό ν μ μμ.
β https://docs.spring.io/spring-cloud-vault/docs/current/reference/html/#client-side-usage μ μμΈν μ€λͺ μ΄ μλ€.
// config ν¨ν€μ§ μμ±ν μλμ ν΄λμ€ μμ±
@Getter
@Configuration
public class VaultData {
@Value("${username}")
private String username;
@Value("${password}")
private String password;
}
// νμΈ
@Slf4j
@SpringBootApplication
public class HelloApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(HelloApplication.class, args);
// vault ν
μ€νΈ --
VaultData vaultData = context.getBean(VaultData.class);
log.info("username:{}", vaultData.getUsername());
log.info("password:{}", vaultData.getPassword());
}
}
end ~
'κ°λ° > etc' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μ°λΆν¬μμ ν/μν€κ° μλ¨Ήμλ (0) | 2025.01.18 |
---|---|
SSE (Server Sent Event) (1) | 2023.08.20 |
ν₯μ¬κ³ λ μν€ν μ² (Hexagonal Architecture) (2) | 2022.09.25 |
JWT (JSON WEB TOKEN) (0) | 2021.12.22 |
Rest API (0) | 2021.06.02 |