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. As with all projects, the items mentioned on this page are subject to change or delay. The development, release, and timing of any products, features, or functionality 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는 사용자가 Secrets Manager 기능을 사용하여 시크릿을 만들 때 상호 작용하는 주요 인터페이스로 작동할 것입니다.

이 구성 요소는 다음 역할을 수행합니다:

  1. 조직 당 고유한 암호화 공개 키 저장
  2. Envelope 암호화를 사용하여 시크릿을 암호화하고 저장

평문 시크릿은 단일 사용 데이터 키를 사용하여 암호화될 것입니다. 데이터 키는 그룹 또는 프로젝트에 속하는 공개 키를 사용하여 암호화됩니다. 암호화된 시크릿과 암호화된 데이터 키 모두 데이터베이스에 저장됩니다.

2. GitLab Secrets Manager 서비스

GitLab Secrets Manager 서비스는 GitLab 전체 구조에서 새로운 구성 요소가 될 것입니다. 이 구성 요소는 다음 목적을 제공합니다:

  1. GCP 식별 정보를 엑세스 제어를 위해 GitLab ID와 연관 짓기
  2. GCP Key Management을 위한 암호 해독 작업을 위한 프록시

서비스는 Go 기반 기술 스택인labkit을 사용합니다.

3. GCP Key Management

GCP Key Management을 활용하여 암호 작업에 대한 보안 및 신뢰성을 제공하는 GCP가 제공하는 보안을 바탕으로 구축할 것입니다. 특히 위에서 언급한 데이터 키를 복호화하기 위해 사용할 개인 키를 GCP Key Management에 저장할 것입니다.

구현 세부 정보

추가 조사가 필요

  1. GCP Key Management에 저장된 ID 관리 GitLab ID를 GCP Key Management에서 암호 작업에 대한 액세스를 허용하는 데 사용된 GCP ID와 대응/분리하는 방법을 조사해야 합니다.
  2. 클라이언트 인증 Secrets Manager에 대한 클라이언트의 인증이 필요합니다. Secrets Manager에 암호를 해독하기 위한 요청을 확인할 수 있는 안전하고 신뢰할 수 있는 방법이 필요합니다. 이러한 클라이언트에 GCP 지원 개인 키 할당
  3. 할당이 필요합니다.

SaaS 및 Self-Managed에서의 가용성

우선, 위의 제안은 GitLab SaaS 환경을 위한 것입니다. GitLab SaaS는 Google Cloud Platform에 배포됩니다. 따라서 클라우드 기반 키 관리 서비스로 GCP Key Management를 자연스러운 선택으로 보고 있습니다.

이 서비스를 온프레미스 GitLab 인스턴스로 확장하려면 GitLab 클라우드 커넥터를 고려하여 자체 관리형 GitLab 인스턴스와 GitLab Secrets Manager 간의 프록시로 사용할 것입니다.

대체 솔루션

우리가 탐구한 다른 솔루션들:

  • 시큐리티 파일(../../../ci/secure_files/index.md)로서 CI/CD 변수에서 비밀을 예기치 않게 노출되는 것을 피하기 위해, 제한된 액세스를 가진 별도의 모델로부터 시크릿을 분리합니다.

참고

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