SpringBoot 에서 AWS Secrets manager를 이용하여 안전하게 데이터베이스를 이용하는 방법

2분 분량
콘텐츠 수준: 중급
0

본 기사에서는 Secrets Manager 를 이용하여 안전하게 데이터 베이스로 연결하는 방법을 안내해드립니다.

사용사례

일반적으로 Springboot에서 데이터베이스와 연결할때 property에 암호화 되지 않은 아이디와 패스워드를 이용해서 데이터베이스로 연결하거나 외부파일에 만들어 놓고 이용하는 경우가 많습니다. 이러한 방식에는 보안의 위험 및 유지보수가 어려울 수 있습니다. 해당 기사에서는 AWS Secrets manager 를 이용하여 데이터 베이스와 관련된 정보를 AWS Secrets manager 에 저장해두고 데이터베이스의 연결이 필요할때 AWS Secrets manager 에서 정보를 가져와서 데이터 베이스를 연결합니다. AWS Secrets manager 를 이용하여 데이터베이스를 연결하는 경우 보안이 강화되며 유지보수가 용이합니다.

전제 조건

  • 해당 기사에서는 SpringBoot 빌드시 gradle 을 사용합니다.
  • SpringBoot을 사용하기 위한 STS 또는 intellij 같은 IDE 가 설치되어 있어야합니다.
  • MySQL 서버가 셋팅이 되어있어야 합니다. (기사를 위해 아래의 예시테이블을 생성하였습니다.) Enter image description here

1단계: AWS Secrets manager DB 커넥션 정보 저장

  • AWS Secrets Manager, [보안 암호], [새 보안 암호 저장], [다른 유형의 보안 암호]를 클릭합니다.
  • 아래의 키/값 페어에 데이터베이스 커넥션과 관련된 정보를 입력하고 [다음]을 클릭합니다.

Enter image description here

  • springboot/mysql/test로 보안 암호 이름을 지정하고 생성합니다.

2단계: 스프링 부트gradle, yaml 설정

  • gradle 설정 : 의존성 추가
implementation("io.awspring.cloud:spring-cloud-starter-aws-secrets-manager-config:2.4.4")
runtimeOnly 'com.mysql:mysql-connector-j'
  • application.yaml 설정
spring:
  config:
    import: 'aws-secretsmanager:springboot/mysql/test'
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://${dbHost}:${dbPort}/${dbName}?useSSL=false&serverTimezone=Asia/Seoul&characterEncoding=UTF-8
    username: ${dbUsername}
    password: ${dbPassword}

3단계 : 테스트 코드 설정

  • 간단히 테스트 하기 위해 jdbc를 이용하여 MySQL 서버에 저장되어있는 정보를 가져옵니다.
  • MySQLDataReaderService.class
package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;

@Service
public class MySQLDataReaderService {

    private final JdbcTemplate jdbcTemplate;

    @Autowired
    public MySQLDataReaderService(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
    public List<Map<String, Object>> readDataFromMySQL() {
        String sql = "SELECT * FROM <TABLE>";
        return jdbcTemplate.queryForList(sql);
    }
}
  • DemoApplication.class
package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    private static MySQLDataReaderService mySQLDataReaderService;

    @Autowired
    public DemoApplication(MySQLDataReaderService mySQLDataReaderService) {
        this.mySQLDataReaderService = mySQLDataReaderService;
    }

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
        System.out.println(mySQLDataReaderService.readDataFromMySQL());
    }
}

4단계: 메인 코드 실행

메인 코드 실행후 아래의 콘솔에서 연결이 정상적으로 됨과 User 테이블의 데이터를 확인하실 수 있습니다.

Enter image description here

profile pictureAWS
지원 엔지니어
게시됨 7달 전1221회 조회
댓글 없음

관련 콘텐츠