Azure 상식

CI/CD Pipeline 구성 시 Credential 관리 주의 사항과 방법

ktzzang0601 2025. 8. 18. 20:44

1. 개요

CI/CD 파이프라인은 빌드, 테스트, 배포 과정에서 다양한 시스템과 서비스에 접근해야 합니다. 이 과정에서 Access Key, Service Principal, Token, Secret과 같은 민감정보(이하 Credential)를 잘못 관리하면, 외부로 유출되어 심각한 보안사고로 이어질 수 있습니다.

2. Credential 관리 시 주요 위험 요소

 (1) 소스코드에 비밀정보 하드코딩

  • Access Key, Secret, Token을 코드나 설정 파일에 직접 포함할 경우, GitHub/GitLab 등 저장소에서 노출 위험 존재.
  • 이미 commit된 이력에는 삭제해도 정보가 남아있을 수 있음.

 (2) 과도한 권한 부여

  • 예: Service Principal에 Subscription 단위의 Owner 권한 부
    → 탈취 시 전체 구독 리소스에 대한 무제한 권한 발생.

 (3) Credential 공유 방식의 문제

  • 이메일, 메신저 등 보안이 취약한 경로로 전달
  • 중앙 관리 없이 개인이 직접 보관

 (4) 회수·폐기 절차 부재

  • 사용 종료 후에도 Credential이 유효하게 남아 있는 경우 악용 가능.

3. 보안 강화를 위한 관리 방법

(1) Secret 하드코딩 금지

  • 비밀정보 스캐닝:
    • GitHub Advanced Security, SonarQube, truffleHog 등을 이용해 정적 분석.
    • 패스워드, 토큰, 키 패턴을 주기적으로 검색.
  • 이미 커밋된 비밀정보 처리:
    • 단순 삭제가 아닌 해당 Credential 폐기 및 재발급 필수.

 (2) Managed Identity / OIDC 연동 활용

  • Azure 환경에서는 Managed Identity를 부여하여 VM, App Service, AKS Pod가 Key Vault 또는 Storage에 직접 접근 가능.
  • GitHub Actions, Azure DevOps는 OIDC(OpenID Connect)를 사용하여 단기 토큰 기반 인증 지원 → 장기 Secret 불필요.

 (3) 권한 최소화(Least Privilege)

  • 서비스 접근 범위를 최소한으로 설정.
    • 예: Storage 작업 시 전체 Owner 대신 해당 StorageAccount에만 Storage Blob Data Contributor 권한 부여.
  • 구독(Subscription) 단위 권한 부여 지양.

 (4) 중앙화된 비밀정보 관리

  • Azure Key Vault 사용:
    • Secret, Key, Certificate 저장 및 액세스 제어.
    • RBAC 또는 Access Policy로 접근 제한.
  • CI/CD 파이프라인에서 Key Vault Secret을 런타임 시점에 가져와 사용.

 (5) Credential Rotation(주기적 교체)

  • 일정 주기마다 Secret, Access Key 변경.
  • 자동화 스크립트를 활용해 Rotation 절차 CI/CD에 포함.

 (6) 활동 모니터링 및 알림

  • Azure Monitor, Activity Log, Defender for Cloud를 이용해 Credential 사용 내역 추적.
  • 의심스러운 접근 발생 시 알람 설정.

4. 권장 CI/CD 구성 예시

 (1) OIDC 기반 로그인

  • GitHub Actions, Azure DevOps 같은 CI/CD 플랫폼이 **클라우드(예: Azure)**에 인증할 때
    장기 토큰이나 Secret 없이, 한 번 쓰고 버리는 **짧은 수명 토큰(Short-lived Token)**을 발급받는 방식.
  • GitHub Secrets에 클라우드 로그인용 비밀번호/토큰을 저장할 필요 없음
  • 토큰이 만료되면 재사용 불가능 → 탈취돼도 위험 최소화

 (2) Key Vault 호출

  • Secret이 파이프라인 로그나 코드에 남지 않음.
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Azure 로그인 (OIDC 사용)
        uses: azure/login@v1
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
          enable-AzPSSession: true
      - name: Key Vault에서 Secret 가져오기
        run: |
          secret=$(az keyvault secret show \
            --vault-name myKeyVault \
            --name storage-key \
            --query value -o tsv)
          echo "##[set-output name=storageKey;]$secret"

5. 결론

  • CI/CD Pipeline에서 Credential은 단순 인증 수단이 아니라 보안 경계선입니다.이를 안전하게 관리하지 않으면 전체 인프라가 위험해질 수 있습니다. 따라서 하드코딩 방지 → 중앙화된 관리 → 최소 권한 → 주기적 회수/교체 순으로 정책을 확립하는 것이 필수입니다.

6. 참고 문서