Active Directory の自動化の例
一連のオーケストレーション Active Directory アクティビティ 6 つを使用すると、監査可能な自己文書化ワークフローを使用してオンボード/オフボードプロセスを自動化できるため、時間を節約したり誤りを排除したりすることができます。
- AD ユーザーアカウントの作成
- AD ユーザーアカウントを更新
- AD ユーザーアカウントを削除
- AD ユーザーアカウントの無効化
- クエリー AD
- AD ユーザーパスワードをリセット。
これらのアクティビティは共通の設計を共有し、相補的な機能を持ち、共通のパラメーター セットを共有します。これらは、単独で使用することも、ユーザーアカウントのプロビジョニングとプロビジョニング解除のための一貫したワークフローを作成するために一緒に使用することもできます。
オーケストレーションによる Active Directory の更新
組織は、ServiceNow インスタンスをユーザーアカウントデータ用の単一の SoR とし、Active Directory を最新の変更で更新しようとしています。
このタスクについて
解決策は、ServiceNow ユーザー レコードを Active Directory にプッシュして新しいユーザー レコードを作成したり既存のレコードを更新したりするオーケストレーション ワークフローを作成することです。これは、ServiceNow ユーザー [sys_user] テーブル内のデータに基づいて Active Directory 内のレコードを作成および更新できるオーケストレーション ワークフローを作成することによって達成されます。
手順
- 移動先 すべて > ワークフロー > ワークフローエディター.
-
[ワークフロー] タブで、[+] アイコンをクリックして、次の変数を使用した新しいワークフローを作成します。
- 名前:同期 AD ユーザー
- テーブル:グローバル [global]
-
[送信] をクリックします。
開始ポイントと終了ポイントを持つ基本的なワークフローがキャンバスに表示されます。
-
キャンバスの左上隅にあるメニュー アイコンをクリックし、コンテキストメニューから [入力の編集] を選択します。
図 : 1. ワークフロー入力の編集 -
[ワークフロー入力] フォームで、[変数] レコード リストの [新規] をクリックし、テーブルのフィールドを使用して新しい変数を作成します。
フィールド 値 タイプ 参照 ラベル ユーザー 列名 u_user [参照仕様] > [参照] ユーザー (sys_user) - [Submit (送信)] を選択します。
- [ カスタム ] タブで、 カスタムアクティビティ > Active Directory.
-
新しいワークフローの開始ポイントと終了ポイントの間の移行線上に [AD オブジェクトを更新] アクティビティをドラッグ & ドロップします。
アクティビティが自動的に終了ポイントにリンクされ、[ワークフロー アクティビティ] プロパティ フォームが開きます。
-
テーブル内のフィールド使用して、フォームに値を入力します。
フィールド 値 名前 論理的な名前を入力します (「ユーザー データの更新」など)。 ドメインコントローラ ServiceNow LDAP 統合により、ユーザーのアカウントがリンクされている LDAP サーバーへの参照が追加されます。LDAP サーバーを識別するには、次のステートメントを入力します。 ${workflow.inputs.u_user.ldap_server.server_url}タイプ AD オブジェクトのタイプ。この例では、タイプは [ユーザー] であり、デフォルトです。 オブジェクト名 この例では、ServiceNow ユーザー名は Active Directory の sAMAccountName と一致することを前提としています。次のように入力します。 ${workflow.inputs.u_user.user_name}オブジェクトデータ ユーザーが存在する場合、Active Directory でユーザーのアカウントを更新します。この例では、ユーザーのタイトルが更新されます。 {"title" : "QA"} -
[送信] をクリックします。
ワークフローは次のようになります。
図 : 2. AD ユーザーの更新 -
アクティビティの結果の両方 ([成功] と [失敗]) を終了ポイントに接続します。
この時点で、ワークフローは ServiceNow ユーザー レコードを入力として使用し、対応する Active Directory アカウントの名、姓、およびタイトルを更新します。アカウントが Active Directory に存在しない場合、ワークフローは失敗します。注:通常のワークフローでは、失敗時にある種の代替アクションがあることが求められます。たとえば、ワークフローがレコードの更新に失敗した場合はメールと SMS 通知を送信します。
- ワークフローが失敗しないようにするには、[開始] アクティビティと [AD オブジェクトを更新] アクティビティの間の移行線に [AD オブジェクトを作成] アクティビティを追加します。
-
テーブル内のフィールドを使用して、[ワークフロー アクティビティ] プロパティ フォームに入力します。
フィールド 値 名前 論理的な名前を入力します (「ユーザー データの作成」など)。 ドメインコントローラ 更新アクティビティと同じです。 ${workflow.inputs.u_user.ldap_server.server_url}OU このオブジェクトが属する組織単位。この例では、次のように入力できます。OU=HQ,OU=Managed Objects オブジェクト名 更新アクティビティと同じです。 ${workflow.inputs.u_user.user_name}オブジェクトデータ ユーザー名のみでアカウントを作成します。この例では、次のように入力できます。 {"givenName" : "${workflow.inputs.u_user.first_name}", "SN" : "${workflow.inputs.u_user.last_name}" } - [送信] をクリックします。
-
[AD オブジェクトを作成] アクティビティの失敗結果を [終了] に接続します。
この例では、エラーを無視しています。ワークフローは次のようになります。
図 : 3. AD ユーザーの作成 この手順では、ユーザー名のみで構成されるベアボーン Active Directory アカウントを作成するシンプルなワークフローを作成します。その後、ServiceNow ユーザー [sys_user] テーブルで提供される追加情報を使用して、そのアカウントを更新します。ただし、ユーザーアカウントがすでに存在する場合は、[AD オブジェクトを作成] アクティビティを実行しません。ワークフローでは、一致するユーザー レコードを Active Directory にクエリーし、クエリーの結果に基づいてワークフローを分岐する必要があります。アカウントがすでに存在する場合、ワークフローはアカウントを更新する必要があります。アカウントが存在しない場合、ワークフローは Active Directory にアカウントを作成する必要があります。
- [クエリー AD] アクティビティを [開始] と [AD オブジェクトを作成] の間の移行にドラッグ & ドロップします。
-
テーブル内のフィールドを使用して、[ワークフロー アクティビティ] プロパティ フォームに入力します。
フィールド 定義 名前 論理的な名前を入力します (「既存のアカウントを検索」など)。 ドメインコントローラ ${workflow.inputs.u_user.ldap_server.server_url}プロパティ 返す Active Directory プロパティのカンマ区切りリスト。たとえば、givenName、SN、title などです。パラメーター フィールドが空白の場合は、すべてのプロパティが返されます。このワークフローでは、フィールドを空白のままにします。 検索フィルター 検索パラメーターを定義する LDAP フィルター文字列。有効な LDAP フィルタリング条件を使用します。入力レコードと一致するユーザーアカウントを検索するには、次のようになります。 (samaccountname=${workflow.inputs.u_user.user_name}) - [送信] をクリックします。
-
クエリー アクティビティの失敗結果を終了ポイントに接続します。
このワークフローではエラーを無視しています。
-
クエリー アクティビティの成功結果を [AD オブジェクトを更新] アクティビティに接続します。
ワークフローは次のようになります。
図 : 4. AD に対するユーザーアカウントのクエリー [クエリー AD] アクティビティは、その結果をワークフロー データバス内の JSON 文字列として返します。この JSON 文字列は、常にオブジェクトの配列です。各オブジェクトは、クエリーと一致した Active Directory エントリーに対応します。そのアレイが空であるかどうかにかかわらず、ワークフローは分岐する必要があります。
- [コア] タブの [条件] フォルダーから標準の [If] アクティビティをドラッグし、[クエリー AD] と [AD オブジェクトを更新] の間の移行にドロップします。
-
テーブル内のフィールドを使用して、[ワークフロー アクティビティ] プロパティ フォームに入力します。
フィールド 値 名前 論理的な名前を入力します (「アカウントの存在」など)。 詳細 このチェック ボックスをオンにすると、[スクリプト] フィールドが開きます。 スクリプト [If] アクティビティが正しく機能するためには、answer 変数 (var) で yes または no が返される必要があります。これは、クエリー アクティビティの Yes と No の結果に対応します。行 1 は、[クエリー AD] の結果を JSON 文字列から Javascript 配列 queryResults に変換します。行 2 は、その配列の長さをチェックします。配列が 0 より大きい場合、アカウントとの一致が見つかり、answer を yes に設定します。それ以外の場合、answer は no です。 var queryResults=new JSON().decode(data.get(5).output);answer = ( queryResults.length>0 ? 'yes' : 'no' );注:このスクリプトの式data.get(5)は、ワークフローに追加された 5 番目のアクティビティであるため、順序番号別にデータバスのクエリー AD 出力を特定します。図 : 5. データバスのクエリー AD 出力 - [送信] をクリックします。
- キャンバスで、[If] アクティビティの [Yes] 成果から [AD オブジェクトを更新] アクティビティへの移行を作成します。
-
[If] アクティビティの [No] 成果から [AD オブジェクトを作成] アクティビティへの移行を作成します。
これは最後の手順です。このワークフローは、アカウントが既に存在するかどうかを判断するために Active Directory にクエリーします。アカウントが存在する場合、ワークフローはそのアカウントを更新します。アカウントが存在しない場合、ワークフローはアカウントを作成し、Active Directory を設定済みユーザー データ セットで更新します。
図 : 6. 条件付きパスの作成