본문 바로가기
Public Cloud/AWS - Experience

[AWS] SSM Parameter Store

by ymkim 2025. 4. 12.

01. SSM Parameter Store

서버를 구성하고 애플리케이션을 구축하는 과정에서, 애플리케이션 내에 노출되어서는 안 되는 민감한 정보들이 존재했다. 필자의 경우 Terraform을 활용해 EC2 위에 Atlantis 서버를 구축하는 과정에서, user_data로 전달되는 Shell 스크립트에 GitHub 토큰을 포함해야 하는 상황이 있었다. 이러한 상황에서 SSM Parameter Store를 활용하면 민감 정보를 보다 안전하게 관리할 수 있을 것이라 판단하여, 관련 내용을 포스팅하게 되었다.

우선, Paramter Store의 특징은 어떤 부분이 있는지 간략히 살펴보고 넘어가자.

01-1. Parameter Store 특징

  1. 설정 값은 key - value 형태로 저장
  2. 데이터 저장 유형은 아래 3가지 타입
    1. String(일반 텍스트)
    2. StringList(쉼표로 구분된 문자열 리스트)
    3. SecureString(KMS로 암호화 된 정보)
  3. 버전 관리 지원
    1. 값이 변경될 때마다 자동으로 버전이 증가
    2. 또한, 이전 버전 롤백 가능
  4. IAM 기반 접근 제어
    1. Parameter별로 IAM 권한 설정하여 접근 제어 가능
    2. 예: 특정 EC2만 읽을 수 있게 설정 가능
  5. 유효기간 설정 가능
    1. Parameter별로 TTL(Time-to -Live) 설정 가능 (유료)

01-2. Parameter Store 생성

우선 AWS SSM(System manager) 서비스로 이동 후, 파라미터 스토어(Parameter Store) 탭으로 이동한다. 다음으로 화면에 보이는 파라미터 생성을 클릭하면 아래와 같은 화면을 확인할 수 있을 것이다. 해당 화면은 실제 파라미터를 생성하는 화면이다.

옵션을 살펴보면 이름, 설명, 계층, 유형, 데이터 형식, 값 등의 항목이 존재한다. 생성 과정이 매우 간단하므로, 각 옵션에 대해 간략히 짚고 넘어가자. 또한, 생성이 완료된 화면은 위와 같다.

  • 이름: 파라미터 고유 식별자로, 경로 형식(/{myapp name}/{env}/{param name})을 사용
  • 계층: 표준(Standard), 고급(Advaned) 선택 가능, 고급 기능이 추가 기능(TTL, 버전 제한 등)이 더 많으나 추가 요금 발생
  • 설명: 해당 파라미터의 용도 기재
  • 유형: 문자열(단순 문자열), 문자열 목록(쉼표로 구분 된, 문자열 목록), 보안 문자열(KMS로 암호화된 민감 정보)
  • 데이터 형식: text가 기본이며, JSON 등 특정 형식 지정 가능
  • 값(Value): 저장할 실제 값, SecureString의 경우 마스킹되어 저장 후 보이지 않음

그렇다면 위에서 SSM과 KMS을 사용하였는데 비용은 얼마인지 살펴보자.

SSM(System Manager Parameter Store)

 

중앙 집중식 운영 허브 - AWS Systems Manager 요금 - Amazon Web Services

 

aws.amazon.com

SSM: 파라미터 저장 요금

파라미터 유형 요금 내용
Standard(표준) 무료
Advaned(고급) 파라미터당 월 $0.05 / 저장 기간 1개월 미만 시 시간 단위 비례 청구

SSM: API 상호 작용 요금

파라미터 유형 표준 처리량(Standard Throughput) 더 높은 처리량(Higher Throughput)
Standard(표준) 무료 API 10,000건당 $0.05
Advaned(고급) API 10,000건당 $0.05 API 10,000건당 $0.05

KMS(Key Management Service)

 

요금 | AWS Key Management Service(KMS) | Amazon Web Services(AWS)

AWS KMS에서 생성하는 각 AWS KMS 키에 매월 1 USD의 요금이 부과됩니다(시간 단위로 비례 배분). 월 1 USD의 요금은 대칭 키, 비대칭 키, HMAC 키, 다중 리전 키(각 기본 및 각 복제 다중 리전 키), 가져온

aws.amazon.com

KMS: 요금 정리

항목 요금 내용 비고
AWS 관리형 키(alias/aws/ssm) 무료 (키 보관 비용 x) -
고객 관리형 키(직접 생성한 키) 매월 KEY당 $1 -
API 요청 (암호화, 복호화 등) 매월 20,000건 무료,
이후 10,000건당 $0.03
이런 경우 복호화 요청 1회 발생하고,
KMS API 호출 1건으로 계산된다
자동 키 회전 [새로 생성] (옵션) 첫 번째 회전 $1
두 번째 회전 $1
이후 무료
-

01-3. Parameter Store 조회

aws ssm get-parameter --name /{myapp name}/{env}/{param name})
{
    "Parameter": {
        "Name": "/{myapp name}/{env}/{param name}",
        "Type": "SecureString",
        "Value": "AQICAHg7tQ1E0zJgwaM56+CsGIyW69kybCNxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "Version": 1,
        "LastModifiedDate": "2025-04-11T23:21:49.390000+09:00",
        "ARN": "arn:aws:ssm:ap-northeast-2:8xxxxxxxxxxxx:parameter/{myapp name}/{env}/{param name}",
        "DataType": "text"
    }
}

AWS CLI의 SSM 명령어를 사용하면, 앞서 생성한 Parameter Store의 값을 위와 같이 확인할 수 있다. 이제 마지막으로, Atlantis EC2가 구동될 때 user_data에 사용할 Shell Script를 수정해보자. 단, 해당 EC2 인스턴스에 연결된 Instance Profile Role에는 SSM Parameter Store에 접근할 수 있는 권한(Policy)이 사전에 추가되어 있어야 한다.

terraform-atlantis-role 수정

{
  Sid = "EC2AtlantisSSMKMSPolicy"
  Action = [
    "ssm:GetParameter", // 단일 파라미터 조회 하는 권한
    "ssm:GetParameters", // 여러 파라미터 한 번에 조회 하는 권한
    "ssm:GetParametersByPath", // 특정 경로 아래에 있는 파라미터를 한 번에 조회 하는 권한
    "kms:Decrypt" // 파라미터 복호화 권한
  ]
  Effect = "Allow"
  Resource = [
    "arn:aws:ssm:ap-northeast-2:842675972665:parameter/search-recommand/stg/*",
    "arn:aws:kms:ap-northeast-2:842675972665:key/*"
  ]
}

실제 IAM Custom Policy의 경우 위와 같이 설정해주면 된다. Sid의 경우 해당 Policy의 식별자를 의미하고, Action은 해당 Policy에 정의된 AWS Resource에 대해 어떤 행위를 할 수 있는지 지정하며, 마지막으로 Resource는 해당 정책이 적용될 AWS 리소스를 지정한다. 여기서는 SSM+KMS 관련 권한만 있으면 되기에 위와 같이 설정 하였다.

02. EC2 Shell Script 수정

#!/bin/bash

...중략
GH_USER=$(aws ssm get-parameter \
--name <본인 SSM Paramter Store 경로> \
--query "Parameter.Value" \
--output text \
--region "ap-northeast-2")

# Github repo url from SSM
REPO_ALLOW_LIST=$(aws ssm get-parameter \
--name <본인 SSM Paramter Store 경로> \
--query "Parameter.Value" \
--output text \
--region "ap-northeast-2")

# Github token from SSM
GH_TOKEN=$(aws ssm get-parameter \
--name <본인 SSM Paramter Store 경로> \
--with-decryption \
--query "Parameter.Value" \
--output text \
--region "ap-northeast-2")

..중략

마지막으로, EC2 인스턴스가 구동될 때 user_data로 실행되는 atlantis.sh 파일에 위에서 설정한 SSM 파라미터 값을 변수로 추가해주고, 해당 값을 활용해 Docker 기반의 Atlantis를 실행하면 된다. 이상으로 SSM Parameter Store를 활용한 민감 정보 관리 및 Atlantis 서버 구성 과정을 마친다.

99. 참고 자료

 

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

public cloud에서 배포한 애플리케이션(Spring)에는 외부에 노출되어서는 안되는 값들이 존재 ex) DB 접속 정보, 외부 API 등 이러한 값들을 소스코드에 저장하는 것은 안전하지 않기 때문에 안전하게

jangcenter.tistory.com

 

Terraform으로 AWS Parameter Store 사용하기 + 하기 쉬운 실수

개요새로운 서비스가 시작하면서 AWS관리부터 devOps, BE 개발을 전반적으로 다 관리하고 있다. 그러다보니 서버 설정을 만질때가 많은데, 그중에서 관리가 특히 필요한 것들이 외부 API 키나 DB 커

akku-dev.tistory.com

 

AWS Parameter store 사용하기

애플리케이션에는 외부에 노출되어서는 안 되는 비밀 값들이 있습니다. 예를 들면, 데이터베이스 접속 정보, 외부 API 서비스를 이용하기 위한 비밀 액세스 키 등이 있습니다. 이런 값들은 소스

dublin-java.tistory.com