데브시스터즈에서 사용하는 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 사용을 검토하고 있음
'Work > Conference' 카테고리의 다른 글
HashiCorp 밋업 - 왜 테라폼인가? (2) | 2018.08.15 |
---|---|
HashCorp 밋업 - ZEPL 사용기 (0) | 2018.08.15 |
HashoCorp 밋업 - 레거시 위에서 재현 가능한 환경 구축하기 (0) | 2018.08.15 |
HashiCorp 밋업 - 당근마켓에서 Packer와 Vagrant 사용기 (0) | 2018.08.15 |
Golang 밋업 - Bazel 소개와 카카오 게임즈 사례 (0) | 2018.08.14 |
댓글