본문으로 건너뛰기
김신건의 로그

[AWS] SSM Parameter Store: 계층적 구성/비밀 저장

· 수정 · 📖 약 3분 · 1,405자/단어 #aws #cloud #ssm #systems-manager #config #secrets #kms
AWS Parameter Store, SSM Parameter Store, Parameter Store, SecureString, SSM parameter, SSM SecureString

정의

AWS SSM Parameter Store구성 값 (configuration) 과 경량 비밀 (secret) 을 계층적 이름으로 저장하는 관리형 키-값 저장소. /prod/db/host 처럼 슬래시로 계층을 만들고, 문자열 (String) / 문자열 리스트 (StringList) / KMS 로 암호화된 비밀 (SecureString) 세 타입을 저장한다. 표준 파라미터는 무료.

핵심 정체성: “환경 변수 / config 파일 / 비밀번호를 하드코딩하지 말고 여기에 넣어라” 를 위한 서비스.

왜 Parameter Store 인가

하드코딩의 문제

# 안티패턴 (하드코딩)
DB_HOST = "prod-db.abc.us-east-1.rds.amazonaws.com"
DB_PASSWORD = "s3cret"          # git 에 올라감
API_KEY = "sk-xxxxx"            # 유출 위험

# 환경 변수 (조금 나음)
DB_HOST = os.environ["DB_HOST"]  # 배포 시점 결정

문제:

  • 코드에 값 포함 -> git leak
  • 환경 변수는 프로세스 시작 시점만
  • 값 변경 시 재배포 필요
  • 감사 이력 없음
  • 회전 (rotation) 어려움

Parameter Store 의 답

import boto3
ssm = boto3.client('ssm')

# 실행 시점 조회 (변경 사항 즉시 반영)
DB_HOST = ssm.get_parameter(Name='/prod/db/host')['Parameter']['Value']
DB_PASSWORD = ssm.get_parameter(Name='/prod/db/password', WithDecryption=True)['Parameter']['Value']

이점:

  • 코드에 값 없음
  • IAM 으로 접근 제어
  • 값 변경 시 재배포 불필요 (실행 시점 조회)
  • CloudTrail 로 접근 감사
  • KMS 로 비밀 암호화
  • 버전 관리 (parameter version)

계층 구조

파라미터 이름에 슬래시 (/) 로 계층을 표현.

/                                (root)
├── /prod/
│   ├── /prod/db/
│   │   ├── /prod/db/host
│   │   ├── /prod/db/port
│   │   └── /prod/db/password      (SecureString)
│   ├── /prod/api/
│   │   ├── /prod/api/endpoint
│   │   └── /prod/api/key           (SecureString)
│   └── /prod/features/
│       └── /prod/features/dark-mode  (String: "true")
├── /staging/
│   └── /staging/db/host
└── /dev/
    └── /dev/db/host

계층의 이점:

  • IAM 정책 접두사 매칭: /prod/* 만 접근 가능한 role
  • 일괄 조회: GetParametersByPath('/prod/db/', recursive=true) 로 모든 하위 조회
  • 환경별 격리: /prod/, /staging/, /dev/ 완전 분리

파라미터 타입 3가지

타입저장 방식대표 용도
String평문엔드포인트, ID, 플래그
StringList콤마 구분 문자열여러 허용 IP, 여러 도메인
SecureStringKMS 로 암호화비밀번호, API 키

String

aws ssm put-parameter \
  --name /prod/api/endpoint \
  --value "https://api.example.com" \
  --type String \
  --description "API 게이트웨이 endpoint"

StringList

aws ssm put-parameter \
  --name /prod/cors/allowed-origins \
  --value "https://app1.com,https://app2.com,https://admin.com" \
  --type StringList

Python 사용 시 value.split(',') 로 리스트 복원.

SecureString (KMS 암호화)

aws ssm put-parameter \
  --name /prod/db/password \
  --value "s3cret" \
  --type SecureString \
  --key-id alias/aws/ssm       # 기본 AWS 관리 KMS 키
  # --key-id alias/my-app-key   # 고객 관리 KMS 키

조회:

# WithDecryption=true 필수
aws ssm get-parameter \
  --name /prod/db/password \
  --with-decryption

중요:

  • KMS 로 암호화 → 저장 요금은 KMS 요금이 별도 부과 아님 (KMS 사용 요금만)
  • 조회 시 KMS Decrypt 권한 필요 (IAM 정책에 kms:Decrypt)
  • 고객 관리 KMS 키 사용 시 세밀한 접근 제어 + 감사

표준 vs Advanced 티어

Parameter Store 는 두 티어 제공.

Standard (기본)Advanced
최대 파라미터 수10,000 / 계정 / 리전100,000
최대 값 크기4 KB8 KB
파라미터 정책 (만료, 알림)XO
높은 처리량40 tx/s3,000 tx/s
요금무료$0.05 / 파라미터 / 월 + API 호출

대부분 Standard 로 충분. Advanced 는 대규모 조직 또는 만료 / 알림 정책 필요 시.

Advanced 파라미터 정책

  • Expiration: 특정 날짜 이후 자동 삭제 (일시 토큰 등)
  • ExpirationNotification: 만료 전 알림
  • NoChangeNotification: 오래 안 바뀌면 알림 (드리프트 방지)

버전 관리

파라미터 값을 변경할 때마다 버전 번호가 증가. 이전 값 조회 가능.

# 특정 버전 조회
aws ssm get-parameter --name /prod/db/host:2

# 모든 버전 목록
aws ssm get-parameter-history --name /prod/db/host

용도:

  • 롤백 (이전 값으로)
  • 감사 (누가 언제 무엇으로 변경)
  • 실수 복구

공용 파라미터 (Public Parameters)

AWS 가 제공하는 표준 값들. 하드코딩 없이 참조.

대표 예: 최신 AMI ID

# Amazon Linux 2023 latest AMI
aws ssm get-parameter \
  --name /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64

ECS 최적화 AMI

aws ssm get-parameter \
  --name /aws/service/ecs/optimized-ami/amazon-linux-2023/recommended

리전 목록

aws ssm get-parameters-by-path \
  --path /aws/service/global-infrastructure/regions \
  --recursive

활용: CloudFormation / Terraform 에서 하드코딩 없이 최신 AMI 참조.

# CloudFormation
Parameters:
  LatestAmiId:
    Type: AWS::SSM::Parameter::Value<String>
    Default: /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64

Resources:
  MyInstance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Ref LatestAmiId

Parameter Store vs Secrets Manager (핵심 비교)

가장 흔한 질문. 목적이 겹치지만 결정적 차이가 있음.

Parameter StoreSecrets Manager
목적구성 값 + 경량 비밀비밀 전용
자동 회전 (Rotation)없음있음 (Lambda 기반, RDS 자동)
암호화SecureString (KMS)KMS
비용표준 무료비밀당 $0.40/월 + API 호출
교차 리전 복제제한적있음
RDS 통합참조 가능네이티브 (RDS 생성 시 통합)
최대 크기4 KB (표준) / 8 KB (Advanced)64 KB
대표 용도엔드포인트, AMI ID, 환경 변수DB 자격증명 (자동 회전 필요)

결정 규칙:

  • 자동 회전 필요 (DB 비밀번호 등) → Secrets Manager
  • 비용 최소 + 단순 조회Parameter Store SecureString
  • 파라미터가 매우 많음 (100+) → Parameter Store (비용 압도적 저렴)
  • RDS 생성 시 통합 → Secrets Manager 자동 통합

: Parameter Store 에서 Secrets Manager 비밀을 참조하는 것도 가능.

Parameter Store: /prod/db/password → Secrets Manager secret ARN 참조

Parameter Store 로 통일된 API 사용 + Secrets Manager 자동 회전 활용.

실전 사용

애플리케이션 통합

import boto3
from functools import lru_cache

ssm = boto3.client('ssm')

@lru_cache(maxsize=128)   # 짧은 메모리 캐시
def get_param(name: str, decrypt: bool = False) -> str:
    return ssm.get_parameter(Name=name, WithDecryption=decrypt)['Parameter']['Value']

DB_HOST = get_param('/prod/db/host')
DB_PASSWORD = get_param('/prod/db/password', decrypt=True)

패턴:

  • Lambda: 콜드 스타트에 로드 (handler 밖에서)
  • ECS/EC2: 부팅 시 로드 + 주기적 갱신
  • 캐싱 필수 (매 호출 API 이면 요금 + 지연)

여러 파라미터 한 번에

# GetParametersByPath: 계층 전체 한 API 호출
response = ssm.get_parameters_by_path(
    Path='/prod/db/',
    Recursive=True,
    WithDecryption=True
)
config = {p['Name'].split('/')[-1]: p['Value'] for p in response['Parameters']}
# {'host': '...', 'port': '5432', 'password': 's3cret', ...}

CloudFormation 참조

Resources:
  MyLambda:
    Type: AWS::Lambda::Function
    Properties:
      Environment:
        Variables:
          DB_HOST: '{{resolve:ssm:/prod/db/host:1}}'
          DB_PASSWORD: '{{resolve:ssm-secure:/prod/db/password:1}}'

ECS Task Definition

"secrets": [
  {
    "name": "DB_PASSWORD",
    "valueFrom": "arn:aws:ssm:us-east-1:123:parameter/prod/db/password"
  }
]

ECS 가 task 시작 시 Parameter Store 에서 조회해 환경 변수로 주입.

IAM 정책 (계층 접근 제어)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["ssm:GetParameter", "ssm:GetParameters", "ssm:GetParametersByPath"],
      "Resource": "arn:aws:ssm:us-east-1:123:parameter/prod/*"
    },
    {
      "Effect": "Allow",
      "Action": "kms:Decrypt",
      "Resource": "arn:aws:kms:us-east-1:123:key/xxxx",
      "Condition": {
        "StringEquals": {"kms:ViaService": "ssm.us-east-1.amazonaws.com"}
      }
    }
  ]
}

핵심:

  • 리소스 ARN 에 계층 prefix + wildcard
  • SecureString 사용 시 kms:Decrypt 별도 부여
  • kms:ViaService condition 으로 SSM 을 통한 복호화만 허용

함정

WARNING

SecureString 조회 시 WithDecryption=true 잊음 = 암호화된 raw 값 반환. Python 에서 이걸 그대로 DB 비밀번호로 사용하면 인증 실패.

CAUTION

자동 회전 없음. RDS 비밀번호가 정기 회전되면 Parameter Store 값도 수동 업데이트 필요. 자동 회전 필요하면 Secrets Manager.

WARNING

매 요청마다 GetParameter API 호출 = 요금 + 지연 (수십 ms). Lambda / ECS 부팅 시 로드 + 캐싱.

IMPORTANT

표준 티어 값 4 KB 상한. TLS 인증서 등 큰 값은 Advanced 또는 Secrets Manager.

CAUTION

SecureString 의 KMS 키 삭제 = 값 복호화 불가. AWS 관리 키 (alias/aws/ssm) 는 안전, 고객 관리 키는 신중.

WARNING

CloudTrail 데이터 이벤트 활성 X = 파라미터 조회 감사 불가. 민감 파라미터는 CloudTrail data event 로깅.

IMPORTANT

버전은 자동 증가. 스크립트에서 특정 버전 참조 시 :숫자 명시, 최신은 :$LATEST (또는 생략).

관련 위키

이 글의 용어 (7개)
[AWS] CloudFormationcloud
정의 AWS CloudFormation 은 JSON 또는 YAML 템플릿으로 AWS 인프라를 선언적으로 프로비저닝하는 IaC (Infrastructure as Code) 서비스입…
[AWS] CloudTrail (API Activity Logging)cloud
정의 AWS CloudTrail 은 AWS 계정의 API 호출 및 사용자 활동을 기록 하는 감사 로깅 서비스입니다. "누가, 언제, 어디서, 어떤 API 를, 어떤 리소스에 대해…
[AWS] IAM: User, Role, Policy, STScloud
정의 IAM (Identity and Access Management) = AWS 의 권한 관리 전부. User, Group, Role, Policy 로 구성. "누가 어떤 리소…
[AWS] KMS: 암호화 키 관리, envelope encryptioncloud
정의 KMS (Key Management Service) = 암호화 키 중앙 관리. envelope encryption + IAM 통합 + 감사 로그. 키 종류 | 종류 | 의미…
[AWS] Lambda: 서버리스 함수, 트리거, 동시성cloud
정의 AWS Lambda = 서버리스 함수 실행. 이벤트 트리거 → 함수 실행 → 결과 / 비동기 처리. 서버 관리 0. 사용 상황 | 상황 | Lambda 적합성 | |---|…
[AWS] Secrets Manager + Parameter Storecloud
정의 AWS Secrets Manager = 회전이 필요한 비밀 (DB 패스워드, API key) 을 안전하게 저장/관리하는 서비스. Lambda 기반 자동 회전과 암호화 내장.…
[AWS] Systems Manager: 노드 운영 도구 모음 (인덱스)cloud
정의 AWS Systems Manager (SSM) 는 AWS / 온프레미스 / 멀티클라우드에 걸친 노드 (서버, 인스턴스, VM, IoT 등) 를 대규모로 안전하게 관리 / 운…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기