Post

GitHub Actions Secrets & Variables 설정 가이드

GitHub Actions의 Secrets와 Variables 차이, 적용 범위(Repository/Environment/Organization), 그리고 환경별 분리 예시

GitHub Actions Secrets & Variables 설정 가이드

📘 개요

GitHub Actions에서 서버 배포나 CI/CD를 구성할 때는 SecretsVariables를 통해 민감 정보와 환경 설정 값을 안전하게 관리할 수 있습니다. 이 문서는 그 차이와 사용 위치를 명확히 정리합니다.


🧱 1. GitHub Secrets의 종류

구분설명적용 범위설정 경로
Repository secrets특정 저장소에서만 사용 가능단일 저장소Settings > Secrets and variables > Actions > Repository secrets
Environment secrets같은 저장소 내에서도 환경별(dev, prod 등)로 구분 가능저장소 내 환경별Settings > Environments > [환경 이름] > Environment secrets
Organization secrets조직 내 여러 저장소에서 공통 사용 가능조직 전체Organization > Settings > Secrets and variables > Actions > Organization secrets

🔧 사용 가이드

상황추천 Secret 종류이유
단일 프로젝트 배포Repository secrets단순하고 빠름
개발/운영 환경 분리 배포Environment secrets환경별 접근 제어 가능
여러 저장소 공통 키 사용Organization secrets중앙 관리에 용이

⚙️ 2. Environment secrets 설정 예시

예시: 개발(Development) / 운영(Production) 환경 분리

  1. 저장소 이동 → Settings > Environments
  2. 두 개 환경 생성

    • development
    • production
  3. 각 환경에 Secrets 추가

🔧 개발 서버 (Development)

Key설명예시
DEV_SERVER_HOST개발 서버 IP203.0.113.20
DEV_SERVER_USERSSH 사용자명deployer
DEV_SERVER_SSH_KEYSSH Private Key (개행 포함)(비공개 키 입력)
DEV_SERVER_PORTSSH 포트2222
DEV_SERVER_PATH배포 경로/home/deployer

🏭 운영 서버 (Production)

Key설명예시
PROD_SERVER_HOST운영 서버 IP203.0.113.20
PROD_SERVER_USERSSH 사용자명deployer
PROD_SERVER_SSH_KEYSSH Private Key (개행 포함)(비공개 키 입력)
PROD_SERVER_PORTSSH 포트2223
PROD_SERVER_PATH배포 경로/home/deployer
PROD_SERVER_URLHealth Check URL (선택)https://example.com

⚠️ 3. 중요 사항

  • 배포 사용자(deployer)는 다음 명령을 비밀번호 없이 실행할 수 있어야 합니다:

    1
    
    sudo systemctl restart myapp
    
  • SSH 접속 전, 서버 ACG(Security Group)에서 GitHub Actions의 아웃바운드 IP를 허용해야 합니다. (GitHub Actions IP는 고정되지 않으므로, 필요 시 Bastion Host나 VPN 사용 권장)


🔐 4. Secrets vs Variables

구분SecretsVariables
🔒 보안성암호화 저장 (Encrypted)평문 저장 (Not encrypted)
🕵️ 로그 노출자동 마스킹(***) 처리그대로 출력될 수 있음
🧩 용도비밀번호, 토큰, SSH 키 등 민감 정보일반 설정 값, 경로, 포트 등
🔍 값 확인저장 후 값 확인 불가언제든 확인 및 수정 가능
💬 워크플로 접근$$

💡 5. 사용 예시

1
2
3
4
5
6
7
8
9
10
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Deploy to server
        run: |
          echo "Deploying to $..."
          ssh -i $ \
              $@$ \
              -p $
  • secrets.SSH_PRIVATE_KEY → 민감 정보
  • vars.SERVER_PORT, vars.SERVER_USER → 일반 설정 값

🧠 6. 실무 팁

Secrets

  • 민감한 정보 (API Key, Token, SSH Key 등)
  • GitHub 로그에서 자동 마스킹
  • 저장 후 값 확인 불가

⚙️ Variables

  • 설정 값 (환경 이름, 경로, 포트, 버전 등)
  • 여러 워크플로에서 공유 가능
  • 디버깅 시 유용

🎯 결론

  • Secrets → 보안을 위한 민감 정보 저장소
  • Variables → 일반 설정 값 관리용
  • Environment secrets → 환경별 분리 관리 시 최적
This post is licensed under CC BY 4.0 by the author.