Saladuste haldamine
Asja õigus on selles, et forkid on krüpteeritud kujutise baidi haaval koopiad, mandaadid ja kõik muugi. Stripe’i live-võti, andmebaasi parool, API token repositooriumis? Fork pärib need. Sinu liivakast võib võtta raha reaalsetelt klientidelt.
Õige koht on rdc repo secret. Kaks edastusrežiimi, kirjutamiseks mõeldud kujunduse järgi ja fork algab tühiselt. Selles juhendis seadistame mõlemat liiki saladused, juurutame rakenduse, mis neid tarbib, tõestame, et väärtused jõuavad päriselt konteinerisse, ja vaatame seejärel, kuidas fork ei suuda käivituda, sest saladused keeldusid seda järgimast.
Vaata juhendvideot
Lõks: .env repositooriumis
Enamik tiime paneb .env repositooriumisse. See on ilmne samm.
Siis teevad nad forki.
Fork on vanemkujutise baidi haaval koopia. Mis iganes on .env-s, on ka forki .env-s. Forki konteinerid käivituvad. Need loevad sama Stripe’i võtit. Need kutsuvad sama Stripe’i API-t tootmise mandaatidega. Stripe’i vaatepunktist on see kõne sina.
See on halb päev. Küsi, kuidas ma tean.
1. samm: Seadista env-režiimis saladus
rdc repo secret set --name my-app --key DB_HOST --value postgres.internal --mode env Esmalt sea saladus env-režiimis. Väärtus jõuab konteinerisse keskkonna muutujana. Esmakirjutuseks pole rituaale vaja, kuid olemasoleva saladuse ülekirjutamine nõuab tõendust.
--mode env paneb väärtuse keskkondmuutujana konteineri sisse. Esmakirjutus ei vaja tseremooniat; olemasoleva saladuse ülekirjutamine nõuab praeguse väärtuse tõestamist.
2. samm: Seadista file-režiimis saladus
rdc repo secret set --name my-app --key STRIPE_KEY --value sk_test_xxx --mode file Nüüd sea faili-režiimis saladus. Faili-režiim ei avalda väärtust kunagi konteineri keskkonna kaudu, vaid kirjutab selle faili /run/secrets alla, kasutades Docker'i standardset saladuste mehhanismi. Eelista faili-režiimi kõige tundliku jaoks.
file-režiim ei pane väärtust kunagi konteineri keskkonda. See kirjutab selle hoopis faili /run/secrets/stripe_key, kasutades Dockeri standardmehhanismi. Eelista seda kõige tundliku jaoks.
3. samm: Loetlege, mis sul on
rdc repo secret list --name my-app Loetleme, mis meil on. Ainult nimed ja režiimid. Loend ei näita kunagi väärtusi, olenemata sellest, kes küsib.
Näed nimesid ja režiime. Mitte väärtusi. Loend ei näita kunagi väärtusi, olenemata sellest, kes küsib.
Ühenda compose’iga
Ava docker-compose.yml. Viita mõlemale režiimile:
services:
api:
image: myapp:latest
environment:
DATABASE_HOST: ${REDIACC_SECRET_DB_HOST}
secrets:
- stripe_key
secrets:
stripe_key:
file: /var/run/rediacc/secrets/${REDIACC_NETWORK_ID}/STRIPE_KEY
${REDIACC_SECRET_DB_HOST} on env-režiim: renet-i compose-ümbris laiendab seda sinu saladuste hoidlast juurutusajal.
secrets:-blokk on file-režiim, kasutades Dockeri standardmehhanismi. Hosti tee kasutab ${REDIACC_NETWORK_ID}, et sama compose töötaks nii vanemate kui forkide puhul. Igal forkil on oma võrgu ID.
Sa ei saa seda kunagi tagasi lugeda
Siin on osa, mis inimesi üllatab esimese korra, ka minda kaasa arvatud.
4. samm: Get tagastab räsi
rdc repo secret get --name my-app --key STRIPE_KEY Saladuse get käsk tagastab räsi, mitte väärtuse, ja avateksti taastamiseks pole ühtegi lippu. See järgib GitHub Actions'i mudelit: saladused on disainilahendusena ainult kirjutamiseks.
Saad räsi. Mitte väärtuse. Puudub lipp, mis paneks selle väärtuse tagastama. Puudub käsk, mis annaks sulle lihtteksti tagasi.
See on GitHub Actionsi mudel: ainult kirjutamiseks. Saad tõestada, et tead, mis saladus on, andes --current <väärtus> ja jälgides eeltingimuse läbimist. Sa ei saa paluda Rediaccil sulle öelda, mis see on.
5. samm: Roteeri, kui unustad
Väärtus kadunud? Ära piilu. Roteeeri.
rdc repo secret set --name my-app --key STRIPE_KEY --value sk_test_new --mode file --rotate-secret Kui kaotad saladuse väärtuse jälge, roteeri see asemel, et seda üritada taastada. Lipuke rotate-secret jätab eeltingimuse kontrollimise vahele ja audit-logi salvestab muutuse tahtliku rotatsioonina.
--rotate-secret jätab eeltingimuse vahele. Auditilogi märgib selle rotatsioonina: kõvasti, tahtlikult.
Kui mäletad vana väärtust, tõesta seda hoopis --current <old-value> abil. See on turvalisem tee. See on mind tabatud rohkem kui üks kord, kui olen vales terminalis või valel masinal.
Juuruta ja tõesta edastamine
Saladused, mis rakenduseni kunagi ei jõua, on lihtsalt kujundlik andmebaas. Juuruta ja kontrolli mõlemat edastusteed.
6. samm: Juuruta mõlema saladusega
rdc repo up --name my-app --machine <machine-name> Deploi repo. Compose fail tarbib mõlemat saladust: env väärtust interpolatsiooni kaudu, faili väärtust Docker'i saladuste monteerimise kaudu.
7. samm: Env-saladus jõuab kohale
rdc term connect --machine <machine-name> --repository my-app --command 'docker exec app printenv DB_HOST' Prindi muutuja konteineri sees: postgres.internal. Env-režiimi saladus jõudis rakenduseni deploimise ajal.
Konteiner prindib postgres.internal. Rakendus sai väärtuse päriselt, laiendatuna keskkonda juurutusajal.
8. samm: File-saladus jõuab kohale
rdc term connect --machine <machine-name> --repository my-app --command 'docker exec app cat /run/secrets/stripe_key' Loe /run/secrets/stripe_key konteineri sees: roteeritud väärtus on sinna monteeritud. Rakendus saab avateksti, ainult CLI keeldub seda kuvamast.
Ja seal on roteeritud väärtus, loetuna /run/secrets/stripe_key-st konteineri seest. Ainult kirjutamiseks kehtib inimeste ja CLI suhtes; sinu rakendus saab lihtteksti seal, kus Docker selle lubab.
Forki lõppmäng
Mäletad lõksu? Tee repositooriumist fork ja vaata.
9. samm: Tee repositooriumist fork
rdc repo fork --parent my-app --tag test --machine <machine-name> Forki repo. Fork on ema krüpteeritud pildi bait-baidilt koopia.
10. samm: Fork kuvab tühja loendi
rdc repo secret list --name my-app:test Forki saladuste loetlemine tagastab tühja komplekti: pole Stripe võtit, pole andmebaasi parooli, pole API tokenit. Fork ei saa ema kehastada, mis teebki tootmise kloonimise turvaliseks.
Tühi.
Forkil pole Stripe’i võtit. Andmebaasi parooli pole. API tokenit pole. Forki konteinerid ei saa interpoleerida ${REDIACC_SECRET_STRIPE_KEY}. Faili asukohas /var/run/rediacc/secrets/<fork-id>/STRIPE_KEY ei ole olemas.
Fork ei saa sind imiteerida.
11. samm: Fork ei suuda isegi käivituda
rdc repo up --name my-app:test --machine <machine-name> Forki käivitamine ema compose failiga ebaõnnestub: saladuse faili ei eksisteeri forki võrgu ID all, nii et Docker keeldub bind mountist. Tootmise volitused ei järgi forki kunagi.
Juurutamine ebaõnnestub tahtlikult: bind source path does not exist: /var/run/rediacc/secrets/<fork-id>/STRIPE_KEY. Saladuse fail asub vanema võrgu ID all, mitte forki oma, seega Docker keeldub ühendamast. Tõrge ongi demo: tootmise mandaadid ei järgi forki, isegi mitte õnnetusest.
Kui soovid saladusi forkis testimiseks, seadista need forkile selgelt liivakasti väärtustega, näiteks rdc repo secret set --name my-app:test --key STRIPE_KEY --value sk_sandbox_yyy --mode file. Nüüd suhtleb fork Stripe’i liivakastiga ja käivitub puhtalt. Tootmise mandaadid ei lahkunud kunagi tootmisest.
Kokkuvõte
rdc repo secretpaneb sinu mandaadid väljapoole repositooriumi kujutist.- Mõlemad režiimid jõuavad päriselt konteinerini: env-interpolatsioon ja
/run/secrets. gettagastab räsi, mitte kunagi väärtuse. Roteeeri, kui unustad. Ära piilu.- Fork kuvab tühja loendi ega suuda isegi vanema compose’i käivitada.
Saladused, mida fork ei saa järgida.
Edasi: Varukoopia ja taastamine.