refactor(sqs-operator): переделка через Operator SDK v1.37.0
- operator-sdk init + create api (QueueService kind, group sqs, v1alpha1) - Стандартная kubebuilder структура: cmd/, internal/controller/, config/ - CRD types с kubebuilder маркерами (validation, defaults, printcolumns) - Reconciler перенесён из ручного кода в internal/controller/ - controller-gen v0.17.0 (совместимость с Go 1.26.1) - Автогенерация: deepcopy, CRD YAML, RBAC ClusterRole - Удалены все ручные файлы (controllers/, main.go, deployments/)
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
// Изменён: 2026-04-07
|
||||
// elasticmq_credentials.go — генератор access/secret key пары для тенанта.
|
||||
// Credentials создаются один раз при провизионировании и хранятся в k8s Secret.
|
||||
// Тенант передаёт их в AWS SDK как aws_access_key_id / aws_secret_access_key.
|
||||
//
|
||||
// ElasticMQ принимает любые non-empty credentials — аутентификация не проверяется
|
||||
// на уровне ElasticMQ. Изоляция достигается через Ingress (каждый тенант
|
||||
// обращается только к своему path /sqs/{tenantId}).
|
||||
|
||||
package elasticmq
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// Credentials — пара access/secret key для SQS клиента тенанта.
|
||||
type Credentials struct {
|
||||
AccessKey string
|
||||
SecretKey string
|
||||
}
|
||||
|
||||
// GenerateCredentials создаёт уникальную пару ключей для тенанта.
|
||||
// accessKey: SQSAK-{tenantID}-{random6hex} — читаемый, уникальный
|
||||
// secretKey: 32 случайных байта → base64 URL-safe (без padding)
|
||||
func GenerateCredentials(tenantID string) (Credentials, error) {
|
||||
// 3 байта → 6 hex символов для суффикса accessKey
|
||||
akSuffix := make([]byte, 3)
|
||||
if _, err := rand.Read(akSuffix); err != nil {
|
||||
return Credentials{}, fmt.Errorf("generate access key suffix: %w", err)
|
||||
}
|
||||
|
||||
// 32 байта → надёжный secretKey
|
||||
skBytes := make([]byte, 32)
|
||||
if _, err := rand.Read(skBytes); err != nil {
|
||||
return Credentials{}, fmt.Errorf("generate secret key: %w", err)
|
||||
}
|
||||
|
||||
return Credentials{
|
||||
AccessKey: fmt.Sprintf("SQSAK-%s-%x", tenantID, akSuffix),
|
||||
SecretKey: base64.RawURLEncoding.EncodeToString(skBytes),
|
||||
}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user