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

GitLab Secrets Manager ADR 001: Envelope Encryption 사용

Context

GitLab Secrets Manager에 비밀을 안전하게 저장하려면, GitLab 시스템에 대한 보안 위반 사건 발생 시 암호화되지 않은 비밀이 노출되는 것을 방지할 수 있는 시스템이 필요합니다.

Decision

Envelope encryption을 사용합니다. 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: 드문 (암호화된 비밀 + 암호화된 데이터 키) 저장 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에 비밀과 암호화 키가 동시에 존재하는 문제가 발생할 수 있다는 것을 의미합니다.