Tanúsítvány alapú elérés
Amennyiben szeretnénk limitálni, hogy ki érheti el az AWS környezetet (pl.: projekt csapattagok, ügyfél alkalmazottjai stb.), akkor ezt megtehetjük oly módon, hogy az EC2 Instance security groupjában definiáljuk azokat az IP címeket amelyekről elérhető a környezet.
Ez nehézkes, ráadásul a dinamikus IP címek miatt sok esetben csak rövidtávú megoldás.
Egy másik megoldás, hogy egy tanúsítvány birtokában tudják elérni a megfelelő személyek a környezetet.
Ezzel a megoldással a megfelelő embereknek elegendő a böngészőjükbe importálni egy tanúsítványt és ennek birtokában elérhető lesz számukra a környezet. A tanúsítvány hiányában azonban a nagyvilág számára továbbra is elérhetetlen lesz a környezetünk.
1. Portok kinyítása az Instance-on
Amennyiben nem úgy hoztuk létre a VM-et, hogy automatikusan kinyitottuk mindenki számára a 80-as és 443-as portokat akkor ahhoz, hogy a tanúsítvány alapú elérés működjön először ezt kell megtennünk.
- Jelentkezzünk be Amazonra és a baloldali menüsorban az Instances szekcióban válasszuk ki az Instances menüpontot.
-
A megjelenő listából keressük ki az instance-unkat, majd kattintsunk az Instance ID-ra:
-
A megnyíló képernyőn alul válasszuk ki a Security fület és a Security groups szekcióban kattintsunk a security group ID-jára.
-
A megnyíló képernyőn az Inbound rules doboz jobb felső sarkában kattintsunk az Edit inbound rules gombra.
-
Az így megnyíló Edit inbound rules képernyőn az Add rule gomb megnyomásával adjuk hozzá az alábbi szabályokat.
- 443-as port kinyitása mindenkinek:
- Type: HTTPS
- Protocol: TCP
- Port range: 443
- Source: Anywhere-IPv4
- Description: tetszőleges szöveg
- 80-as port kinyitása mindenkinek:
- Type: HTTP
- Protocol: TCP
- Port range: 80
- Source: Anywhere-IPv4
- Description: tetszőleges szöveg
- 443-as port kinyitása mindenkinek:
-
Végül a jobb alsó sarokban található Save rules gomb megnyomásával mentsük el a módosításainkat.
2. Tanúsítvány generálása
- SSH-n keresztül lépjünk be a VM-re.
- Az alábbi lépéseket a
rootfelhasználóval végezzük. -
Lépjünk be az
/etc/haproxykönyvtárba az alábbi paranccsal: -
Amennyiben még nem létezik, hozzuk létre a
certsmappát az/etc/haproxymappába: -
Lépjünk be az újonnan létrehozott
certskönyvtárba: -
Az alábbi parancsokkal generáljuk le a
ca.key-t:- Az
Enter PEM pass phrase:promptnál adjunk meg jelszót. - Az
Verifying - Enter PEM pass phrase:promptnál adjuk meg újra az előző jelszót.
- Az
-
Az alábbi paranccsal állítsuk elő a
ca.crtfájlt:- Az
Enter pass phrase for ca.key:promptnál adjuk meg aca.key-hez létrehozásnál megadott jelszót. - Az
Country Name (2 letter code) [AU]:promptnál adjuk meg hogyHU. - Az
State or Province Name (full name) [Some-State]:promptnál adjuk meg hogyPest. - Az
Locality Name (eg, city) []:promptnál adjuk meg hogyBudapest. - Az
Organization Name (eg, company) [Internet Widgits Pty Ltd]:promptnál adjuk meg hogyIntuitech. - Az
Organizational Unit Name (eg, section) []:promptnál adjuk meg a projekt nevét. Pl.:Semi Product. - A
Common Name (e.g. server FQDN or YOUR name) []:promptnál adjuk meg a projekt domain nevét:${projekt}.${ügyfél}.${környezet}.dev.gbsolutions.io. (Pl.:semiproduct.intuitech.develop.dev.gbsolutions.io.) - Az
Email Address []:promptnál adjuk meg a projekt mail group-ját:semiproduct@gbsolutions.io
- Az
-
Generáljuk le a
client.key-t az alábbi paranccsal:- Az
Enter PEM pass phrase:promptnál adjunk meg jelszót. - Az
Verifying - Enter PEM pass phrase:promptnál adjuk meg újra az előző jelszót.
- Az
-
Generáljuk le a
client.csr-t az alábbi paranccsal:- Az
Country Name (2 letter code) [AU]:promptnál adjuk meg hogyHU. - Az
State or Province Name (full name) [Some-State]:promptnál adjuk meg hogyPest. - Az
Locality Name (eg, city) []:promptnál adjuk meg hogyBudapest. - Az
Organization Name (eg, company) [Internet Widgits Pty Ltd]:promptnál adjuk meg hogyIntuitech. - Az
Organizational Unit Name (eg, section) []:promptnál adjuk meg a projekt nevét. Pl.:Semi Product. - A
Common Name (e.g. server FQDN or YOUR name) []:promptnál adjuk meg a projekt domain nevét:${projekt}.${ügyfél}.${környezet}.dev.gbsolutions.io. (Pl.:semiproduct.intuitech.develop.dev.gbsolutions.io.) -
Az
Email Address []:promptnál adjuk meg a projekt mail group-ját:semiproduct@gbsolutions.io -
Az
A challenge password []:promptnál csak üssünk Enter -t. - Az
An optional company name []:promptnál csak üssünk Enter -t.
- Az
-
Generáljuk le a
client.crtfájlt az alábbi paranccsal:- Az
Enter pass phrase for ca.key:promptnál írjuk be aca.keylétrehozásnál megadott jelszót.
- Az
-
Generáljuk le a kliensoldali tanúsítványt (
client_certificate.pfx) az alábbi paranccsal:openssl pkcs12 -export -legacy -out client_certificate.pfx -inkey client.key -in client.crt -certfile ca.crt- Az
Enter pass phrase for client.key:promptnál adjuk meg aclient.keylétrehozásnál megadott jelszót. - Az
Enter Export Password:promptnál adjuk meg a kliensoldali tanúsítvány jelszavát. Ez lesz az a jelszó, amit a felhasználóknak meg kell adni, amikor importálják a kliensoldali tanúsítványt a böngészőjükbe. - A
Verifying - Enter Export Password:promptnál adjuk meg újra a kliensoldali tanúsítvány jelszavát.
- Az
3. Tanúsítvány konfigurálása a HAProxyban
-
Nyissuk meg az
/etc/haproxymappában találhatóhaproxy.cfgfájlt és bővítsük ki abindsort:bind *:443 ssl crt /etc/ssl/${projekt}.${ügyfél}.${környezet}.dev.gbsolutions.io/${projekt}.${ügyfél}.${környezet}.dev.gbsolutions.io.pemaz alábbi konfigurációval:
Az így módosítótt
bindsornak így kell kinéznie:
bind *:443 ssl crt /etc/ssl/${projekt}.${ügyfél}.${környezet}.dev.gbsolutions.io/${projekt}.${ügyfél}.${környezet}.dev.gbsolutions.io.pem ca-file /etc/haproxy/certs/ca.crt verify optional crt-ignore-err all- A
${projekt}placeholder helyére a domain létrehozásakor megadott projekt azonosítót kell behelyettesíteni. - Az
${ügyfél}placeholder helyére az ügyfél nevét kell behelyettesíteni (Pl.:granit-bank,erste,vodafone). - A
${környezet}placeholder helyére a domain létrehozásakor megadott környezet azonosítót kell behelyettesíteni.
- A
-
Adjuk hozzá a megfelelő
use_backendszabályokhoz az{ ssl_c_used }feltételt.Bizonyos szervizek esetén nem szeretnénk a kliens cert alapú elérést, pl.: Keycloak és Teams Bot. Emiatt a HAProxy configban definiálnunk kell, hogy mely esetbek várjuk el kötelezően a kliensoldali tanúsítványt. Ezt a
use_backendszabályoknál tudunk megtenni a{ ssl_c_used }feltétel hozzáadásával.Példa
Például, ha a Teams Bot kivételével minden más alkalmazás/szolgáltatás esetén elvárjuk a kliensoldali tanúsítványt, akkor a
use_backendszabályoknak az alábbi módon kell kinéznie:use_backend bot if host_bot use_backend backend-service if is-backend { ssl_c_used } use_backend client-spa if host_client { ssl_c_used } use_backend admin-spa if host_admin { ssl_c_used } use_backend partner-spa if host_partner { ssl_c_used } use_backend wiki if host_wiki { ssl_c_used } use_backend maildev if host_maildev { ssl_c_used } use_backend keycloak if host_keycloak -
Végül az alábbi paranccsal frissítsük a HAProxy-t hogy érvényre lépjen az új konfiguráció:
4. Tanúsítvány letöltése
A client_certificate.pfx fájlt az alábbi lépésekkel tudjuk a saját számítógépünkre letölteni:
Az alábbi parancsokat az AWS DEV gépen, root felhasználóként kell végrehajtani.
Az alábbi parancsokat számítógépünk termináljából kell kiadni.
scp -i /Users/${user-folder}/.ssh/id_ed25519 ${user}@${ip}:/home/${user}/client_certificate.pfx /Users/${user-folder}/${target-folder}
- A
${user}placeholder helyére értelemszerűen az AWS DEV EC2 instance-on létrehozott felhasználónk nevét kell behelyettesíteni. - Az
${ip}placeholder helyére az AWS DEV EC2 instance IPv4-es címét kell behelyettesíteni. - A
${user-folder}placeholder helyére a számítógépünk felhasználójának mappáját kell megadni. - A
${target-folder}annak a mappának az útvonalát kell megadni, ahová szeretnénk letölteni aclient_certificate.pfxfájlt. (Ennek a mappának léteznie kell, hogy sikeres legyen a letöltés)
5. Tanúsítvány betöltése a böngészőbe
Az erre felhatalmazott személyeknek a tanúsítvány generálása során előállt client_certificate.pfx fájlt kell átadnunk és ezt kell
nekik is a személyes tanúsítványtárukhoz hozzáadniuk.
A tanúsítvány importálásának lépéseiről részletesen itt olvashatsz. Értelemszerűen a linkelt oldalon a projekt tanúsítványával (és nem a Semi Product tanúsítványával) kell elvégezni a lépéseket.