cesko-digital / nasi-politici

Největší otevřená databáze českých politiků a političek. Zjistěte si, kdo vám vládne.
https://www.nasipolitici.cz
MIT License
20 stars 7 forks source link

Predavani Secrets do bezicich kontejneru bez parsovani v Terraformu #102

Open martinwenisch opened 4 years ago

martinwenisch commented 4 years ago

Problem: V soucasne dobe se vsechny Secrets predavaji do bezicich aplikaci pres environmental variables (token k emailu, Hlidaci statu...). Na AWS jsou ulozene v Secrets Manager a Terraform tento Secrets Manager parsuje. Toto parsovani v Terraformu by bylo potreba odstranit a predat je do env variables kontejneru metodou valueFrom.

To v soucasne dobe neni mozne, protoze valueFrom nedokaze predat hodnotu secret, ale predava secrets jako JSON, coz backend aplikace nedokaze parsovat.

Priklad: key:value password:politik123

backend ocekava v env variable hodnotu politik123, ale valueFrom preda JSON:

{
  "password": "politik123"
}

Zadani: Je potreba vyzkoumat moznosti predavani Secrets ze Secrets Manager AWS bez jejich parsovani v Terraformu (samotne secrets stringy nebudou zapsane ve state Terraformu).

Pripadne, pokud by se to ukazalo jako jednodussi, upravit backend (C# a Python aplikaci), aby parsovala secrets z formatu, ktery ji preda valueFrom.

V kazdem pripade je cil odstranit parsovani Secrets primo v ramci Terraformu.

Odkazy:

Soucasny kod parsujici Secrets v Terraformu: https://github.com/cesko-digital/nasi-politici/blob/8923469c3acfc6243fd094760fea94e4270becdd/infrastructure/aws/aws.tf#L65

Dokumentace predavani secrets do ECS: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data-secrets.html

ghost commented 4 years ago

ahoj, zahlid jsem zminku na Cesko Digital slacku a zadny PR ani comment nevidim tak snad nedelam neco duplicitne. Nejste prvni kdo tenhle problem resi a vypada to, ze s pouzitim Secret Manageru to nejde jinak nez s tim naucit pracovat tu aplikaci

https://stackoverflow.com/questions/57191835/aws-ecs-how-to-retrieve-specific-key-from-secret-manager https://github.com/aws/containers-roadmap/issues/385

ty moznosti teda vidim tri:

  1. prestat pouzivat Secrets Manager a prehazet secrety do Systems Manager Parameter Store, ktery dle vseho predava jenom value daneho parametru (vyzkousene to nemam), je to jenom par secretu tak to neni moc manualni prace, akorat se musi zmenit IAM role pro ECS task a ten template
  2. prepise se backend kod at pracuje s jsonem
  3. trik co popisuje typek v github commentu https://github.com/aws/containers-roadmap/issues/385#issuecomment-628853024 - ten json parsuje v nejakem entrypoint.sh skriptu za pomoci jq.. tim padem by se musel prepsat Dockerfile, nainstalovat tam jq a vytvorit shell skript ve kterem se vyparsuji a vyexportuji env variables a na konci pusti ten dotnet a ten script zkopirovat do image a nakonci ho pouzit v entrypointu misto toho dotnetu..

nejcistejsi mi prijde to prvni reseni

martinwenisch commented 4 years ago

Ahoj, diky Ondreji, variantu (1) bych osobne preferoval. At uz migraci do Parameter Store, nebo rozsekanim v samotnem Secrets Manageru (kolega me na Slacku upozornil, ze i kdyz se tak AWS v UI Consoli tvari, tak Secrets nemusi byt validni JSON, ale jakykoli String).

Ale rozsekani Secrets Manager by vyslo relativne draho oproti Parameter Store.

Zkusim se poptat na stav, jestli se na to nekdo vrhnul, ale zda se, ze je to porad volne a ceka na implementaci.

ghost commented 4 years ago

mas pravdu ted se na to divam, ze do toho plaintext fieldu muzes dat hodnotu a nemit to jako k/v par - tim padem pak ten valueFrom vrati jenom obsah.. pokud vam neva dva/tri dolary mesicne navic tak je to asi nejjednodussi varianta