System for Cross-domain Identity Management (SCIM) API を使用すると、インスタンスまたは組織の管理者は、W&B 組織内の Users、Groups、およびカスタムロールを管理できます。SCIM のグループは W&B の Teams にマッピングされます。
W&B の SCIM API は Okta を含む主要なアイデンティティプロバイダーと互換性があり、ユーザーのプロビジョニングとデプロビジョニングの自動化を可能にします。Okta やその他のアイデンティティプロバイダーを使用した SSO の設定については、SSO ドキュメントを参照してください。
SCIM API とのやり取りを示す Python の実用的な例については、wandb-scim リポジトリをご覧ください。
サポートされている機能
- フィルタリング: API は
/Users および /Groups エンドポイントでのフィルタリングをサポートしています。
- PATCH 操作: リソースの部分的な更新のための PATCH をサポートしています。
- ETag サポート: 競合検出のための ETag を使用した条件付き更新が可能です。
- サービスアカウント認証: 組織のサービスアカウントから API にアクセスできます。
複数のエンタープライズ Multi-tenant SaaS 組織の管理者である場合、API キーを使用した SCIM API リクエストが正しい組織に反映されるよう、リクエスト送信先の組織を設定する必要があります。プロフィール画像をクリックし、User Settings をクリックしてから、Default API organization の設定を確認してください。選択したホスティングオプションによって、このページの例で使用されている <host-url> プレースホルダーの値が決まります。また、例では abc や def などのユーザー ID を使用していますが、実際の請求と応答ではユーザー ID はハッシュ化された値になります。
主な違いを確認した上で、ユーザーアイデンティティまたはサービスアカウントのいずれかを使用して認証を行うか選択してください。
主な違い
- 使用対象: ユーザーは対話的な単発の管理アクションに最適です。サービスアカウントは自動化やインテグレーション(CI/CD、プロビジョニングツール)に最適です。
- クレデンシャル: ユーザーはユーザー名と API キーを送信します。サービスアカウントは API キーのみを送信します(ユーザー名は不要)。
- 認証ヘッダーのペイロード: ユーザーは
username:API-KEY をエンコードします。サービスアカウントは :API-KEY(先頭にコロン)をエンコードします。
- スコープと権限: どちらも管理者権限が必要です。サービスアカウントは組織スコープでヘッドレスであり、自動化のためのより明確な監査証跡を提供します。
- クレデンシャルの取得場所: ユーザーは User Settings から API キーをコピーします。サービスアカウントキーは組織の Service account タブにあります。
- Multi-tenant クラウド: 複数の Multi-tenant クラウド組織にアクセスできる場合は、SCIM API 呼び出しが意図した組織にルーティングされるように Default API organization を設定する必要があります。
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
パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|
id | string | はい | ユーザーの一意の ID |
Get User Request
Get User Response
{
"active": true,
"daysActive": 42,
"displayName": "Dev User 1",
"emails": {
"Value": "dev-user1@example.com",
"Display": "",
"Type": "",
"Primary": true
},
"id": "abc",
"lastActiveAt": "2023-10-15T14:32:10Z",
"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"
}
応答には、組織内でのユーザーのアクティビティに関する詳細が含まれます。
daysActive: ユーザーが組織内でアクティブだった合計日数。
lastActiveAt: ユーザーの直近のアクティビティの ISO 8601 タイムスタンプ。ユーザーが一度もアクティブでない場合は null を返します。
「アクティブ」の定義は、デプロイメントタイプによって異なります。
- 専用クラウド / セルフマネージド: ユーザーがサインイン、W&B App のページの閲覧、Runs の記録、SDK の使用、または何らかの形での W&B サーバーとのやり取りを行った場合にアクティブとみなされます。
- Multi-tenant クラウド: 2025年5月8日以降に、組織にスコープされた監査可能なアクションを実行した場合にアクティブとみなされます。全リストについては 監査ログアクション を参照してください。
ユーザー一覧の取得
組織内の全ユーザーのリストを取得します。
ユーザーのフィルタリング
/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
List Users Request
List Users Response
{
"Resources": [
{
"active": true,
"daysActive": 42,
"displayName": "Dev User 1",
"emails": {
"Value": "dev-user1@example.com",
"Display": "",
"Type": "",
"Primary": true
},
"id": "abc",
"lastActiveAt": "2023-10-15T14:32:10Z",
"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"
}
],
"itemsPerPage": 9999,
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:ListResponse"
],
"startIndex": 1,
"totalResults": 1
}
応答には、各ユーザーの組織内でのアクティビティに関する詳細が含まれます。
daysActive: ユーザーが組織内でアクティブだった合計日数。
lastActiveAt: ユーザーの直近のアクティビティの ISO 8601 タイムスタンプ。ユーザーが一度もアクティブでない場合は null を返します。
「アクティブ」の定義は、デプロイメントタイプによって異なります。
- 専用クラウド / セルフマネージド: ユーザーがサインイン、W&B App のページの閲覧、Runs の記録、SDK の使用、または何らかの形での W&B サーバーとのやり取りを行った場合にアクティブとみなされます。
- Multi-tenant クラウド: 2025年5月8日以降に、組織にスコープされた監査可能なアクションを実行した場合にアクティブとみなされます。詳細は 監査ログアクション を参照してください。
ユーザーの作成
組織内に新しいユーザーを作成します。
エンドポイント
- URL:
<host-url>/scim/Users
- メソッド: POST
パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|
emails | array | はい | メールオブジェクトの配列。プライマリメールを含める必要があります |
userName | string | はい | 新しいユーザーのユーザー名 |
{
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"emails": [
{
"primary": true,
"value": "dev-user2@example.com"
}
],
"userName": "dev-user2"
}
{
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:extension:teams:2.0:User"
],
"emails": [
{
"primary": true,
"value": "dev-user2@example.com"
}
],
"userName": "dev-user2",
"urn:ietf:params:scim:schemas:extension:teams:2.0:User": {
"teams": ["my-team"]
}
}
{
"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"
],
"userName": "dev-user2"
}
{
"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",
"urn:ietf:params:scim:schemas:extension:teams:2.0:User"
],
"userName": "dev-user2",
"organizationRole": "member",
"teamRoles": [
{
"teamName": "my-team",
"roleName": "member"
}
],
"groups": [
{
"value": "my-team-id"
}
]
}
ユーザーの削除
管理者アクセスの維持インスタンスまたは組織内に、常に少なくとも 1 人の管理者ユーザーが存在するようにする必要があります。そうでない場合、誰も組織の W&B アカウントを設定または維持できなくなります。組織が SCIM やその他の自動化プロセスを使用して W&B からユーザーをデプロビジョニングする場合、デプロビジョニング操作によって不注意に最後の管理者がインスタンスまたは組織から削除される可能性があります。運用手順の策定に関する支援、または管理者アクセスの復旧については、サポートまでお問い合わせください。
組織からユーザーを完全に削除します。
この操作はユーザーに対してのみ機能し、サービスアカウントには機能しません。サービスアカウントを削除するには、W&B Team の設定で行ってください。
エンドポイント
- URL:
<host-url>/scim/Users/{id}
- メソッド: DELETE
パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|
id | string | はい | 削除するユーザーの一意の ID |
Delete User Request
Delete User Response
ユーザーを一時的に無効化するには、PATCH エンドポイントを使用する ユーザーの無効化 API を参照してください。
ユーザーのメールアドレス更新
ユーザーのプライマリメールアドレスを更新します。
ユーザーのアカウントが組織によって管理されていない Multi-tenant クラウドではサポートされていません。
エンドポイント
- URL:
<host-url>/scim/Users/{id}
- メソッド: PATCH
パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|
id | string | はい | ユーザーの一意の ID |
op | string | はい | replace |
path | string | はい | emails |
value | array | はい | 新しいメールオブジェクトを含む配列 |
Update Email Request
Update Email Response
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "emails",
"value": [
{
"value": "newemail@example.com",
"primary": true
}
]
}
]
}
{
"active": true,
"displayName": "Dev User 1",
"emails": {
"Value": "newemail@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"
}
ユーザーの表示名更新
ユーザーの表示名を更新します。
ユーザーのアカウントが組織によって管理されていない Multi-tenant クラウドではサポートされていません。
エンドポイント
- URL:
<host-url>/scim/Users/{id}
- メソッド: PATCH
パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|
id | string | はい | ユーザーの一意の ID |
op | string | はい | replace |
path | string | はい | displayName |
value | string | はい | 新しい表示名 |
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "displayName",
"value": "John Doe"
}
]
}
{
"active": true,
"displayName": "John Doe",
"emails": {
"Value": "dev-user1@example.com",
"Display": "",
"Type": "",
"Primary": true
},
"id": "abc",
"meta": {
"resourceType": "User",
"created": "2025-7-01T00:00:00Z",
"lastModified": "2025-7-01T00:00:00Z",
"location": "users/dev-user1"
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"userName": "dev-user1"
}
ユーザーの無効化
組織内のユーザーを無効化します。実際の結果はデプロイメントタイプによって異なります。
- 専用クラウド / セルフマネージド: ユーザーの
active フィールドを false に設定します。無効化されたユーザーのアクセスを復元するには、ユーザーの再有効化 を参照してください。
- Multi-tenant クラウド: 組織からユーザーを削除します。アクセスを復元するには、ユーザーを組織に再度追加します。ユーザーの作成 を参照してください。Multi-tenant クラウドでは、ユーザーのアカウントは組織によって管理されません。
この操作はユーザーに対してのみ機能し、サービスアカウントには機能しません。サービスアカウントの無効化はサポートされていません。チームのサービスアカウントは W&B Team の設定で管理してください。
エンドポイント
- URL:
<host-url>/scim/Users/{id}
- メソッド: PATCH
パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|
id | string | はい | 無効化するユーザーの一意の ID |
op | string | はい | replace |
value | object | はい | {"active": false} を含むオブジェクト |
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"value": {"active": false}
}
]
}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"value": {"active": false}
}
]
}
{
"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"
}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"value": {"active": true}
}
]
}
ユーザーの再有効化
以前に無効化された組織内のユーザーを再有効化します。
-
ユーザーの再有効化はユーザーに対してのみ機能し、サービスアカウントには機能しません。サービスアカウントの再有効化はサポートされていません。サービスアカウントは W&B Team の設定で管理してください。
-
ユーザーの再有効化は Multi-tenant クラウド ではサポートされていません。アクセスを復元するには、ユーザーを組織に再度追加してください。ユーザーの作成 を参照してください。Multi-tenant クラウドでは、ユーザーのアカウントは組織によって管理されません。ユーザーを再有効化しようとすると、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
パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|
id | string | はい | 再有効化するユーザーの一意の ID |
op | string | はい | replace |
value | object | はい | {"active": true} を含むオブジェクト |
Reactivate User Request
Reactivate User Response
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"value": {"active": true}
}
]
}
{
"active": true,
"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"
}
組織ロールの割り当て
ユーザーに組織レベルのロールを割り当てます。
この操作はユーザーに対してのみ機能し、サービスアカウントには機能しません。サービスアカウントのカスタムロールはサポートされていません。
エンドポイント
- URL:
<host-url>/scim/Users/{id}
- メソッド: PATCH
パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|
id | string | はい | ユーザーの一意の ID |
op | string | はい | replace |
path | string | はい | organizationRole |
value | string | はい | ロール名(admin または member) |
組織スコープの viewer ロールは非推奨となり、UI で割り当てることはできなくなりました。SCIM を使用してユーザーに viewer ロールを割り当てた場合:
- 組織内では
member ロールが割り当てられます。
- Models では
full シートの代わりに viewer シートが割り当てられます。これにより、Models への閲覧のみのアクセスと Registry へのフルアクセスが可能になります。Models シートに空きがない場合は、Seat limit reached エラーが記録され、メンバーは Models アクセス権なしで追加されます。シートに空きができれば、後で更新可能です。
- Weave では
full シートの代わりに viewer シートが割り当てられます。これにより、Weave への閲覧のみのアクセスが可能になります。Weave シートに空きがない場合は、Seat limit reached エラーが記録され、メンバーは Weave アクセス権なしで追加されます。シートに空きができれば、後で更新可能です。
- 組織レベルで表示可能な registries において、Registry
viewer ロールが割り当てられます。
Assign Org Role Request
Assign Org Role Response
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "organizationRole",
"value": "admin"
}
]
}
{
"active": true,
"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",
"teamRoles": [
{
"teamName": "team1",
"roleName": "admin"
}
],
"organizationRole": "admin"
}
チームロールの割り当て
ユーザーにチームレベルのロールを割り当てます。
この操作はユーザーに対してのみ機能し、サービスアカウントには機能しません。サービスアカウントのカスタムロールはサポートされていません。
エンドポイント
- URL:
<host-url>/scim/Users/{id}
- メソッド: PATCH
パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|
id | string | はい | ユーザーの一意の ID |
op | string | はい | replace |
path | string | はい | teamRoles |
value | array | はい | teamName と roleName を含むオブジェクトの配列 |
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "teamRoles",
"value": [
{
"roleName": "admin",
"teamName": "team1"
}
]
}
]
}
{
"active": true,
"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",
"teamRoles": [
{
"teamName": "team1",
"roleName": "admin"
}
],
"organizationRole": "admin"
}
Registry への追加
指定された registry レベルのロールとともに、ユーザーを registry に追加します。
この操作はユーザーに対してのみ機能し、サービスアカウントには機能しません。サービスアカウントのカスタムロールはサポートされていません。
エンドポイント
- URL:
<host-url>/scim/Users/{id}
- メソッド: PATCH
パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|
id | string | はい | ユーザーの一意の ID |
op | string | はい | add |
path | string | はい | registryRoles |
value | array | はい | registryName と roleName を含むオブジェクトの配列 |
Add to Registry Request
Add to Registry Response
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "registryRoles",
"value": [
{
"roleName": "admin",
"registryName": "hello-registry"
}
]
}
]
}
{
"active": true,
"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",
"registryRoles": [
{
"registryName": "hello-registry",
"roleName": "admin"
}
],
"organizationRole": "admin"
}
Registry からの削除
registry からユーザーを削除します。
- 削除操作は RFC 7644 SCIM プロトコル仕様に従います。特定の registry からユーザーを削除するには
"registryRoles[registryName eq \"{registry_name}\"]" フィルタ構文を使用し、すべての registry から削除するには "registryRoles" を使用します。
- この操作はユーザーに対してのみ機能し、サービスアカウントには機能しません。サービスアカウントを registry から削除するには、W&B Team の設定で行ってください。
エンドポイント
- URL:
<host-url>/scim/Users/{id}
- メソッド: PATCH
パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|
id | string | はい | ユーザーの一意の ID |
op | string | はい | remove |
path | string | はい | "registryRoles[registryName eq \"{registry_name}\"]" または "registryRoles" |
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "registryRoles[registryName eq \"goodbye-registry\"]"
}
]
}
{
"active": true,
"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",
"registryRoles": [
{
"registryName": "hello-registry",
"roleName": "admin"
}
],
"organizationRole": "admin"
}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "registryRoles"
}
]
}
{
"active": true,
"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",
"organizationRole": "admin"
}
Group リソース
IAM で SCIM グループを作成すると、W&B Team が作成されてマッピングされ、他の SCIM グループ操作もそのチームに対して実行されます。
サービスアカウント
SCIM を使用して W&B Team を作成すると、サービスアカウントのチームリソースへのアクセスを維持するために、すべての組織レベルのサービスアカウントが自動的にそのチームに追加されます。
グループのフィルタリング
/Groups エンドポイントは、特定のチームを検索するためのフィルタリングをサポートしています。
サポートされているフィルタ
displayName eq "value" - チームの表示名でフィルタリング
GET /scim/Groups?filter=displayName eq "engineering-team"
チームの取得
チームの一意の ID を指定して、チーム情報を取得します。
エンドポイント
- URL:
<host-url>/scim/Groups/{id}
- メソッド: GET
{
"displayName": "acme-devs",
"id": "ghi",
"members": [
{
"Value": "abc",
"Ref": "",
"Type": "",
"Display": "dev-user1"
}
],
"meta": {
"resourceType": "Group",
"created": "2023-10-01T00:00:00Z",
"lastModified": "2023-10-01T00:00:00Z",
"location": "Groups/ghi"
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:Group"
]
}
チーム一覧の取得
チームのリストを取得します。
エンドポイント
- URL:
<host-url>/scim/Groups
- メソッド: GET
{
"Resources": [
{
"displayName": "acme-devs",
"id": "ghi",
"members": [
{
"Value": "abc",
"Ref": "",
"Type": "",
"Display": "dev-user1"
}
],
"meta": {
"resourceType": "Group",
"created": "2023-10-01T00:00:00Z",
"lastModified": "2023-10-01T00:00:00Z",
"location": "Groups/ghi"
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:Group"
]
}
],
"itemsPerPage": 9999,
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:ListResponse"
],
"startIndex": 1,
"totalResults": 1
}
チームの作成
- エンドポイント:
<host-url>/scim/Groups
- メソッド: POST
- 説明: 新しいチームリソースを作成します。
- サポートされているフィールド:
| フィールド | 型 | 必須 |
|---|
displayName | String | はい |
members | 多値配列 | はい(value サブフィールドが必須で、ユーザー ID にマッピングされます) |
dev-user2 をメンバーとする wandb-support というチームを作成します。
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"displayName": "wandb-support",
"members": [
{
"value": "def"
}
]
}
{
"displayName": "wandb-support",
"id": "jkl",
"members": [
{
"Value": "def",
"Ref": "",
"Type": "",
"Display": "dev-user2"
}
],
"meta": {
"resourceType": "Group",
"created": "2023-10-01T00:00:00Z",
"lastModified": "2023-10-01T00:00:00Z",
"location": "Groups/jkl"
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:Group"
]
}
チームの更新
- エンドポイント:
<host-url>/scim/Groups/{id}
- メソッド: PATCH
- 説明: 既存のチームのメンバーシップリストを更新します。
- サポートされている操作: メンバーの
add(追加)、remove(削除)、replace(置換)
-
削除操作は RFC 7644 SCIM プロトコル仕様に従います。特定のユーザーを削除するには
members[value eq "{user_id}"] フィルタ構文を使用し、チームからすべてのユーザーを削除するには members を使用します。
ユーザーの識別: メンバー操作における {user_id} は以下のいずれかです。
-
これらの操作はユーザーに対してのみ機能し、サービスアカウントには機能しません。チームのサービスアカウントを更新するには、W&B Team の設定で行ってください。
リクエスト内の {team_id} は実際のチーム ID に、{user_id} は実際のユーザー ID またはメールアドレスに置き換えてください。
チームメンバーの置換
チームのすべてのメンバーを新しいリストに置き換えます。
この操作はユーザーに対してのみ機能し、サービスアカウントには機能しません。サービスアカウントは W&B Team の設定で管理してください。
- エンドポイント:
<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}"
}
]
}
{
"displayName": "acme-devs",
"id": "ghi",
"members": [
{
"Value": "user_id_1",
"Ref": "",
"Type": "",
"Display": "user1"
},
{
"Value": "user_id_2",
"Ref": "",
"Type": "",
"Display": "user2"
}
],
"meta": {
"resourceType": "Group",
"created": "2023-10-01T00:00:00Z",
"lastModified": "2023-10-01T00:01:00Z",
"location": "Groups/ghi"
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:Group"
]
}
チームへのユーザー追加
dev-user2 を acme-devs に追加する場合:
この操作はユーザーに対してのみ機能し、サービスアカウントには機能しません。サービスアカウントは W&B Team の設定で管理してください。
PATCH /scim/Groups/{team_id}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "add",
"path": "members",
"value": [
{
"value": "{user_id}"
}
]
}
]
}
{
"displayName": "acme-devs",
"id": "ghi",
"members": [
{
"Value": "abc",
"Ref": "",
"Type": "",
"Display": "dev-user1"
},
{
"Value": "def",
"Ref": "",
"Type": "",
"Display": "dev-user2"
}
],
"meta": {
"resourceType": "Group",
"created": "2023-10-01T00:00:00Z",
"lastModified": "2023-10-01T00:01:00Z",
"location": "Groups/ghi"
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:Group"
]
}
チームからの特定ユーザーの削除
dev-user2 を acme-devs から削除する場合:
この操作はユーザーに対してのみ機能し、サービスアカウントには機能しません。サービスアカウントは W&B Team の設定で管理してください。
PATCH /scim/Groups/{team_id}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "remove",
"path": "members[value eq \"{user_id}\"]"
}
]
}
{
"displayName": "acme-devs",
"id": "ghi",
"members": [
{
"Value": "abc",
"Display": "dev-user1"
}
],
"meta": {
"resourceType": "Group",
"created": "2023-10-01T00:00:00Z",
"lastModified": "2023-10-01T00:01:00Z",
"location": "Groups/ghi"
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:Group"
]
}
チームからの全ユーザーの削除
acme-devs からすべてのユーザーを削除する場合:
この操作はユーザーに対してのみ機能し、サービスアカウントには機能しません。サービスアカウントは W&B Team の設定で管理してください。
PATCH /scim/Groups/{team_id}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "remove",
"path": "members"
}
]
}
{
"displayName": "acme-devs",
"id": "ghi",
"members": null,
"meta": {
"resourceType": "Group",
"created": "2023-10-01T00:00:00Z",
"lastModified": "2023-10-01T00:01:00Z",
"location": "Groups/ghi"
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:Group"
]
}
チームの削除
- チームには関連付けられた追加データがあるため、現在 SCIM API によるチームの削除はサポートされていません。すべて削除することを確認するため、アプリからチームを削除してください。
ロールリソース
SCIM のロールリソースは W&B のカスタムロールにマッピングされます。前述の通り、/Roles エンドポイントは公式の SCIM スキーマの一部ではありませんが、W&B は組織内のカスタムロールの自動管理をサポートするためにエンドポイントを追加しています。
カスタムロールの取得
カスタムロールの一意の ID を指定して情報を取得します。
エンドポイント
- URL:
<host-url>/scim/Roles/{id}
- メソッド: GET
{
"description": "A sample custom role for example",
"id": "Um9sZTo3",
"inheritedFrom": "member", // 継承元の定義済みロールを示します
"meta": {
"resourceType": "Role",
"created": "2023-11-20T23:10:14Z",
"lastModified": "2023-11-20T23:31:23Z",
"location": "Roles/Um9sZTo3"
},
"name": "Sample custom role",
"organizationID": "T3JnYW5pemF0aW9uOjE0ODQ1OA==",
"permissions": [
{
"name": "artifact:read",
"isInherited": true // member ロールから継承された権限
},
...
...
{
"name": "project:update",
"isInherited": false // 管理者によって追加されたカスタム権限
}
],
"schemas": [
""
]
}
カスタムロール一覧の取得
W&B 組織内のすべてのカスタムロールの情報を取得します。
エンドポイント
- URL:
<host-url>/scim/Roles
- メソッド: GET
{
"Resources": [
{
"description": "A sample custom role for example",
"id": "Um9sZTo3",
"inheritedFrom": "member", // 継承元の定義済みロールを示します
"meta": {
"resourceType": "Role",
"created": "2023-11-20T23:10:14Z",
"lastModified": "2023-11-20T23:31:23Z",
"location": "Roles/Um9sZTo3"
},
"name": "Sample custom role",
"organizationID": "T3JnYW5pemF0aW9uOjE0ODQ1OA==",
"permissions": [
{
"name": "artifact:read",
"isInherited": true // member ロールから継承された権限
},
...
...
{
"name": "project:update",
"isInherited": false // 管理者によって追加されたカスタム権限
}
],
"schemas": [
""
]
},
{
"description": "Another sample custom role for example",
"id": "Um9sZToxMg==",
"inheritedFrom": "viewer", // 継承元の定義済みロールを示します
"meta": {
"resourceType": "Role",
"created": "2023-11-21T01:07:50Z",
"location": "Roles/Um9sZToxMg=="
},
"name": "Sample custom role 2",
"organizationID": "T3JnYW5pemF0aW9uOjE0ODQ1OA==",
"permissions": [
{
"name": "launchagent:read",
"isInherited": true // viewer ロールから継承された権限
},
...
...
{
"name": "run:stop",
"isInherited": false // 管理者によって追加されたカスタム権限
}
],
"schemas": [
""
]
}
],
"itemsPerPage": 9999,
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:ListResponse"
],
"startIndex": 1,
"totalResults": 2
}
カスタムロールの作成
- エンドポイント:
<host-url>/scim/Roles
- メソッド: POST
- 説明: W&B 組織内に新しいカスタムロールを作成します。
- サポートされているフィールド:
| フィールド | 型 | 必須 |
|---|
name | String | カスタムロールの名前 |
description | String | カスタムロールの説明 |
permissions | Object array | 権限オブジェクトの配列。各オブジェクトは w&bobject:operation 形式の name 文字列フィールドを持ちます。例えば、W&B Runs の削除操作の権限オブジェクトは run:delete になります。 |
inheritedFrom | String | カスタムロールが継承する定義済みロール。member または viewer のいずれかです。 |
{
"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"
}
{
"description": "A sample custom role for example",
"id": "Um9sZTo3",
"inheritedFrom": "member", // 継承元の定義済みロールを示します
"meta": {
"resourceType": "Role",
"created": "2023-11-20T23:10:14Z",
"lastModified": "2023-11-20T23:31:23Z",
"location": "Roles/Um9sZTo3"
},
"name": "Sample custom role",
"organizationID": "T3JnYW5pemF0aW9uOjE0ODQ1OA==",
"permissions": [
{
"name": "artifact:read",
"isInherited": true // member ロールから継承された権限
},
...
...
{
"name": "project:update",
"isInherited": false // 管理者によって追加されたカスタム権限
}
],
"schemas": [
""
]
}
カスタムロールの更新
ロールへの権限追加
- エンドポイント:
<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"
}
]
}
]
}
新しい権限が追加され、更新されたロールが返されます。
ロールからの権限削除
- エンドポイント:
<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
高度な機能
ETag サポート
SCIM API は、同時編集の競合を防ぐための条件付き更新用の ETag をサポートしています。ETag は ETag 応答ヘッダーおよび meta.version フィールドで返されます。
ETag の使用方法
ETag を使用するには:
- 現在の ETag を取得: リソースを GET した際、応答内の ETag ヘッダーを控えておきます。
- 条件付き更新: 更新時に
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 | 作成成功 |
204 | No Content (削除成功) |
400 | Bad Request - パラメータまたはリクエストボディが無効 |
401 | Unauthorized - 認証失敗 |
403 | Forbidden - 権限不足 |
404 | Not Found - リソースが存在しない |
409 | Conflict - リソースが既に存在 |
412 | Precondition Failed - ETag の不一致 |
500 | Internal Server Error |
デプロイメントタイプごとの実装の違い
W&B は 2 つの独立した SCIM API 実装を維持しており、機能が異なります。
| 機能 | 専用クラウド | セルフマネージド |
|---|
| ユーザーのメール更新 | - | ✓ |
| ユーザーの表示名更新 | - | ✓ |
| ユーザーの無効化 | ✓ | ✓ |
| ユーザーの再有効化 | - | ✓ |
| ユーザーあたりの複数メール | ✓ | - |
制限事項
- 最大取得数: 1 リクエストあたり 9999 アイテム。
- シングルテナント環境: ユーザーあたり 1 つのメールアドレスのみをサポートします。
- チームの削除: SCIM 経由ではサポートされていません(W&B ウェブインターフェースを使用してください)。
- ユーザーの再有効化: Multi-tenant クラウド環境ではサポートされていません。
- シート制限: 組織のシート制限に達した場合、操作が失敗することがあります。