This page contains information related to upcoming products, features, and functionality. It is important to note that the information presented is for informational purposes only. Please do not rely on this information for purchasing or planning purposes. The development, release, and timing of any products, features, or functionality may be subject to change or delay and remain at the sole discretion of GitLab Inc.
Status Authors Coach DRIs Owning Stage Created
proposed @alberts-gitlab @grzesiek @jocelynjane @shampton devops verify 2023-08-07

GitLab Secrets Manager

요약

GitLab 사용자는 민감한 자격 증명을 안전하고 쉽게 저장할 수 있는 솔루션이 필요합니다. GitLab Secrets Manager는 제3자 도구에 액세스하지 않고도 이러한 요구를 충족시킬 수 있는 시스템입니다.

동기

현재 많은 사람들이 GitLab에 민감한 자격 증명을 저장하기 위해 Masked Variable이나 File Variable을 사용하는 것이 사실상의 접근 방법입니다. 그러나 변수(마스킹된 변수 또는 파일 변수)에 저장된 데이터는 실수로 노출될 수 있습니다. 더 안전한 솔루션은 HashiCorp Vault나 Azure Key Vault와 같은 외부 시크릿 매니저와의 네이티브 통합을 사용하는 것입니다.

외부 시크릿 매니저와의 통합은 GitLab이 제3자 제품과의 통합을 유지하고 구성 문제를 해결하는 것을 필요로 합니다. 또한, 이러한 외부 시크릿 매니저를 사용하는 고객의 엔지니어링 팀은 이러한 시스템을 스스로 유지보수해야 하므로 운영 부담이 증가합니다.

GitLab 네이티브 시크릿 매니저를 보유함으로써 고객에게 제3자 도구의 부담 없이 비밀을 저장하고 액세스하며 다른 GitLab 기능과의 밀접한 통합을 활용할 수 있는 안전한 방법을 제공하게 됩니다.

목표

GitLab 사용자에게 다음과 같은 방법을 제공합니다.

  • GitLab에서 비밀을 안전하게 저장하기
  • 저장된 비밀을 GitLab 컴포넌트(예: CI Runner)에서 사용하기
  • 외부 환경(예: 프로덕션 인프라)에서 저장된 비밀을 사용하기
  • 루트 네임스페이스, 서브그룹 및 프로젝트 전체에서 비밀에 대한 액세스 관리하기
  • 필요에 따라 비밀 보관고 봉인/해제하기

비기능적 요구 사항

  • 보안
  • 규정 준수
  • 감사 추적

비목표

이 설계안은 다음을 다루지 않습니다.

  • GitLab 내에서 외부 리소스가 GitLab에 액세스할 수 있도록 하는 액세스 토큰과 같은 비밀.

결정 사항

제안

시크릿 매니저 기능은 다음과 같은 세 가지 핵심 컴포넌트로 구성됩니다.

  1. GitLab Rails
  2. GitLab Secrets Manager 서비스
  3. GCP Key Management

고수준에서, 시크릿은 격리를 달성하기 위해 고유한 암호화 키를 사용하여 저장될 것입니다. 각 서비스는 각각 격리되어 있어야 하며, 이로써 컴포넌트 중 하나가 침해당하더라도 비밀 노출 가능성이 최소화됩니다.

시크릿 매니저 개요

1. GitLab Rails

GitLab Rails는 사용자가 시크릿 매니저 기능을 사용하여 비밀을 만들 때 상호 작용하는 주요 인터페이스가 될 것입니다.

이 컴포넌트는 다음과 같은 역할을 수행합니다.

  1. 조직 당 고유한 암호화 공개 키를 저장합니다.
  2. 봉폐 암호화를 사용하여 비밀을 암호화하고 저장합니다.

평문 비밀은 단일 사용 데이터 키를 사용하여 암호화될 것입니다. 데이터 키는 그룹 또는 프로젝트 소유의 공개 키를 사용하여 암호화됩니다. 암호화된 비밀과 암호화된 데이터 키 둘 다 데이터베이스에 저장됩니다.

2. GitLab Secrets Manager 서비스

GitLab Secrets Manager 서비스는 GitLab 전체 아키텍처에서 새로운 컴포넌트가 될 것입니다. 이 컴포넌트는 다음과 같은 목적을 제공합니다.

  1. 액세스 제어를 위해 GitLab 식별을 GCP 식별로 연결합니다.
  2. GCP Key Management을 위한 복호화 작업을 하는 프록시로 사용됩니다.

이 서비스는 Go 기반 기술 스택labkit을 사용할 것입니다.

3. GCP Key Management

GCP Key Management을 활용하여 암호 작업에 대한 보안 및 신뢰를 제공하는 것을 선택했습니다. 특히, 위에서 언급한 데이터 키의 복호화에 사용될 개인 키를 저장하기 위해 GCP Key Management을 사용할 것입니다.

구현 세부 사항

추가 조사가 필요함

  1. GCP Key Management에 저장된 식별 정보 관리. GitLab 식별을 GCP Key Management에서 암호 작업에 액세스할 수 있도록 하는 방법을 조사해야 합니다.
  2. 클라이언트의 인증. 시크릿 매니저에 대한 클라이언트의 요청을 인증하기 위한 안전하고 신뢰할 수 있는 방법이 필요합니다. GitLab Runner나 외부 클라이언트를 위한 각각 안전하고 신뢰할 수 있는 방법이 필요합니다.
  3. 각 식별 정보에 GCP 뒷받침 된 개인 키 할당.

SaaS 및 Self-Managed에서의 가용성

먼저, 위의 제안은 GitLab SaaS 환경을 위한 것입니다. GitLab SaaS는 Google Cloud Platform에 배포됩니다. 따라서, 구름 기반 키 관리 서비스인 GCP Key Management가 자연스러운 선택이 될 것입니다.

이 서비스를 Self-Managed형 GitLab 인스턴스로 확장하기 위해 GitLab Cloud Connector를 사용하여 Self-Managed형 GitLab 인스턴스와 GitLab Secrets Manager 사이의 프록시로 사용할 것을 고려할 것입니다.

대안적인 솔루션

탐구한 다른 솔루션은 다음과 같습니다.

  • CI/CD 변수에서 시크릿을 별도의 모델로 분리하고 제한적인 액세스로 숨겨져 있어야 하는 시크릿 노출을 피합니다.
  • Secure Files

참고 자료

다음 링크는 시크릿 관리 컨셉과 관련이 있을 수 있는 추가 정보를 제공합니다.