프로젝트/장기 프로젝트

MOTI #5. 인증서 만료로 인한 API 서버 접속 장애 해결

Chipmunks 2024. 7. 23. 07:11
728x90

한 달 전부터 MOTI 데이터가 안 쌓였다.

꽤 최근에 신경을 썼었는데...

잠깐 신경을 끈 새에 6/23 부터 한 달 동안 접속이 안됐다.

 

우선 로컬에서 RDS 접속을 위해 RDS Public 엔드포인트로 설정되어 있었다.

이 설정으로 한 달마다 5$씩 과금이 되었다. (24년 2월 초부터 퍼블릭 엔드포인트 정책이 무료 -> 유료로 바뀜)

이를 SSH Tunnel 로 바꿔 비용을 절감시켰다.

다른 프로젝트의 AWS 계정에선 이미 다 적용을 했는데, MOTI 계정은 누락되었다.

 

RDS Public 엔드포인트를 재설정하는 방법은 간단하다.

AWS RDS 콘솔에서 인스턴스를 수정한다.

추가 구성 > 퍼블릭 액세스 불가능 체크

즉시 적용으로 수정한다.

 

여담. 추가 구성을 눌러야 퍼블릭 액세스 설정을 확인할 수 있더라.

과금과 관련한 설정인데 너무 양아치 아닌가 싶었다. 😅

 

 

MOTI API 주소를 확인했다.

습관적으로 api.xxxx.com 으로 확인했다.

api.xxxx.com 서브호스팅 접속은 잘 되었다.

 

다른 문젠가 했다.

그러나 실제 앱에서 셋팅한 도메인이 달랐다.

api.xxxx.com 이 아닌, xxxx.com 이었다.

 

실제로 그 주소를 접속했더니 접속이 되지 않았다.

서버 옮긴 이후로 2개월간 접속이 되다가

인증서가 만료된 것으로 보인다.

 

api.xxxx.com 도메인의 인증서는 업데이트 되었다가

xxxx.com 도메인의 인증서 설정에 뭔가 오류가 있었나보다.

xxxx.com 도메인의 인증서를 재발급 받았다.

 

$ sudo certbot --nginx -d xxxx.com

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx

Cert not yet due for renewal

You have an existing certificate that has exactly the same domains or certificate name you requested and isn't close to expiry.
(ref: /etc/letsencrypt/renewal/xxxx.com-0001.conf)

What would you like to do?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Attempt to reinstall this existing certificate
2: Renew & replace the cert (limit ~5 per 7 days)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Renewing an existing certificate
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/default

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.

Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Traffic on port 80 already redirecting to ssl in /etc/nginx/sites-enabled/default

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Your existing certificate has been successfully renewed, and the new certificate
has been installed.

The new certificate covers the following domains: https://xxxx.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=xxxx.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/xxxx.com-0001/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/xxxx.com-0001/privkey.pem
   Your cert will expire on 2024-10-20. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

 

앱의 API 서버 접속이 복구되었다.

 

재발 방지로는 xxxx.com 을 매일 호출해

접속에 실패하면 알림을 주는 걸 만들어야겠다.