Post

CI/CD 파이프라인을 통한 민감 데이터의 안전한 배포 방법(1)

Google AdSense를 등록하던 도중 abs.txt를 찾을수 없다는 알림이 보였다. 그래서 abs.txt를 어떻게 넣어야 할까 고민을 하던중 여기저기 검색해봤는데

엥

띠용..? 너무 간단한 방법이긴 한데.. 내가 숨겼던 id나 개인 정보가 abs.txt 내에 그대로 적혀있는데 이러면 숨길 필요가 없는거 아닌가. 근데 아무리 생각해도 숨겨야할것같았다 나의 소듕한 정보.

일단 내 레포는 public이여서 누구나 해당파일에 접근해서 볼수 있기 때문

파일의 민감성을 고려하여 데이터를 안전하게 관리하고 배포할 수 있는 방법은 여러 가지가 있겠지만, (AWS Secrets Manager에서 숨겨여할 정보를 가져오는 스크립트를 사용, AWS S3에서 파일 다운로드.배포 스크립트 또는 CI/CD 파이프라인에서 파일 동적으로 생성할때 github secret에서 정보를 가져온다 등등.)

나는 이중에서 CI/CD 파이프라인에서 파일 동적으로 생성방법을 사용했다. 그전에 왜 이방법을 사용했는지 이유에대해 집고넘어가고자 한다.

1. 파일 직접 배포와 CI/CD 파이프라인의 차이점

파일 직접 배포:

  • 애플리케이션 코드와 함께 abs.txt 파일을 직접 배포 패키지에 포함시키는 방법
  • 일반적으로 파일을 코드베이스와 함께 저장하고, 배포할 때 함께 배포된다.

    문제점:

    민감한 정보가 파일에 포함되어 있다면, 공개 저장소에 푸시되거나 배포 패키지가 노출될 경우 해당 정보가 유출될 수 있다.

=> 따라서 이 방법은 파일을 공개적으로 노출시키지 않기 때문에 민감한 데이터에는 적합하지 않다.

CI/CD 파이프라인에서 파일 처리:

  • CI/CD 파이프라인(예: GitHub Actions, GitLab CI/CD)에서 배포 프로세스 중에 파일을 동적으로 생성하거나 환경 변수를 사용하여 필요한 정보를 설정하는 방법
  • 장점:
    • 민감한 데이터 보호
      환경 변수나 비밀 관리 도구를 사용하면 코드베이스에는 민감한 정보를 포함시키지 않고, 배포 과정에서 필요한 데이터만 포함시킬 수 있다.
    • 동적 처리: 배포 환경에 따라 필요한 파일을 동적으로 생성할 수 있어, 환경별로 적절한 설정을 적용할 수 있다.
    • 보안: 숨길 정보는 배포 파이프라인의 환경 변수로 관리되며, 실제 배포 과정에서는 코드에 직접 노출되지 않는다.

2. GitHub Secrets의 보안 방식

GitHub Secrets는 GitHub 저장소의 환경 변수로 민감한 정보를 안전하게 저장하고 관리할 수 있는 방법이다. GitHub Secrets의 보안 방식은 다음과 같습니다:

비공개 접근

: GitHub Secrets는 저장소의 설정에서만 접근할 수 있으며, 코드나 기타 작업 디렉터리에서 직접 볼 수 없다. CI/CD 파이프라인에서 환경 변수로 사용되며, 코드에 직접 노출되지 않는다.

암호화 저장

: GitHub Secrets는 서버에서 암호화된 상태로 저장된다. 사용자가 직접 비밀 정보를 볼 수 없으며, 이를 사용하는 과정에서만 암호화된 정보를 읽어오는 방식이다.

환경 변수로 전달

: CI/CD 파이프라인에서 비밀 정보를 환경 변수로 전달할 때, 비밀 정보는 echo나 로그에 노출되지 않도록 주의해야 한다. CI/CD 로그에 민감한 정보를 출력하지 않도록 설정할 수 있다.

제한된 접근

: GitHub Secrets는 특정 작업이나 단계에서만 사용되며, 코드나 로그에 직접 포함되지 않는다. 이로 인해 민감한 정보의 유출 가능성을 줄인다.

따라서, CI/CD 파이프라인을 사용하여 환경 변수를 관리하고 배포 시 동적으로 파일을 생성하는 방법은 민감한 정보를 안전하게 처리하는 데 유리하며, 파일을 직접 포함시키는 것보다 보안성이 높다고 판단되었다.

1. 배포 스크립트 또는 CI/CD 파이프라인에서 파일 동적으로 생성

배포 과정에서 파일을 동적으로 생성하여 포함시키는 방법입니다.

CI/CD 스크립트에서 파일 생성:

여기서는 GitHub Actions를 예로 들어 CI/CD 파이프라인에서 abs.txt 파일을 처리하는 방법을 설명하겠습니다. 배포 프로세스에서 abs.txt 파일을 동적으로 생성하거나 환경 변수를 사용하여 포함시키는 방법을 코드 예제이다.

  1. 배포 스크립트에서 파일 동적으로 생성하기 GitHub Actions를 사용하여 배포 과정에서 abs.txt 파일을 동적으로 생성하는 예제입니다. 이 방법은 민감한 데이터를 CI/CD 환경에서 안전하게 처리할 수 있게 해줍니다.

.github/workflows/deploy.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
yaml
Copy code
name: Deploy

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '16'

      - name: Install dependencies
        run: npm install

      - name: Create abs.txt
        env:
          SENSITIVE_DATA: $
        run: echo "$SENSITIVE_DATA" > abs.txt

      - name: Deploy
        run: |
          # 예를 들어, 배포 스크립트를 호출하거나 서버에 파일을 전송하는 명령어
          scp abs.txt user@server:/path/to/deploy/
          # 추가 배포 작업

이 설정에서 SENSITIVE_DATA는 GitHub Secrets에 저장된 민감한 데이터이다.

GitHub Secrets 설정

GitHub 리포지토리의 Settings > Secrets and variables > Actions에서 SENSITIVE_DATA를 추가

이 내용은 다음 포스트에서 더 자세히 다루겠다.

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