시크릿 관리
시크릿 관리 (Secret Management)
GitOps에서 시크릿을 채우는 방법은 크게 두 가지예요: 대상 클러스터에서 직접 채우거나, Argo CD가 매니페스트를 생성하는 과정에서 주입하는 방식이에요. 저희는 전자를 강력히 권장하는데, 더 안전하고 사용자 경험도 좋기 때문이에요.
출처: 문서
본문
자세한 논의는 #1364를 참고하세요.
대상 클러스터 시크릿 관리 (Destination Cluster Secret Management)
이 방식에서는 대상 클러스터에서 시크릿을 채우고, Argo CD가 직접 관리할 필요가 없어요. Sealed Secrets, External Secrets Operator, Kubernetes Secrets Store CSI Driver가 이런 스타일의 시크릿 관리 예시예요.
이 방식에는 두 가지 주요 장점이 있어요:
- 보안 (Security): Argo CD가 시크릿에 접근할 필요가 없어서 유출 위험이 줄어들어요.
- 사용자 경험 (User Experience): 시크릿 업데이트가 앱 동기화(sync) 작업과 분리되어, 무관한 릴리스 중에 실수로 시크릿 업데이트가 적용될 위험이 줄어들어요.
저희는 이 스타일의 시크릿 관리를 강력히 권장해요.
이 스타일의 다른 예시로는:
Argo CD 매니페스트 생성 기반 시크릿 관리 (Argo CD Manifest Generation-Based Secret Management)
이 방식에서는 Argo CD의 매니페스트 생성 단계를 이용해 시크릿을 주입해요. argocd-vault-plugin 같은 설정 관리 플러그인 (Config Management Plugin)으로 이 작업을 수행할 수 있어요.
저희는 이 스타일의 시크릿 관리를 강력히 반대해요. 몇 가지 단점이 있기 때문이에요:
- 보안: Argo CD가 시크릿에 접근해야 하므로 유출 위험이 커져요. Argo CD는 생성된 매니페스트를 Redis 캐시에 평문(plaintext)으로 저장하므로, 매니페스트에 시크릿을 주입하면 위험이 증가해요.
- 사용자 경험: 시크릿 업데이트가 앱 동기화 작업에 결합되어, 무관한 릴리스 중에 실수로 시크릿 업데이트가 적용될 위험이 커져요.
- 렌더링 매니페스트 패턴 (Rendered Manifests Pattern): 이 방식은 점점 GitOps의 베스트 프랙티스가 되어가는 "Rendered Manifests" 패턴과 호환되지 않아요.
많은 사용자가 이미 생성 기반 솔루션을 채택했고, 운영자 기반 솔루션으로 마이그레이션하는 것이 상당한 노력이 될 수 있음을 이해해요. Argo CD는 계속해서 생성 기반 시크릿 관리를 지원하겠지만, 이 스타일의 시크릿 관리만을 지원하는 새 기능이나 개선에는 우선순위를 두지 않을 거예요.
시크릿 주입 플러그인의 위험 완화 (Mitigating Risks of Secret-Injection Plugins)
Argo CD는 플러그인이 생성한 매니페스트와 주입된 시크릿을 Redis 인스턴스에 캐시해요. 그 매니페스트는 repo-server API(gRPC 서비스)로도 접근 가능해요. 즉 Redis 인스턴스나 repo-server에 접근 권한이 있는 사람은 누구나 시크릿을 볼 수 있다는 뜻이에요.
시크릿 주입 플러그인의 위험을 완화하려면 다음 단계를 고려하세요:
- Argo CD 컴포넌트(Redis와 repo-server)에 직접 접근하지 못하도록 네트워크 정책을 설정하세요. 클러스터가 네트워크 정책을 지원하고 실제로 강제할 수 있는지 확인하세요.
- Argo CD를 다른 애플리케이션 없이 자체 클러스터에서 실행하는 것을 고려하세요.