본문 바로가기
AWS

Spring 애플리케이션 내에서 AWS Parameter Store 사용

by 장중앙 2023. 8. 1.

public cloud에서 배포한 애플리케이션(Spring)에는 외부에 노출되어서는 안되는 값들이 존재

  ex) DB 접속 정보, 외부 API 등

 

이러한 값들을 소스코드에 저장하는 것은 안전하지 않기 때문에 안전하게 관리하기 위해 Parameter Store를 사용

 

* Parameter Store외에도 AWS내에는 Secret Manager, KMS 등 다양한 암호 관리 서비스가 존재

 

Parameter Store의 특징

  1. Key - Value로 구성
  2. 사용방법이 간단
  3. 다른 암호 관리 서비스에 비해 저렴하거나 무료 
  4. 값 변경 이력 저장 가능

 

Parameter Store 생성 방법

AWS 콘솔내에서 System Manager -> Parameter Store에서 생성 가능

이름 : Parameter의 이름으로 '/'을 사용하여 계층구조로 저장 ex) /***/***/***

값 : 관리되고자 하는 값

유형 : 저장되는 값에 대한 유형

    - 일반적인 값 저장에는 문자열 및 문자열 목록을 사용하면 되지만, 중요한 데이터를 저장할 때에는 AWS측에서는 보안문자열 사용을 권장

생성완료된 Parameter Store 예시

 

AWS EC2내에 배포된 애플리케이션에서 저장된 값들을 사용하기 위한 준비

 

1. Application.yml 내에서 Parameter Store 사용을 위한 정의 및 경로 작성 예시

# application.yml

.......
spring:
  config:
    # aws ParameterStore사용을 위한 명시
    import: 'aws-parameterstore:'
  datasourde:
    hikari:
      # ParameterStore에 저장된 이름 
      jdbc-url: ${jdbc-url}
      username: ${db-user-name}
      password: ${db_password}
........

aws:
  parameterstore: 
    enabled: true
    prefix: /***
    # 다양한 사용을 위한 구분자
    profile-separator: _ 
    name: param

이렇게 작성한 경우, jdbc-url을 예로 들면 "/***/param/jdbc-url" 이라고 저장된 Parameter Store 값을 사용

 

2. apllication.yml에 경로를 가진 값들을 저장하기 위한 wrapper

application.yml에 저장된 암호화 키 등 노출되지 않는 정보에 대해 parameterStore에서 값을 가지고와 저장

3. 이러한 작성과 함께, Spring내 gradle.gradle에서 AWS ParameterStore사용을 위한 종속성을 추가

implementation group: 'io.awspring.cloud', name: 'spring-cloud-starter-aws-parameter-store-config'

AWS내에서의 준비사항

1. 보안 규칙 확인

 

EC2내의 보안 규칙을 확인해야함, 모든 트래픽에 대해 허용한다면 상관없지만, 보안을 위해 관리하고 있다면 SSM에 대한 접근을 위한 아웃바운드 규칙에 대한 허용이 필요함

 

 

2. IAM 권한 부여

EC2에서 ParameterStore에 대한 접근을 위한 IAM권한이 필요

해당 권한을 부여하기 위해서 AWS측에서 정의한 AmazonEC2RoleforSSM권한을 EC2에 정의된 IAM 역할에 부여

* 비슷한 방법으로 동일 권한을 가진 IAM을 추가 생성하고 및 자격증명을 발급하여 EC2에 Credential 부여하는 방법이 존재하지만, EC2내에 Credential이 노출될 수 있기 때문에 AWS측의 보안 위배사항

     - 로컬 테스트 정도에서 사용가능한 방법

     -  또한, 애플리케이션 개발에 결국 AWS내의 다른 서비스를 사용하게되기 때문에 IAM 역할을 생성하여 관리하는 것이 용이함

 

 

댓글