GitHub Actions Secret 설정 방법

GitBeginner
지금 연습하기

소개

본 랩에서는 GitHub Actions Secrets를 사용하는 방법을 배웁니다. Secrets 는 조직 (organization), 리포지토리 (repository) 또는 리포지토리 환경 (repository environment) 에 생성하는 암호화된 환경 변수입니다. 생성된 secrets 는 GitHub Actions 워크플로우에서 사용할 수 있습니다.

이는 API 키, 액세스 토큰, 비밀번호와 같은 민감한 정보를 안전하게 유지하는 데 필수적입니다. GitHub Actions 는 로그에서 secrets 를 자동으로 제거 (redact) 하여 노출되지 않도록 보장합니다.

본 랩은 이전 랩에서 생성한 리포지토리를 기반으로 진행됩니다. github-actions-demo 리포지토리에 secret 을 추가하고 이를 사용하는 워크플로우를 생성할 것입니다.

다음 단계를 거치게 됩니다.

  1. 기존 GitHub 리포지토리에 리포지토리 secret 을 추가합니다.
  2. 리포지토리를 클론하고 secret 을 참조하는 워크플로우 파일을 생성합니다.
  3. secret 을 사용하기 위한 단계를 추가합니다.
  4. 워크플로우를 GitHub 에 푸시 (push) 합니다.
  5. 실행 로그에서 secret 이 마스킹 (masked) 되었는지 확인합니다.
이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 100%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

GitHub 설정에서 MY_SECRET 이라는 리포지토리 Secret 생성

이 단계에서는 기존 github-actions-demo 리포지토리에 GitHub 에서 시크릿 (secret) 을 추가하고, 해당 리포지토리를 LabEx 환경으로 클론 (clone) 합니다.

리포지토리 시크릿 추가

  1. 웹 브라우저를 열고 GitHub 에서 github-actions-demo 리포지토리로 이동합니다: https://github.com/your-username/github-actions-demo
  2. Settings 탭을 클릭합니다.
  3. 왼쪽 사이드바에서 아래로 스크롤하여 Security 섹션으로 이동한 다음, Secrets and variables를 클릭하고 Actions를 선택합니다.
  4. 녹색 New repository secret 버튼을 클릭합니다.
  5. 다음 세부 정보를 입력합니다:
    • Name: MY_SECRET
    • Secret: SuperSecretValue123
  6. Add secret을 클릭합니다.
GitHub Actions secrets

이제 "Repository secrets" 아래에 MY_SECRET이 나열된 것을 확인할 수 있습니다.

리포지토리 클론

이제 LabEx 환경으로 돌아와 리포지토리를 클론합니다.

  1. github-actions-demo의 GitHub 리포지토리 페이지에서 녹색 Code 버튼을 클릭합니다.
  2. HTTPS 탭이 선택되었는지 확인하고 URL 을 복사합니다. URL 은 https://github.com/your-username/github-actions-demo.git과 유사해야 합니다.
  3. LabEx 환경에서 터미널을 엽니다. 기본 경로는 ~/project입니다.
  4. git clone 명령을 사용하여 리포지토리를 다운로드합니다. your-username을 실제 GitHub 사용자 이름으로 바꾸십시오.
cd ~/project
git clone https://github.com/your-username/github-actions-demo.git

예시 출력:

Cloning into 'github-actions-demo'...
remote: Enumerating objects: X, done.
remote: Counting objects: 100% (X/X), done.
remote: Total X (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (X/X), done.
  1. 클론된 리포지토리 내부로 이동합니다:
cd ~/project/github-actions-demo

워크플로우에서 ${{ secrets.MY_SECRET }}을 사용하여 Secret 참조

이 단계에서는 방금 생성한 시크릿을 참조하는 워크플로우 파일을 생성합니다.

  1. 리포지토리 디렉토리에 있는지 확인합니다:
cd ~/project/github-actions-demo
  1. .github/workflows 디렉토리 안에 secrets-demo.yml이라는 새 파일을 생성합니다:
touch .github/workflows/secrets-demo.yml
  1. WebIDE 에서 .github/workflows/secrets-demo.yml을 열고 다음 내용을 추가합니다. 이 내용은 push 이벤트 발생 시 트리거되는 기본 워크플로우를 정의합니다.
name: Secrets Demo
on: [push]

jobs:
  use-secret:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

이것으로 잡 (job) 설정이 완료되었습니다. 다음 단계에서는 시크릿을 사용하는 로직을 추가할 것입니다.

Secret 값을 안전하게 출력하는 단계 추가

이 단계에서는 워크플로우를 수정하여 시크릿에 접근하는 방법을 알아봅니다. GitHub Actions 는 ${{ secrets.SECRET_NAME }} 구문을 사용하여 시크릿에 접근할 수 있도록 지원합니다.

워크플로우 수정

.github/workflows/secrets-demo.yml 파일을 열고 steps 목록에 다음 단계를 추가합니다. 들여쓰기가 올바른지 확인하십시오.

- name: Print Secret
  env:
    MY_SECRET_VAL: ${{ secrets.MY_SECRET }}
  run: |
    echo "Printing secret directly (masked): ${{ secrets.MY_SECRET }}"
    echo "Printing secret from env (masked): $MY_SECRET_VAL"

완성된 .github/workflows/secrets-demo.yml 파일은 다음과 같아야 합니다.

name: Secrets Demo
on: [push]

jobs:
  use-secret:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Print Secret
        env:
          MY_SECRET_VAL: ${{ secrets.MY_SECRET }}
        run: |
          echo "Printing secret directly (masked): ${{ secrets.MY_SECRET }}"
          echo "Printing secret from env (masked): $MY_SECRET_VAL"

핵심 개념

워크플로우에서 시크릿을 사용할 때, GitHub 는 로그에서 해당 시크릿을 자동으로 마스킹 (masking) 합니다. echo 명령을 사용하더라도 실제 값 대신 별표 (***) 가 출력됩니다.

Secret 참조를 포함한 워크플로우 커밋 및 푸시

이 단계에서는 변경 사항을 커밋하고 GitHub 으로 푸시합니다. 이렇게 하면 GitHub Action 이 트리거됩니다.

  1. 리포지토리 디렉토리에 있는지 확인합니다:
cd ~/project/github-actions-demo
  1. 워크플로우 파일을 스테이징합니다:
git add .github/workflows/secrets-demo.yml
  1. 설명적인 메시지와 함께 변경 사항을 커밋합니다:
git commit -m "Add workflow to test secrets"
  1. 변경 사항을 GitHub 의 원격 리포지토리로 푸시합니다:
git push

인증 참고 사항:
git push를 실행하면 WebIDE 에서 자동으로 인증을 요청하는 팝업이 나타납니다. 다음 세부 단계를 따르십시오.

  1. "The extension 'GitHub' wants to sign in using GitHub." 라는 메시지가 포함된 팝업이 나타납니다. Allow를 클릭합니다.
  2. 새 알림이 나타납니다. **"Copy&Continue to GitHub"**를 클릭한 다음 다음 프롬프트에서 **"Open"**을 클릭합니다.
  3. 열리는 브라우저 창에서 GitHub 계정에 로그인하고 복사된 인증 코드를 입력합니다. 인증을 확인하면 페이지가 자동으로 닫힙니다.
  4. 몇 초 기다리면 터미널에서 푸시 작업이 성공적으로 완료되는 것을 볼 수 있습니다.

개인 정보 보호 참고 사항: WebIDE 는 인증 목적으로 GitHub 계정에 대한 전체 액세스를 요청합니다. 개인 정보 보호에 대해 걱정할 필요가 없습니다. 현재 랩을 완료하면 LabEx VM 은 즉시 파기되며 자격 증명 및 인증 정보는 유지되지 않습니다.

Secret 이 노출되지 않고 사용되었는지 로그 확인

코드를 푸시하면 GitHub 에서 워크플로우가 자동으로 트리거됩니다. 워크플로우 실행 로그를 확인하여 시크릿 (secret) 이 안전하게 사용되고 있는지 검증할 수 있습니다.

  1. 웹 브라우저에서 GitHub 의 저장소로 이동합니다: https://github.com/your-username/github-actions-demo
  2. 저장소 페이지 상단의 Actions 탭을 클릭합니다.
  3. "Add workflow to test secrets" 또는 "Secrets Demo"와 같이 이름이 지정된 워크플로우 실행 목록이 표시되어야 합니다.

참고: 코드를 푸시할 때 저장소에 여러 워크플로우 파일이 있는 경우 여러 Actions 가 트리거될 수 있습니다. 왼쪽 사이드바에서 워크플로우 이름을 확인하거나 오른쪽의 워크플로우 실행 목록을 사용하여 올바른 워크플로우 실행을 식별하십시오.

  1. 워크플로우 실행 제목을 클릭한 다음 use-secret 작업을 클릭합니다.
  2. Print Secret 단계를 확장하여 출력을 확인합니다.

다음과 유사한 내용을 보게 될 것입니다:

Printing secret directly (masked): ***
Printing secret from env (masked): ***

워크플로우가 시크릿 값을 출력하려고 시도했음에도 불구하고 GitHub Actions 가 로그에서 자동으로 ***로 마스킹 (masking) 했다는 점에 주목하십시오. 이는 중요한 보안 기능입니다. 민감한 정보가 실수로 로그에 노출되는 것을 방지하며, 출력하려고 시도하더라도 마찬가지입니다. 이는 시크릿이 안전하게 구성되었으며 실제 값을 노출하지 않고 워크플로우에서 사용되고 있음을 확인시켜 줍니다.

GitHub Actions logs

요약

본 랩 (Lab) 을 통해 다음 사항들을 성공적으로 학습했습니다:

  1. 민감한 데이터를 저장하기 위해 GitHub 설정에서 리포지토리 Secret을 생성하는 방법.
  2. GitHub Actions 워크플로우 파일을 생성하는 방법.
  3. ${{ secrets.MY_SECRET }} 구문을 사용하여 Secret 을 참조하는 방법.
  4. Secret 을 작업 단계 내 환경 변수로 전달하는 방법.
  5. 빌드 로그에서 GitHub 가 Secret 값을 자동으로 마스킹하는지 확인하는 방법.

이러한 실습을 통해 배포 키 및 API 토큰과 같은 민감한 데이터가 CI/CD 프로세스 전반에 걸쳐 안전하게 유지되도록 보장합니다.