배포 자동화 환경 변수 적용이 안되는 에러 (Git Actions + S3 + CodeDeploy)

hwarye·2023년 3월 26일
0

Trouble Shooting

목록 보기
7/11

✨ 배포 플로우

Git Actions -> S3 -> CodeDeploy -> Ec2 인스턴스 자동 실행

🥲 문제 상황

ec2 인스턴스에서 자바 명령어로 프로젝트를 수동 실행하면 아무 문제 없이 ${JWT_SECRET_KEY} 환경변수 적용이 잘 되나, 자동 배포를 통해 프로젝트가 실행되면 ${JWT_SECRET_KEY}의 환경변수가 적용이 안되는 상황!

🔺 에러 메세지

2023-03-26 08:15:27.630 ERROR 25432 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : 
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception

io.jsonwebtoken.security.WeakKeyException: 
The specified key byte array is 136 bits which is not secure enough for any JWT HMAC-SHA algorithm.  
The JWT JWA Specification (RFC 7518, Section 3.2) states that keys used with HMAC-SHA algorithms MUST have a size >= 256 bits (the key size must be greater than or equal to the hash output size).  
Consider using the io.jsonwebtoken.security.Keys#secretKeyFor(SignatureAlgorithm) method to create a key guaranteed to be secure enough for your preferred HMAC-SHA algorithm.  
See https://tools.ietf.org/html/rfc7518#section-3.2 for more information.

-> " jsonwebtoken이 136bits로 256bits보다 짧아서 Exception이 발생한다."

🙆🏻‍♀️ 내가 해본 것들

  1. 현재의 사용자
    -> ubuntu

  2. env 명령어로 환경변수 설정이 되어 있는지 확인하기
    -> 되어있음.

  3. ${JWT_SECRET_KEY} 의 길이 확인하기
    -> 256bits 이상임.

  4. 권한 문제인지 확인해보기
    -> 필요한 권한 다 주어져있음.

  5. 사용자를 root로 돌려서 환경변수 조회하기
    -> echo $JWT_SECRET_KEY
    -> 되어 있음.

  6. Git Actions 과정에서 환경변수가 적용이 안되는 것인가?
    -> Git Actions를 설정하는 .github/workflows/.yml 파일에 환경변수 적용해보기 + Github에 secretKey 등록하기
    -> 안됨.
    => Git Actions의 문제가 아님.

  7. 배포 관련 쉘 스크립트의 문제인가?
    -> 아님.


👏 해결 방법

root 사용자로 돌려서 ps -ef 명령어를 실행해 실행 중인 프로세스를 확인해보니

⭐️ codeDeploy가 root에서 실행되고 있었다. ⭐️

그런데 root에서 JWT_SECRET_KEY를 echo 명령어로 조회했을 때 떴다!
-> 뭐지?
-> 기존 사용자 = ubuntu, ubuntu에서 sudo로 환경변수를 설정했기 때문에 root에서도 환경변수가 적용은 안되어도 ubuntu에서 설정한 것이 넘어와 검색은 되었던 것 같다.

그래서 root의 .bashrc, .profile 모두 확인해보았다.
-> 환경변수 설정이 안되어있었다.

  • 터미널에 JWT_SECRET_KEY 설정 명령어 실행
    export JWT_SECRET_KET = " "
  • 서버에 변경된 ./bashrc 적용하기
    source ./bashrc
  • ./bashrc 확인해보기
    vi ./bashrc 
  • 시크릿키가 안들어가있다..!

👏 그래서 찾은 방법은!!!

🌈 전역으로 환경변수 설정하기

.bashrc 파일은 사용자마다 하나씩 있으며 사용자에 따라 설정값이 다 다르다!
때문에 ubuntu에서 설정을 해줬어도 root는 엄연히 다른 사용자이기 때문에 설정이 안되는 것이다.

🟡 핵심

때문에 ec2 인스턴스에서 수동으로 java -jar 를 수동으로 실행했을 때는 ubuntu에 환경변수 적용이 되어 있기 때문에 되었던 것이고, 자동 배포를 할 경우에는 root에서 배포가 되는데 root에 설정이 안되어있기 때문에 환경변수 적용이 안되었던 것이다.

👉🏻 root에서

  • environment 파일 (전역 적용) 확인하기
    vi /etc/environment
  • env 파일에 직접 환경변수 작성해주기
    export JWT_SECRET_KEY=""
  • 변경된 env 파일 적용하기
    source /etc/environment

저장 후 확인해보니! 됐다!!!!!!
자동 배포를 해도 백그라운드에서도 잘 돌아간다!!
험난한 여정이었다..........

profile
례코드

0개의 댓글