///
Search
😈

Github Actions 를 사용하여 Image build, push 자동화 시 유의해야 할 보안 문제

태그
github Actions
secrets
Docker
보안
분류
DevOps

우연히 본 무시무시한 글

단위테스트에 관해 검색하다가 아래 글을 보았습니다.
대략 요약하면 보안에 관련한 이야기 였습니다. 누군가가 깃허브 액션을 사용하여 AWS 에 자동배포를 하기 위해 깃허브 액션을 사용하였는데, 방법이 다음과 같았습니다.
민감 정보를 github secrets 에 저장
github actions 로 application.yml 에 환경 변수로 지정한 값들을 github secrets 에서 꺼내와 넣은 파일을 생성
gradle build
AWS deploy
글쓴이는 처음에는 좋은 방법인것 같다는 생각에 시도 하려 했지만, 곧 의문이 들었다고 합니다. 이렇게 빌드 하면 생성된 jar 파일에 민감정보가 들어간 yml 파일이 생성된다는 것! 그리고 맘만 먹으면 이걸로 나쁜짓도 할 수 있다는 것!
해당 방식을 사용한 분의 docker hub 에서 이미지를 다운받아 까보니 BOOT-INF/classes 디렉토리 안에 민감정보가 고대로 있었다고 합니다. 🫣

환경변수는 어디에?

Github Actions 을 이용한 프로젝트 Image build, push 자동화 이 글에서 말했듯이 저의 경우 환경변수 파일(.env 파일) 을 따로 만들어 프론트에게 제공했습니다.
환경 변수를 넣지 않고 만들어 배포했기 때문에 누군가 이미지를 pull 받아 jar 파일을 까보면 application.yml 파일은 이렇게 되어 있을 겁니다.
spring: main: allow-bean-definition-overriding: true jpa: database-platform: org.hibernate.dialect.MySQLDialect show-sql: true hibernate: ddl-auto: update datasource: url: ${SPRING_DATASOURCE_URL} username: ${SPRING_DATASOURCE_USERNAME} password: ${SPRING_DATASOURCE_PASSWORD} data: redis: port: 6379 host: 127.0.0.1 springdoc: version: v1.0.0 default-consumes-media-type: application/json;charset=UTF-8 secret: key: ${SECRET_KEY} servlet: multipart: max-file-size: 10MB max-request-size: 10MB logging: level: root: info org: springframework: security: debug jdbc: core: debug web: debug
Java
복사

환경변수를 사용하는 것의 이점

docker compose 파일에서 환경변수 파일을 지정할 수 있다.
application.yml 을 깃허브에 올릴 수 있다!
대신 환경변수 파일을 올리면 안된다.

하지만

도커로 실행하지 않을경우에는 configuration 에 환경변수를 직접 넣어주어야 합니다. 그래도 팀간의 소통과 원활한 협업을 위해 사용하는게 더 나은것 같아요.