-
Notifications
You must be signed in to change notification settings - Fork 4
PRD-24b: Cloud KMS Providers — AWS, GCP, Azure, Vault Transit #23
Copy link
Copy link
Open
Labels
P1High priorityHigh priorityphase-2Go-live minimumGo-live minimumprdProduct requirement documentProduct requirement documentsecuritySecurity hardeningSecurity hardening
Description
Implement cloud KMS providers for envelope encryption. Core IKmsProvider/IShareStore interfaces and LocalFileKmsProvider already shipped (#17).
Splits off the remaining cloud provider work from the original PRD-24.
Acceptance Criteria
-
AwsKmsProvider— AWS KMS Encrypt/Decrypt with CMK ARN -
GcpKmsProvider— GCP Cloud KMS Encrypt/Decrypt with key resource name -
AzureKmsProvider— Azure Key Vault wrapKey/unwrapKey -
VaultTransitProvider— HashiCorp Vault Transit engine encrypt/decrypt -
KmsModulewith provider factory —KMS_PROVIDERenv var selects backend -
docker-compose.ymlmakes Vault optional via Docker Compose profiles - Migration tool converts existing Vault KV shares to envelope format
- Health check reports KMS provider status (provider-agnostic)
- Provider tests for AWS, GCP, Azure, Vault Transit (mocked SDKs)
- Full integration test with each provider
-
pnpm buildsucceeds across all packages
Tasks
- Implement
AwsKmsProvider(aws-sdk v3@aws-sdk/client-kms) - Implement
GcpKmsProvider(@google-cloud/kms) - Implement
AzureKmsProvider(@azure/keyvault-keys) - Implement
VaultTransitProvider(HTTP API to Vault Transit) - Create
KmsModulewith provider factory + env var selection - Update
docker-compose.yml— Vault as optional profile - Create migration tool (Vault KV → envelope format)
- Write provider unit tests (mocked SDK clients)
- Write integration tests per provider
- Update health controller for provider-agnostic KMS status
Context
Depends on core interfaces from #17 (closed, shipped):
IKmsProvider—encrypt(plaintext) → EncryptedEnvelope,decrypt(envelope) → plaintextIShareStore—storeShare(signerId, share),loadShare(signerId) → shareEncryptedEnvelope—{ ciphertext, iv, tag, kmsKeyId, kmsProvider }LocalFileKmsProvider— reference implementation for dev/testing
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
P1High priorityHigh priorityphase-2Go-live minimumGo-live minimumprdProduct requirement documentProduct requirement documentsecuritySecurity hardeningSecurity hardening