티스토리 뷰

🍀 Spring Boot

application.properties 암호화

James Wetzel 2025. 1. 15. 15:37
728x90
반응형

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를 사용하여 암호화된 값을 생성합니다.

  1. Jasypt CLI 다운로드 Jasypt 공식 CLI 도구에서 다운로드하거나 프로젝트에 포함된 CLI를 사용합니다.
  2. 암호화 명령 실행
    • your_password: 암호화하려는 값 (예: 데이터베이스 비밀번호).
    • encryption_key: 암호화 키 (이 키를 안전하게 보관해야 함).
    • 결과로 암호화된 문자열이 출력됩니다.
  3. 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. 암호화 키 제공

암호화 키는 애플리케이션 시작 시 제공해야 합니다. 아래 두 가지 방법 중 하나를 사용합니다.

  1. 환경 변수로 설정
  2. export JASYPT_ENCRYPTOR_PASSWORD=your_encryption_key
  3. application.yml에 명시적으로 설정
  4. 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: 고급 보안 및 인프라 관리 도구를 사용하는 경우.

어떤 방법을 선택하든, 암호화 키를 안전하게 관리하는 것이 가장 중요합니다.

728x90
반응형