
# ディレクトリグループをロールに割り当てる

`POST /v1/directories/{directory_id}/role-mappings` · 権限 `directories:write`

SCIM ディレクトリのグループ（`directory_group_id`）をロールに割り当てます。グループのメンバーは、ディレクトリの組織でそのロールを受け取ります。グループはこのディレクトリに属している必要があります。ロールは環境ロールか、ディレクトリの組織のロールである必要があります。特権ロールへの割り当てには追加で `roles:write` が必要で、割り当ては承認済みの状態で作成されます。削除中のディレクトリは新しい割り当てを受け付けません。ディレクトリあたり最大 500 件の割り当てです。書き込みは `role_mapping.created` として監査されます。

## リクエスト

| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
| `directory_id` | path | はい | SCIM ディレクトリ ID（`dir_…`）。 |
| `directory_group_id` | string | はい | ディレクトリグループ ID（`dsg_…`）。 |
| `role_id` | string | はい | ロール ID（`rol_…`）。 |

## レスポンス

`201 Created` と割り当て。

```json
{
  "id": "rmp_01j9xw0x4y5z9a1b3c5d7e9f1h",
  "directory_id": "dir_01j9xm2n4p6q8r0s2t4v6w8y0z",
  "organization_id": "org_01j9xk3m7q8r2s4t6v8w0y2z4a",
  "directory_group_id": "dsg_01j9xn3p5q7r9s1t3v5w7x9y1a",
  "role_id": "rol_01j9xr7s1t2w6x8y0z2a4b6c8e",
  "role_privileged": false,
  "approved_at": null,
  "created_at": "2026-10-13T09:31:00.123456Z"
}
```

## エラー

| HTTP | code | 発生条件 |
|---|---|---|
| 404 | `not_found` | この環境にディレクトリが存在しません。 |
| 403 | `privileged_role_mapping_forbidden` | ロールが特権ロールで、認証情報に `roles:write` がありません。 |
| 409 | `conflict` | グループがこのディレクトリに既に割り当てられているか、ディレクトリが削除中です。 |
| 409 | `role_mapping_limit_reached` | ディレクトリにすでに 500 件の割り当てがあります。 |
| 422 | `validation_failed` | `directory_group_id` または `role_id` が欠けているか無効です。グループがこのディレクトリに属していないか（`unknown_group`）、ロールがディレクトリのスコープ外です。 |
| 401 | `unauthenticated` | 認証情報がない、無効、または取り消されています。 |
| 403 | `insufficient_permissions` | 認証情報に必要な権限がありません。 |
| 429 | `rate_limited` | レート制限を超えました。`Retry-After` の時間を置いて再試行してください。 |
| 503 | `service_unavailable` | ディレクトリのレコードを確認できないか、依存サービスが一時的に利用できません。`Retry-After` の時間を置いて再試行してください。 |

## 例

```bash
curl -i -X POST "https://api.eu.keenauth.com/v1/directories/dir_01j9xm2n4p6q8r0s2t4v6w8y0z/role-mappings" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"directory_group_id":"dsg_01j9xn3p5q7r9s1t3v5w7x9y1a","role_id":"rol_01j9xr7s1t2w6x8y0z2a4b6c8e"}'
```
