주요 이점
- 라이선스 소모 없음: 서비스 계정은 사용자 좌석이나 라이선스를 소모하지 않습니다.
- 전용 API 키: 자동화 워크플로를 위한 보안 자격 증명.
- 사용자 귀속: 자동화된 run을 특정 사람 사용자에게 선택적으로 연결할 수 있습니다.
- 엔터프라이즈 준비 완료: 대규모 프로덕션 자동화를 위해 설계되었습니다.
- 위임된 작업: 서비스 계정은 이를 생성한 사용자 또는 조직을 대신해 작업을 수행합니다.
개요
- 조직 범위(Organization-scoped): 조직 관리자가 생성하며, 모든 팀에 대한 접근 권한을 가집니다.
- 팀 범위(Team-scoped): 팀 관리자가 생성하며, 특정 팀으로 접근이 제한됩니다.
- CI/CD 파이프라인: GitHub Actions, GitLab CI, Jenkins에서 모델 트레이닝 run을 자동으로 기록
- 스케줄된 작업: 야간 모델 재트레이닝, 주기적인 평가 run, 데이터 검증 워크플로
- 프로덕션 모니터링: 프로덕션 시스템에서 추론 메트릭과 모델 성능을 기록
- 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 키 이름을 입력한 후 Create를 클릭합니다.
- API 키를 복사하여 안전한 위치에 보관합니다.
- Done을 클릭합니다.
조직 범위 서비스 계정은 조직 내 모든 팀이 소유한, 제한이 없는 프로젝트에 액세스할 수 있지만 기본 팀이 반드시 필요합니다. 이는 모델 트레이닝이나 생성형 AI 앱을 위해 환경에
WANDB_ENTITY 변수가 설정되어 있지 않더라도 워크로드가 실패하지 않도록 하기 위함입니다. 다른 팀의 프로젝트에 대해 조직 범위 서비스 계정을 사용하려면 해당 팀을 가리키도록 WANDB_ENTITY 환경 변수를 설정해야 합니다.팀 범위 서비스 계정
Team 범위 서비스 계정 생성
- 팀 설정에서 Service Accounts를 클릭합니다.
- New Team Service Account를 클릭합니다.
- 서비스 계정 이름을 입력합니다.
- Authentication Method를 기본값인 Generate API key로 설정합니다. Federated Identity를 선택하면 이 서비스 계정은 API 키를 소유할 수 없습니다.
- Create를 클릭합니다.
- 방금 생성한 서비스 계정을 찾습니다.
- 작업 메뉴(
...)를 클릭한 다음 Create API key를 클릭합니다. - API 키 이름을 입력하고 Create를 클릭합니다.
- API 키를 복사하여 안전한 위치에 보관합니다.
- Done을 클릭합니다.
서비스 계정에 대한 추가 API 키 생성
- 팀이나 조직 설정에서 Service Accounts 탭으로 이동합니다.
- 목록에서 서비스 계정을 찾습니다.
- 작업 메뉴(
...)를 클릭한 다음 Create API key를 클릭합니다. - API 키 이름을 입력한 후 Create를 클릭합니다.
- 표시된 API 키를 바로 복사하여 안전하게 보관합니다.
- Done을 클릭합니다.
서비스 계정 API 키 삭제
- Organization settings으로 이동한 후 API Keys를 클릭합니다.
- API 키를 찾습니다. 이 목록에는 조직 및 팀 서비스 계정이 소유한 모든 API 키가 포함됩니다. 키 이름이나 ID로 검색하거나 필터링할 수 있으며, 원하는 열을 기준으로 정렬할 수 있습니다.
- 삭제 버튼을 클릭합니다.
WANDB_USERNAME 또는 WANDB_USER_EMAIL 변수를 사용한 사용자 귀속은 동작하지 않습니다.
외부 서비스 계정
모범 사례
- 시크릿 관리 도구 사용: 서비스 계정 API 키는 일반 텍스트 설정 파일에 두지 말고, (예: AWS Secrets Manager, HashiCorp Vault, Azure Key Vault 같은) 안전한 시크릿 관리 시스템에 저장하세요.
- 최소 권한 원칙: 필요한 프로젝트에만 액세스를 제한할 수 있도록, 가능하면 조직 범위 계정이 아니라 팀 범위 서비스 계정을 생성하세요.
- 사용 사례별 고유 서비스 계정: 감사를 용이하게 하고 세분화된 액세스 제어를 가능하게 하기 위해, 서로 다른 자동화 워크플로(예: 하나는 CI/CD용, 다른 하나는 정기적인 재트레이닝용)에 대해 별도의 서비스 계정을 생성하세요.
- 정기 감사: 활성 서비스 계정을 주기적으로 검토하고 더 이상 사용하지 않는 계정은 제거하세요. 감사 로그를 확인하여 서비스 계정 활동을 모니터링하세요.
-
API 키 안전하게 처리:
- API 키를 절대 버전 관리 시스템에 커밋하지 마세요
- 애플리케이션에 키를 전달할 때는 환경 변수를 사용하세요
- 키가 실수로 노출된 경우 키를 로테이션하세요
-
네이밍 규칙: 서비스 계정의 목적을 나타내는 설명적인 이름을 사용하세요:
- 권장:
ci-model-training,nightly-eval-pipeline,prod-inference-monitor - 피해야 할 예:
service-account-1,test-sa,temp
- 권장:
-
사용자 추적: 여러 팀원이 동일한 자동화 워크플로를 사용하는 경우, 각 run이 누가 트리거했는지 추적할 수 있도록
WANDB_USERNAME또는WANDB_USER_EMAIL을 설정하세요: -
환경 설정: 팀 범위 서비스 계정의 경우, run이 올바른 팀에 로깅되도록 항상
WANDB_ENTITY를 설정하세요: - 오류 처리: 서비스 계정 자격 증명 관련 문제를 신속히 파악할 수 있도록, 인증 실패에 대한 적절한 오류 처리와 알림을 구현하세요.
-
문서화: 다음 내용을 문서로 관리하세요:
- 어떤 서비스 계정이 존재하는지와 각 계정의 목적
- 각 서비스 계정을 사용하는 시스템/워크플로
- 각 계정을 담당하는 팀의 연락처 정보
문제 해결
- “Unauthorized” 오류: API 키가 올바르게 설정되어 있고 서비스 계정에 대상 프로젝트에 대한 액세스 권한이 있는지 확인하세요.
- Runs가 표시되지 않음:
WANDB_ENTITY가 올바른 팀 이름으로 설정되어 있는지 확인하세요. - 사용자 연결이 작동하지 않음:
WANDB_USERNAME에 지정된 사용자가 해당 팀의 구성원인지 확인하세요. - 제한된 프로젝트에 대한 액세스가 거부됨: 서비스 계정을 해당 제한된 프로젝트의 액세스 목록에 명시적으로 추가하세요.