SMALL

DevSecOps 15

External Secrets Operator, ClusterSecretStore로 시크릿 관리 정리하기

시크릿 관리는 처음엔 SealedSecret로 시작했다가, SOPS로 갔다가, 결국 External Secrets Operator(ESO)에 정착하는 팀이 꽤 많다. 우리도 비슷한 경로를 걸었다. 이 글은 ESO를 도입한 뒤 한참을 SecretStore 기반으로 운영하다가 ClusterSecretStore로 갈아탄 과정에서 정리한 내용이다.ESO 자체 입문 글은 검색하면 많이 나오는데, 막상 운영에 들어가면 "네임스페이스마다 SecretStore를 만들어야 하나, 아니면 ClusterSecretStore 하나로 묶어야 하나" 같은 부분에서 한참을 헤맨다. 어제도 신규 팀이 와서 같은 질문을 했길래, 그동안 정리한 내용을 한번 풀어본다.언제 ClusterSecretStore를 쓰는가SecretStore는 ..

IT/DevSecOps 2026.06.09

Trivy Operator vs Kubescape, 6개월 굴려보고 내린 결정

비교를 시작한 배경작년 말에 Falco vs Tetragon 한 번 정리하면서 런타임 쪽은 어느 정도 정해뒀는데, 정작 더 매일같이 쓰는 "posture/이미지 취약점 스캔" 쪽이 계속 어수선했다. 우리 팀은 한동안 Trivy Operator 단일로 굴렸고, 작년 4분기쯤 Kubescape가 CNCF Incubating에서 한 단계 더 성숙해지면서 한번 다시 들여다볼 만하다는 얘기가 사내에 돌았다. 그래서 두 도구를 운영 환경에 6개월 정도 병행해서 돌려봤다. 결론부터 말하면 "둘 다 쓰긴 쓰는데 역할이 갈렸다"는 거다. 이 글은 그 갈리는 지점이 어디였는지에 대한 기록이다.전제는 이렇다. 클러스터는 EKS 1.31 두 개(prod/stg), 노드 합 60여 대, 워크로드 300개 안팎. 컴플라이언스는 ..

IT/DevSecOps 2026.05.30

cert-manager로 Wildcard 인증서 자동화하기 (운영하며 만난 함정들)

작년 말에 우리 팀은 사내 서비스용 도메인의 TLS 인증서를 ACM에서 cert-manager로 옮겼다. EKS 클러스터가 늘어나면서 ALB마다 ACM 인증서 attach하고 갱신 알람 처리하는 게 점점 귀찮아진 게 직접적인 이유였고, 비용보다는 운영 부담 쪽이 컸다. 6개월쯤 굴려보니 마이그레이션 직후엔 안 보이던 문제들이 슬슬 보이기 시작해서, 정리해 두면 누군가는 덜 헤맬 것 같아 글로 남긴다.먼저 짚고 가야 할 거 하나. Wildcard 인증서(*.internal.example.com)는 HTTP01 challenge로 못 받는다. DNS01만 된다. 이건 Let's Encrypt 정책이라 우회할 방법이 없다. 그래서 cert-manager + Route53(우리 환경 기준) 조합이 사실상 표준 ..

IT/DevSecOps 2026.05.24

ClusterSecretStore 쓸 거면 namespaceSelector는 꼭 걸어두자

오늘 알게 된 건데, 의외로 모르는 분 꽤 많더라. External Secrets Operator(ESO) 쓰면서 ClusterSecretStore를 그냥 kind: ClusterSecretStore만 박아두고 끝내는 경우. 그러면 클러스터 안의 모든 네임스페이스가 그 SecretStore를 참조할 수 있게 된다. 즉, Vault나 AWS Secrets Manager로 가는 인증 경로가 사실상 클러스터 전체에 열려 있는 셈이다.ESO 공식 문서의 보안 베스트 프랙티스에서도 ClusterSecretStore와 ClusterExternalSecret는 cluster-scoped라 특히 조심하라고 강조한다. 근데 막상 helm chart로 깔고 나면 example manifest를 그대로 복붙해서 쓰니까 이 ..

IT/DevSecOps 2026.05.23

OpenBao 내부 들여다보기 - 포크 이후 2년, 진짜로 Vault를 대체할 수 있나

작년부터 우리 팀에서도 신규 서비스에는 Vault 대신 OpenBao를 깔기 시작했다. 처음 도입할 때만 해도 "그냥 Vault 1.14 그대로 박제된 거 아니냐"는 의심이 컸는데, 막상 1년 가까이 운영해보니 그 평가는 좀 수정해야겠다는 생각이 든다. 특히 올해 2월에 나온 2.5에서 namespace와 horizontal read scaling이 들어가면서, 단순히 Vault의 OSS 미러가 아니라 자기 방향성을 갖기 시작했다.이 글은 "OpenBao 도입 가이드"가 아니다. 그건 이미 충분히 많다. 대신 내부 구조가 Vault와 어디서 갈라지기 시작했는지, 운영자 입장에서 어느 지점을 신경 써서 봐야 하는지를 정리한다.포크 시점이 결정한 것들OpenBao는 Vault 1.14.0에서 갈라져 나왔다...

IT/DevSecOps 2026.05.20

ServiceAccount projected token 만료로 새벽 호출 — 1년 짜리 토큰을 캐싱한 SDK 이야기

지난주 화요일 새벽 4시쯤 전화가 울렸다. 메시지 큐 컨슈머 한 대가 S3 PutObject에서 ExpiredTokenException 을 계속 뱉고 있다고. 멘탈이 살짝 나갔다. IRSA로 깔끔하게 인증 붙여놨다고 믿고 있던 워크로드였는데.결론부터 말하면 ServiceAccount projected token이 만료된 뒤 kubelet이 새 토큰을 디스크에 갈아 끼웠는데, 우리 컨슈머 안에 들어있던 SDK는 이걸 다시 읽지 않고 죽은 토큰을 1년 가까이 메모리에 들고 있었다. 정확히는 캐시가 너무 충실했던 게 문제였다.우리가 잘못 알고 있던 부분Kubernetes 1.22 이후로 BoundServiceAccountTokenVolume 이 GA되면서 Pod이 마운트하는 토큰은 모두 projected 형태..

IT/Kubernets 2026.05.19

Cosign vs Notation, 우리 팀은 어떻게 골랐나

작년 말부터 컨테이너 이미지 서명을 본격적으로 강제하기 시작했다. 사내 정책상 프로덕션에 들어가는 모든 이미지는 서명되어 있어야 하고, admission controller에서 검증에 실패하면 배포가 막힌다. 그때 첫 번째로 부딪힌 질문이 "그래서 Cosign 쓸 거야, Notation 쓸 거야?" 였다.둘 다 OCI 아티팩트로 서명을 저장하고, 둘 다 표준화된 사양을 따른다. 그런데 막상 PoC 들어가니까 결이 꽤 달랐다. 5개월 정도 양쪽 다 운영해 본 입장에서 정리해본다.키 관리 모델이 가장 큰 분기점Cosign의 강점은 누가 뭐래도 keyless 서명이다. GitHub Actions의 OIDC 토큰을 Fulcio가 받아서 짧은 수명(보통 10분)의 X.509 인증서를 발급하고, 그걸로 서명한 뒤 ..

IT/DevSecOps 2026.05.18

External Secrets Operator vs SOPS, 1년 같이 써본 후기

작년 봄에 시크릿 관리 체계를 갈아엎으면서 ESO(External Secrets Operator)랑 SOPS를 둘 다 도입했다. 처음엔 하나로 통일하자는 의견이 강했는데, 1년 굴려보니 둘 중 하나만으로는 답이 안 나오더라. 결국 우리 팀은 둘을 역할로 갈라놓고 쓰는 쪽으로 정착했다.최근에 신규 팀 합류한 사람한테 이 구조를 설명할 일이 있었는데, 막상 글로 정리해두니 우리도 모호하게 쓰고 있던 부분이 꽤 보였다. 그래서 한번 정리해본다.우리 환경 간단히EKS 클러스터 4개 (dev/stage/prod 2개 — 리전 분리)ArgoCD 기반 GitOpsAWS Secrets Manager, Parameter Store 둘 다 사용 중코드 저장소는 GitHub Enterprise원래는 sealed-secret..

IT/DevSecOps 2026.05.12

Cosign + Kyverno로 컨테이너 이미지 서명 검증, 클러스터에 강제하기

이미지 서명을 안 하는 팀은 이제 거의 없을 거다. 빌드 파이프라인에 cosign 한 줄 박는 건 어렵지도 않으니까. 문제는 검증 쪽이다. 누가 서명 안 된 이미지를 클러스터에 푸시해도 그냥 굴러간다. 결국 admission 단에서 막아야 하는데, 이걸 가장 깔끔하게 해주는 게 Kyverno의 ImageValidatingPolicy다.올해 초 Kyverno에서 기존 ClusterPolicy의 verifyImages 규칙을 ImageValidatingPolicy(IVP) 라는 별도 타입으로 분리하면서 정책 작성이 좀 더 명시적으로 바뀌었다. 우리 팀에서도 4월 초에 ClusterPolicy 기반 검증을 IVP로 옮겼는데, 옮기면서 정리한 내용을 가이드 형태로 풀어본다.사전 준비물Kubernetes 1.28..

IT/DevSecOps 2026.05.07
BIG