티스토리 뷰
Spring Boot에서 application.yml 또는 application.properties 파일에 설정된 민감한 정보(예: 데이터베이스 username, password)를 암호화하려면, 다음과 같은 방법을 사용할 수 있습니다.
1. Jasypt 사용
Jasypt는 Spring Boot 애플리케이션에서 설정 파일에 포함된 민감한 데이터를 암호화하는 데 널리 사용됩니다.
1.1. Jasypt 의존성 추가
Maven
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
1.2. 암호화된 값 생성
Jasypt CLI를 사용하여 암호화된 값을 생성합니다.
- Jasypt CLI 다운로드 Jasypt 공식 CLI 도구에서 다운로드하거나 프로젝트에 포함된 CLI를 사용합니다.
- 암호화 명령 실행
- your_password: 암호화하려는 값 (예: 데이터베이스 비밀번호).
- encryption_key: 암호화 키 (이 키를 안전하게 보관해야 함).
- 결과로 암호화된 문자열이 출력됩니다.
- java -cp jasypt-tools-3.0.5.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="your_password" password="encryption_key" algorithm=PBEWithMD5AndDES
1.3. application.yml에 암호화된 값 사용
암호화된 값을 설정 파일에 다음과 같이 추가합니다.
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/spring
username: root
password: ENC(encrypted_value)
- ENC(encrypted_value)는 암호화된 값으로 교체해야 합니다.
1.4. 암호화 키 제공
암호화 키는 애플리케이션 시작 시 제공해야 합니다. 아래 두 가지 방법 중 하나를 사용합니다.
- 환경 변수로 설정
- export JASYPT_ENCRYPTOR_PASSWORD=your_encryption_key
- application.yml에 명시적으로 설정
- jasypt: encryptor: password: your_encryption_key
1.5. 암호 해독 및 실행
Spring Boot 애플리케이션이 실행될 때 ENC(...)로 표시된 암호화된 값이 자동으로 복호화되어 사용됩니다.
2. HashiCorp Vault 사용
HashiCorp Vault는 민감한 데이터를 안전하게 관리하기 위한 강력한 도구입니다. 다음은 간단한 설정 예시입니다.
2.1. Vault 서버 설정
Vault 서버를 설치하고 실행합니다:
vault server -dev
2.2. Vault에 비밀번호 저장
vault kv put secret/db username=root password=your_password
2.3. Spring Boot와 Vault 통합
Vault 의존성을 추가합니다:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-vault-config</artifactId>
</dependency>
application.yml에서 Vault 설정을 추가합니다:
spring:
cloud:
vault:
host: localhost
port: 8200
scheme: http
token: your_vault_token
kv:
enabled: true
backend: secret
datasource:
url: jdbc:mysql://127.0.0.1:3306/spring
username: ${db.username}
password: ${db.password}
3. AWS Secrets Manager 사용
AWS Secrets Manager는 민감한 정보를 안전하게 저장하고 관리할 수 있습니다.
3.1. AWS Secrets Manager에 데이터 저장
AWS 콘솔에서 Secret을 생성합니다.
3.2. Spring Cloud AWS 설정
Spring Cloud AWS를 사용하여 Secrets Manager와 통합합니다.
4. 간단한 커스텀 암호화 유틸리티
직접 암호화 유틸리티를 구현하여 민감한 데이터를 암호화/복호화할 수도 있습니다. 그러나 이 방법은 보안성이 상대적으로 낮으므로 권장되지 않습니다.
추천 방법
- Jasypt: 설정이 간단하고 대부분의 Spring Boot 프로젝트에 적합.
- HashiCorp Vault 또는 AWS Secrets Manager: 고급 보안 및 인프라 관리 도구를 사용하는 경우.
어떤 방법을 선택하든, 암호화 키를 안전하게 관리하는 것이 가장 중요합니다.
- Total
- Today
- Yesterday
- error-java
- java-개발 환경 설정하기
- In App Purchase
- 메이븐(maven)
- nl2br
- .submit()
- 스프링 시큐리티(spring security)
- 람다식(lambda expression)
- 표현 언어(expression language)
- 특정 문자를 기준으로 자르기
- jstl(java standard tag library)
- System.Diagnostics
- 진수 변환
- docker
- java web-mvc
- 스프링 시큐리티(spring security)-http basic 인증
- 스프링 프레임워크(spring framework)
- React
- REST API
- await
- java.sql
- java 키워드 정리
- 인텔리제이(intellij)
- MainActor
- 제품 등록
- 문자 자르기
- system.io
- jsp 오픈 소스
- 스프링 프레임워크(spring framewordk)
- jstl(java standard tag library)-core
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |