GOMODEL_ENCRYPTION_KEY, a zostaną zaszyfrowane przed
zapisem, więc plik bazy danych, dump, backup ani replika nie będą już
przechowywać ich otwartym tekstem.
Szyfrowane pola:
Dane uwierzytelniające zadeklarowane w zmiennych środowiskowych lub w
config.yaml
nigdy nie są zapisywane w bazie danych, więc ich to nie dotyczy.
Wartość domyślna: nieustawiona. Sekrety są przechowywane otwartym tekstem, a GoModel
loguje jedno ostrzeżenie przy starcie, gdy włączona funkcja (providery, a także MCP
lub guardrails, jeśli są włączone) ładuje sekret zapisany otwartym tekstem.
Włączanie
Wygeneruj klucz i przekaż go każdej instancji, która korzysta z tej samej bazy danych:GOMODEL_ENCRYPTION_KEY=${file:/run/secrets/gomodel-encryption-key}.
Istniejące sekrety zapisane otwartym tekstem
Włączenie klucza niczego nie przepisuje. Wartości zapisane otwartym tekstem nadal działają i są szyfrowane przy kolejnym zapisie danego wpisu. Aby zaszyfrować wszystko naraz, uruchom:Rotacja klucza
Aby zmienićGOMODEL_ENCRYPTION_KEY, uruchom gateway z nowym kluczem, a stary
umieść w GOMODEL_ENCRYPTION_KEY_PREVIOUS:
GOMODEL_ENCRYPTION_KEY_PREVIOUS.
Aby wymienić sam klucz danych, na przykład po podejrzeniu wycieku kopii bazy danych
razem ze starym kluczem, uruchom:
gomodel secrets reencrypt.
Jak to działa
Każda baza danych dostaje losowy 256-bitowy klucz danych, przechowywany wyłącznie w opakowanej postaci w tabeliencryption_keys. Klucz, który go opakowuje, jest
wyprowadzany z GOMODEL_ENCRYPTION_KEY za pomocą Argon2id. Wartości sekretów są
szyfrowane AES-256-GCM i przechowywane jako enc:v1:<key-id>:<ciphertext>; wiersz
i pole są powiązane z szyfrogramem, więc wartość skopiowana do innego wiersza lub
pola nie da się odszyfrować, zamiast zostać tam użyta.
Admin API się nie zmienia: sekrety są nadal maskowane w odpowiedziach.
Szyfrowanie danych w spoczynku chroni kopie bazy danych. Nie chroni przed kimś,
kto może odczytać środowisko lub pamięć gatewaya, i nie zastępuje ograniczania
dostępu do bazy danych i jej backupów.
Własne dystrybucje
Dystrybucja zbudowana na GoModel może opakowywać klucz danych za pomocą KMS zamiastGOMODEL_ENCRYPTION_KEY, wywołując LoadResult.SetKeyWrapper z
config.KeyWrapper z run.Options.SetupConfig. Przy pierwszym starcie z nowym
wrapperem pozostaw jednorazowo ustawiony GOMODEL_ENCRYPTION_KEY, aby istniejący
klucz danych mógł zostać do niego przeniesiony. Aby przejść z jednego wrappera na
inny, przekaż stary jako poprzedni wrapper: SetKeyWrapper(next, previous).