클라우드/쿠버네티스
gitops 암호화(sealed-secrets이용한 secret 암호화)
ybchoi
2022. 5. 24. 20:58
jenkins 와 argocd 를 사용하여 CI/CD를 하는 Gitops를 사용하고 있다
argocd의 경우 배포용 레포가 존재하는데 해당 레포에 시크릿 데이터가 올라간다
레포에 보안을 설정하긴 하겠지만 평문(base64인코딩이며 절대 암호화가 아님)으로 저장되는것이 불안하다면 이미 여러가지 솔루션이 있다
나의 경우 간단하게 도입이가능하고 딱 레포에 시크릿을 암호화하고싶다는 니즈만 있었으므로 Sealed secrets을 사용함
https://github.com/bitnami-labs/sealed-secrets/
간단한 설치 매뉴얼은 깃허브를 참고하고
아래는 사용법
sealed-secrets 사용
kubeseal클라이언트 필요(설치법 레포에)
sealed-secret 컨트롤러를 쿠버네티스 내부에 배포하고 해당 컨트롤러에 인증서로 secret파일을 암호화(클라이언트 이용)하여 git에 업로드
argocd에서 해당 git에있는 암호화된 secret을 생성하면 자동으로 sealed-secret컨트롤러가 복호화하여 클러스터 내부에 생성 함
원본 시크릿
apiVersion: v1
data:
DB_USERNAME: YWks
DB_PASSWORD: UlZDbjR0aWVa
kind: Secret
metadata:
name: server-secret
namespace: default
암호화 수행
cat sec.yaml | kubeseal -oyaml > secret.yaml
암호화된 시크릿
kind가 변경됨
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
creationTimestamp: null
name: server-secret
namespace: default
spec:
encryptedData:
DB_PASSWORD: AgBplEJ85a/LChc8IfF0Z5XSzpJ7wUeesMgcqvPfbC3oPT6mrUH5Rl7ictQb1UY7RclNXpCdIOdF4+C6cDSDBB53CAx1W+eGOuCMiryyBb3Wib5S5CDuvtJMwKsH2NPjnHvEyDA9L2t5z3jbGhfL5QQXqQTOb2Xic0uUZ4ZVFF+b11Mb6z/c8S9WbXCVnKUTFsEPk7jNB/CYpY+/UcU5/M3iz2TxRq3WWn1JtdKewqUGBIkcOryHDtY9CQ65Q9hjWYp88ystuhiuF2cji5dWD+XOEqSSN5CeG42LpPSnh/SBTeSLvSG08lgfivpBkx3f06M7sQfOXcNWuXoCv64qFBSf0aKtv4+ftWV4vNSA9hqo9SYBASMOBOVCUzddKGLNOxEanZsUZcKyu9zbOSpzwdWAjJCW/6wQaMy3pIBCv4w0S7WLdVy3+G4JbYQQ5YvvkqkaJDEuj6TkEDOi6yNxPxU5JYCRAP3OsExD750Q2nC7qbnb3gPwMtg1jQvEMM+DahTBH+bjrSKwnjiZO1Ls46R8zshPY2C2Z/xDFv4W8OC/jZfRWPpJY/4Gh1YAr+qb75mQFe4Xk6NwjDrMzjaAIB1y2GfiXhDN7txuzzTsERTwifjcBGpyjjgq44l6P6iKxNM3bRT4aSYkmALGjKivWwAeB8h+bF7J20OLwrs7MxdH4QoRsQZFwV8ojM9jRrNQFIQSOIa5R/Jb/7CaDYys5+c/vVBqkA==
DB_USERNAME: AgCe1Px5PxeF2QO58kqDYOa3jAK6mY/zvTcN+76SexlKc52unHrTf4+C2z49186U2LaN6K62xNwSjUleo1bd/vNLgoDX/ty7GKMP9XUV93fvzApNOKu1YnCuoyux12f7jTHt12B0K9StRTuZ719lneuwjPe6UzxI6DsxUAzHNfJQMvKei+k9anuGB6sjc1y5O+SyRhIjTyDsgVDcn2dpVsX6yoc16fQFq25XKsBF4oBREF6EAzTRkE4wwq2OXV38C5u41ER7T9X8CBi9sdG60ehOsAYeZ79NimaDRTTJCUnhbJuOuHU3Y5NSwvo+cNf2WbAA6hOT7Th/xS0KhpEDJ1vnpz8q+rBQviMi8JTNpzsByB3ggzks/iAduuhjbO7cYjqXSdhsajvxHAIquKEL2wX/azEWBTckI6pW05ci5FCXVjslabFdo1qC/vZcoBufhCvtD5Ogj8eZVfEBN0oKSmAgFDF805QfGcFUkd7OU8XApSCUHqm7+HzJNCTb+rzaAEWRfKwk9u5Kxto+RoMrmgLckp9UFd4Arluz8bEyoamDMnl+QWp2/W3HbJT4dnbKx7S+axyv4tL+4qFQF6n40l+ItC81xzLrAaubU7lQWFJqNCxyKAZZG3AquCApkOA+pQTDpHYe+ww8MHGbt7VqGxcgFTTUjOTB9fzV5stVEfz+jJPX+S2QLOIl4HGZbsvDKcNJDBxIog==
template:
data: null
metadata:
creationTimestamp: null
name: server-secret
namespace: default
위와같이 암호화 해서 레포에 올린다면 안전하다
이외에도 볼트나 여러가지 옵션이 있는데 아래 페이지에서 확인가능
https://argo-cd.readthedocs.io/en/stable/operator-manual/secret-management/