티스토리 뷰

개요

  • AWS 생태계에서는 AWS 파라메터 스토어를 통해 중요한 정보를 은닉할 수 있다. 이를 통해 소스 코드에 중요한 정보를 공개하지 않고, 애플리케이션 배포 후의 기동 단계에서 이 정보들을 주입함으로서, 소스 코드 유출시에도 보안 위협으로부터 시스템 자원을 보호할 수 있다.

라이브러리 종속성 추가

  • 프로젝트의 /build.gradle에 아래 내용을 추가한다. 해당 라이브러리가 org.springframework.boot.env.EnvironmentPostProcessor로 작동하여 AWS 파라메터 스토어를 통한 프라퍼티 주입을 수행해준다.
dependencies {
    compile group: 'com.coveo', name: 'spring-boot-parameter-store-integration', version: '1.1.2'
}

AWS 파라메터 스토어 활성화

  • 프로젝트의 application.yml에 아래 내용을 추가하면, AWS 파라메터 스토어를 통한 프라퍼티 주입이 활성화된다.
awsParameterStorePropertySource:
  enabled: true

AWS 파라메터 주입

  • 이제 본격적으로 프라퍼티 주입을 해볼 차례이다. application.yml 레벨에서의 주입 방법은 아래와 같다. 아래 예제의 경우, AWS 파라메터 스토어에 저장된 /foo/bar 키의 값이 주입된다.
aws:
  parameterStore:
    foobar: ${/foo/bar:defaultValue}
  • 만약, 해당 파라메터가 AWS 파라메터 스토어에 존재하지 않을 경우 java.lang.IllegalArgumentException 예외가 발생한다.
  • 또는, AWS 파라메터 스토어에 접근 불가능한 물리적 환경에서는 java.lang.IllegalStateException(내부적으로는 com.amazonaws.SdkClientException) 예외가 발생한다.

EC2가 아닌 환경에서의 AWS 파라메터 주입

  • EC2 인스턴스에서 기동된 애플리케이션의 경우, 기본적으로 어떠한 추가적인 인증 과정 없이, AWS 파라메터 주입이 가능하다. 하지만, EC2가 아닌 로컬, 개발 서버 등의 외부 인스턴스에서는 별도의 인증 과정이 필요하다. 애플리케이션 기동시 아래와 같은 사전 인증 코드가 실행되어야 한다. [관련 링크]
System.setProperty("aws.accessKeyId", "{accessKeyId}");
System.setProperty("aws.secretKey", "{secretKey}");
System.setProperty("aws.region", "ap-northeast-1""); // 파라메터 스토어와 같은 위치의 리전
댓글
댓글쓰기 폼