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:
co-authored by
Michael Mandrus
Matheus Macabu
parent
2d634639a2
commit
0fccc01ebe
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user