Architecture Decision Record

Active theme: Light

← 의사결정 기록 예시

비밀 정보 저장

목차:

요약

이슈

우리는 비밀번호, 개인 키, 인증 토큰 같은 비밀 정보를 저장해야 합니다.

일부 비밀 정보는 사용자 지향적입니다. 예를 들어 개발자는 휴대폰을 사용하여 서비스의 비밀번호를 찾아볼 수 있기를 원합니다.

일부 비밀 정보는 시스템 지향적입니다. 예를 들어 지속적 전달 파이프라인은 클라우드 호스팅의 로그인 자격 증명을 조회할 수 있어야 합니다.

결정

사용자 지향 비밀 정보에는 Bitwarden.

시스템 지향 비밀 정보에는 Vault by HashiCorp.

상태

결정됨. 새로운 선택지가 나오면 열린 자세로 검토합니다.

세부 사항

가정

이 목적과 우리의 현재 상황에서 우리는 유용한 모바일 앱 같은 사용자 지향적 편의성을 중시합니다.

  • 예를 들어 신뢰성 엔지니어링 당직 업무를 하는 개발자처럼 이동 중에도 빠르고 쉬운 접근을 보장하고자 합니다.

  • 팀처럼 선택된 사람들 사이에서 일부 비밀 정보를 공유할 수 있기를 원합니다.

우리는 모든 비밀 정보를 Amazon, Azure, Google 중 한 곳에만 저장하는 것처럼 단일 벤더를 위한 해결책을 시도하지 않습니다.

우리는 “기억해 두세요”, “메모지에 적어 두세요”, “저장하는 방법은 각자 알아서 찾으세요” 같은 임시방편 접근 방식을 원하지 않습니다.

이 목적에 대한 우리의 보안 모델은 SaaS 비밀번호 관리 도구 같은 평판이 좋은 상용 기성품(COTS) 벤더를 사용하는 것에 만족합니다.

제약

현재 우리는 단순한 것을 원합니다. 즉 코드를 작성할 필요가 없고, 서버를 설치할 필요가 없고, 큰 약속을 할 필요가 없고, 모든 사람을 표준화할 필요가 없는 것.

입장

우리는 다음을 검토했습니다:

  1. 사용자 지향 기성품 비밀번호 관리자: LastPass, 1Password, Bitwarden, Dashlane, KeePass, pass, GPG 등.

  2. 시스템 지향 COTS 비밀번호 관리자: AWS KMS, Vault by HashiCorp, EnvKey, Secret Server by Thycotic, Devolutions Password Server, Confidant by Lyft.

  3. 공유 지향 접근 방식: 공유 Google 문서, 공유 Slack 채널, 공유 네트워크 폴더 등 사용.

  4. 기억하기, 메모 쓰기, 각 사용자가 저마다 저장 방법을 찾도록 맡기기 같은 저기술 임시방편 접근 방식.

논거

Bitwarden, LastPass, 1Password, Dashlane은 모두 상용 기성품입니다.

  • 사용자, 팀, 조직 등에 대한 비슷한 종류의 기능.

  • Windows와 Mac용 데스크톱 기능, Android와 iOS용 모바일 기능.

  • 양식 자동 채우기 등을 위한 Chrome과 Firefox용 브라우저 확장 프로그램.

Bitwarden은 다른 것들에 비해 두 가지 장점이 있습니다:

  • Bitwarden은 오픈 소스이므로 보안을 동료들이 검토할 수 있고 회사도 보안에 관심 있는 개발자들 사이에서 대체로 존경받습니다.

  • 소프트웨어 종사자들의 일화에 따르면 다른 것들보다 Bitwarden에 대한 상당한 선호가 나타납니다.

전형적인 좋은 기사: https://jcs.org/2017/11/17/bitwarden

나란히 비교하는 전형적인 투표 사이트: https://stackshare.io/stackups/bitwarden-vs-dashlane

우리는 추가적인 복잡성이 있기 때문에 KeyPass, pass, GPG 등을 보류합니다. 모두 기술적인 사용자에게 좋은 해결책으로 보입니다. GPG는 특히 시스템 전반에서 명령 지향 기능을 원하는 기술적인 사용자에게 좋아 보입니다.

우리는 KMS가 단일 벤더 종속이 있으므로 보류합니다.

우리는 리뷰가 놀라울 만큼 긍정적이고 HashiCorp가 최고급 소프트웨어와 지원에 대한 훌륭한 실적을 가지고 있으므로 시스템 지향 요구에 Vault를 선택합니다.

우리는 공유 문서, 공유 채널, 공유 네트워크 폴더 등을 통한 공유 접근 방식에 거부권을 행사합니다. 이것들은 우리가 원하는 보안 품질을 제공하지 않습니다.

우리는 저기술 임시방편 접근 방식에 거부권을 행사합니다. 그것이 장기적인 앞으로의 길이 아니라는 데 모두가 동의하기 때문입니다.

영향

개발자는 두 곳에서 비밀 정보를 관리해야 할 수 있습니다: 사용자 지향 접근을 위한 Bitwarden과 시스템 지향 접근을 위한 Vault.

관련 항목

관련 결정

어떤 CI/CD 서버를 선택할지에 대한 결정에는 비밀 정보에 접근할 수 있는 능력의 증거가 포함되어야 합니다.

정책, 교체, 조직 등에 관하여 비밀 정보를 어떻게 관리할지 결정해야 합니다.

관련 요구사항

비밀 정보에는 규정 준수, 감사, 인사 온보딩/오프보딩에 대한 관련 요구사항이 있을 것입니다.

관련 산출물

일부 비밀 정보를 환경 변수로 내보낼 수 있을 것으로 예상합니다.

관련 원칙

쉽게 되돌릴 수 있음.

병행 실행이 쉬움. 즉 다양한 비밀번호 관리자를 사용하기가 간단함.

시도하는 비용이 저렴함. 즉 무료 체험이 있고 약정이 없음.

메모

여기에 평가 메모를 적습니다. 메모는 모두 여러 데브옵스 토론 포럼의 공개 댓글입니다.

Vault by HashiCorp

Vault는 여기서 정확히 원하는 것입니다.

하지만 Vault를 그냥 운영 환경에 던져 넣지 말고 먼저 테스트 환경에 설정하십시오. HashiCorp의 제품은 훌륭하지만 그들의 문서는 꽤 부실할 수 있기 때문입니다.

학습 곡선이 매우 가파르고 설정하기가 만만치 않습니다.

초기 설정은 다소 고통스럽습니다. 그만한 가치가 분명히 있으며, 커뮤니티가 충분히 잘 지원해 주어 해낼 수 있을 것입니다.

끔찍한 문서이지만, 설정해 본 사람들이 올린 온라인 가이드가 많고 몇 개를 조합하면 동작하는 설정을 얻게 됩니다.

초기 설정에는 helm 차트(vault와 consul)를 만지작거려야 했습니다. 기술적으로 다른 많은 백엔드를 사용할 수 있지만, 정말로 정말로 권장하지 않습니다. 저장할 데이터가 많지 않다면 백엔드/consul은 아주 작아도 됩니다.

GUI는 엔터프라이즈 에디션을 위한 개념 증명/광고 포털에 가깝기 때문에 CLI 사용에 반드시 익숙해지십시오.

그냥 “채워 넣을” 수 없다는 점이 고통입니다. 예를 들어 필드가 5개 있으면 각 항목마다 필드를 수동으로 추가해야 합니다. 즉 특정 범주에 대한 필드를 미리 정의하고 그 범주의 모든 항목에 대해 그 필드를 채우는 것이 아니라, “매번 모든 것을 생성하는” 쪽에 가까우며 (제 생각에는) 고통입니다.

vault 위의 UI로 goldfish도 살펴볼 만합니다. 팀을 끌어들이기가 꽤 수월해집니다. 데모도 있습니다. 1. consul을 설정합니다. 2. consul을 가리키는 vault를 설정합니다. 3. vault를 가리키는 goldfish를 설정합니다. 3. 백업을 위해 consul snapshot을 실행하는 cron 작업을 설정합니다.

LastPass

LastPass Teams. 우리는 이를 사용하며, 사용자 정의 템플릿과 ACL이 있고 제 생각에는 부족한 것이 없습니다.

저는 제 조직에 LastPass를 구현했으며 C+/B-를 줍니다. 최근 가장 큰 문제는 신뢰성 부족입니다. 지난 90일 동안 금고가 오프라인 모드로 강제 전환된 몇 시간이 여러 번 있었습니다. 우리는 말 그대로 20개 이상의 공유 폴더에 4,000개 이상의 비밀번호를 저장하고 있으므로 제 조직에는 이상적이지 않습니다. 그렇게 많은 비밀번호가 있으면 짐작하시겠지만 매일 최소 몇 개는 갱신되거나 추가됩니다. 문제가 한두 시간 이상 지속될 경우를 위한 DR 계획이 있습니다. 스크립트가 매일 밤 금고의 CSV 덤프를 서명하고 암호화하며, 이를 keepass로 가져올 수 있습니다.

LastPass에는 보고되지 않은 서비스 저하의 순간들이 있었습니다: 로그인은 “작동”하지만 어떤 사이트도 가져오지 않고, 관리자 패널의 임의 기능이 고장 나고, 새로운 최상위 공유 폴더에 대해 키가 제대로 공유되지 않습니다. 저는 모든 그룹에 존재하는 특별한 “키 푸시”/백업 사용자를 두고 있습니다. 보통 그 사용자로 로그인하면 키 공유 문제가 모두 해결되지만, 상태 페이지가 뭐라고 하든 서비스가 저하된 때는 해결되지 않습니다...

통합의 경우, 최소 권한 모델의 적절한 ACL이 있다면 간단할 수 있습니다. 예를 들어 사용자가 하나의 항목이나 폴더에 읽기 및 쓰기 권한과 읽기 전용 권한을 모두 가지면 읽기 권한만 갖게 되는 식입니다. 안타깝게도 제 조직의 ACL은 최선이 아니어서, 수백 개의 ACL에 걸친 종속성이 최소 권한 모델에 잘 매핑되지 않았으므로 JSON 프로비저닝 API와 약 500줄의 python을 사용하게 되었습니다. 결국 사용자가 속한 모든 ACL을 가져와서 일종의 종속성 탐색을 했습니다.

ACL이나 그룹 구조가 이미 최소 권한 구조를 염두에 두고 구축되어 있다면 Windows용 AD/LDAP 동기화 도구는 잘 작동합니다.

영업팀에 연락하면 더 긴 엔터프라이즈 체험을 마련해 줄 수 있습니다. 방아쇠를 당기기 전에 그 한계를 충분히 이해해 두십시오. 우리는 성장통이 꽤 있었지만, 서버 측의 장애나 저하를 제외하면 믿을 수 없을 만큼 매끄러웠습니다.

Bitwarden

Bitwarden에는 주변 도구(WebUI, CLI, 모바일, 데스크톱)가 좋습니다. 자체 호스팅이 가능하며 설정이 꽤 쉽습니다. 문서가 꽤 좋고 PrivacyTools가 추천하는 도구입니다.

EnvKey

https://www.envkey.com/ 는 saas입니다. 구현, 통합, 관리가 정말 쉽습니다.

기능:

  • API 키와 로그인 자격 증명을 보호합니다.

  • 설정을 어디서나 동기화된 상태로 유지합니다.

  • 스마트한 종단 간 암호화 설정 및 비밀 정보 관리.

  • 안전하지 않은 공유와 설정 난립을 방지합니다.

  • 몇 분 만에 통합합니다.

기능성:

  • 모든 앱, 환경, 팀의 설정과 접근 수준을 한곳에서 관리합니다.

  • 단 하나의 환경 변수만으로 어떤 개발 환경이나 서버 환경이든 구성합니다.

장점:

  • 훌륭한 랜딩 페이지.

  • 명확한 가치 제안.

  • 시각적으로 뛰어난 웹 앱.

  • 우수한 예시 데이터, 예: Algolia, AWS, Datadog, GitHub, Stripe 등.

  • 창업자와 30분간 회사, UI 등에 대해 이야기했습니다. Dane은 잘 아는 사람처럼 들리고, 장단점에 솔직하며, 실행 가능한 파트너입니다.

  • 이 회사는 기본적으로 창업자 1명의 전형적인 Y Combinator 회사입니다. 2018-01에 $120K를 모았습니다.

  • 초점은 엔터프라이즈 기능에 도달하는 것, 특히 EnvKey 클라우드 호스팅에서 온프레미스 또는 BYOC로 가는 것입니다.

  • 가능한 앞으로의 길: 단순함을 위해 EnvKey로 시작하고, 나중에(또는 병행하여) Vault를 추가합니다.

Confidant by Lyft

https://lyft.github.io/confidant/

Confidant는 Lyft의 개발자들이 만든, 비밀 정보를 안전하게 사용자 친화적으로 저장하고 접근할 수 있게 하는 오픈 소스 비밀 정보 관리 서비스입니다.

KMS 인증: Confidant는 AWS KMS와 IAM을 사용하여 IAM 역할이 Confidant가 검증할 수 있는 안전한 인증 토큰을 생성하게 함으로써 인증의 “닭이 먼저냐 달걀이 먼저냐” 문제를 해결합니다. Confidant는 또한 IAM 역할을 위한 KMS 그랜트를 관리하여, IAM 역할이 서비스 간 인증에 사용하거나 서비스 간 암호화된 메시지를 보내는 데 사용할 수 있는 토큰을 생성할 수 있게 합니다.

버전이 관리되는 비밀 정보의 저장 시 암호화: Confidant는 비밀 정보를 DynamoDB에 추가 전용 방식으로 저장하고, 대칭 인증 암호화 Fernet을 사용하여 각 비밀 정보의 각 리비전마다 고유한 KMS 데이터 키를 생성합니다.

비밀 정보를 관리하기 위한 사용자 친화적인 웹 인터페이스: Confidant는 최종 사용자가 비밀 정보, 비밀 정보와 서비스의 매핑, 변경 이력을 쉽게 관리할 수 있게 하는 AngularJS 웹 인터페이스를 제공합니다.

Devolutions Password Server

https://server.devolutions.net/

권한이 있는 계정과 세션에 대한 접근을 보호하고, 관리하고, 모니터링합니다.

권한이 있는 계정에 대한 접근을 제어하게 해 주는 포괄적이고 보안이 높은 비밀번호 금고로, 시스템 관리자의 전반적인 네트워크 가시성을 높이는 동시에 최종 사용자에게 매끄러운 경험을 제공합니다.

기능: 중앙화된 조직 비밀번호 금고, 사용자별 개인 금고, 비밀번호 관리자, 자격 증명 주입, Active Directory 통합, 역할 기반 접근 제어, 2단계 인증, 엔터프라이즈 준비, IP 제한, 관리 기능, 자동 비밀번호 생성기, 모바일 앱 접근, 비밀번호 이력, 접근 보고서, 이메일 알림.

  • 데이터 암호화를 지원합니다

  • 여러 출처의 MFA 지원과 함께 LDAP, O365, 로컬 사용자를 포함한 여러 인증 체계를 지원합니다

  • 여러 팀을 위한 세분화된 접근 제어가 있는 다중 저장소/금고

  • 현대적인 웹 UI

  • 개인 자격 증명/연결을 위한 자격 증명과 연결의 개인 금고

  • iOS/Android용 모바일 앱

  • 각 항목에 대한 감사 로그, 누가/무엇을/언제, 그리고 접근하는 이유에 대한 선택적 질문

  • 사용자 정의 가능한 템플릿(수백 가지 연결 유형을 기본 지원하지만)

  • 훨씬 더 많은 기능과, 동기화하여 옵션을 크게 확장하는 Windows/Mac용 씩 클라이언트(Remote Desktop Manager)... 원클릭 연결

  • 가격이 나쁘지 않습니다 - 최대 15명의 사용자까지 비밀번호 서버가 연 $500

Secret Server by Thycotic

https://thycotic.com/products/secret-server/

온프레미스 버전의 기능:

  • 종단 간 보안 시스템과 인프라에 대한 완전한 통제

  • 자체 온프레미스 데이터 센터 또는 자체 가상 프라이빗 클라우드 인스턴스에 소프트웨어를 배포

  • 모든 데이터와 시스템이 온프레미스에 있어야 하는 법적 및 규제상의 의무 충족

클라우드 버전의 기능:

  • 서비스형 소프트웨어 모델로 바로 가입하고 시작할 수 있음

  • 성장에 따른 탄력적인 확장성

  • 99.9% 가동 시간 SLA의 Azure가 제공하는 통제와 이중화

사용자 피드백:

  • 예전에 그 제품을 사용했습니다. 우회하기가 너무 쉬웠고 규칙은 똑똑한 사람들에게만 통합니다. 게으르거나 어리석은 사용자는 팀 영역에서 쉽게 망쳐 놓을 수 있습니다. 가격은 그들과 이야기할 때 협상 가능합니다.

  • SQL express와 Win 7 컴퓨터로 실행할 수 있습니다.

  • 저렴합니다.