name: gcp-secret description: "GCP Secret Manager 조회/추가/관리"
GCP Secret Manager
Secret Manager를 사용하여 비밀(API 키, 비밀번호 등)을 안전하게 관리합니다.
사용법
/gcp-secret # 시크릿 목록 조회
/gcp-secret get my-api-key # 시크릿 값 조회
/gcp-secret create my-secret # 새 시크릿 생성
/gcp-secret update my-secret # 시크릿 값 업데이트
Workflow
0. API 활성화 (최초 1회)
gcloud services enable secretmanager.googleapis.com --project=$PROJECT_ID
1. 시크릿 목록 조회
PROJECT_ID=$(gcloud config get-value project)
gcloud secrets list --project=$PROJECT_ID \
--format="table(name.basename(),createTime.date(),replication.automatic)"
2. 시크릿 생성
# 빈 시크릿 생성
gcloud secrets create SECRET_NAME --project=$PROJECT_ID
# 값과 함께 생성
echo -n "my-secret-value" | gcloud secrets create SECRET_NAME \
--data-file=- \
--project=$PROJECT_ID
# 파일에서 생성
gcloud secrets create SECRET_NAME \
--data-file=./secret.txt \
--project=$PROJECT_ID
3. 시크릿 값 조회
# 최신 버전
gcloud secrets versions access latest --secret=SECRET_NAME
# 특정 버전
gcloud secrets versions access 1 --secret=SECRET_NAME
4. 시크릿 버전 추가 (업데이트)
echo -n "new-secret-value" | gcloud secrets versions add SECRET_NAME --data-file=-
5. 버전 목록 조회
gcloud secrets versions list SECRET_NAME \
--format="table(name.basename(),state,createTime.date())"
6. 시크릿 삭제
# 버전 비활성화
gcloud secrets versions disable 1 --secret=SECRET_NAME
# 시크릿 전체 삭제
gcloud secrets delete SECRET_NAME
출력 형식
## Secret Manager 목록
| 시크릿 이름 | 생성일 | 버전 수 |
|-------------|--------|---------|
| api-key-prod | 2024-01-15 | 3 |
| db-password | 2024-01-10 | 1 |
| oauth-secret | 2024-02-01 | 2 |
---
총 3개 시크릿
### api-key-prod 버전
| 버전 | 상태 | 생성일 |
|------|------|--------|
| 3 | ENABLED | 2024-02-15 |
| 2 | DISABLED | 2024-01-20 |
| 1 | DESTROYED | 2024-01-15 |
애플리케이션에서 사용
Python
from google.cloud import secretmanager
client = secretmanager.SecretManagerServiceClient()
name = f"projects/{project_id}/secrets/{secret_id}/versions/latest"
response = client.access_secret_version(request={"name": name})
secret_value = response.payload.data.decode("UTF-8")
Cloud Run 환경변수로 마운트
gcloud run deploy SERVICE_NAME \
--set-secrets=API_KEY=api-key-prod:latest
VM에서 접근
# gcloud로 직접 접근
gcloud secrets versions access latest --secret=SECRET_NAME
# 서비스 계정에 권한 부여 필요
gcloud secrets add-iam-policy-binding SECRET_NAME \
--member="serviceAccount:SA_EMAIL" \
--role="roles/secretmanager.secretAccessor"
비용
| 항목 | 비용 |
|---|---|
| 활성 시크릿 버전 | $0.06/월 |
| 액세스 | $0.03/10,000회 |
| 순환 작업 | 무료 |
모범 사례
- 버전 관리: 이전 버전은 비활성화 후 삭제
- 자동 순환: 정기적으로 시크릿 값 변경
- 최소 권한:
secretAccessor역할만 부여 - 감사 로그: Cloud Audit Logs로 접근 모니터링
주의사항
- 시크릿 값은 로그에 남기지 않음
- 삭제된 버전은 복구 불가
- 시크릿 이름은 변경 불가 (삭제 후 재생성)