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 암호화 사용

Context

GitLab Secrets Manager에 비밀을 안전하게 저장하기 위해서는, GitLab 시스템에 대한 보안 침해가 발생할 때 암호화되지 않은 비밀이 유출되는 것을 방지할 수 있는 시스템이 필요합니다.

Decision

Envelope 암호화를 사용합니다. GitLab Rails는 휴식 상태에서 암호화된 비밀과 암호화된 데이터 키를 함께 저장합니다. 비밀을 복호화하기 위해서는, GitLab Rails는 GCP 키 매니저에 복호화 요청을 하고, GitLab Secrets Service를 통해 복호화된 데이터 키를 얻어와야 합니다. 그런 다음 데이터 키를 사용하여 암호화된 비밀을 복호화합니다.

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: Envelope 저장 (암호화된 비밀 + 암호화된 데이터 키) B-->>B: 평문 데이터 키 삭제 B->>A: 성공 Note over A,C: 비밀 가져오기 A->>B: 비밀 가져오기 B->>B: Envelope 가져오기 (암호화된 비밀 + 암호화된 데이터 키) B->>C: 데이터 키 복호화 C->>C: 보관고 개인 키를 사용하여 데이터 키 복호화 C->>B: 평문 데이터 키 반환 B->>B: 비밀 복호화 B-->>B: 평문 데이터 키 삭제 B->>A: 비밀 반환

Consequences

이 방법을 통해, Envelope을 포함하는 GitLab 데이터베이스에 액세스 권한을 얻은 사용자도 저장되어 있는 비밀 내용을 해독할 수 없습니다. 필요한 개인 키가 함께 저장되어 있지 않기 때문입니다.

또한, 각 보관고에 사용되는 비대칭 키페어를 안전하게 생성하고 저장하는 방법에 대해 고려해야 합니다.

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

  1. 여러 비대칭 키페어. 프로젝트, 그룹 또는 조직에 속하는 각 보관고에는 고유한 비대칭 키페어가 필요합니다.
  2. 여러 대칭 키. 각 비밀마다 고유한 키가 필요합니다.

Alternatives

GitLab Secrets Service에서 비밀의 암호화와 복호화를 수행하고, 암호화된 데이터를 GitLab Rails에 저장하는 방안을 고려했습니다. 그러나 이는 일정 시간 동안 비밀과 암호화 키가 GitLab Secrets Service에 동시에 존재하게 됨을 의미합니다.