Git Secret

Panda·2022년 3월 12일
2

Git

목록 보기
1/3

원래는 Git Action 먼저 하는게 맞는거 같긴한데
제가 방금 Git Secret 공부를 하다가 제대로 이해한것 같아서
먼저 쓰려고 합니다. (공부 순서가 반대로 된듯? ㅋㅋㅋ)

Git Secret 사용한 이유

스프링 프로젝트에서 Dev, Prod 환경분리를 하여서
proprety를 분리시켰는데

문제는 데이터베이스, Sentry DSN 같은 민감정보가 포함되어있어서
Github에 올리게 되면 노출되는 상황이 있었습니다.

그래서 Git Secret에 대해 알기전에는 gitignore 처리를 하여
application.property를 ignore 하거나
혹은 파일자체는 올리되 실제 값은 제거하여 올렸습니다. (양식만 존재한다고 보면됨.)

그래서 clone 뜰때마다 저희 property를 수동으로 직접 입력했었는데

자동화 배포할때 이런 민감정보들을 담기는해야겠고
소스코드에는 노출되기 싫고 해서 Git Secret에 대해 알게됬습니다.

Git Secret 어떻게 사용하는건데?

추가 화면

저장소 설정을 둘러보면 Secrets라고 적힌 항목에 가셔서 Secret 값을 추가화면을 보시면

  • Name : key 값
  • Value : 실제 값

을 작성하시면 됩니다.
Value에다가 실제 값을 넣어도 상관없긴 한데
저는 보안을 위해서 base64 인코딩 한 값을 넣을겁니다.

추가된 화면

이제 Git Action을 활용해 application.proertiesspring.datasource.username 으로 넣어보겠습니다.

- 잠깐 -
Secret Value에 spring.datasource.username=test 를 base64로 하는것이 더 좋아보이긴 한데
일단은 이런방법도 있다~ 라는 것을 보여주기 위해 실제 username만 base64 처리를 해서 secret으로 등록했습니다.

Git Action에 적용해보자

그 다음으로는 Git Action을 사용해서 실제로 넣어봅시다.

# secret-test.yml

# workflow의 이름.
name: Secret Test 

# workflow를 동작하게하는 trigger입니다.
# repository에 push 이벤트가 발생할 때마다 실행될 거예요.
# push 말고도 여러 가지 이벤트들이 있겠죠?
on:
  push:
    branches: [ feature/test ]

# job은 사용자가 정한 플랫폼을 통해 step이라는 일련의 과정을 실행할 수 있어요.
# 여러 개의 job을 사용할 수 있으며, 여러 개의 job을 사용할 때는 서로 정보도 교환할 수 있어요.
# 그리고 각각 독립적으로도 실행할 수도 있어요.
# 해당 예제는 간단한 workflow이므로 하나의 job만 갖도록 할게요.
jobs:
  test:
    # job의 이름
    name: TestJob
    # 저는 해당 job을 리눅스 환경에서 수행
    runs-on: ubuntu-latest

    # job 안에는 step이라는 키워드가 옵니다. step은 shell script를 실행할 수도 있고,
    # 누군가 만들어 놓은 Action을 사용할 수도 있어요.
    steps:
      # GitHub Actions는 해당 프로젝트를 리눅스 환경에 checkout하고 나서 실행을 합니다.
      # 마치 우리가 브랜치를 만들 때 checkout하는 것처럼요. 꼭 필요합니다.
      # 참고로 아래 코드는 누군가 만들어놓은 Action을 사용하는 겁니다.
      # 만들어놓은 Action을 사용할 때는 uses라는 키워드를 사용해야 돼요.
      - uses: actions/checkout@v2
    
      - name: Create Application Property
        run: |
          echo "spring.datasource.username=$TEST" > application.properties.b64
          base64 -d -i application.properties.b64 > application.properties
        env:
          TEST: ${{ secrets.TEST }}
          
      # ... 이후 기타 수행과정 및 실제 배포 진행 Action 코드

해당 Action 예제는 카카오웹툰이 설명한 예제를 참고했습니다.

자 이제 이거를 그대로 적용시키면 원하는 민감정보를 무사히 배포시킬수 있습니다!!!!!

암호화가 제대로 수행과정을 걸쳤나 확인하기 위해서 제 맥북에서 똑같이 base64 진행한것을 보겠습니다.
(여기서는 spring.datasource.usernmae=test 전체를 암호화 시켰습니다.)

originData.txt

수행 명령어

결과

실제로 정상적으로 bas64 인코딩 디코딩이 순서대로 작동한 것을 볼수 있습니다.

느낀점

Git Secret에 공부하다가 삽질공부를 좀 했는데
그 이유가 리눅스 명령어에 대해서 잘 몰라서 어떻게 수행이 되는지 전혀 몰랐었고
Git Action에 대해도 잘 몰라서 힘들었습니다.

Git Secret 공부하면서 Git Action 과 리눅스 명령어 에 대해서 공부했는데
좀더 공부해야되겠다는 생각이 많이 듭니다.
그리고 공부할수록 제가 이해력이 부족하다는 생각이 드는것 같네요 ㅋㅋㅋㅋㅋ

Git Action 같은 경우는 조만간 게시글을 올리도록 하겠습니다.
(공부는 했는데 나중에 정리해서 올릴게요)

profile
실력있는 개발자가 되보자!

0개의 댓글