SecretsManager: add data key store (#107396)

* SecretsManager: Add data key store

Co-authored-by: Michael Mandrus <michael.mandrus@grafana.com>
Co-authored-by: Matheus Macabu <macabu@users.noreply.github.com>
Co-authored-by: Dana Axinte <53751979+dana-axinte@users.noreply.github.com>

* SecretsManager: Add wiring of data key store

Co-authored-by: Michael Mandrus <michael.mandrus@grafana.com>
Co-authored-by: Matheus Macabu <macabu@users.noreply.github.com>
Co-authored-by: Dana Axinte <53751979+dana-axinte@users.noreply.github.com>

---------

Co-authored-by: Michael Mandrus <michael.mandrus@grafana.com>
Co-authored-by: Matheus Macabu <macabu@users.noreply.github.com>
This commit is contained in:
Dana Axinte
2025-06-30 17:17:07 +01:00
committed by GitHub
co-authored by Michael Mandrus Matheus Macabu
parent 2d634639a2
commit 0fccc01ebe
39 changed files with 1097 additions and 25 deletions
@@ -0,0 +1,35 @@
package contracts
import (
"context"
"errors"
"time"
"github.com/grafana/grafana/pkg/registry/apis/secret/encryption"
)
var (
ErrDataKeyNotFound = errors.New("data key not found")
)
// SecretDataKey does not have a mirrored K8s resource
type SecretDataKey struct {
UID string
Active bool
Namespace string
Label string
Provider encryption.ProviderID
EncryptedData []byte
Created time.Time
Updated time.Time
}
// DataKeyStorage is the interface for wiring and dependency injection.
type DataKeyStorage interface {
CreateDataKey(ctx context.Context, dataKey *SecretDataKey) error
GetDataKey(ctx context.Context, namespace, uid string) (*SecretDataKey, error)
GetCurrentDataKey(ctx context.Context, namespace, label string) (*SecretDataKey, error)
GetAllDataKeys(ctx context.Context, namespace string) ([]*SecretDataKey, error)
DisableDataKeys(ctx context.Context, namespace string) error
DeleteDataKey(ctx context.Context, namespace, uid string) error
}
@@ -1,3 +1,26 @@
package encryption
import (
"fmt"
"strings"
"time"
)
const UsageInsightsPrefix = "secrets_manager"
type ProviderID string
func (id ProviderID) Kind() (string, error) {
idStr := string(id)
parts := strings.SplitN(idStr, ".", 2)
if len(parts) != 2 {
return "", fmt.Errorf("malformatted provider identifier %s: expected format <provider>.<keyName>", idStr)
}
return parts[0], nil
}
func KeyLabel(providerID ProviderID) string {
return fmt.Sprintf("%s@%s", time.Now().Format("2006-01-02"), providerID)
}