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: 엔벨로프 암호화 사용

Context

GitLab Secrets Manager에 보안을 유지하기 위해 비밀을 안전하게 저장하기 위한 시스템이 필요합니다.

보안 침해가 발생할 경우, 비암호화된 비밀이 유출되는 것을 방지해야 합니다.

Decision

엔벨로프 암호화를 사용합니다. 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에 존재하는 시간이 발생하게 됩니다.