먼저, 본격적인 파일 보안 관리 글 작성 전에 ci/cd 의 정의와 github action 을 채택한 이유을 작성해보고자 한다.
사진으로 먼저 간략하게 보자면, 위와 같다고 할 수 있다.
ci 는 Continuous Integration 로서, 간단하게 표현해보자면 코드 변경 사항을 코드 레포지토리에 수동이 아닌 자동으로 통합해주는 것이다.
그렇다면 cd 는 뭐가 다른걸까?
cd 는 Continuous Delivery/Deployment 로서, 지속적 제공 또는 배포 의 뜻이다.
코드 변경 사항의 통합, 테스트, 제공을 나타내는 프로세스라고 볼 수 있다.
그렇다면, 내가 github action 을 채택한 이유는 무엇일까?
공식 문서에서 제공하는 정의를 먼저 보자.
GitHub Actions는 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 지속적 통합 및 지속적 배포(CI/CD) 플랫폼입니다. 레포지토리에 대한 모든 풀 리퀘스트를 빌드하고 테스트하는 워크플로를 만들거나 병합된 풀 리퀘스트를 프로덕션에 배포할 수 있습니다.
-> 한마디로 git repository 에서 변경사항이 일어났을때, 자동으로 빌드하고 배포해주는 툴이라고 할 수 있다.
그러면 이제 본격적으로, 보안이 필요한 파일들을 각 step 들을 통해 관리하는 법을 작성하도록 하곘다.
우리가 살펴볼 파일들은 .json 파일, application.yml 파일 이다. 차례로 살펴보자.
- name: Create JSON file
id: create-json
uses: jsdaniell/create-json@1.1.2
with:
name: "kusitms-plus-firebase-adminsdk-krn6f-5ef95443a1.json"
json: ${{ secrets.FIREBASE_JSON }}
위 코드를 이해하려면 , github action 에 yml 파일 작성 원리를 먼저 알아야 하는데, 간단히 정리해보도록하겠다.
워크플로우를 실행하는 서버는 Runner 이고, runner 에서 Jobs 가 각각 병렬적으로 실행된다. 현재 우리의 파일은 하나의 job 으로 구성되어있고, job 하위에 여러 step 들이 모여있고, 하나 이상의 Actions 들이 모여서 step 이 만들어진다.
가장 중요한 마지막 부분은 env 이다. 노출되어서는 안되는 민감한 정보들을 github action 에서는 secret variables 로 담아서 관리한다. 그에 대한 에시를 아래 사진으로 첨부했다.
이제 위에 코드로 돌아오면, json file 을 생성하는 action 이고, 변수 안에 file 을 넣어서 json 파일이 실제로 git repository 코드에는 노출되지 않게 처리했다.
- name: make application yml
run: |
cd ./api-module/src/main/resources
touch ./application-prod.yml
echo "${{ secrets.APPLICATION }}" > ./application-prod.yml
shell: bash
이것도 위와 같은 방식으로 변수 안에 yml 파일을 넣어 노출되지 않도록 처리했고, 리눅스 명령에 대한 해석을 잠시 정리해보겠다.
cd:
cd는 "Change Directory"의 약어로, 디렉토리를 변경하는 명령어입니다.
사용법: cd [디렉토리 경로]
예시:
cd Documents: "Documents" 디렉토리로 이동합니다.
cd ..: 상위 디렉토리로 이동합니다.
cd /: 루트 디렉토리로 이동합니다.
touch:
touch는 새로운 파일을 생성하거나 파일의 최근 수정 시간을 변경하는 명령어입니다.
사용법: touch [파일명]
파일이 이미 존재하면 해당 파일의 최근 수정 시간을 현재 시간으로 변경하며, 파일이 존재하지 않으면 빈 파일을 생성합니다.
예시:
touch example.txt: "example.txt"라는 빈 파일을 생성하거나, 이미 존재하는 경우 해당 파일의 최근 수정 시간을 변경합니다.
echo:
echo는 텍스트를 화면에 출력하거나 파일에 쓰는 명령어입니다.
사용법: echo [출력할 내용]
예시:
echo "Hello, World!": "Hello, World!"를 화면에 출력합니다.
echo "Hello" > greeting.txt: "Hello"를 "greeting.txt" 파일에 씁니다. (기존 내용을 덮어씁니다.)
echo "World" >> greeting.txt: "World"를 "greeting.txt" 파일에 추가합니다.
요행이 아닌 노력을 믿자 - ajh