![]() | |
Sun Java™ System Identity Manager 7.0 リソースリファレンス |
第 3 章
リソースへのアクションの追加この章では、Sun JavaTM System Identity Manager で、UNIX、Windows NT、および Windows Active Directory リソースのアクションを作成および実装する方法を説明します。
アクションとはアクションとは、スクリプトアクションのネイティブサポートが存在する場合に、管理するリソースのコンテキスト内で実行するスクリプトです。たとえば、UNIX オペレーティングシステムによるシステムでは、アクションは一連の UNIX シェルコマンドです。Microsoft Windows 環境では、アクションは、CMD コンソール内で実行できる DOS 形式のコンソールコマンドです。アクションは Identity Manager リポジトリ内にオブジェクトとして存在します。メインフレーム環境では、アクションは、メインフレームとの間でキーストロークやコマンドを送受信できる Javascript スクリプトです。
アクションは、リソースアカウントオブジェクトに対して直接実行される作業ではなく、そのリソースアカウントの作成、更新、または削除の前またはあとに実行される作業を行う場合に使用します。リソースアクションでは、ユーザーを作成したあとの、新規ユーザーのディレクトリへのファイルのコピーや、そのユーザーに関する UNIX の SUDOers ファイルの更新などのネイティブアクティビティーがサポートされます。このタイプの作業は、カスタムリソースアダプタを使用することにより実行できます。ただし、カスタムリソースアダプタを配備するよりも、アクションを追加したリソースアダプタを配備するほうが簡単です。
アクションには次の 3 種類の結果メッセージが関連付けられます。
サポートされるプロセス次のプロセスで、前アクションと後アクションがサポートされます。
サポートされるリソース次のリソースにアクションを追加できます。
サポートされるバージョンのリストについては、本書の各アダプタの節を参照してください。
アクションの定義新しいリソースアクションを作成するには、次の手順に従います。
アクションファイルの作成
アクションを作成するには、次のテキストを含むファイルを作成します。
<ResourceAction name="Name">
<ResTypeAction restype="ResourceType" timeout="Milliseconds">
<act>
...
</act>
</ResTypeAction>
</ResourceAction>各表記の意味は次のとおりです。
たとえば、次の XML は Solaris リソースのアクションを定義しています。
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE Waveset PUBLIC 'waveset.dtd' 'waveset.dtd'>
<Waveset>
<ResourceAction name='after-create'>
<ResTypeAction restype='Solaris' timeout='60000'>
<act>
#!/bin/ksh
echo "$WSUSER_accountId says Hello World!"
# exit $DISPLAY_INFO_CODE if there is not a failure, but you want
# the output to be propagated to the UI
#exit 0
exit $DISPLAY_INFO_CODE
</act>
</ResTypeAction>
</ResourceAction>
</Waveset>
環境変数はエクスポートされ、アクションで利用できるようになります。これらの環境変数は、ユーザーに関する値 (リソーススキーママップの「アイデンティティーシステムユーザー属性」列で定義される) を持つ、スキーマにマップされたすべての属性を、先頭に WSUSER_ を付加して構成します。たとえば、前述の例では、Solaris リソーススキーママップで定義された AccountId 属性の先頭に WSUSER_ を付加して構成された環境変数 WSUSER_AccountId が使用されています。これらの変数は、それぞれのシェル内で環境変数として認識されるようにするため、Solaris では、変数名の前に $ (ドル記号) が付加されます。
アクションファイルを作成するときは、次に示す事項に留意してください。
- メインフレームアダプタ (ACF2、Natural、RACF、および Top Secret) では、アクションは Javascript として解釈されます。JavaScript は、次のグローバル変数を利用できることを前提として記述するようにしてください。
- hostAccess - com.waveset.adapter.HostAccess のインスタンス。メインフレームとの間でキーストロークとコマンドを送受信するために使用されます。
- identity - (String) リソースのユーザーの accountId が含まれます
- userAttrs - アクションで必要とされる各リソースユーザー属性の値を含む java.util.Map のインスタンス
- out - java.io.PrintStream のインスタンス。Javascript がこのストリームに書き込む場合 (たとえば out.print("Hello") など)、その内容がトレースされ、リソースアクションの結果として表示されるページに示されます。
- err - これは、java.io.PrintStream のインスタンスです。Javascript がこのストリームに書き込む場合 (たとえば err.print("Error") など)、その内容がトレースされ、リソースアクションの結果として表示されるページに示されます。
- 例外がスローされないかぎり、Javascript は正常に完了したとみなされます。
Identity Manager へのアクションファイルの読み込み
アクションを Identity Manager にインポートするには、次の手順に従います。
アクションの実装アクションの定義が完了したら、次の手順に従ってそのアクションを実装します。
手順 1: Identity Manager ユーザーフォームフィールドを定義する
ユーザー操作の前またはあとに実行するアクションを割り当てるユーザーフォームフィールドを作成します。
次の例では、ユーザー作成操作のあとに実行する after-create というアクションを定義しています。
<Field name='global.create after action'>
<Expansion>
<s>after-create</s>
</Expansion>
</Field>フィールド名の形式は次のとおりです。
{create|update|delete} {before|after} action
Identity Manager のフォームの操作の詳細については、『Identity Manager ワークフロー、フォーム、およびビュー』を参照してください。
手順 2: スキーママップエントリを追加する
アクションを実行するリソースのスキーママップにエントリを追加します。次の手順で実行します。
Windows NT の例ここでは、リソースアダプタで次の操作が実行されたあとに Windows NT リソースで実行できるアクションの例を示します。
例 1: ユーザーの作成後のアクション
この手順では、Windows NT リソースで新規ユーザーの作成後に実行するアクションを含める方法を示します。
- Windows NT スキーママップの「Identity Manager ユーザー属性」列に、「create after action」と入力します。
- 「属性タイプ」列で、「string」を選択します。
- 「リソース ユーザー属性」列に、「IGNORE_ATTR」と入力します。「必須」、「監査」、「読み取り専用」、および「書き込み専用」の各列は、チェックマークを外したままにします。
- ユーザーの作成または編集に使用するユーザーフォームに次のコードを追加します。
<Field name='resourceAccounts.currentResourceAccounts[NT].attributes.create after action'>
<Expansion>
<s> </s>
</Expansion>
</Field>- 次の XML ファイルを作成し、Identity Manager にインポートします。ファイルのパスは、環境に合わせて変更してください。
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE Waveset PUBLIC 'waveset.dtd' 'waveset.dtd'>
<Waveset>
<ResourceAction name='AfterCreate'>
<ResTypeAction restype='Windows NT' timeout='6000'>
<act>
echo create >> C:¥Temp¥%WSUSER_accountId%.txt
exit
</act>
</ResTypeAction>
</ResourceAction>
</Waveset>例 2: ユーザーアカウントの更新または編集後のアクション
この手順では、Windows NT リソースでユーザーの更新または編集後に実行するアクションを含める方法を示します。
- Windows NT スキーママップの「Identity Manager ユーザー属性」列に、「update after action」と入力します。
- 「属性タイプ」列で、「string」を選択します。
- 「リソース ユーザー属性」列に、「IGNORE_ATTR」と入力します。「必須」、「監査」、「読み取り専用」、および「書き込み専用」の各列は、チェックマークを外したままにします。
- ユーザーの作成および編集に使用するユーザーフォームに次のフィールドを追加します。
<Field name='resourceAccounts.currentResourceAccounts[NT].attributes.update after action'>
<Expansion>
<s>AfterUpdate</s>
</Expansion>
</Field>- 次の XML ファイルを作成し、Identity Manager にインポートします。ファイルのパスは、環境に合わせて変更してください。
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE Waveset PUBLIC 'waveset.dtd' 'waveset.dtd'>
<Waveset>
<ResourceAction name='AfterUpdate'>
<ResTypeAction restype='Windows NT' timeout='6000'>
<act>
echo update >> C:¥Temp¥%WSUSER_accountId%.txt
exit
</act>
</ResTypeAction>
</ResourceAction>
</Waveset>例 3: ユーザーの削除後のアクション
この手順では、Windows NT リソースでユーザーの削除後に実行するアクションを含める方法を示します。
- Windows NT スキーママップの「Identity Manager ユーザー属性」列に、「delete after action」と入力します。
- 「属性タイプ」列で、「string」を選択します。
- 「リソース ユーザー属性」列に、「IGNORE_ATTR」と入力します。「必須」、「監査」、「読み取り専用」、および「書き込み専用」の各列は、チェックマークを外したままにします。
- 「Deprovision Form」ユーザーフォームの </Include> タグのあとに次のフィールドを追加します。
<Field name= 'resourceAccounts.currentResourceAccounts[NT].attributes.delete after action'>
<Expansion>
<s>AfterDelete</s>
</Expansion>
</Field>- 次の XML ファイルを作成し、Identity Manager にインポートします。ファイルのパスは、環境に合わせて変更してください。
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE Waveset PUBLIC 'waveset.dtd' 'waveset.dtd'>
<Waveset>
<ResourceAction name='AfterDelete'>
<ResTypeAction restype='Windows NT' timeout='6000'>
<act>
echo delete >> C:¥Temp¥%WSUSER_accountId%.txt
exit
</act>
</ResTypeAction>
</ResourceAction>
</Waveset>- NT リソースの XML を編集し、「delete after action」スキーママッピングに情報を追加します。新しく追加する部分を含む、このリソースの完全なスキーママッピングの例を次に示します。ここでは、ビュー関連の情報を追加します。
<AccountAttributeType id='12' name='delete after action' syntax='string' mapName='IGNORE_ATTR' mapType='string'>
<Views>
<String>Delete</String>
</Views>
</AccountAttributeType>
Domino の例Domino リソースでは、前アクションと後アクションがサポートされます。
現在は、LotusScript と cmd シェルの 2 種類のアクションがサポートされています。どの操作アクションにも、実行される任意の数のアクションを実装できます。
次の例は、LotusScript および cmd シェルのリソースアクションの使用方法を示しています。
LotusScript の例
<ResourceAction name='iterateAttributes' createDate='1083868010032'>
<ResTypeAction restype='Domino Gateway' actionType='lotusscript'>
<act>
Sub Initialize
Main
End Sub
Sub Main
Dim session As New NotesSession
Dim doc As NotesDocument
Set doc = session.DocumentContext
Forall i In doc.Items
Dim attrVal As Variant
attrVal = doc.GetItemValue(i.Name)
End Forall
End Sub
</act>
</ResTypeAction>
</ResourceAction>cmd シェルの例
<ResourceAction name='getDirectoryContents' createDate='1083868010032'>
<ResTypeAction restype='Domino Gateway'>
<act>dir</act>
</ResTypeAction>
</ResourceAction>
LotusScript の実行
Domino では、LotusScript の実行はデータベースに接続されたエージェントによって処理されます。Domino アダプタは、次のいずれかの方法で LotusScript を実行します。
入力
結果
agentName
エージェントを実行します。
agentName およびスクリプト
スクリプトを用いてエージェントを更新し、そのエージェントを実行します。
agentName、agentCreate、およびスクリプト
スクリプトを用いてエージェントを作成し、そのエージェントを実行します。
次に示すカスタマイズされたアカウント属性は、LotusScript で使用できます。これらの属性のいずれかを使用する場合は、その属性を Domino ゲートウェイスキーママップに追加します。「リソース ユーザー属性」列には値として「IGNORE_ATTR」を指定します。
- agentName - 実行するエージェントの名前。この属性は必ず指定します。そうしないと、エラーが返されます。
- agentServer - エージェントがインストールされている、エージェントを実行するデータベースの場所。この属性が存在しない場合は、「登録サーバー コンピュータ」リソースパラメータ (REG_SERVER) に指定された値がデフォルトとして使用されます。
- agentDBName - エージェントを検索できるデータベースの名前。この属性では、リソースの「名前データベース」リソースパラメータ (NAB) で指定された値がデフォルトとして使用されます。
- agentCreate - 指定されたエージェントが見つからない場合にアダプタが新しいエージェントを作成するべきかどうかを示すフラグ。この属性のデフォルト値は false です。NULL 以外の値にすると、このフラグは有効になります。
LotusScript への引数
エージェントの引数は、バックエンド NotesSession クラスからの専用プロパティーを介して、LotusScript へのノートハンドルで指定されます。これは次のように定義できます。
NotesDocument = NotesSession.DocumentContext
アクションスクリプトルーチンによって NotesDocument をインスタンス化し、そのフィールド値を LotusScript サブルーチンへのパラメータとして読み取ることができます。
ドキュメントに定義された任意の引数の名前と値を取得する LotusScript の例を次に示します。
Dim session As New NotesSession
Dim doc As NotesDocument
Set doc = session.DocumentContext
Forall i In doc.Items
Dim attrVal As Variant
attrVal = doc.GetItemValue(i.Name)
Print(" Attribute Name: " + i.Name + " Value: " + attrVal(0))
End ForallNT アクションの場合と同じように、アクションの呼び出し中に定義された属性はすべて、先頭に WSUSER_ が付加された NotesDocument に配置されます。
cmd シェルの実行
アクションは、拡張機能を有効にした Windows コマンドインタプリタ cmd.exe を使用して実行されます。ユーザー操作の前に実行するアクションでは、ゼロの値を返す必要があります。そうしないと、操作はエラー終了となります。
cmd シェルへの引数
NT/ADSI cmd アクションと同様に、環境変数はエクスポートされ、アクションで利用できるようになります。これらの環境変数は、ユーザーに関する値 (リソーススキーママップの「Identity Manager ユーザー属性」列で定義される) を持つ、スキーマにマップされたすべての属性を、先頭に WSUSER_ を付加して構成します。
複数値属性は、次のようなパイプ区切りリストで構成されます。
WSUSER_groups=staff|admin|users
ビューの拡張ビューに属性を追加できます。属性はすべて登録されている必要があります。
Identity Manager でのさまざまなプロビジョニングアクティビティーにおいて利用できるユーザー属性は、そのアクションを完了するために必要な属性に限定されます。たとえば、ユーザーを編集する場合には、割り当てられたリソースの中で更新可能と定義されているユーザー属性のみが利用できます。一方、パスワードの変更プロセスでは、要求を実行するための属性のサブセットのみを必要とします。
属性の登録
属性は、次の 2 つの場所のどちらかに登録できます。
場所
属性をここに登録する条件
リソース内の AccountAttributeType 定義
... 更新する属性が、そのタイプのすべてのリソースではなく、特定のリソースに固有の属性である場合。
System Configuration オブジェクト
特定タイプのすべてのリソースに対してグローバルに登録する場合。これらの登録は XML 形式で行ってください。
ビューごとに異なる属性を登録できます。たとえば、lock 属性をパスワードビューに登録したり、firstname 属性を名前の変更ビューに登録したり、リソースアクションを有効化ビュー、無効化ビュー、または削除ビューに登録したりできます。
注
前アクションと後アクションの場合は、作成または更新のユーザープロセスを除くすべてのプロセスのビューを拡張してください。ビューの拡張については、「Identity Manager Views」を参照してください。
グローバル登録
グローバル登録を行うには、次のパスを持つ System Configuration オブジェクトに属性を追加します。
updatableAttributes.ViewName.ResourceTypeName
ここで、ViewName は Password、Reset、Enable、Disable、Rename、または Delete のいずれかで、ResourceTypeName はリソースタイプの名前です。all というタイプ名は、すべてのリソースに適用される登録用に予約されています。
この属性の値には、<String> のリストを指定します。各文字列は、更新する属性の名前です。次の例では、delete before action という名前の属性を、すべてのリソース用の削除ビューに登録します。
<Attribute name='updatableAttributes'>
<Object>
<Attribute name='Delete'>
<Object>
<Attribute name='all'>
<List>
<String>delete before action</String>
</List>
</Attribute>
</Object>
</Attribute>
<Attribute name='Enable'>
<Object>
<Attribute name='all'>
<List>
<String>enable before action</String>
</List></Attribute>
</Object>
</Attribute>
</Object>
</Attribute>リソース別登録
リソース別登録を行うには、そのリソースオブジェクトを Identity Manager デバッグページで変更し、AccountAttributeType 要素内に <Views> サブ要素を挿入します。<Views> には、この属性を更新できるビューの名前を示す文字列値のリストを含めます。
<AccountAttributeType name='lastname' mapName='sn' mapType='string'>
<Views>
<String>Rename</String>
</Views>
</AccountAttributeType>このビューでは、変更する文字列が次のオブジェクト内に配置されます。
resourceAccounts.currentResourceAccounts[ResourceTypeName].attributes
例:
<Field name= 'resourceAccounts.currentResourceAccounts[OS400ResourceName].attributes.de lete before action' hidden='true'>
<Expansion>
<s>os400BeforeDeleteAction</s>
</Expansion>
</Field>