주요 이점
- 라이선스 소모 없음: 서비스 계정은 사용자 시트나 라이선스를 소모하지 않습니다
- 전용 API 키: 자동화된 워크플로를 위한 안전한 인증 정보
- 사용자 귀속: 자동화된 run을 필요에 따라 실제 사용자에게 귀속할 수 있습니다
- 엔터프라이즈 환경에 적합: 대규모 프로덕션 자동화를 위해 설계되었습니다
- 위임된 오퍼레이션: 서비스 계정은 이를 생성한 사용자 또는 조직을 대신해 오퍼레이션을 수행합니다
Overview
- 조직 범위: 조직 관리자가 생성하며, 모든 팀에 액세스할 수 있습니다.
- 팀 범위: 팀 관리자가 생성하며, 특정 팀으로 액세스가 제한됩니다.
- CI/CD 파이프라인: GitHub Actions, GitLab CI 또는 Jenkins에서 모델 트레이닝 run을 자동으로 기록
- 예약 작업: 야간 모델 재트레이닝, 정기적인 Evaluation run, 또는 데이터 검증 워크플로
- 프로덕션 모니터링: 프로덕션 시스템에서 Inference 메트릭과 모델 성능 기록
- Jupyter 노트북: JupyterHub 또는 Google Colab 환경의 공유 노트북
- Kubernetes 작업: K8s 클러스터에서 실행되는 자동화 워크플로
- Airflow/Prefect/Dagster: ML 파이프라인 오케스트레이션 도구
서비스 계정은 Dedicated Cloud, 엔터프라이즈 라이선스가 있는 Self-Managed instances, 그리고 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을 클릭합니다.
조직 범위 서비스 계정은 조직 내 모든 팀이 소유한 Restricted가 아닌 프로젝트에 액세스할 수 있더라도 기본 팀이 필요합니다. 이렇게 하면 모델 트레이닝 또는 생성형 AI 앱의 환경에서
WANDB_ENTITY 변수가 설정되지 않았을 때 워크로드가 실패하는 상황을 방지하는 데 도움이 됩니다. 다른 팀의 프로젝트에 조직 범위 서비스 계정을 사용하려면 WANDB_ENTITY 환경 변수를 해당 팀으로 설정해야 합니다.팀 범위 서비스 계정
팀 범위 서비스 계정 생성하기
- 팀의 Settings에서 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 키 삭제
- 조직 설정으로 이동한 다음 API Keys를 클릭합니다.
- API 키를 찾습니다. 목록에는 조직 및 팀 서비스 계정이 소유한 모든 API 키가 포함됩니다. 키 이름 또는 ID로 검색하거나 필터링할 수 있으며, 모든 열을 기준으로 정렬할 수 있습니다.
- 삭제 버튼을 클릭합니다.
WANDB_USERNAME 또는 WANDB_USER_EMAIL 변수를 사용하는 사용자 귀속은, 참조된 사용자가 서비스 계정의 상위 팀에 속해 있지 않으면 작동하지 않습니다.
외부 서비스 계정
모범 사례
- 시크릿 관리 도구 사용: 서비스 계정 API 키는 일반 텍스트 설정 파일이 아니라 안전한 시크릿 관리 시스템(예: AWS Secrets Manager, HashiCorp Vault, Azure Key Vault)에 저장하세요.
- 최소 권한 원칙: 가능한 경우 조직 범위 계정이 아니라 팀 범위 서비스 계정을 생성하여 필요한 프로젝트에만 액세스를 제한하세요.
- 사용 사례별 고유한 서비스 계정: 감사 가능성을 높이고 세분화된 액세스 제어를 가능하게 하려면 서로 다른 자동화 워크플로마다 별도의 서비스 계정을 생성하세요(예: 하나는 CI/CD용, 다른 하나는 예약된 재트레이닝용).
- 정기 감사: 활성 서비스 계정을 주기적으로 검토하고 더 이상 사용하지 않는 계정은 제거하세요. audit logs를 확인하여 서비스 계정 활동을 모니터링하세요.
-
안전한 API 키 처리:
- API 키를 버전 관리 시스템에 절대 커밋하지 마세요
- 키를 애플리케이션에 전달할 때는 환경 변수를 사용하세요
- 키가 실수로 노출된 경우 교체하세요
-
이름 지정 규칙: 서비스 계정의 목적을 나타내는 설명적인 이름을 사용하세요.
- Good:
ci-model-training,nightly-eval-pipeline,prod-inference-monitor - Avoid:
service-account-1,test-sa,temp
- Good:
-
사용자 귀속: 여러 팀 구성원이 동일한 자동화 워크플로를 사용하는 경우, 각 run을 누가 트리거했는지 추적할 수 있도록
WANDB_USERNAME또는WANDB_USER_EMAIL을 설정하세요. -
환경 설정: 팀 범위 서비스 계정의 경우, run이 올바른 팀에 기록되도록 항상
WANDB_ENTITY를 설정하세요. - 오류 처리: 인증 실패에 대한 적절한 오류 처리와 알림을 구현하여 서비스 계정 자격 증명 관련 문제를 신속하게 파악하세요.
-
문서화: 다음 사항에 대한 문서를 유지하세요.
- 어떤 서비스 계정이 존재하는지와 그 목적
- 각 서비스 계정을 사용하는 시스템/워크플로
- 각 계정을 담당하는 팀의 연락처 정보
문제 해결
- “Unauthorized” 오류: API 키가 올바르게 설정되어 있고 서비스 계정에 대상 프로젝트에 대한 접근 권한이 있는지 확인합니다
- Runs가 표시되지 않음:
WANDB_ENTITY가 올바른 팀 이름으로 설정되어 있는지 확인합니다 - 사용자 귀속이 작동하지 않음:
WANDB_USERNAME에 지정된 사용자가 해당 팀의 멤버인지 확인합니다 - 제한된 프로젝트에 대한 접근 거부: 서비스 계정을 제한된 프로젝트의 접근 목록에 명시적으로 추가합니다