GH GambleHub

구성 및 비밀 관리

구성 및 비밀 관리

1) 왜 필요한가

구성과 비밀은 생산 플랫폼의 "혈액" 입니다. 설정에서 오류가 p95로 떨어지고 유출 된 비밀은 P1 사고입니다. 목표는 설정/비밀을 만드는 것입니다

예측 가능 (체계, 검증, 버전).
보안 (암호화, 최소 권한, 회전).
관리 (GitOps, 감사, 롤백).
정당한 위치에서 동적 (기능 플래그, 한계의 매개 변수화).

2) 아티팩트 분류

공개 구성 요소: 기능, 임계 값, 타임 아웃, 기능 플래그 (비밀 없음).
민감한 구성 요소: 중요 경로의 동작을 변경하는 매개 변수 (예: 지불 한도).
비밀: 암호/키/토큰/인증서/암호화 자료.
신뢰 아티팩트: 루트/중간 인증서, PKI 정책, KMS 키.

별도의 스토리지 및 권한의 원칙: 공개

3) 설정 계층 구조

레이어의 "피라미드" 구축:

1. 전역 불이행 (org-wide).

2. 환경 ('prod/stage/dev').

3. 지역 ('eu-central-1', 'us-east-1').

4. 세입자/브랜드 (멀티 테넌트 용).

5. 서비스 (특정 마이크로 세르 비체).

6. 재정의 (런타임) - 임시 스위치.

합병 규칙: "승리 아래", 충돌-MR/승인을 통해서만 가능합니다.

예 (YAML)

yaml defaults:
http:
timeout_ms: 800 retry: 2 prod:
http:
timeout_ms: 1200 service: payments-api overrides:
eu-central-1:
http:
timeout_ms: 1500

4) 계획 및 검증

각 설정은 체계와의 계약입니다 (CI의 JSON Schema/OPA/유효성 검사기).

유형, 범위, 필요한 필드, 기본 값.
"가드 규칙" ('다시 시도> 5', 'p95 _ 대상 <50ms' 로 설정할 수 없음).
CI에서 자동 체크인 및 적용시기 (입학 웹 후크/KRM).

JSON 스키마 조각

json
{
"type":"object",
"properties":{
"http":{"type":"object","properties":{"timeout_ms":{"type":"integer","minimum":100,"maximum":10000},"retry":{"type":"integer","minimum":0,"maximum":5}},"required":["timeout_ms"]},
"feature_flags":{"type":"object","additionalProperties":{"type":"boolean"}}
},
"required":["http"]
}

5) 배달 모델 설정

정적 (이미지 구운): 신뢰할 수 있지만 다시 시작해야합니다.

푸시/워치 : /사이드카 에이전트는 업데이트 (스트림/폴링) 를 수신하고 응용 프로그램에 신호를 보냅니

시작 시간: 시작시 스냅 샷을 얻습니다 (핫 경로 단순화).
지리 분산 하중에 대한 가장자리 캐시/프록시.

가장 중요한 것은 스냅 샷, 호환성 제어 및 빠른 롤백의 원자 성 및 버전화입니다.

6) 도구 및 역할

설정 상점: Git (진실의 출처) + GitOps (Argo/Flux), Parameter Store/Consembly Service.
비밀 저장소: Vault, AWS 비밀 관리자/SSM, GCP 비밀, Azure KV.
암호화: KMS/HSM, SOPS (age/GPG/KMS), 밀봉 된 비밀, 대중 교통 암호화 (Vault).
배송: CSI Secrets Store, Vault 에이전트 인젝터/사이드카, 초기 컨테이너.
깃발/역학: 기능 플래그 플랫폼 (비상 킬 스위치).

7) 암호화: 모델 및 실습

휴식 시간: 프로젝트/환경의 KMS 키, 엔벨로프 암호화.
전송 중: 상호 인증 기능이있는 SL/mTLS.
사용 중: 프로세스 메모리/사이드카 (디스크에 쓰지 않고) 에서 가능한 한 늦게 암호 해독.
주요 계층: 루트 (HSM) → KMS CMK → 데이터 키 (DEK).
회전: 이벤트 별 달력 (90/180 일) + (직원 타협/출발).

8) 비밀 관리: 패턴

8. 1 GitOps + SOPS (정적 스냅 샷)

Git은 암호문 만 저장합니다.
CI/CD 또는 클러스터 (KMS/age) 에서의 암호화.
컨트롤러 (Flux/Argo) → Kubernetes Secret을 통한 응용 프로그램.

yaml apiVersion: v1 kind: Secret metadata: { name: psp-keys, namespace: payments }
type: Opaque data:
apiKey: ENC[AES256_GCM,data:...,sops]

8. 2 Vault 에이전트 인젝터

서비스 계정 (JWT/SA) 은 Vault에서 인증됩니다.
Sidecar는 TTL에서 크레딧을 tmpf 및 업데이트합니다.
동적 크레딧 (DB, 클라우드 격리 및 단기) 지원.

yaml annotations:
vault. hashicorp. com/agent-inject: "true"
vault. hashicorp. com/role: "payments-api"
vault. hashicorp. com/agent-inject-secret-db: "database/creds/payments"

8. 3 CSI 비밀 상점

비밀을 볼륨으로 마운트하면 회전이 투명합니다.
PKI-인증서/키의 자동 갱신.

9) Kubernetes: 실용성

ConfigMap-공개/무감각 데이터 만.
비밀-민감성 (base64 사용-암호화가 아님); 등록을 위해 Rest에서 암호화 활성화).
설정 주석: 설정을 변경할 때 배포를 다시 시작합니다.
입학 통제: "화이트리스트" 가 아닌 비밀 장착 금지, "일반" 암호 금지 표시.
네트워크 정책: 비밀 제공 업체 (Vault/CSI) 에 대한 액세스를 제한합니다.

스케일러 예 (헬름)

yaml annotations:
checksum/config: {{ include (print $.Template. BasePath "/configmap. yaml"). sha256sum }}

10) 액세스 정책 (RBAC/ABAC)

최소한의 특권: 서비스는 비밀 만 본다. 네임 스페이스/레이블/접두사로 액세스하십

분할 작업: 비밀 자료 읽기 콘텐츠 작성; 읽기를 감사하십시오.
임시 크레딧: TTL 및 자동 회전이있는 동적 로그인 (DB, 클라우드).
세분화: 다른 프로젝트/계정/KMS 키의 prod/stage.

11) 감사, 벌목, 관찰

읽기/발행 비밀 로그: 누가/언제/무엇을/어디서; 릴리스 및 사건과의 상관 관계.
메트릭: 통화 빈도, 만료 된 비밀, 만료 된 인증서, 동적 크레딧 공유.
보안 이벤트-할당량 초과, IP/시간 이상, 여러 실패 정품.

12) 비밀 및 인증서 회전

용어를 표준화하십시오: API 키-90 일, DB 비밀번호-30 일, SL 세트-60-90 일.
회전 개요: 생성 → 테스트 → 이중 게시 (grace) → 이전 → 검증의 해지 → 전환.
신뢰성: 컨피그/비밀의 이중 항목, 클라이언트 호환성 (새 + 오래된 항목 허용).

PKI: CA를 소유하거나 외부와의 통합; CSI/Vault를 통해 mSL 컨텐츠를 자동으로 업데이트합니

13) 동적 구성 및 기능 플래그

설정 서비스/플래그 플랫폼에서 "핫" 매개 변수 (제한, 타임 아웃) 를 사용하십시오.
로컬 캐시 및 끈적 끈적함 (해시 별 변형 계산), 짧은 TTL.
SLO는 민감한 매개 변수 (자동 롤백 및 킬 스위치) 를 변경하도록 보호합니다.

14) CI/CD 및 GitOps와의 통합

사전 커밋/CI: 회로 라인터, SOPS 검사, "네이 키드" 비밀 금지 (스캐너: gitleaks/trufflehog).
정책 게이트: OPA/Conftest-스키마없이/소유자 주석없이/환경 레이블없이 구성을 허용하지 않습니다.
점진적인 전달: 매개 변수를 변경하기위한 카나리아 인 아티팩트 (semver) 로 구성 요소를 홍보합니다.
릴리스 주석: 누가/무엇을 구성/비밀로 변경했는지; p95/5xx와의 빠른 상관 관계.

15) 예

15. 1 OPA 정책: 설정에서 열린 SG 금지

rego package policy. config

deny[msg] {
input. kind == "SecurityGroupRule"
input. cidr == "0. 0. 0. 0/0"
input. port = = 5432 msg: = "Postgres open internet banned"
}

15. 2 설정 스냅 샷의 예 (verioned)

yaml version: 1. 12. 0 owner: payments-team appliesTo: [ "payments-api@prod" ]
http:
timeout_ms: 1200 retry: 2 withdraw:
limits:
per_txn_eur: 5000 per_day_eur: 20000 flags:
new_withdrawal_flow: false

15. 3 Vault-동적 데이터베이스 크레딧

hcl path "database/creds/payments" {
capabilities = ["read"]
}
role issues user/password with TTL = 1h and auto-rollover

16) 반 패턴

암호화없이 Helm/Ansible 변수의 명확한 텍스트/Git의 비밀.
모든 서비스/환경에 대한 단일 "메가 비밀".
TTL/회전이없는 수명이 긴 토큰; "불멸의" 인증서.
체계/검증 및 감사 변경없이 동적 구성.
etcd/KMS 및 비 mSL 네트워크에 대한 휴식 시간에 암호화가 없습니다.
GitOps를 우회하여 제품의 컨피그를 수동으로 편집합니다.
"만일의 경우" 비밀을 영업하기 위해 개발자에게 액세스 할 수 있습니다.

17) 구현 점검표 (0-60 일)

0-15 일

구성 요소에 대한 다이어그램/유효성 검사기 포함; repo "configs" 및 GitOps 스트림을 시작하십시오.
KMS 및 암호화: SOPS/Sealed Secrets/Encryption in Restd in etcd.
CI (스캐너) 에서 일반 텍스트 비밀을 금지하고 소유자/승인을 입력하십시오.

16-30 일

분할 금고: 공개 구성 대 민감한 대 비밀.
Vault/Secrets Manager를 구현하고 배송 경로 (에이전트/CSI/SOPS) 를 선택하십시오.
TLS/DB/PSP 크레딧의 회전을 설정합니다. 대시 보드 "수명/만료".

31-60 일

SLO 게이팅 및 자동 롤백으로 동적 구성 및 플래그.
OPA/가장 혼란스러운 정책; 제로 트러스트 (네임 스페이스/레이블 범위 액세스).
게임 데이: 비밀 누출 및 힘 회전 시뮬레이션.

18) 성숙도 지표

암호화중인 비밀의% Git = 100% 에서 직접 액세스 할 수 없습니다.
구성/검증 범위는 95% 이상입니다.
중요한 비밀을 회전시키는 평균 시간 (목표: 시간이 아닌 시간).
동적 크레딧 (DB/클라우드) 의 비율은 80% 이상입니다.
"일반 비밀 "/만료 된 인증서로 인한 0 건의 사고.
롤백 <5 분 동안 설정 오류시 MTTR.

19) 명령 역할 및 프로세스

설정 소유자: 도메인/스키마/정책 소유자.
보안: 정책, 주요 계층 구조, 액세스 감사.
플랫폼/SRE: GitOps, 공급/주입, 원격 측정.
앱 팀: 설정/비밀 소비, 호환성 테스트.

20) 결론

구성 및 비밀의 안정적인 윤곽은 + GitOps + 암호화 + 회전 + 정책 체계입니다. 별도의 공개 및 비밀, 모든 것을 암호화하고, 원자 및 시각적으로 구성을 적용하고, 크레딧의 권리와 수명을 최소화하고, 교체 및 감사를 자동화하십시오. 그러면 변경 사항이 빠르고 안전해지고 누출 및 낙하 위험이 최소화됩니다.

Contact

문의하기

질문이나 지원이 필요하시면 언제든지 연락하십시오.우리는 항상 도울 준비가 되어 있습니다!

통합 시작

Email — 필수. Telegram 또는 WhatsApp — 선택 사항.

이름 선택 사항
Email 선택 사항
제목 선택 사항
메시지 선택 사항
Telegram 선택 사항
@
Telegram을 입력하시면 Email과 함께 Telegram에서도 답변드립니다.
WhatsApp 선택 사항
형식: +국가 코드 + 번호 (예: +82XXXXXXXXX).

버튼을 클릭하면 데이터 처리에 동의하는 것으로 간주됩니다.