Skip to content

fix(vault): a hoszt Vault-hitelesítése jusson el a konténerbe - #2

Merged
sinkog merged 1 commit into
mainfrom
fix/vault-env-passthrough
Aug 13, 2026
Merged

fix(vault): a hoszt Vault-hitelesítése jusson el a konténerbe#2
sinkog merged 1 commit into
mainfrom
fix/vault-env-passthrough

Conversation

@sinkog

@sinkog sinkog commented Aug 13, 2026

Copy link
Copy Markdown
Member

A make release ezt adta egy olyan shellből, ahol mindkét változó be volt állítva:

[FATAL] VAULT_ADDR and VAULT_TOKEN must be set for release.

Három külön ok, mindegyik félrevezető hibaüzenettel.

1. A konténer sosem látta őket

A docker-compose.yml létrehozáskor helyettesíti be a ${VAULT_ADDR}-t és a ${VAULT_TOKEN}-t. Egy builder, amit a token exportálása előtt indítottak, üres sztringeket kap és azokat hordozza az élettartamára.

Konkrétan ez történt: a konténer 2026-08-10 21:21-kor indult — általam, egy olyan munkamenetből, ahol a változók nem voltak beállítva.

2. A 127.0.0.1 mást jelent a konténerben

A hoszton helyes, a konténerben a saját loopbackjára mutat → Connection refused, olyan tracebackkel, ami egy szót sem szól névterekről.

konténerből 127.0.0.1:18200          → elérhetetlen
konténerből host.docker.internal     → HTTP 200

A compose az extra_hosts: host.docker.internal:host-gateway-t már ma is biztosítja.

3. A TLS rossz okból kapcsolt ki

A compiler.py a VAULT_CACERT-et olvassa, a hoszt konvenciója viszont VAULT_CA_CERT_FILE, és a fájl a $XDG_RUNTIME_DIR alatt van, ami nincs mountolva. Így a hitelesítés csendben „disabled"-re esett — feleslegesen:

subject=CN = localhost
SAN: DNS:localhost, IP:127.0.0.1, DNS:host.docker.internal

A tanúsítvány SAN-ja tartalmazza a host.docker.internal-t, tehát az ellenőrzés sikerül. Lemérve: TLS-ellenőrzéssel HTTP 200 a konténerből.

A megoldás

tools/vault-exec.sh mindhármat kezeli: exec-időben adja át a tokent (nem függ attól, ki és mikor indította a konténert), a címben átírja a hoszt-részt, a CA-t bemásolja a mountolt fába és rámutat.

Ha nincs CA, a script megáll — nem esik vissza ellenőrzés nélküli kapcsolatra. Az aláíró token többet ér, mint egy megszakadt release kellemetlensége.

Ez a release előfeltétele

A primitives/releases/v0.2.0 ágon a make release enélkül nem fut le. Javaslat: ez a PR menjen előbb, utána a release-ág rebase-elve main-re, és onnan a make release.

… a három módon, ahogy eddig nem

A `make release` "[FATAL] VAULT_ADDR and VAULT_TOKEN must be set" hibát adott
egy olyan shellből, ahol MINDKETTŐ be volt állítva. Három külön ok volt, és
mindegyik félrevezető hibaüzenetet szült.

1. A konténer sosem látta a hitelesítő adatokat

A docker-compose.yml LÉTREHOZÁSKOR helyettesíti be a ${VAULT_ADDR}-t és a
${VAULT_TOKEN}-t. Egy builder, amit a token exportálása ELŐTT indítottak,
üres sztringeket kap, és azokat hordozza az élettartamára. Konkrétan ez
történt: a konténer 2026-08-10 21:21-kor indult egy olyan munkamenetből, ahol
a változók nem voltak beállítva.

2. A 127.0.0.1 mást jelent a konténerben

VAULT_ADDR=https://127.0.0.1:18200 a hoszton helyes, a konténerben a SAJÁT
loopbackjára mutat → "Connection refused", olyan tracebackkel, ami egy szót sem
szól névterekről. Mérve: a konténerből a 127.0.0.1:18200 elérhetetlen, a
host.docker.internal:18200 HTTP 200 — a compose az extra_hosts-ot már ma is
biztosítja.

3. A TLS rossz okból kapcsolt ki

A compiler.py a VAULT_CACERT-et olvassa, a hoszt konvenciója viszont
VAULT_CA_CERT_FILE, és a fájl a $XDG_RUNTIME_DIR alatt van, ami nincs
mountolva. Így a hitelesítés csendben "disabled"-re esett vissza —
FELESLEGESEN: a szerver tanúsítványának SAN-ja tartalmazza a
host.docker.internal-t, tehát az ellenőrzés sikerülne.

    subject=CN = localhost
    SAN: DNS:localhost, IP:127.0.0.1, DNS:host.docker.internal

A tools/vault-exec.sh mindhármat kezeli: exec-időben adja át a tokent, a címben
a hoszt-részt átírja, a CA-t bemásolja a mountolt fába és rámutat. Lemérve:
TLS-ELLENŐRZÉSSEL HTTP 200 a konténerből.

Ha nincs CA, a script MEGÁLL, nem esik vissza ellenőrzés nélküli kapcsolatra:
az aláíró token többet ér, mint egy megszakadt release kellemetlensége.

---
[signing-metadata]
key = cic-my-sign-key
signature = vault:v1:MEUCIQCGMIJx2Hwh9nEYAZw72loPrNpAZFm48CcHYIfdBmz7lAIgNNW5dc5EnZQ6G8/aoa22j5YdDFjI0MQKggTRVwMjixU=
hash-algorithm = sha256
digest = Fh0Ev0LWTV/GKIa5FR875KFKz/27e4MFzWT2VAI1cD0=

[certificate]
-----BEGIN CERTIFICATE-----
MIICBjCCAaygAwIBAgIUSnRMR6RPnEbg296XWPOqq/u5PCwwCgYIKoZIzj0EAwIw
QzELMAkGA1UEBhMCSFUxGTAXBgNVBAoMEENlbnRyYWxJbmZyYUNvcmUxGTAXBgNV
BAMMEENJQyBEZXZlbG9wZXIgQ0EwHhcNMjYwMzIwMTMyMjU5WhcNMjYxMjMxMTMy
MjU5WjBFMQswCQYDVQQGEwJIVTEZMBcGA1UECgwQQ2VudHJhbEluZnJhQ29yZTEb
MBkGA1UEAwwSR2Fib3IgWm9sdGFuIFNpbmtvMFkwEwYHKoZIzj0CAQYIKoZIzj0D
AQcDQgAEIG2CVmTfmLB9pLLclj7YmP2eedAjklpy4LGrU2ijoiy6Xqpuybv7OgJe
i+ez31s65NEV8+X/ByeX1cstR988z6N8MHowCQYDVR0TBAIwADAdBgNVHQ4EFgQU
yZN6AIX/TNnIJ9GwAa/NRN3ujHAwHwYDVR0jBBgwFoAUXn6CHYzPUqU4JVP8g+OS
WeDYjhcwDgYDVR0PAQH/BAQDAgeAMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEF
BQcDBDAKBggqhkjOPQQDAgNIADBFAiEA+bFzXRoJ4PCQbhAAtpkcMjt0vNj5rEW0
lOMBGDNyaWkCIB1vmM7PcZzv/c9bIrxF5kqv6QXomouhByUfeNUTbpKW
-----END CERTIFICATE-----
@sinkog
sinkog merged commit 411ce80 into main Aug 13, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant