메인 콘텐츠로 건너뛰기

Overview

SCIM(System for Cross-domain Identity Management) API를 사용하면 인스턴스 관리자 또는 조직 관리자가 W&B 조직에서 Users, 그룹, 커스텀 역할을 관리할 수 있습니다. SCIM 그룹은 W&B Teams에 매핑됩니다. W&B의 SCIM API는 Okta를 비롯한 주요 ID 공급자와 호환되므로 사용자 프로비저닝 및 프로비저닝 해제를 자동화할 수 있습니다. Okta 및 기타 ID 공급자에 대한 SSO 설정은 SSO 문서를 참조하세요. SCIM API와 상호작용하는 방법을 보여주는 실용적인 Python 예시는 wandb-scim 저장소에서 확인하세요.

지원되는 특성

  • 필터링: API는 /Users/Groups 엔드포인트에 대한 필터링을 지원합니다
  • PATCH 오퍼레이션: 리소스를 부분적으로 업데이트하기 위한 PATCH를 지원합니다
  • ETag 지원: 충돌 감지를 위해 ETag를 사용한 조건부 업데이트
  • 서비스 계정 인증: 조직 서비스 계정은 API에 액세스할 수 있습니다
여러 Enterprise Multi-tenant SaaS 조직의 관리자라면, API 키를 사용해 전송한 SCIM API 요청이 올바른 조직에 적용되도록 SCIM API 요청을 보낼 조직을 반드시 설정해야 합니다. 프로필 이미지를 클릭한 다음 User Settings를 클릭하고 Default API organization 설정을 확인하세요.선택한 호스팅 옵션에 따라 이 페이지의 예시에서 사용되는 <host-url> 플레이스홀더 값이 결정됩니다.또한 예시에서는 abcdef와 같은 사용자 ID를 사용합니다. 실제 요청과 응답에서는 사용자 ID에 해시된 값이 사용됩니다.

인증

조직 관리자는 Bearer 토큰 또는 HTTP Basic 자격 증명을 사용해 인증할 수 있습니다. 두 방식 모두 키를 사용하는 경우 같은 API 키 문자열 을 사용합니다. 주요 차이를 검토한 후 사용자 ID 또는 조직 범위 서비스 계정을 선택하세요.

주요 차이점

  • 누가 사용해야 하나요: 사용자는 대화형의 일회성 관리자 액션에 가장 적합하며, 서비스 계정은 자동화 및 인테그레이션(CI/CD, 프로비저닝 도구)에 가장 적합합니다.
  • 자격 증명: 사용자는 Basic 인증에 사용자 이름과 API 키를 함께 전송하고, 서비스 계정은 Basic 인증에 API 키만 전송합니다(사용자 이름 없음). Bearer 인증의 경우 헤더에 API 키만 전송하세요(사용자 이름 없음).
  • Bearer와 Basic의 차이: Bearer는 키를 그대로 사용해 Authorization: Bearer <API-KEY> 형식을 사용합니다. Basic은 Authorization: Basic <base64(...)> 형식을 사용합니다(사용자는 username:API-KEY를 인코딩하고, 서비스 계정은 앞에 콜론을 붙이고 사용자 이름을 비운 :API-KEY를 인코딩합니다).
  • 범위 및 권한: 인스턴스 또는 조직 관리자 사용자의 API 키나 조직 범위 서비스 계정의 API 키를 사용하세요. 팀 범위 서비스 계정의 키는 SCIM API에 인증할 수 없습니다. SCIM을 사용하는 서비스 계정은 조직 범위의 헤드리스 계정이므로, 자동화에 대해 더 명확한 감사 추적을 제공합니다.
  • 자격 증명을 가져오는 위치: 사용자는 User Settings에서 자신의 API 키를 복사합니다. 조직 범위 서비스 계정 키는 organization dashboard의 Service account 탭 아래에 있습니다.
  • Multi-tenant Cloud: 둘 이상의 Multi-tenant Cloud 조직에 액세스할 수 있는 경우, SCIM API 호출이 의도한 조직으로 라우팅되도록 Default API organization을 설정해야 합니다.

Bearer 토큰

API 키를 Bearer 토큰으로 전달하세요:
Authorization: Bearer <API-KEY>
<API-KEY> 값은 해당 주체의 HTTP Basic 인증에서 비밀번호로 사용하는 문자열과 동일합니다. Bearer 요청에서는 키를 Base64 인코딩하지 않습니다.
SCIM API용 Bearer 인증은 W&B Multi-tenant Cloud에서 사용할 수 있으며, Dedicated Cloud 및 Self-Managed v0.79.0 이상에서도 사용할 수 있습니다.
다음 예제에서는 <YOUR_API_KEY>를 플레이스홀더로 사용합니다. 이를 관리자 사용자 또는 조직 범위 서비스 계정의 실제 키로 바꾸세요. 사용자 목록
curl -s -S \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -H "Content-Type: application/scim+json" \
  "<host-url>/scim/Users"
사용자 생성
curl -s -S -X POST \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -H "Content-Type: application/scim+json" \
  "<host-url>/scim/Users" \
  -d '{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
    "userName": "dev-user2",
    "emails": [{"primary": true, "value": "dev-user2@example.com"}]
  }'
자세한 내용은 사용자 생성를 참조하세요.

Users

대화형 관리자 작업을 수행할 때는 개인 관리자 자격 증명을 사용하세요. HTTP Authorization 헤더는 Basic <base64(username:API-KEY)> 형식으로 만드세요. 예를 들어, demo:p@55w0rd로 인증합니다:
Authorization: Basic ZGVtbzpwQDU1dzByZA==

서비스 계정

자동화 또는 인테그레이션에는 조직 범위의 서비스 계정을 사용하세요. HTTP Authorization 헤더는 Basic <base64(:API-KEY)> 형식으로 구성합니다(앞의 콜론과 비어 있는 사용자 이름에 유의하세요). 서비스 계정 API 키는 조직 대시보드의 Service account 탭에서 찾을 수 있습니다. 조직 범위 서비스 계정을 참고하세요. 예를 들어, API 키 sa-p@55w0rd를 사용해 인증합니다:
Authorization: Basic OnNhLXBANTV3MHJk

사용자 관리

SCIM 사용자 리소스는 W&B Users에 해당합니다. 다음 엔드포인트를 사용해 조직의 사용자를 관리하세요.

사용자 조회

조직의 특정 사용자 정보를 조회합니다.
이 오퍼레이션으로는 서비스 계정을 조회할 수 없습니다.

엔드포인트

  • URL: <host-url>/scim/Users/{id}
  • 방법: GET

매개변수

매개변수유형필수설명
idstring사용자의 고유 ID

예시

GET /scim/Users/abc

Users 목록

조직의 모든 Users 목록을 조회합니다.
이 오퍼레이션으로는 서비스 계정을 조회할 수 없습니다.

Users 필터링

/Users 엔드포인트는 사용자 이름이나 이메일 주소를 기준으로 사용자를 필터링할 수 있습니다:
  • userName eq "value" - 사용자 이름으로 필터링
  • emails.value eq "value" - 이메일 주소로 필터링
예시
GET /scim/Users?filter=userName eq "john.doe"
GET /scim/Users?filter=emails.value eq "john@example.com"

엔드포인트

  • URL: <host-url>/scim/Users
  • 방법: GET

예시

GET /scim/Users

사용자 생성

조직에 새 사용자를 추가합니다.

엔드포인트

  • URL: <host-url>/scim/Users
  • 방법: POST

매개변수

매개변수유형필수설명
emails배열이메일 객체 배열입니다. 기본 이메일이 포함되어야 합니다.
userNamestring새로 생성할 사용자의 사용자 이름입니다.
modelsSeatstring아니요Models 시트 수준입니다. full, viewer, none 중 하나입니다. 기본값은 full입니다. Dedicated Cloud 및 Self-Managed에서만 지원됩니다.
weaveRolestring아니요Weave 역할 수준입니다. full, viewer, none 중 하나입니다. 기본값은 full입니다. Dedicated Cloud 및 Self-Managed에서만 지원됩니다.

예시

POST /scim/Users
{
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:User"
    ],
    "emails": [
        {
            "primary": true,
            "value": "dev-user2@example.com"
        }
    ],
    "userName": "dev-user2",
    "modelsSeat": "full",
    "weaveRole": "full"
}

응답

(Status 201)
{
    "active": true,
    "displayName": "Dev User 2",
    "emails": {
        "Value": "dev-user2@example.com",
        "Display": "",
        "Type": "",
        "Primary": true
    },
    "id": "def",
    "meta": {
        "resourceType": "User",
        "created": "2023-10-01T00:00:00Z",
        "location": "Users/def"
    },
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:User"
    ],
    "modelsSeat": "full",
    "weaveRole": "full",
    "userName": "dev-user2"
}

사용자 삭제

관리자 액세스 유지인스턴스 또는 조직에는 항상 최소 한 명의 관리자 사용자가 있어야 합니다. 그렇지 않으면 아무도 조직의 W&B 계정을 설정하거나 관리할 수 없습니다. 조직에서 SCIM 또는 다른 자동화된 프로세스를 사용해 W&B에서 사용자를 프로비저닝 해제하는 경우, 프로비저닝 해제 오퍼레이션으로 인해 인스턴스 또는 조직에 마지막으로 남아 있던 관리자가 의도치 않게 제거될 수 있습니다.운영 절차 수립에 도움이 필요하거나 관리자 액세스를 복구해야 하는 경우 지원팀에 문의하세요.
조직에서 사용자를 완전히 삭제합니다.
이 오퍼레이션은 서비스 계정이 아닌 사용자에게만 적용됩니다. 서비스 계정는 W&B Team의 Settings에서 삭제하세요.

엔드포인트

  • URL: <host-url>/scim/Users/{id}
  • 방법: DELETE

매개변수

매개변수유형필수설명
idstring삭제할 사용자의 고유 ID

예시

DELETE /scim/Users/abc
사용자를 일시적으로 비활성화하려면 PATCH 엔드포인트를 사용하는 사용자 비활성화 API를 참고하세요.

사용자 이메일 업데이트

사용자의 기본 이메일 주소를 업데이트합니다. Multi-tenant Cloud에서는 지원되지 않습니다. 이 환경에서는 사용자 계정을 조직에서 관리하지 않습니다.

엔드포인트

  • URL: <host-url>/scim/Users/{id}
  • 방법: PATCH

매개변수

매개변수유형필수설명
idstring사용자의 고유 ID
opstringreplace
pathstringemails
valuearray새 이메일 객체를 포함하는 배열

예시

PATCH /scim/Users/abc
{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "replace",
            "path": "emails",
            "value": [
                {
                    "value": "newemail@example.com",
                    "primary": true
                }
            ]
        }
    ]
}

사용자 표시 이름 업데이트

사용자의 표시 이름을 업데이트합니다. Multi-tenant Cloud에서는 지원되지 않습니다. 이 환경에서는 사용자의 계정을 조직이 관리하지 않습니다.

엔드포인트

  • URL: <host-url>/scim/Users/{id}
  • 방법: PATCH

매개변수

매개변수유형필수설명
idstring사용자의 고유 ID
opstringreplace
pathstringdisplayName
valuestring새 표시 이름

예시

PATCH /scim/Users/abc
{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "replace",
            "path": "displayName",
            "value": "John Doe"
        }
    ]
}

사용자 비활성화

조직에서 사용자를 비활성화합니다. 실제 결과는 배포 유형에 따라 다릅니다.
  • Dedicated Cloud / Self-Managed: 사용자의 active 필드를 false로 설정합니다. 비활성화된 사용자의 조직 액세스 권한을 복원하려면 사용자 재활성화를 참조하세요.
  • Multi-tenant Cloud: 조직에서 사용자를 제거합니다. 사용자의 액세스 권한을 복원하려면 해당 사용자를 조직에 다시 추가하세요. 사용자 생성을 참조하세요. Multi-tenant Cloud에서는 사용자 계정을 조직에서 관리하지 않습니다.
이 오퍼레이션은 서비스 계정이 아니라 사용자에만 적용됩니다. 서비스 계정 비활성화는 지원되지 않습니다. W&B Team의 Settings에서 팀 서비스 계정을 관리하세요.

엔드포인트

  • URL: <host-url>/scim/Users/{id}
  • 방법: PATCH

매개변수

매개변수유형필수설명
idstring비활성화할 사용자의 고유 ID
opstringreplace
value객체{"active": false} 객체

예시

PATCH /scim/Users/abc
{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "replace",
            "value": {"active": false}
        }
    ]
}

응답

(Status 200)
{
    "active": false,
    "displayName": "Dev User 1",
    "emails": {
        "Value": "dev-user1@example.com",
        "Display": "",
        "Type": "",
        "Primary": true
    },
    "id": "abc",
    "meta": {
        "resourceType": "User",
        "created": "2023-10-01T00:00:00Z",
        "lastModified": "2023-10-01T00:00:00Z",
        "location": "Users/abc"
    },
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:User"
    ],
    "userName": "dev-user1"
}

사용자 재활성화

이전에 비활성화된 사용자를 조직에서 다시 활성화합니다.
  • 사용자 재활성화는 사용자에게만 적용되며 서비스 계정에는 적용되지 않습니다. 서비스 계정 재활성화는 지원되지 않습니다. 서비스 계정은 W&B Team의 Settings에서 관리하세요.
  • Multi-tenant Cloud에서는 사용자 재활성화를 지원하지 않습니다. 사용자의 액세스를 복원하려면 해당 사용자를 조직에 다시 추가하세요. 사용자 생성을 참조하세요. Multi-tenant Cloud에서는 사용자 계정을 조직에서 관리하지 않습니다. 사용자를 재활성화하려고 하면 HTTP 400 오류가 발생합니다.
    {
        "schemas": [
            "urn:ietf:params:scim:api:messages:2.0:Error"
        ],
        "detail": "User reactivation operations are not supported in SaaS Cloud",
        "status": "400"
    }
    

엔드포인트

  • URL: <host-url>/scim/Users/{id}
  • 방법: PATCH

매개변수

매개변수유형필수설명
idstring다시 활성화할 사용자의 고유 ID
opstringreplace
value객체{"active": true}를 포함하는 객체

예시

PATCH /scim/Users/abc
{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "replace",
            "value": {"active": true}
        }
    ]
}

조직 역할 할당

사용자에게 조직 수준의 역할을 할당합니다.
이 오퍼레이션은 서비스 계정이 아닌 사용자에게만 적용됩니다. 서비스 계정에는 커스텀 역할이 지원되지 않습니다.

엔드포인트

  • URL: <host-url>/scim/Users/{id}
  • 방법: PATCH

매개변수

매개변수유형필수설명
idstring사용자의 고유 ID
opstringreplace
pathstringorganizationRole
valuestring역할 이름(admin 또는 member)
조직 수준의 viewer 역할은 사용 중단되었으며 더 이상 UI에서 할당할 수 없습니다. SCIM을 사용해 사용자에게 viewer 역할을 할당하면:
  • 사용자는 조직에서 member 역할을 부여받습니다.
  • 해당 사용자의 modelsSeatfull 대신 viewer로 설정됩니다. 그러면 Models에는 보기 전용 액세스가, 레지스트리에는 전체 액세스가 허용됩니다. 사용 가능한 Models 시트가 없으면 Seat limit reached 오류가 반환됩니다. 시트를 사용할 수 있게 되면 나중에 업데이트할 수 있습니다.
  • 해당 사용자의 weaveRolefull 대신 viewer로 설정됩니다. 그러면 Weave에는 보기 전용 액세스가 허용됩니다.
  • 해당 사용자의 기존 팀 및 프로젝트 역할은 모두 viewer로 설정됩니다.
  • 조직 수준에서 볼 수 있는 레지스트리에서는 레지스트리 viewer 역할이 부여됩니다.
member 또는 admin 조직 역할을 부여해도 사용자의 modelsSeat 또는 weaveRole은 변경되지 않습니다.

예시

PATCH /scim/Users/abc
{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "replace",
            "path": "organizationRole",
            "value": "admin"
        }
    ]
}

Models 시트 업데이트

사용자의 Models 시트를 업데이트합니다. Dedicated CloudSelf-Managed에서만 지원됩니다.

엔드포인트

  • URL: <host-url>/scim/Users/{id}
  • 방법: PATCH

매개변수

매개변수유형필수설명
idstring사용자의 고유 ID
opstringreplace
pathstringmodelsSeat
valuestring시트 수준(full, viewer 또는 none)

예시

PATCH /scim/Users/abc
{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "replace",
            "path": "modelsSeat",
            "value": "full"
        }
    ]
}

Weave 역할 업데이트

사용자의 Weave 역할을 업데이트합니다. Dedicated CloudSelf-Managed에서만 지원됩니다.

엔드포인트

  • URL: <host-url>/scim/Users/{id}
  • 방법: PATCH

매개변수

매개변수유형필수설명
idstring사용자의 고유 ID
opstringreplace
pathstringweaveRole
valuestring역할 수준(full, viewer 또는 none)

예시

PATCH /scim/Users/abc
{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "replace",
            "path": "weaveRole",
            "value": "full"
        }
    ]
}

팀 역할 할당

사용자에게 팀 수준의 역할을 할당합니다.
이 오퍼레이션은 서비스 계정이 아니라 사용자에게만 적용됩니다. 서비스 계정에서는 커스텀 역할이 지원되지 않습니다.

엔드포인트

  • URL: <host-url>/scim/Users/{id}
  • 방법: PATCH

매개변수

매개변수유형필수설명
idstring사용자의 고유 ID
opstringreplace
pathstringteamRoles
valuearrayteamNameroleName을 포함하는 객체 배열

예시

PATCH /scim/Users/abc
{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
  "Operations": [
    {
      "op": "replace",
      "path": "teamRoles",
      "value": [
        {
          "roleName": "admin",
          "teamName": "team1"
        }
      ]
    }
  ]
}

레지스트리에 추가

지정된 레지스트리 수준 역할로 사용자를 레지스트리에 추가합니다.
이 오퍼레이션은 서비스 계정이 아닌 사용자에게만 적용됩니다. 서비스 계정에는 커스텀 역할이 지원되지 않습니다.

엔드포인트

  • URL: <host-url>/scim/Users/{id}
  • 방법: PATCH

매개변수

매개변수유형필수설명
idstringYes사용자의 고유 ID
opstringYesadd
pathstringYesregistryRoles
valuearrayYesregistryNameroleName을 포함하는 객체 배열

예시

PATCH /scim/Users/abc
{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
  "Operations": [
    {
      "op": "replace",
      "path": "registryRoles",
      "value": [
        {
          "roleName": "admin",
          "registryName": "hello-registry"
        }
      ]
    }
  ]
}

레지스트리에서 제거

레지스트리에서 사용자를 제거합니다.
  • 제거 오퍼레이션은 RFC 7644 SCIM 프로토콜 사양을 따릅니다. 특정 레지스트리에서 사용자를 제거하려면 필터 구문 "registryRoles[registryName eq \"{registry_name}\"]"을 사용하고, 모든 레지스트리에서 사용자를 제거하려면 "registryRoles"를 사용하세요.
  • 이 오퍼레이션은 서비스 계정이 아닌 사용자에게만 적용됩니다. 레지스트리에서 서비스 계정을 제거하려면 W&B 팀의 Settings에서 제거하세요.

엔드포인트

  • URL: <host-url>/scim/Users/{id}
  • 방법: PATCH

매개변수

매개변수유형필수설명
idstring사용자의 고유 ID
opstringremove
pathstring"registryRoles[registryName eq \"{registry_name}\"]" 또는 "registryRoles"

예시

PATCH /scim/Users/abc
{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "replace",
            "path": "registryRoles[registryName eq \"goodbye-registry\"]"
        }
    ]
}
PATCH /scim/Users/abc
{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "replace",
            "path": "registryRoles"
        }
    ]
}

그룹 리소스

IAM에서 SCIM group을 생성하면 W&B Team이 생성되어 이에 매핑되며, 다른 SCIM group 오퍼레이션도 해당 팀을 대상으로 수행됩니다. 팀 생성 시 맞춤형 저장소를 설정하려면 요청에 storageBucket을 포함하세요.

서비스 계정

SCIM을 사용해 W&B Team이 생성되면 서비스 계정의 Team 리소스에 대한 액세스를 유지할 수 있도록 모든 조직 수준 서비스 계정이 자동으로 Team에 추가됩니다.

그룹 필터링

/Groups 엔드포인트는 특정 Teams를 검색하기 위한 필터링을 지원합니다:

사용 가능한 필터

  • displayName eq "value" - 팀 표시 이름으로 필터링

예시

GET /scim/Groups?filter=displayName eq "engineering-team"

팀 조회

팀의 고유 ID를 제공해 팀 정보를 조회합니다.

엔드포인트

  • URL: <host-url>/scim/Groups/{id}
  • 방법: GET

예시

GET /scim/Groups/ghi

Teams 목록

Teams 목록을 조회합니다.

엔드포인트

  • URL: <host-url>/scim/Groups
  • 방법: GET

예시

GET /scim/Groups

팀 생성

  • 엔드포인트: <host-url>/scim/Groups
  • 방법: POST
  • 설명: 새 팀 리소스를 생성합니다.
  • 지원 필드:
필드유형필수
displayNameString
members다중 값 배열예 (value 하위 필드는 필수이며 사용자 ID에 매핑됨)
storageBucket객체아니요
팀을 생성할 때 storageBucket 객체를 포함하면 팀 수준의 Bring your own bucket (BYOB)을 구성할 수 있습니다. 이를 생략하면 팀은 기본 저장소 또는 인스턴스 수준 저장소를 사용합니다. BYOB 가이드를 참고해 bucket을 프로비저닝하고(정책, CORS, 자격 증명) 공급자별 저장소 주소 형식을 확인하세요. storageBucket 객체에는 다음 하위 필드가 있습니다:
  • 필수: name (bucket 이름), provider (COREWEAVE, AWS, AZURE, GCP, MINIO 중 하나). 값은 대소문자를 구분하므로 표시된 대로 대문자를 사용하세요.
  • 선택: path (bucket 내 경로 접두사), kmsKeyId (암호화용 KMS 키, 예: AWS), awsExternalId (AWS 교차 계정 액세스), azureTenantId (Azure 테넌트 ID), azureClientId (Azure 관리 ID 클라이언트 ID).
W&B는 팀을 생성하기 전에 bucket이 존재하고 접근 가능한지 검증합니다. 검증에 실패하면 SCIM 요청이 실패하고 팀은 생성되지 않습니다. 유효하지 않은 provider 값이 지정되면 허용되는 값을 나열한 SCIM 오류와 함께 400 Bad Request를 반환합니다.

예시

이 예시에서는 맞춤형 저장소 없이 팀을 생성하는 방법과 특정 공급자에서 BYOB 저장소를 사용해 팀을 생성하는 방법을 보여줍니다. 예시 요청을 보려면 원하는 저장소 설정 탭을 선택하고, 예시 응답을 보려면 응답 탭을 선택하세요.
POST /scim/Groups
{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
  "displayName": "wandb-support",
  "members": [
    {
      "value": "def"
    }
  ]
}

팀 업데이트

  • 엔드포인트: <host-url>/scim/Groups/{id}
  • 방법: PATCH
  • 설명: 기존 팀의 멤버십 목록을 업데이트합니다.
  • 지원되는 오퍼레이션: add 멤버 추가, remove 멤버 제거, replace 멤버 교체
  • remove 오퍼레이션은 RFC 7644 SCIM 프로토콜 사양을 따릅니다. 특정 사용자를 제거하려면 필터 구문 members[value eq "{user_id}"]을 사용하고, 팀에서 모든 사용자를 제거하려면 members를 사용하세요. 사용자 식별: 멤버 오퍼레이션에서 {user_id}는 다음 중 하나일 수 있습니다.
  • 이러한 오퍼레이션은 서비스 계정이 아니라 사용자에 대해서만 작동합니다. 팀의 서비스 계정은 W&B Team의 Settings에서 업데이트하세요.
요청에서 {team_id}를 실제 팀 ID로, {user_id}를 실제 사용자 ID 또는 이메일 주소로 바꾸세요.

팀 구성원 교체

팀의 모든 구성원을 새 목록으로 교체합니다.
이 오퍼레이션은 서비스 계정이 아닌 사용자에 대해서만 작동합니다. 서비스 계정은 W&B Team의 Settings에서 관리하세요.
  • 엔드포인트: <host-url>/scim/Groups/{id}
  • 방법: PUT
  • 설명: 팀 구성원 목록 전체를 교체합니다.
PUT /scim/Groups/{team_id}
{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
    "displayName": "acme-devs",
    "members": [
        {
            "value": "{user_id_1}"
        },
        {
            "value": "{user_id_2}"
        }
    ]
}
팀에 사용자 추가 acme-devsdev-user2 추가:
이 오퍼레이션은 서비스 계정이 아닌 사용자에 대해서만 작동합니다. 서비스 계정은 W&B Team의 Settings에서 관리하세요.
PATCH /scim/Groups/{team_id}
{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "add",
            "path": "members",
            "value": [
                {
                    "value": "{user_id}"
                }
            ]
        }
    ]
}
팀에서 특정 사용자 제거 acme-devs에서 dev-user2 제거:
이 오퍼레이션은 서비스 계정이 아닌 사용자에 대해서만 작동합니다. 서비스 계정은 W&B Team의 Settings에서 관리하세요.
PATCH /scim/Groups/{team_id}
{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "remove",
            "path": "members[value eq \"{user_id}\"]"
        }
    ]
}
팀에서 모든 사용자 제거 acme-devs에서 모든 사용자를 제거하는 예:
이 오퍼레이션은 사용자에만 적용되며 서비스 계정에는 적용되지 않습니다. 서비스 계정은 W&B Team의 Settings에서 관리하세요.
PATCH /scim/Groups/{team_id}
{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "remove",
            "path": "members"
        }
    ]
}

팀 삭제

  • 팀에는 추가 데이터가 연결되어 있으므로 현재 SCIM API에서는 팀 삭제를 지원하지 않습니다. 모든 항목을 삭제할지 확인하려면 앱에서 팀을 삭제하세요.

역할 리소스

SCIM 역할 리소스는 W&B 커스텀 역할에 매핑됩니다. 앞서 언급했듯이 /Roles 엔드포인트는 공식 SCIM 스키마의 일부가 아니며, W&B는 W&B 조직에서 커스텀 역할을 자동으로 관리할 수 있도록 /Roles 엔드포인트를 추가합니다.

커스텀 역할 조회

역할의 고유 ID를 지정하여 커스텀 역할 정보를 조회합니다.

엔드포인트

  • URL: <host-url>/scim/Roles/{id}
  • 방법: GET

예시

GET /scim/Roles/abc

커스텀 역할 목록 조회

W&B 조직의 모든 커스텀 역할 정보를 조회합니다.

엔드포인트

  • URL: <host-url>/scim/Roles
  • 방법: GET

예시

GET /scim/Roles

커스텀 역할 생성

  • 엔드포인트: <host-url>/scim/Roles
  • 방법: POST
  • 설명: W&B 조직에 새 커스텀 역할을 생성합니다.
  • 지원 필드:
필드유형필수
nameString커스텀 역할의 이름
descriptionString커스텀 역할에 대한 설명
permissionsObject array권한 객체 배열입니다. 각 객체에는 값이 w&bobject:operation 형식인 name 문자열 필드가 포함됩니다. 예를 들어, W&B run의 delete 오퍼레이션에 대한 권한 객체라면 namerun:delete입니다.
inheritedFromString커스텀 역할이 상속할 사전 정의 역할입니다. member 또는 viewer 중 하나일 수 있습니다.

예시

POST /scim/Roles
{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Role"],
  "name": "Sample custom role",
  "description": "A sample custom role for example",
  "permissions": [
    {
      "name": "project:update"
    }
  ],
  "inheritedFrom": "member"
}

커스텀 역할 업데이트

역할에 권한 추가

  • 엔드포인트: <host-url>/scim/Roles/{id}
  • 방법: PATCH
  • 설명: 기존 커스텀 역할에 권한을 추가합니다.
PATCH /scim/Roles/{role_id}
{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "add",
            "path": "permissions",
            "value": [
                {
                    "name": "project:delete"
                },
                {
                    "name": "run:stop"
                }
            ]
        }
    ]
}

역할에서 권한 제거

  • Endpoint: <host-url>/scim/Roles/{id}
  • 방법: PATCH
  • 설명: 기존 커스텀 역할에서 권한을 제거합니다.
PATCH /scim/Roles/{role_id}
{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "remove",
            "path": "permissions",
            "value": [
                {
                    "name": "project:update"
                }
            ]
        }
    ]
}

커스텀 역할 교체

  • 엔드포인트: <host-url>/scim/Roles/{id}
  • 방법: PUT
  • 설명: 커스텀 역할 정의 전체를 교체합니다.
PUT /scim/Roles/{role_id}
{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Role"],
    "name": "Updated custom role",
    "description": "Updated description for the custom role",
    "permissions": [
        {
            "name": "project:read"
        },
        {
            "name": "run:read"
        },
        {
            "name": "artifact:read"
        }
    ],
    "inheritedFrom": "viewer"
}

커스텀 역할 삭제

W&B 조직에서 커스텀 역할을 삭제합니다. 신중하게 사용하세요. 이 작업 전에 해당 커스텀 역할이 할당되어 있던 모든 사용자에게는, 커스텀 역할이 상속했던 사전 정의 역할이 대신 할당됩니다.

엔드포인트

  • URL: <host-url>/scim/Roles/{id}
  • 방법: DELETE

예시

DELETE /scim/Roles/abc

고급 특성

ETag 지원

SCIM API는 동시 수정 충돌을 방지하기 위해 조건부 업데이트용 ETag를 지원합니다. ETag는 ETag 응답 헤더와 meta.version 필드로 반환됩니다.

ETags

ETags를 사용하려면:
  1. 현재 ETag 조회: 리소스를 GET할 때 응답 헤더의 ETag를 확인합니다
  2. 조건부 업데이트: 업데이트할 때 If-Match 헤더에 ETag를 포함합니다

예시

# 사용자 조회 및 ETag 기록
GET /scim/Users/abc
# 응답에 포함: ETag: W/"xyz123"

# ETag로 업데이트
PATCH /scim/Users/abc
If-Match: W/"xyz123"

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "replace",
            "path": "organizationRole",
            "value": "admin"
        }
    ]
}
412 Precondition Failed 오류 응답은 리소스를 조회한 후 해당 리소스가 수정되었음을 나타냅니다.

오류 처리

SCIM API는 표준 SCIM 오류 응답을 반환합니다.
상태 코드설명
200성공
201생성됨
204No Content (삭제 성공)
400잘못된 요청 - 매개변수 또는 요청 본문이 올바르지 않음
401권한 없음 - 인증 실패
403접근 금지 - 권한 부족
404찾을 수 없음 - 리소스가 존재하지 않음
409충돌 - 리소스가 이미 존재함
412사전 조건 실패 - ETag 불일치
500내부 서버 오류

배포 유형별 구현 차이

W&B는 별도의 SCIM API 구현 두 가지를 유지 관리하며, 지원되는 특성은 다음과 같이 서로 다릅니다:
특성Multi-tenant CloudDedicated Cloud and Self-Managed
사용자 이메일 업데이트-
사용자 표시 이름 업데이트-
사용자 비활성화
사용자 재활성화-
사용자당 여러 이메일-
생성/업데이트 시 modelsSeat 설정-
생성/업데이트 시 weaveRole 설정-

제한 사항

  • 최대 결과 수: 요청당 항목 9999개
  • Single-tenant 환경: 사용자당 이메일 주소는 1개만 지원합니다.
  • Teams 삭제: SCIM을 통해서는 지원되지 않습니다(W&B 웹 인터페이스 사용).
  • 사용자 재활성화: Multi-tenant Cloud 환경에서는 지원되지 않습니다.
  • 시트 한도: 조직 시트 한도에 도달하면 오퍼레이션이 실패할 수 있습니다.