GitLab Secrets Manager ADR 002: GCP Key Management Service の使用
コンテキスト
ADR 001: エンベロープ暗号化の使用に続き、各 vault に属する非対称鍵を安全に保存するソリューションを見つける必要があります。
決定事項
GitLab Secrets Manager の vault で使用される非対称鍵を管理するために、Google Cloud Platform(GCP)Key Management Service(KMS)に依存することにしました。
GCP を使用することにはいくつかの利点があります。
- 暗号化キーの独自の安全なストレージを実装する必要がなくなります。
- Hardware Security Module(HSM)のサポート。
sequenceDiagram
participant A as Client
participant B as GitLab Rails
participant C as GitLab Secrets Service
participant D as GCP Key Management Service
Note over B,D: Initialize vault for project/group/organization
B->>C: Initialize vault - create key pair
Note over D: Incurs cost per key
C->>D: Create new asymmetric key
D->>C: Returns public key
C->>B: Returns vault public key
B->>B: Stores vault public key
Note over A,C: Creating a new secret
A->>B: Create new secret
B->>B: Generate new symmetric data key
B->>B: Encrypts secret with data key
B->>B: Encrypts data key with vault public key
B->>B: Stores envelope (encrypted secret + encrypted data key)
B-->>B: Discards plain-text data key
B->>A: Success
Note over A,D: Retrieving a secret
A->>B: Get secret
B->>B: Retrieves envelope (encrypted secret + encrypted data key)
B->>C: Decrypt data key
Note over D: Incurs cost per decryption request
C->>D: Decrypt data key
D->>C: Returns plain-text data key
C->>B: Returns plain-text data key
B->>B: Decrypts secret
B-->>B: Discards plain-text data key
B->>A: Returns secretセキュリティ上の目的から、GCP KMS のキーを保護するために Hardware Security Module(HSM)を使用することにしました。
結果
認証
キーが GCP KMS に保存されることにより、GCP KMS で設定された ID と GitLab で定義された ID の間のデマルチプレックスを行い、復号化リクエストを適切に認証する必要があります。
コスト
GCP KMS を使用する場合、以下のコストを考慮する必要があります。
- 必要なキーの数
- キー操作の数
- HSM 保護レベル
必要なキーの数は、この機能を使用するプロジェクト、グループ、組織の数によって異なります。各プロジェクト、グループ、または組織には1つの非対称キーが必要です。
各暗号化キー操作にもコストが発生し、保護レベルによって異なります。上記の提案された設計に基づくと、各シークレット復号化リクエストでコストが発生します。
異なるユーザーに対して異なる保護タイプをサポートするマルチティアの保護レベルを実装することもあります。
GCP KMS の料金表はこちらで確認できます。
セルフマネージドのお客様への機能の可用性
GCP KMS をバックエンドとして使用することは、このソリューションがセルフマネージド環境にデプロイできないことを意味します。この機能をセルフマネージドのお客様が利用できるようにするには、この機能を GitLab Cloud Connector 機能にする必要があります。
代替案
GitLab Secrets Service 内で秘密鍵を生成・保存することを検討しましたが、これは FIPS コンプライアンスの要件を満たさないでしょう。
一方、GCP HSM Keys は FIPS 140-2 Level 3 に準拠しています。
