Zaktualizuj certyfikaty Amazon RDS SSL / TLS - Elastic Beanstalk

14

AWS niedawno ogłosiło potrzebę:

Zaktualizuj swoje certyfikaty Amazon RDS SSL / TLS do 31 października 2019 r

Mam aplikację Rails obsługiwaną przez klasyczny moduł równoważenia obciążenia Elastic Beanstalk, który łączy się z bazą danych Postgres za pomocą RDS.

Wymagane kroki według Amazon to:

  1. Pobierz nowy certyfikat SSL / TLS z Używanie SSL / TLS do szyfrowania połączenia z wystąpieniem bazy danych.
  2. Zaktualizuj aplikacje bazy danych, aby używały nowego certyfikatu SSL / TLS.
  3. Zmodyfikuj instancję DB, aby zmienić CA z rds-ca-2015 na rds-ca-2019.

( https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL-certificate-rotation.html )

Skoro mam tak skonfigurowane moduły równoważenia obciążenia (łączenie się z moimi instancjami EC2 przez port HTTP 80 (nie SSL), czy to oznacza, że ​​nie muszę wykonywać kroków 1 i 2? I tylko krok 3?

LoadBalancerListeners

Czy też muszę pobierać zaktualizowane certyfikaty i instalować / dodawać je ręcznie do modułu równoważenia obciążenia lub instancji EC? Nie jestem pewien, jak to zrobić.

stwr667
źródło
1
co musiałeś w końcu zrobić? nie jestem pewien, jakie było ostateczne rozwiązanie.
weber
3
@weber, najważniejszą rzeczą, którą musiałem ustalić, było to, czy instancje EC2 za modułem równoważenia obciążenia Elastic Beanstalk z powiązanym połączeniem RDS automatycznie zaufałyby zaktualizowanemu certyfikatowi 2019, czy nie. Nie byłem pewien, czy będę musiał ręcznie im zaufać poprzez SSH, czy np .ebextensions. Za pomocą . W końcu po przetestowaniu go, mogę potwierdzić, że nie automatycznie ufa nowe połączenie RDS. Jeśli instancja RDS DB została odłączona od środowiska EB, jak opisano tutaj https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.RDS.html, nie jestem pewien wyniku.
stwr667,

Odpowiedzi:

8

Kroki 1 i 2 są wymagane tylko, jeśli połączenie aplikacji z MySQL jest szyfrowane TLS .

Nie zmieniaj ustawienia LB TLS , ponieważ może to spowodować uszkodzenie aplikacji, LB TLS to coś innego, a RDS TLS to coś innego.

Jeśli twoja aplikacja tworzy zwykłe połączenie, możesz wykonać bezpośrednio krok 3.

Zmodyfikuj instancję DB, aby zmienić CA z rds-ca-2015 na rds-ca-2019.

Zazwyczaj ćwiczysz dla DB, DB powinien znajdować się w prywatnej podsieci i nie powinien być dostępny publicznie, TLS jest pomocny, gdy twoje połączenie z bazą danych i zapleczem jest w Internecie, a nie w VPC.

Dzięki niezaszyfrowanemu połączeniu między klientem MySQL a serwerem osoba z dostępem do sieci może obserwować cały ruch i sprawdzać dane wysyłane lub odbierane między klientem a serwerem.

Adii
źródło
Dzięki @Adiii. Jesteś pewny? Tutaj docs.aws.amazon.com/AmazonRDS/latest/UserGuide/… opisuje, jak sprawdzić, czy twoje połączenie DB używa SSL. Gdy połączę się eb sshz moim serwerem, stamtąd połączę się z bazą danych za pośrednictwem psql, a następnie uruchomię select ssl_is_used(), to zwraca wartość true! Moja instancja RDS jest powiązana z moim środowiskiem EB, jak opisano tutaj docs.aws.amazon.com/elasticbeanstalk/latest/dg/… . Ponieważ EB jest automatycznie połączony z RDS, obawiam się na podstawie powyższego, że zmiana urzędu certyfikacji spowoduje przerwanie wygenerowanego połączenia.
stwr667,
Mówię ogólnie, to zależy od aplikacji, jak tworzy połączenie, ale kod sugerowany przez połączenie to połączenie palinowe. var mysql = require('mysql'); var connection = mysql.createConnection({ host : process.env.RDS_HOSTNAME, user : process.env.RDS_USERNAME, password : process.env.RDS_PASSWORD, port : process.env.RDS_PORT }); connection.connect(function(err) { if (err) { console.error('Database connection failed: ' + err.stack); return; } console.log('Connected to database.'); }); connection.end();
Adiii
2
Dzięki @Adii. Fyi Używam Postgres, a nie MySQL. Dobra wiadomość jest taka, że ​​zrobiłem migawkę i właśnie wypróbowałem krok 3. Wszystko nadal działa zgodnie z oczekiwaniami. Nawet przy ponownym łączeniu się z bazą danych z serwera aplikacji nadal raportuje, że używa SSL, więc zakładam, że ElasticBeanstalk obsługuje zaufanie do certyfikatu automatycznie, gdy instancja RDS jest powiązana ze środowiskiem EB. Dzięki jeszcze raz.
stwr667,
Jak więc utworzyć połączenie? Czy określono ciąg połączenia SSL?
Adiii
Mam app Rails, więc info Połączenie zostało zdefiniowane w database.ymlktórym wzywa się do zmiennych takich jak ENV RDS_DB_NAME, RDS_USERNAMEitd. To nie określa wymaganie SSL tam (choć może). Chociaż myślę, że domyślnym ustawieniem na EB musi być coś podobnego allow, preferalbo require, konfigurowane za pomocą zmiennej środowiskowej czy coś. cf: postgresql.org/docs/current/… . Zdecydowanie nie jest to jedna z pozostałych 3 opcji, ponieważ disablespowodowałaby wyłączenie protokołu SSL, a inne verifyopcje zawiodły podczas testowania ich na interfejsie CLI.
stwr667,
2

Odpowiedź na pytanie jest znacznie łatwiejsza:

Nie musisz instalować niczego w środowisku Beanstalk, jeśli uaktualnisz certyfikat CA używany przez dołączony do niego RDS. https://stackoverflow.com/a/59742149/7051819

Wystarczy postępować zgodnie z punktem 3 i zignorować 1 i 2.

(Tak, sam napisałem tę odpowiedź).

Rbbn
źródło
3
myślę, że odpowiedź na skok jest obniżona, ponieważ większość środowisk produkcyjnych NIE używa RDS w obrębie elastycznej łodygi fasoli. używanie RDS z poziomu elastycznej fasoli jest potencjalnie niebezpieczne, ponieważ jeśli zakończysz instancję elastycznej fasoli, baza danych również zostanie zakończona, co nie jest dobre do celów przechowywania danych. Ogólnie ludzie pytają o elastyczne środowisko łodyg fasoli, w którym instancja RDS jest osobna.
jakeatwork