본문 바로가기
Work/Conference

HashCorp 밋업 - 데브시스터즈 Valut 사용기

by ★용호★ 2018. 8. 15.

데브시스터즈에서 사용하는 HashiCorp 제품

  • 테라폼
  • Packer
  • Valut

기존 시스템의 문제점

  • 초기에는 모든 팀원이 공용비밀번호와 공용 SSH Key 발급 받아 사용
  • 퇴사자 발생 시 Key Rotate
  • 관리해야할 패스워드가 점점 많아져서 기억하기가 어려워짐
  • 패스워드가 필요한 환경이 많다보니 키교체의 일부 자동화는 가능하지만 완벽한 자동화가 어려움

Valut를 통한 SSH

  • Valut는 SSH 기본 제공 인증서 기반
  • 믿을 수 있는 Secret Store
  • Flow
    • 클라이언트가 SSH Pulbic Key를 통해 Valut CA에 인증 요청
    • Valut는 클라이언트에게 접근 허용을 하고 Expire 시간을 지정
    • 발급 받은 public key로 서버에 접근
    • 서버는 authorized_keys와 대조하여 접근 허용
  • 서버 셋업
    • Valut 명령으로 인증서 생성
    • Valut 명령으로 역할 등록
    • 서버에 공개키 등록
    • Packer로 이미지 생성
  • 클라이언트 접속
    • valut ssh 명령으로 접속
  • 장점
    • 훌륭한 권한 관리 시스템
    • 개인, 그룹 단위의 권한 관리
      • 새로운 인원이 추가되어도 그룹에 넣어주기만 하면 됨
  • Valut 장애 발생을 대비해서 비상용 키를 둠

코드에 적혀있는 Private 정보

  • 보안 문제와 키 변경시 코드를 업데이트해야하는 이슈
  • 작업자가 패스워드를 몰라도 사용할 수 있도록 하는 것이 최선
  • Valut의 Key-Value Store 사용
    • valute read 명령
  • AWS 인스턴스 자격 증명에 대한 문서가 있음
    • Instance-identity/pkcs7
  • Flow
    • EC2 인스턴스가 AWS에서 자격 증명 요청
    • AWS에서 자격증명을 받으면 Valut에 자격증명 문서를 보냄
    • Valut는 AWS에 자격증명 검증을 요청
    • 검증에 통과하면 VALUT_TOKEN을 인스턴스에 전달
  • Packer로 이미지 생성해서 사용했지만 얼마전에 이 역할을 해주는 Valut Agent가 출시됨
  • Valut는 처음 자격증명을 요청한 인스턴스에 nonce값을 전달함. 이 후부터는 이 nonce값을 알아야 접근 가능
    • PKCS를 탈취당해도 nonce 값이 없으면 접근 불가능

안정성

  • Valut 장애에 대비 (고가용성)
    • Valut 서버 두대로 구성 (Active - Stanby)
    • Consul 클러스터 구성
      • Key-Value Store, Service Discovery 등의 역할
      • Valut와 연계가 잘됨
    • 서버 구성은 테라폼을 사용해서 간단하게 구성 됨
  • 무중단 업데이트

보안

  • Secret을 보관하는 장소이기 때문에 무엇보다 안전해야함
  • Valut 권장사항을 필독하고 따르려고 노력함
  • End-to-End TLS
    • ELB는 TCP 로드밸런싱만 제공하고 Valut를 통해 TLS 접근
    • 인증서 관리 문제
      • 각각의 인스턴스에서 알아서 발급 받고 알아서 갱신
        • github.com/Neilpang/acme.sh 사용
      • Route 53을 사용한 인증

사용성

  • 사용자들이 사용 방식의 변화를 크게 느끼지 않도록 하는 것이 중요
  • 문서화
    • Valut가 좋은 도구이지만 클러스터 구축을 해야하고 도입이 어려움
    • 꼼꼼한 문서화가 필요
  • 셋업에 들어가는 시간은 초기에만 들어가지만 이후부터는 권한 설정에 많은 시간을 쓰게 됨
    • 이미 있는 인프라를 사용하는 것이 좋음
      • Github 그룹 또는 LDAP
  • Secret 관리
    • 체계적이고 직관적인 경로 설정
      • ex) /secret/app/appname/rds
    • 정책에 대한 꼼꼼한 문서화

Valut 사용 회고

  • End-to-End TLS와 같은 경우 셋업 난이도가 높음
    • 권장사항을 따르는 것은 좋지만 난이도와 일정 조율 필요
  • 스토리지 백엔드로 Consul을 사용하는데 생각보다 관리가 까다로웠음
    • 버전업을 한번에 성공한 적이 없음
    • 사용 시 적극적인 백업 권장
  • Valut의 최고 장점이자 핵심 가치인 Audit Logging이 굉장히 좋았음
    • Secret 접근에 대한 모든 로그가 남기 때문에 조사하면 다 알 수 있음
  • Valut에 저장할 수 있는 것은 키도 가능하고 설정파일, OPT등등 다양함
    • 일단 넣고 보는 문화가 좋았음
      • Config파일도 Valut에 , OPT는 TOTP Backend에
  • 발전속도가 빠름
  • 자사 제품과 뛰어난 연계
    • Consul
    • Consul Template
    • Terraform
    • Packer
    • Nomad

기타

  • AWS 환경에서만 서비스를 한다면 Secret Manager를 사용해도 좋지만 멀티 프로바이더 지원을 위해서는 Valut 사용이 더 나은 듯
  • Valut는 하나의 클러스터로 구성되어 있고, VPC Peering을 통해 다른 시스템에서 접근
  • 케르베로스, LDAP을 통해 관리하던 분들이 Valut 사용을 검토하고 있음


댓글