🔒 Secrets (비밀 정보)란?
Terraform의 secrets(비밀 정보)는 인프라를 구성하고 관리할 때 사용하는 민감한 데이터(sensitive data)이다.
- API keys (API 키)
- 비밀번호 (password)
- 데이터베이스 연결 문자열 (database connection strings)
- 클라우드 서비스 접근 토큰 등
이런 정보는 클라우드와 안전하게 통신하기 위해 꼭 필요하지만, 유출되면 보안상 문제가 생길 수 있다.
Terraform에서는 이런 secrets를 안전하게 관리하기 위해 여러 가지 방법을 제공한다.
🔐 Terraform Secrets 관리 방법
1. 환경 변수 (Environment Variables)
Terraform 파일에 비밀번호와 같은 정보를 직접 쓰지 않기
민감한 정보(sensitive data)를 Terraform 코드에 직접 쓰지 않고, 운영체제(OS)에 설정된 시스템 변수를 통해 전달한다.
🚩예시: AWS에 인프라 리소스를 만들 경우
Terraform으로 AWS 리소스를 만들 때, AWS 자격 증명(AWS Access Key/Secret Key)이 필요하다. (= AWS 계정 인증하기 위해) 예: AWS_ACCESS_KEY_ID
, AWS_SECRET_ACCESS_KEY
이 민감한 정보를 테라폼 코드에 쓰지 않고, 아래처럼 환경 변수로 설정할 수 있다:
💻 Windows (PowerShell)
$env:AWS_ACCESS_KEY_ID="your-access-key"
$env:AWS_SECRET_ACCESS_KEY="your-secret-key"
🐧 Linux / macOS (bash)
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
이렇게 설정한 다음에 Windows나 Linux시스템에서 환경변수 값을 넣을 수 있도록 CI/CD 같은 것을 구성하면 된다.
2. Secrets 관리 서비스와 연동
예시:
- HashiCorp Vault: 강력한 권한 제어와 암호화 기능 제공
- AWS Secrets Manager: AWS 환경에서 비밀정보 저장 및 자동 교체
- Azure Key Vault
- Google Secret Manager
![]() |
![]() |
AWS Secret Manager와 연동 예시:
provider "aws" {
region = "ap-northeast-2" # 서울 리전 예시
}
data "aws_secretsmanager_secret_version" "db_password" {
secret_id = "my-db-password" # AWS Secrets Manager에 저장한 시크릿 이름
}
variable "db_password" {
default = data.aws_secretsmanager_secret_version.db_password.secret_string
}
resource "aws_db_instance" "mydb" {
# ...
password = var.db_password
}
3. -var 또는 -var-file 사용하기
Terraform의 변수(variable)에 값을 명령어나 파일을 통해 전달하는 방법.
보통 비밀 값(secret)이나 환경에 따라 달라지는 값을 외부에서 주입할 때 사용한다.
(테라폼 코드에 직접 비밀번호를 적지 않아도 된다.)
-var
명령어로 값을 전달:
terraform apply -var="변수이름=값"
terraform apply -var="db_password=secret123"
-var-file
명령어로 파일 지정해서 값 전달:
주의: Git 등에 올리지 않도록 .gitignore 설정 필수
terraform apply -var-file="파일이름.tfvars"
terraform apply -var-file="secrets.tfvars"
secrets.tfvars 파일
db_user = "admin"
db_password = "SuperSecret123"
4. sensitive = true 설정
sensitive = true
는 변수나 출력값(output)을 콘솔에 노출하지 않도록 하는 기능
단지 Terraform CLI나 로그에서 출력되지 않도록 설정하는 기능. terraform output -json으로 보면 값을 볼 수 있으니, 완벽한 보안 수단은 아니다.
이렇게 하면 terraform plan이나 terraform apply 시 콘솔에 db_password의 값이 보이지 않는다.
variable "db_password" {
type = string
sensitive = true
}
output "db_password" {
value = var.db_password
sensitive = true
}
❗피해야 할 방법
- ❌ 잘못된 예: .tf 파일에 비밀번호 직접 작성 — 절대 피해야 함!
- ❌ 잘못된 예: .tfvars에 있는 secrets을 Git에 올리는 실수 — .gitignore 설정 필요!
🤔 문제 1
어떤 옵션은 Terraform 구성 파일에서 비밀 정보를 제외하는 데 사용할 수 없는가?
A. A Terraform provider
B. Environment variables
C. A -var flag
D. secure string
정답
정답 A
🤔 문제 2
당신은 CI/CD(지속적 통합 / 지속적 배포) 파이프라인을 구축하고 있으며, Terraform 실행 시 민감한 데이터(예: 비밀번호, API 키 등)를 안전하게 주입(inject)해야 합니다. 이를 안전하게 수행하려면 어떻게 해야 하나요?
A. --var 플래그를 사용하여 Terraform에 변수를 전달한다
B. 민감한 변수를 Terraform 코드 안에 복사해서 넣는다
C. secure_vars.tf 파일에 민감한 변수를 저장한다
D. 민감한 변수를 일반 텍스트로 소스 코드 저장소에 저장한다
정답
정답. A번
'Terraform' 카테고리의 다른 글
[Terraform] depends_on 란? 쉽게 정리 (테라폼의 의존성 implicit vs. explicit) (0) | 2025.06.28 |
---|---|
[Terraform] 테라폼 코드에서 값을 참조하는 방법 쉽게 정리 (0) | 2025.06.28 |
[Terraform] Terraform Cloud란? 쉽게 정리 (0) | 2025.06.27 |
[Terraform] Splat Expressions와 For Expressions 쉽게 정리 (0) | 2025.06.26 |
[Terraform] variable란? 쉽게 정리 (terraform.tfvars란) (0) | 2025.06.23 |