Post

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

내가 채택한 방식이 항상 최선일까? 의심을 하고 또 의심을 해야한다. 특히 보안에 관해서는.

1. 우연히 본 무시무시한 글

단위테스트에 관해 검색하다가 아래 글을 보았습니다.

회고) 기술 블로그를 믿지마라

대략 요약하면 보안에 관련한 이야기 였습니다. 누군가가 깃허브 액션을 사용하여 AWS 에 자동배포를 하기 위해 깃허브 액션을 사용하였는데, 방법이 다음과 같았습니다.

  • 민감 정보를 github secrets 에 저장
  • github actions 로 application.yml 에 환경 변수로 지정한 값들을 github secrets 에서 꺼내와 넣은 파일을 생성
  • gradle build
  • AWS deploy

글쓴이는 처음에는 좋은 방법인것 같다는 생각에 시도 하려 했지만, 곧 의문이 들었다고 합니다. 이렇게 빌드 하면 생성된 jar 파일에 민감정보가 들어간 yml 파일이 생성된다는 것! 그리고 맘만 먹으면 이걸로 나쁜짓도 할 수 있다는 것!

해당 방식을 사용한 분의 docker hub 에서 이미지를 다운받아 까보니 BOOT-INF/classes 디렉토리 안에 민감정보가 고대로 있었다고 합니다. 🫣



2. 환경변수는 어디에?

Github Actions 을 이용한 프로젝트 Image build, push 자동화 이 글에서 말했듯이 저의 경우 환경변수 파일(.env 파일) 을 따로 만들어 프론트에게 제공했습니다.

환경 변수를 넣지 않고 만들어 배포했기 때문에 누군가 이미지를 pull 받아 jar 파일을 까보면 application.yml 파일은 이렇게 되어 있을 겁니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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



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

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

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

This post is licensed under CC BY 4.0 by the author.