본문 바로가기
DevOps

Terraform에서 AWS SSM Parameter Store 활용하기

by Rainbound-IT 2025. 9. 4.
반응형

erraform으로 인프라를 관리하다 보면, 슬랙 웹훅이나 API 키처럼 민감한 값을 tfvars에 넣고 싶을 때가 많습니다.
하지만 이는 보안/ISMS 측면에서 지적될 가능성이 높기 때문에, 보통은 AWS SSM Parameter StoreSecrets Manager를 이용해 관리합니다.

이번 글에서는 SSM Parameter Store를 사용하여 Terraform 코드에서 안전하게 값을 가져오는 방법을 정리했습니다.


1. SSM Parameter Store에 값 저장하기

먼저 Slack Webhook을 SSM에 SecureString 타입으로 저장합니다.

aws ssm put-parameter \
  --name "/argocd/notifications/test_slack_webhook" \
  --type "SecureString" \
  --value "https://hooks.slack.com/services/xxx/yyy/zzz" \
  --region ap-northeast-2
 
 
  • --type SecureString : 암호화된 형태로 저장 (기본 KMS 사용)
  • --name : 경로 기반 네이밍을 권장 (환경별 구분 용이)

2. Terraform에서 값 불러오기

Terraform 코드에서 data source를 선언해 값을 읽어올 수 있습니다.
파일은 보통 data.tf로 분리하는 것이 깔끔합니다.

 
variable "slack_webhook_ssm_name" {
  type    = string
  default = "/argocd/notifications/test_slack_webhook"
}

data "aws_ssm_parameter" "slack_webhook" {
  name            = var.slack_webhook_ssm_name
  with_decryption = true
}

module "argocd_notifications" {
  source        = "../../../modules/argocd_notifications"
  slack_webhook = data.aws_ssm_parameter.slack_webhook.value
}
 
 

구조를 정리하면 다음과 같이 됩니다:

 
envs/dev/eks/
  main.tf        # module 정의
  variables.tf   # variable 선언
  data.tf        # data source 정의 (SSM, VPC, AMI 등)
  outputs.tf     # output
  providers.tf   # provider 설정
 
 

3. 환경별 값 관리

환경(dev/stg/prod)에 따라 다른 값을 쓰려면 tfvars에서 SSM 경로만 지정하면 됩니다.

dev.tfvars

 
slack_webhook_ssm_name = "/argocd/notifications/dev_slack_webhook"
 

prod.tfvars

 
slack_webhook_ssm_name = "/argocd/notifications/prod_slack_webhook"
 

Terraform 실행 시:

 
terraform plan -var-file=dev.tfvars
terraform apply -var-file=prod.tfvars
 

4. ISMS 대응 효과

  • 비밀정보는 코드(repo)에 포함되지 않음
  • AWS KMS 암호화 + IAM 최소권한 제어 가능
  • CloudTrail로 접근 이력 추적 가능

따라서 ISMS 심사 시에도 “민감정보를 안전하게 관리하고 있다”는 증빙이 됩니다.


5. 정리

  • Slack Webhook 같은 값은 tfvars 대신 SSM에 저장
  • Terraform에서는 data "aws_ssm_parameter"로 불러오기
  • 환경별 값은 SSM 파라미터 경로만 다르게 관리
  • 모듈에는 data source 결과를 입력값으로 넘겨주기

이렇게 구성하면 보안/운영/컴플라이언스 측면에서 훨씬 안전한 IaC 운영이 가능합니다.

반응형

댓글