SMALL

IT/DevSecOps 20

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

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

IT/DevSecOps 2026.06.09

Kyverno ClusterPolicy를 ValidatingPolicy(CEL)로 옮기는 법

Kyverno ClusterPolicy를 ValidatingPolicy(CEL)로 옮기는 법Kyverno가 3월 KubeCon EU 암스테르담에서 CNCF graduated 프로젝트로 승격됐다. 같은 흐름에서 1.17부터 CEL 기반의 새 정책 타입(ValidatingPolicy, MutatingPolicy 등)이 GA로 바뀌었고, 기존 ClusterPolicy API는 2026년 10월 제거 예정이라는 공지가 같이 나왔다. 우리 팀은 그동안 ClusterPolicy로 30개 가까운 정책을 운영하고 있었는데, 일정상 7월까지는 옮겨야 한다. 이번 글은 그 마이그레이션 작업을 하면서 정리한 가이드다.대상 독자는 Kyverno를 이미 한 번이라도 운영해 본 사람이다. CEL 자체가 처음이라면 마지막 섹션의 ..

IT/DevSecOps 2026.06.05

Vault Agent Injector annotation 충돌로 새벽에 일어난 이야기

지난주 화요일 새벽 2시 40분. 전화 진동이 침대 옆에서 부르르 떨었다. 결제 서비스 일부 Pod가 CrashLoopBackOff에 걸려서 P0 알람이 떴다는 PagerDuty. 졸린 눈으로 노트북을 열었는데, 보자마자 머리가 띵해졌다. 어제 낮에 내가 mutating webhook 설정 하나를 손댄 게 떠올라서.이 글은 그날 새벽 한 시간 동안 뭘 했는지에 대한 회고다. Vault Agent Injector를 쓰는 팀이면 한 번쯤은 밟을만한 지뢰라 기록을 남긴다.상황: agent-inject-secret 어노테이션이 사라졌다우리 팀은 1년 정도 Vault Agent Injector 1.4.x로 DB 자격증명을 주입해왔다. 패턴은 흔하다.metadata: annotations: vault.has..

IT/DevSecOps 2026.05.31

GitHub Actions OIDC, 아직도 sub에 wildcard 쓰고 계세요?

이번 주에 우리 팀 IAM trust policy 점검하다가 좀 놀란 게 있어서 짧게 적어둔다. 이거 모르는 분 꽤 많을 것 같다.익숙한 그 패턴GitHub Actions에서 AWS 붙일 때 OIDC federation 쓰는 건 이제 거의 표준이다. 그런데 trust policy 보다 보면 이런 게 자주 나온다.{ "Condition": { "StringLike": { "token.actions.githubusercontent.com:sub": "repo:my-org/my-repo:*" } }}좋다, 우리 repo로 한정은 했다. 근데 *이 너무 넓다. PR에서 돌아가는 워크플로우든, 누가 임시로 만든 브랜치에서 돌리는 거든, 환경 보호 없는 워크플로우든 — 전부 이 role을 가..

IT/DevSecOps 2026.05.30

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

Falco vs Tetragon, 둘 다 6개월 써본 결정

왜 단일화를 시도했나작년 가을부터 클러스터 런타임 보안 도구를 다시 들여다보고 있었다. 그전까지 우리 팀은 Falco만 돌리고 있었는데, 알람이 너무 시끄러웠다. 새벽에 페이지가 울리면 열에 아홉은 false positive였고, 나머지 한 번도 사실 우리가 미처 룰을 안 다듬어서 생긴 노이즈였다. 보안팀이 받는 신뢰도가 점점 떨어지는 게 보였다.그래서 Tetragon을 검토 후보로 올렸다. Isovalent(현재는 Cisco) 쪽에서 미는 eBPF 기반 도구고, Cilium을 이미 쓰고 있던 우리 환경이랑 잘 맞는다는 얘기가 컨퍼런스마다 나왔다. 결론부터 말하면 6개월 동안 둘을 병행해서 돌렸고, 지금은 둘 다 운영 중이다. 한쪽으로 단일화하려다가 다시 두 개 다 유지하기로 했는데, 그 과정에서 알게 ..

IT/DevSecOps 2026.05.28

Kyverno cluster policy 하나 올렸다가 API 서버가 죽은 새벽

새벽 1시쯤 알람이 울렸다. 정확히는 PagerDuty가 두 번 울렸고 그 다음엔 슬랙이 폭주했다. "kubectl이 다 timeout 난다"는 메시지가 #infra 채널에 5명한테서 동시에 올라왔다. 그날 저녁에 마지막으로 한 일이 Kyverno에 ClusterPolicy 하나를 새로 올린 거였다. 그게 거의 확정이라는 느낌이 왔다.이 글은 그날 새벽 한 시간 반 동안 무엇을 잘못했고 무엇을 배웠는지에 대한 회고다. 결론부터 말하면, failurePolicy: Fail을 너무 가볍게 봤다.무슨 정책을 올렸냐별 거 아닌 정책이었다. 워크로드에 app.kubernetes.io/name 레이블이 없으면 deployment를 막는 정책. 보안팀이 자산 인벤토리 정리하면서 요구한 거였고, 우리는 "이거 그냥 라..

IT/DevSecOps 2026.05.27

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
BIG