핵심 이점
- 라이선스를 소모하지 않음: 서비스 계정은 사용자 좌석이나 라이선스를 소모하지 않습니다
- 전용 API key: 자동화된 워크플로우를 위한 안전한 자격 증명
- 사용자 귀속: 자동화된 실행을 실제 사용자에게 선택적으로 연결할 수 있음
- 엔터프라이즈급: 대규모 프로덕션 자동화를 위해 설계됨
- 위임된 작업: 서비스 계정은 자신을 생성한 사용자 또는 조직을 대신해 작업을 수행합니다
개요
- 조직 범위(Organization-scoped): 조직 관리자(org admin)가 생성하며, 모든 팀 전반에 걸쳐 접근할 수 있습니다.
- 팀 범위(Team-scoped): 팀 관리자가 생성하며, 특정 팀으로 접근이 제한됩니다.
- CI/CD 파이프라인: GitHub Actions, GitLab CI, Jenkins에서 모델 학습 실행을 자동으로 로깅
- 예약 작업: 매일 밤 모델 재학습, 주기적인 평가 실행, 데이터 검증 워크플로우
- 프로덕션 모니터링: 프로덕션 시스템에서 추론 지표와 모델 성능을 로깅
- Jupyter 노트북: JupyterHub 또는 Google Colab 환경에서 공유 노트북 사용
- Kubernetes 작업: K8s 클러스터에서 실행되는 자동화 워크플로우
- Airflow/Prefect/Dagster: ML 파이프라인 오케스트레이션 도구
서비스 계정은 Dedicated Cloud, 엔터프라이즈 라이선스를 사용하는 Self-Managed 인스턴스, 그리고 Multi-tenant Cloud의 엔터프라이즈 계정에서 사용할 수 있습니다.
조직 범위 서비스 계정
조직 범위 서비스 계정 생성
- W&B에 로그인한 후 사용자 프로필 아이콘을 클릭하고 다음을 수행합니다.
- Dedicated Cloud 또는 Self-Managed: Organization Dashboard를 클릭한 다음 Service Accounts를 클릭합니다.
- Multi-tenant Cloud: Service Accounts를 클릭합니다.
- Create service account를 클릭합니다.
- 이름을 입력하고 기본 팀을 선택합니다.
- Create를 클릭합니다.
- 방금 생성한 서비스 계정을 찾습니다.
- 작업 메뉴(
...)를 클릭한 다음 Create API key를 클릭합니다. - API key 이름을 입력한 후 Create를 클릭합니다.
- API key를 복사하여 안전한 위치에 보관합니다.
- Done을 클릭합니다.
조직 범위 서비스 계정은 조직 내 모든 팀이 소유한 제한되지 않은 프로젝트에 액세스할 수 있지만, 기본 팀이 반드시 지정되어 있어야 합니다. 이는 모델 학습 또는 생성형 AI 앱 환경에서
WANDB_ENTITY 변수가 설정되지 않았더라도 워크로드가 실패하는 상황을 방지하는 데 도움이 됩니다. 다른 팀의 프로젝트에 조직 범위 서비스 계정을 사용하려면, WANDB_ENTITY 환경 변수를 해당 팀으로 설정해야 합니다.팀 범위의 서비스 계정
팀 범위 서비스 계정 생성
- 팀 설정에서 Service Accounts를 클릭합니다.
- New Team Service Account를 클릭합니다.
- 서비스 계정 이름을 입력합니다.
- 인증 방법을 기본값인 Generate API key로 설정합니다. Federated Identity를 선택하면 해당 서비스 계정은 API key를 소유할 수 없습니다.
- Create를 클릭합니다.
- 방금 생성한 서비스 계정을 찾습니다.
- 액션 메뉴(
...)를 클릭한 다음 Create API key를 클릭합니다. - API key 이름을 입력한 후 Create를 클릭합니다.
- API key를 복사하여 안전한 위치에 보관합니다.
- Done을 클릭합니다.
서비스 계정용 추가 API key 생성하기
- 팀 또는 조직 설정에서 Service Accounts 탭으로 이동합니다.
- 목록에서 해당 서비스 계정을 찾습니다.
- 작업 메뉴(
...)를 클릭한 다음 Create API key를 클릭합니다. - API key 이름을 입력한 후 Create를 클릭합니다.
- 표시된 API key를 바로 복사해 안전한 위치에 보관합니다.
- Done을 클릭합니다.
서비스 계정 API key 삭제
- Organization settings로 이동한 다음 API Keys를 클릭합니다.
- 삭제할 API key를 찾습니다. 이 목록에는 조직 및 팀 서비스 계정이 소유한 모든 API key가 포함됩니다. 키 이름 또는 ID로 검색하거나 필터링할 수 있고, 어떤 열이든 기준으로 정렬할 수 있습니다.
- 삭제 버튼을 클릭합니다.
WANDB_USERNAME 또는 WANDB_USER_EMAIL 변수를 사용한 사용자 귀속이 동작하지 않습니다.
외부 서비스 계정
모범 사례
- 시크릿 관리자 사용: 서비스 계정 API key는 일반 텍스트 구성 파일이 아니라 안전한 시크릿 관리 시스템(예: AWS Secrets Manager, HashiCorp Vault, Azure Key Vault)에 저장하십시오.
- 최소 권한 원칙: 필요한 프로젝트에만 액세스를 제한하기 위해, 가능한 경우 조직 범위 계정이 아닌 팀 범위 서비스 계정을 생성하십시오.
- 사용 사례별 고유 서비스 계정: 감사 가능성을 높이고 세분화된 액세스 제어를 위해, 서로 다른 자동화 워크플로(예: 하나는 CI/CD용, 다른 하나는 스케줄된 재학습용)에 대해 별도의 서비스 계정을 생성하십시오.
- 정기 감사: 활성 서비스 계정을 주기적으로 검토하고 더 이상 사용하지 않는 계정은 제거하십시오. 감사 로그를 확인하여 서비스 계정 활동을 모니터링하십시오.
-
API key 보안 처리:
- API key를 버전 관리 시스템에 커밋하지 마십시오.
- 환경 변수를 사용하여 애플리케이션에 키를 전달하십시오.
- 키가 실수로 노출된 경우 재발급(교체)하십시오.
-
이름 지정 규칙: 서비스 계정의 목적을 나타내는 설명적인 이름을 사용하십시오.
- 권장:
ci-model-training,nightly-eval-pipeline,prod-inference-monitor - 지양:
service-account-1,test-sa,temp
- 권장:
-
사용자 추적: 여러 팀원이 동일한 자동화 워크플로를 사용할 때, 각 실행을 누가 트리거했는지 추적할 수 있도록
WANDB_USERNAME또는WANDB_USER_EMAIL을 설정하십시오. -
환경 구성: 팀 범위 서비스 계정의 경우, 실행이 올바른 팀으로 기록되도록 항상
WANDB_ENTITY를 설정하십시오. - 오류 처리: 서비스 계정 자격 증명 문제를 빠르게 파악할 수 있도록, 인증 실패에 대한 적절한 오류 처리와 알림을 구현하십시오.
-
문서화: 다음 내용을 문서로 정리하여 유지 관리하십시오.
- 어떤 서비스 계정이 존재하는지와 그 목적
- 각 서비스 계정을 사용하는 시스템/워크플로
- 각 계정에 책임이 있는 팀의 연락처 정보
문제 해결
- “Unauthorized” 오류: API key가 올바르게 설정되어 있고 서비스 계정에 대상 프로젝트에 대한 액세스 권한이 있는지 확인하세요
- 실행이 표시되지 않음:
WANDB_ENTITY가 올바른 팀 이름으로 설정되어 있는지 확인하세요 - 사용자 소유자 표시가 되지 않음:
WANDB_USERNAME에 지정된 사용자가 해당 팀의 구성원인지 확인하세요 - 제한된 프로젝트에 대한 액세스 거부: 서비스 계정을 제한된 프로젝트의 액세스 허용 목록에 명시적으로 추가하세요