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 devops verify -

GitLab Secrets Manager ADR 001: Envelope Encryption 사용

Context

GitLab Secrets Manager에 안전하게 비밀을 저장하기 위해서는 GitLab 시스템의 보안 위반 사건 발생 시 평문 비밀이 유출되는 것을 방지할 수 있는 시스템이 필요합니다.

Decision

Envelope Encryption 사용. GitLab Rails는 평문 비밀을 안전하게 저장하고, 암호화된 데이터 키와 함께 저장합니다. 비밀을 해독하려면 GitLab Rails가 GitLab Secrets Service를 통해 GCP 키 관리자에 해독 요청을 보내고, 복호화된 데이터 키를 가져와야 합니다. 데이터 키는 그런 다음 암호화된 비밀을 해독하는 데 사용됩니다.

sequenceDiagram participant A as Client participant B as GitLab Rails participant C as GitLab Secrets Service Note over B,C: 프로젝트/그룹/조직을 위한 보룰트 초기화 B->>C: 보룰트 초기화 - 키 쌍 생성 C->>B: 보룰트 공개 키 반환 B->>B: 보룰트 공개 키 저장 Note over A,C: 새로운 비밀 생성 A->>B: 새 비밀 생성 B->>B: 새 대칭 데이터 키 생성 B->>B: 데이터 키로 비밀 암호화 B->>B: 보룰트 공개 키로 데이터 키 암호화 B->>B: 엔벨롭(암호화된 비밀 + 암호화된 데이터 키) 저장 B-->>B: 평문 데이터 키 삭제 B->>A: 성공 Note over A,C: 비밀 검색 A->>B: 비밀 얻기 B->>B: 엔벨롭(암호화된 비밀 + 암호화된 데이터 키) 검색 B->>C: 데이터 키 복호화 C->>C: 보룰트 개인 키를 사용하여 데이터 키 복호화 C->>B: 평문 데이터 키 반환 B->>B: 비밀 복호화 B-->>B: 평문 데이터 키 삭제 B->>A: 비밀 반환

Consequences

이 방식으로는 엔벨롭을 포함한 GitLab 데이터베이스에 접근한 사용자도 필요한 비밀의 내용을 해독할 수 없습니다. 필요한 개인 키가 함께 저장되지 않기 때문입니다.

또한, 각 보룰트에 사용되는 공개-비공개 키쌍을 안전하게 생성하고 저장하는 방법도 고려해야 합니다.

또한, 다음 리소스가 필요합니다:

  1. 다수의 공개-비공개 키쌍. 프로젝트, 그룹 또는 조직 당 고유한 공개-비공개 키쌍이 필요합니다.
  2. 다수의 대칭 키. 비밀 당 고유한 키가 필요합니다.

Alternatives

비밀을 GitLab Secrets Service에서 암호화 및 복호화하고, 암호화된 데이터를 GitLab Rails에 저장하는 방안을 고려했지만, 이 경우 GitLab Secrets Service에서 시간이 지날 때 비밀과 암호화 키가 동시에 존재하게 됩니다.