티스토리 뷰

jenkins 와 argocd 를 사용하여 CI/CD를 하는 Gitops를 사용하고 있다

 

argocd의 경우 배포용 레포가 존재하는데 해당 레포에 시크릿 데이터가 올라간다

 

레포에 보안을 설정하긴 하겠지만 평문(base64인코딩이며 절대 암호화가 아님)으로 저장되는것이 불안하다면 이미 여러가지 솔루션이 있다

 

나의 경우 간단하게 도입이가능하고 딱 레포에 시크릿을 암호화하고싶다는 니즈만 있었으므로 Sealed secrets을 사용함

 

https://github.com/bitnami-labs/sealed-secrets/

 

GitHub - bitnami-labs/sealed-secrets: A Kubernetes controller and tool for one-way encrypted Secrets

A Kubernetes controller and tool for one-way encrypted Secrets - GitHub - bitnami-labs/sealed-secrets: A Kubernetes controller and tool for one-way encrypted Secrets

github.com

 

간단한 설치 매뉴얼은 깃허브를 참고하고

 

아래는 사용법

 

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/

 

Secret Management - Argo CD - Declarative GitOps CD for Kubernetes

Secret Management Argo CD is un-opinionated about how secrets are managed. There's many ways to do it and there's no one-size-fits-all solution. Here's some ways people are doing GitOps secrets: For discussion, see #1364

argo-cd.readthedocs.io

 

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함