user-provisioning について
ServiceNowの管理者、セキュリティ管理者、HRシステム連携担当者向けのユーザーライフサイクル管理スキルです。アカウント作成、ロールとグループの割り当て、変更、退職処理、一括操作を扱い、職務別テンプレートと最小権限の考え方を示します。
主な機能
- 01ユーザーアカウントの作成と更新
- 02ロールとグループメンバーシップの割り当て
- 03職務別テンプレートによるアクセス設定
- 04退職処理と一括操作
活用シーン
- 01新入社員のアカウントとアクセス権の設定
- 02異動時のロールとグループの変更
- 03退職時のアカウント停止とアクセス権の撤回
- 04ユーザーの一括作成やグループ割り当て
MCP 対応
ユーザー、ロール、グループのレコードを検索、作成、更新するServiceNow MCPツールを紹介し、バッチ操作とバックグラウンドスクリプトの利用方法を説明します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ happy-technologies-llc/ happy-platform-skills --skill user-provisioningインストール後、Claude Code で/user-provisioningを入力して読み込まれたか確認します。
詳細
ユーザーのプロビジョニング
概要
このスキルでは、ServiceNow のユーザーライフサイクル管理に関する包括的なガイダンスを提供します。
- 適切な属性を設定して新しいユーザーアカウントを作成する
- 職務に基づいてロールを割り当てる
- グループメンバーシップを管理する
- ユーザーのプロビジョニング解除とオフボーディングを行う
- ユーザーの一括操作を行う
使用する場面: 新入社員のオンボーディング、ユーザーアクセスの変更、または退職する従業員のオフボーディングを行う場合です。
対象者: システム管理者、セキュリティ管理者、人事システムインテグレーターです。
前提条件
- ロール:
admin、user_admin、またはsecurity_admin - アクセス権: sys_user、sys_user_group、sys_user_grmember、sys_user_has_role テーブル
- 知識: 組織のロール構成とグループ構成についての理解
- LDAP/SSO: 外部システムと統合している場合は、どの属性が外部で管理されているかを把握しておくこと
主なテーブル
| テーブル | 目的 |
|---|---|
| sys_user | ユーザーレコード |
| sys_user_group | グループ定義 |
| sys_user_grmember | グループメンバーシップの関連付け |
| sys_user_has_role | 直接割り当てられたロール |
| sys_user_role | ロール定義 |
| sys_group_has_role | グループに割り当てられたロール |
手順
フェーズ 1:ユーザーの作成
ステップ 1.1:ユーザー情報を収集する
新しいユーザーの作成に必要なフィールド:
| フィールド | 説明 | 例 |
|---|---|---|
| user_name | 一意のログイン ID | jsmith |
| first_name | 名 | John |
| last_name | 姓 | Smith |
| メールアドレス | [email protected] | |
| employee_number | 従業員 ID | EMP-12345 |
| department | 部門への参照 | IT Operations |
| manager | マネージャーへの参照 | マネージャーの sys_id |
ステップ 1.2:既存ユーザーを確認する
作成する前に、ユーザーがすでに存在していないことを確認します。
MCP を使用:
Tool: SN-Query-Table
Parameters:
table_name: sys_user
query: user_name=jsmith^[email protected]
fields: sys_id,user_name,email,active
limit: 5
ユーザーが存在する場合は、ロールとグループの割り当てに進みます。
ステップ 1.3:ユーザーアカウントを作成する
MCP を使用:
Tool: SN-Create-Record
Parameters:
table_name: sys_user
data:
user_name: jsmith
first_name: John
last_name: Smith
email: [email protected]
employee_number: EMP-12345
title: Software Developer
department: [department_sys_id]
manager: [manager_sys_id]
location: [location_sys_id]
company: [company_sys_id]
phone: "+1-555-123-4567"
mobile_phone: "+1-555-987-6543"
active: true
locked_out: false
password_needs_reset: true
notification: 2 # Email notifications enabled
REST API を使用:
POST /api/now/table/sys_user
Content-Type: application/json
{
"user_name": "jsmith",
"first_name": "John",
"last_name": "Smith",
"email": "[email protected]",
"employee_number": "EMP-12345",
"active": "true",
"password_needs_reset": "true"
}
ステップ 1.4:初期パスワードを設定する
MCP を使用(バックグラウンドスクリプト):
Tool: SN-Execute-Background-Script
Parameters:
script: |
var user = new GlideRecord('sys_user');
user.get('user_name', 'jsmith');
// Generate random password
var password = GlideSecureRandomUtil.getSecureRandomString(16);
user.setDisplayValue('user_password', password);
user.password_needs_reset = true;
user.update();
// Send welcome email (optional)
gs.eventQueue('user.created', user, password, '');
gs.info('User created. Initial password set. User will be prompted to reset on first login.');
description: Set initial password for new user
フェーズ 2:ロールの割り当て
ステップ 2.1:ロール階層を理解する
一般的な ServiceNow のロール:
| ロール | 説明 | 主なユーザー |
|---|---|---|
| itil | ITSM 運用 | ヘルプデスク、技術者 |
| admin | 完全な管理者アクセス | システム管理者 |
| approver_user | 承認機能 | マネージャー |
| catalog_admin | カタログ管理 | カタログ所有者 |
| knowledge | ナレッジベースへのアクセス | KB 投稿者 |
| asset | アセット管理 | アセットマネージャー |
| change_manager | 変更管理 | 変更マネージャー |
| problem_manager | 問題管理 | 問題マネージャー |
ステップ 2.2:利用可能なロールを照会する
ロールを検索:
Tool: SN-Query-Table
Parameters:
table_name: sys_user_role
query: active=true
fields: sys_id,name,description,suffix
limit: 50
名前でロールを検索:
Tool: SN-Query-Table
Parameters:
table_name: sys_user_role
query: name=itil
fields: sys_id,name,description
limit: 1
ステップ 2.3:ユーザーにロールを割り当てる
ロールを直接割り当てる:
Tool: SN-Create-Record
Parameters:
table_name: sys_user_has_role
data:
user: [user_sys_id]
role: [role_sys_id]
state: active
inherited: false
複数のロールを割り当てる(一括):
Tool: SN-Batch-Create
Parameters:
records:
- table_name: sys_user_has_role
data:
user: [user_sys_id]
role: [itil_role_sys_id]
- table_name: sys_user_has_role
data:
user: [user_sys_id]
role: [knowledge_role_sys_id]
- table_name: sys_user_has_role
data:
user: [user_sys_id]
role: [approver_user_role_sys_id]
ステップ 2.4:ロールの割り当てを確認する
ユーザーのロールを確認:
Tool: SN-Query-Table
Parameters:
table_name: sys_user_has_role
query: user=[user_sys_id]^state=active
fields: role,role.name,inherited,granted_by
limit: 50
フェーズ 3:グループメンバーシップ
ステップ 3.1:利用可能なグループを一覧表示する
MCP を使用:
Tool: SN-List-SysUserGroups
Parameters:
limit: 100
または、フィルターを指定して照会:
Tool: SN-Query-Table
Parameters:
table_name: sys_user_group
query: active=true^type=itil
fields: sys_id,name,description,manager,email
limit: 50
ステップ 3.2:ユーザーをグループに追加する
単一グループへの割り当て:
Tool: SN-Create-Record
Parameters:
table_name: sys_user_grmember
data:
user: [user_sys_id]
group: [group_sys_id]
複数グループへの割り当て(一括):
Tool: SN-Batch-Create
Parameters:
records:
- table_name: sys_user_grmember
data:
user: [user_sys_id]
group: [network_support_group_sys_id]
- table_name: sys_user_grmember
data:
user: [user_sys_id]
group: [it_operations_group_sys_id]
- table_name: sys_user_grmember
data:
user: [user_sys_id]
group: [change_advisory_board_sys_id]
ステップ 3.3:グループメンバーシップを確認する
ユーザーのグループを確認:
Tool: SN-Query-Table
Parameters:
table_name: sys_user_grmember
query: user=[user_sys_id]
fields: group,group.name,group.type
limit: 50
グループのメンバーを確認:
Tool: SN-Query-Table
Parameters:
table_name: sys_user_grmember
query: group=[group_sys_id]
fields: user,user.name,user.email
limit: 100
フェーズ 4:ロールベースのプロビジョニングテンプレート
ステップ 4.1:ロールテンプレートを定義する
一般的な職務向けに、標準化されたプロビジョニングを作成します。
IT サポート技術者テンプレート:
Roles: itil, knowledge
Groups: Service Desk, IT Support Tier 1
Notification: Email enabled
IT マネージャーテンプレート:
Roles: itil, approver_user, report_user
Groups: IT Management, Change Advisory Board
Notification: Email enabled
開発者テンプレート:
Roles: itil, personalize_dictionary
Groups: Development Team, Testing
Notification: Email enabled
ステップ 4.2:自動プロビジョニングスクリプト
テンプレートによるプロビジョニング:
Tool: SN-Execute-Background-Script
Parameters:
script: |
var userSysId = '[user_sys_id]';
var template = 'IT_SUPPORT_TECHNICIAN';
var templates = {
'IT_SUPPORT_TECHNICIAN': {
roles: ['itil', 'knowledge'],
groups: ['Service Desk', 'IT Support Tier 1']
},
'IT_MANAGER': {
roles: ['itil', 'approver_user', 'report_user'],
groups: ['IT Management', 'Change Advisory Board']
},
'DEVELOPER': {
roles: ['itil', 'personalize_dictionary'],
groups: ['Development Team', 'Testing']
}
};
var config = templates[template];
if (!config) {
gs.error('Unknown template: ' + template);
return;
}
// Assign roles
config.roles.forEach(function(roleName) {
var role = new GlideRecord('sys_user_role');
role.addQuery('name', roleName);
role.query();
if (role.next()) {
var userRole = new GlideRecord('sys_user_has_role');
userRole.initialize();
userRole.user = userSysId;
userRole.role = role.sys_id;
userRole.insert();
gs.info('Assigned role: ' + roleName);
}
});
// Assign groups
config.groups.forEach(function(groupName) {
var group = new GlideRecord('sys_user_group');
group.addQuery('name', groupName);
group.query();
if (group.next()) {
var membership = new GlideRecord('sys_user_grmember');
membership.initialize();
membership.user = userSysId;
membership.group = group.sys_id;
membership.insert();
gs.info('Added to group: ' + groupName);
}
});
gs.info('Provisioning complete for template: ' + template);
description: Provision user by job template
フェーズ 5:ユーザーの変更
ステップ 5.1:ユーザー属性を更新する
ユーザーレコードを更新:
Tool: SN-Update-Record
Parameters:
table_name: sys_user
sys_id: [user_sys_id]
data:
title: Senior Software Developer
department: [new_department_sys_id]
manager: [new_manager_sys_id]
location: [new_location_sys_id]
ステップ 5.2:ユーザーを新しいグループに移す
以前のグループから削除:
Tool: SN-Query-Table
Parameters:
table_name: sys_user_grmember
query: user=[user_sys_id]^group=[old_group_sys_id]
fields: sys_id
limit: 1
# Then delete:
Tool: SN-Execute-Background-Script
Parameters:
script: |
var gr = new GlideRecord('sys_user_grmember');
gr.get('[membership_sys_id]');
gr.deleteRecord();
description: Remove user from group
新しいグループに追加:
Tool: SN-Create-Record
Parameters:
table_name: sys_user_grmember
data:
user: [user_sys_id]
group: [new_group_sys_id]
ステップ 5.3:ロールの昇格/削除
ロールを削除:
Tool: SN-Query-Table
Parameters:
table_name: sys_user_has_role
query: user=[user_sys_id]^role=[role_sys_id]
fields: sys_id
limit: 1
# Then deactivate (preferred) or delete:
Tool: SN-Update-Record
Parameters:
table_name: sys_user_has_role
sys_id: [user_role_sys_id]
data:
state: revoked
フェーズ 6:プロビジョニング解除/オフボーディング
ステップ 6.1:即時対応
従業員が退職した場合は、直ちに次の手順を実施してください。
1. ユーザーアカウントを無効化する:
Tool: SN-Update-Record
Parameters:
table_name: sys_user
sys_id: [user_sys_id]
data:
active: false
locked_out: true
2. すべてのロールを取り消す:
Tool: SN-Execute-Background-Script
Parameters:
script: |
var userSysId = '[user_sys_id]';
var gr = new GlideRecord('sys_user_has_role');
gr.addQuery('user', userSysId);
gr.addQuery('state', 'active');
gr.query();
var count = 0;
while (gr.next()) {
gr.state = 'revoked';
gr.update();
count++;
}
gs.info('Revoked ' + count + ' roles for user');
description: Revoke all user roles
3. すべてのグループから削除する:
Tool: SN-Execute-Background-Script
Parameters:
script: |
var userSysId = '[user_sys_id]';
var gr = new GlideRecord('sys_user_grmember');
gr.addQuery('user', userSysId);
gr.query();
var count = 0;
while (gr.next()) {
gr.deleteRecord();
count++;
}
gs.info('Removed user from ' + count + ' groups');
description: Remove user from all groups
ステップ 6.2:所有レコードを再割り当てする
ユーザーが所有するレコードを検索する:
Tool: SN-Query-Table
Parameters:
table_name: incident
query: assigned_to=[user_sys_id]^active=true
fields: number,short_description,state
limit: 100
Tool: SN-Query-Table
Parameters:
table_name: change_request
query: assigned_to=[user_sys_id]^stateNOT IN3,4,7
fields: number,short_description,state
limit: 100
一括再割り当て:
Tool: SN-Execute-Background-Script
Parameters:
script: |
var departingUser = '[departing_user_sys_id]';
var newAssignee = '[new_assignee_sys_id]';
var tables = ['incident', 'change_request', 'problem', 'sc_task'];
tables.forEach(function(tableName) {
var gr = new GlideRecord(tableName);
gr.addQuery('assigned_to', departingUser);
gr.addQuery('active', true);
gr.query();
var count = 0;
while (gr.next()) {
gr.assigned_to = newAssignee;
gr.work_notes = 'Reassigned due to employee departure';
gr.update();
count++;
}
gs.info('Reassigned ' + count + ' ' + tableName + ' records');
});
description: Reassign all active records from departing user
ステップ 6.3:オフボーディングを記録する
オフボーディングレコードを作成する:
Tool: SN-Create-Record
Parameters:
table_name: sys_user_task
data:
short_description: "Offboarding: [User Name] - [Employee ID]"
description: |
Employee Offboarding Checklist:
[x] User account deactivated
[x] All roles revoked
[x] Removed from all groups
[x] Active tickets reassigned
Departure Date: 2026-02-06
Reason: [Resignation/Termination/Transfer]
IT Actions:
- [ ] VPN access revoked
- [ ] Email forwarding configured
- [ ] Hardware returned
- [ ] Access badges collected
Manager: [Manager Name]
HR Contact: [HR Name]
assigned_to: [hr_admin_sys_id]
priority: 2
フェーズ 7:一括操作
ステップ 7.1:ユーザーの一括作成
複数のユーザーを作成する:
Tool: SN-Batch-Create
Parameters:
records:
- table_name: sys_user
data:
user_name: user1
first_name: Alice
last_name: Johnson
email: [email protected]
active: true
- table_name: sys_user
data:
user_name: user2
first_name: Bob
last_name: Williams
email: [email protected]
active: true
- table_name: sys_user
data:
user_name: user3
first_name: Carol
last_name: Davis
email: [email protected]
active: true
ステップ 7.2:ロールの一括割り当て
複数のユーザーにロールを割り当てる:
Tool: SN-Execute-Background-Script
Parameters:
script: |
var userIds = ['[user1_sys_id]', '[user2_sys_id]', '[user3_sys_id]'];
var roleName = 'itil';
var role = new GlideRecord('sys_user_role');
role.addQuery('name', roleName);
role.query();
if (role.next()) {
userIds.forEach(function(userId) {
var userRole = new GlideRecord('sys_user_has_role');
userRole.initialize();
userRole.user = userId;
userRole.role = role.sys_id;
userRole.insert();
});
gs.info('Assigned ' + roleName + ' role to ' + userIds.length + ' users');
}
description: Bulk role assignment
ステップ 7.3:グループメンバーシップの一括設定
複数のユーザーをグループに追加する:
Tool: SN-Execute-Background-Script
Parameters:
script: |
var groupName = 'Network Support';
var userIds = ['[user1_sys_id]', '[user2_sys_id]', '[user3_sys_id]'];
var group = new GlideRecord('sys_user_group');
group.addQuery('name', groupName);
group.query();
if (group.next()) {
userIds.forEach(function(userId) {
var member = new GlideRecord('sys_user_grmember');
member.initialize();
member.user = userId;
member.group = group.sys_id;
member.insert();
});
gs.info('Added ' + userIds.length + ' users to ' + groupName);
}
description: Bulk group membership assignment
ツールの使用概要
| 操作 | MCP ツール | 目的 |
|---|---|---|
| ユーザーの一覧表示 | SN-List-SysUsers | すべてのユーザーを取得する |
| グループの一覧表示 | SN-List-SysUserGroups | すべてのグループを取得する |
| ユーザーの作成 | SN-Create-Record | 新しいユーザーを作成する |
| ユーザーの更新 | SN-Update-Record | ユーザー属性を変更する |
| クエリ | SN-Query-Table | ユーザー、ロール、グループを検索する |
| 一括作成 | SN-Batch-Create | 複数のレコードを作成する |
| スクリプト | SN-Execute-Background-Script | 複雑な操作を実行する |
ベストプラクティス
- 最小権限の原則: 職務に必要な最小限のロールを割り当てます
- ロールにはグループを使用する: グループにロールを割り当て、ユーザーをグループに追加します
- ロールの割り当てを記録する: 誰がどのアクセス権を持つかを文書化して管理します
- 定期的なアクセスレビュー: ユーザーのアクセス権を四半期ごとに監査します
- 即時のオフボーディング: 退職当日にアカウントを無効化します
- テンプレートを使用する: 職務別テンプレートを使ってプロビジョニングを標準化します
- ロールの直接割り当てを避ける: グループベースのロール継承を優先します
- 削除ではなくロックする: 監査証跡を保持するため、ユーザーを削除せずに無効化します
トラブルシューティング
ユーザーがログインできない
症状: ユーザーに「認証情報が無効です」というエラーが表示される 原因:
- アカウントが無効
- アカウントがロックされている
- パスワードの有効期限が切れている 解決策:
Tool: SN-Query-Table
Parameters:
table_name: sys_user
query: user_name=[username]
fields: active,locked_out,password_needs_reset,failed_attempts
ユーザーに想定されるアクセス権がない
症状: ユーザーが想定されるモジュールやレコードにアクセスできない 原因:
- ロールが割り当てられていない
- ロールが取り消されているか、有効期限が切れている
- グループメンバーシップがない 解決策:
Tool: SN-Query-Table
Parameters:
table_name: sys_user_has_role
query: user=[user_sys_id]^state=active
fields: role.name,inherited,granted_by
継承されたロールが表示されない
症状: ユーザーがグループに所属しているが、そのグループのロールが付与されない 原因:
- グループのロール継承が無効
- グループが無効 解決策:
Tool: SN-Query-Table
Parameters:
table_name: sys_user_group
query: sys_id=[group_sys_id]
fields: name,active,roles
関連スキル
admin/batch-operations- ユーザーの一括操作security/acl-management- ACL の設定admin/script-execution- プロビジョニングスクリプトの自動化itsm/change-management- アクセス変更の変更プロセス