This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Capture Delete Account events in Active Directory -Terminate User

Capture Delete Account events in Active Directory -Terminate User

I want to terminate (LOGIN_DISABLED = TRUE) a user who was DELETED in Active Directory. I am able to make user terminated (LOGIN_DISABLED = TRUE) when an account in AD was disabled. I want to have the same capability on the DELETE event as well. 

Can you please guide me on how to accomplish this?

Parents
  • 0  

    You only get one shot at this... When the Pub channel sends you a delete, you have to catch that event.  (if operation equals delete) then set dest attr Login Disabled to true.

    I cannot recall, but the class name may not be there in a delete of a user, so you have to ignore the class when you do this.

  • 0   in reply to   

    Yes, you can.

    I used "custom" logic in one of the AD drivers that 

    1. Capture AD delete operation

    2. "Convert" deleted object name to "human-friendly" format for future use.

    You can use "similar" techniques.

    Geoffrey absolutely right: ObjectClass information already "disappear" during delete operation.

    But we still have a number of methods for users identifications: object association (GUID) and "reconstructed" SAMAccountname.

    Example of the Delete operation event (some business sensitive information in the trace masked) 

    [08/12/21 09:08:22.821]:AD-XXX2LS :Remote Interface Driver: Received.
    [08/12/21 09:08:22.822]:AD-XXX2LS :
    <nds dtdversion="2.2">
    <source>
    <product build="20140409_120000" instance="\XXX-TREE\XXX\Services\Dr-DriverSet\AD-XXX2LS" version="4.0.0.4">AD</product>
    <contact>NetIQ Corporation</contact>
    </source>
    <input>
    <delete event-id="AD-XXX2LS##17b3a7a5cb0##0" src-dn="CN=skumawa\0ADEL:b168b82a-ae93-4cf6-b134-bf3989aa8d8a,CN=Deleted Objects,DC=XXX,DC=net">
    <association>2ab868b193aef64cb134bf3989aa8d8a</association>
    </delete>
    </input>
    </nds> 

     <nds dtdversion="2.2">
    <source>
    <product build="20140409_120000" instance="\XXX-TREE\XXX\Services\Dr-DriverSet\AD-XXX2LS" version="4.0.0.4">AD</product>
    <contact>NetIQ Corporation</contact>
    </source>
    <input>
    <delete event-id="AD-XXX2LS##17b3a7a5cb0##0" src-dn="CN=skumawa\0ADEL:b168b82a-ae93-4cf6-b134-bf3989aa8d8a,CN=Deleted Objects,DC=XXX,DC=net">
    <association>2ab868b193aef64cb134bf3989aa8d8a</association>
    </delete>
    </input>
    </nds>
    [08/12/21 09:08:23.073]:AD-XXX2LS PT:Applying policy: %+C%14C15 msDS-PrincipalName%-C.
    [08/12/21 09:08:23.115]:AD-XXX2LS PT: Evaluating selection criteria for rule '62 itp-generate msDS-PrincipalName during Delete operation'.
    [08/12/21 09:08:23.120]:AD-XXX2LS PT: (if-operation equal "delete") = TRUE.
    [08/12/21 09:08:23.124]:AD-XXX2LS PT: (if-op-property 'op-msDS-PrincipalName' not-available) = TRUE.
    [08/12/21 09:08:23.127]:AD-XXX2LS PT: (if-src-dn available) = TRUE.
    [08/12/21 09:08:23.133]:AD-XXX2LS PT: Rule selected.
    [08/12/21 09:08:23.135]:AD-XXX2LS PT: Applying rule '62 itp-generate msDS-PrincipalName during Delete operation'.
    [08/12/21 09:08:23.140]:AD-XXX2LS PT: Action: do-set-local-variable("lvSrcDN",scope="policy",token-src-dn()).
    [08/12/21 09:08:23.145]:AD-XXX2LS PT: arg-string(token-src-dn())
    [08/12/21 09:08:23.148]:AD-XXX2LS PT: token-src-dn()
    [08/12/21 09:08:23.150]:AD-XXX2LS PT: Token Value: "CN=skumawa\0ADEL:b168b82a-ae93-4cf6-b134-bf3989aa8d8a,CN=Deleted Objects,DC=XXX,DC=net".
    [08/12/21 09:08:23.154]:AD-XXX2LS PT: Arg Value: "CN=skumawa\0ADEL:b168b82a-ae93-4cf6-b134-bf3989aa8d8a,CN=Deleted Objects,DC=XXX,DC=net".
    [08/12/21 09:08:23.158]:AD-XXX2LS PT: Action: do-set-local-variable("lvmsDS-PrincipalName",scope="policy",token-xpath("substring-before($lvSrcDN,'\0ADEL:')")).
    [08/12/21 09:08:23.164]:AD-XXX2LS PT: arg-string(token-xpath("substring-before($lvSrcDN,'\0ADEL:')"))
    [08/12/21 09:08:23.167]:AD-XXX2LS PT: token-xpath("substring-before($lvSrcDN,'\0ADEL:')")
    [08/12/21 09:08:23.170]:AD-XXX2LS PT: Token Value: "CN=skumawa".
    [08/12/21 09:08:23.174]:AD-XXX2LS PT: Arg Value: "CN=skumawa".
    [08/12/21 09:08:23.175]:AD-XXX2LS PT: Action: do-if().
    [08/12/21 09:08:23.177]:AD-XXX2LS PT: Evaluating conditions.
    [08/12/21 09:08:23.180]:AD-XXX2LS PT: (if-xpath true "starts-with($lvmsDS-PrincipalName,"CN=")") = TRUE.
    [08/12/21 09:08:23.185]:AD-XXX2LS PT: Performing if actions.
    [08/12/21 09:08:23.187]:AD-XXX2LS PT: Action: do-set-local-variable("lvmsDS-PrincipalName",scope="policy",token-xpath("substring-after($lvmsDS-PrincipalName,'CN=')")).
    [08/12/21 09:08:23.194]:AD-XXX2LS PT: arg-string(token-xpath("substring-after($lvmsDS-PrincipalName,'CN=')"))
    [08/12/21 09:08:23.198]:AD-XXX2LS PT: token-xpath("substring-after($lvmsDS-PrincipalName,'CN=')")
    [08/12/21 09:08:23.202]:AD-XXX2LS PT: Token Value: "skumawa".
    [08/12/21 09:08:23.204]:AD-XXX2LS PT: Arg Value: "skumawa".

  • 0 in reply to   

    Thank you for your replies. One question about the place that the policy place to be put. Should I add the newly defined policy in Input Transformation Policy tab?

  • 0   in reply to 

    Placement of your Customer policies can technically be anywhere. That said, the best practice would normally have something like this policy placed int the Publisher Event Transform Policy Set.

    The Input and Output Transform Policy Set should be used for all policies handling conversions between the connected system schema and the ID Vault schema, policies. The Schema Map policy set handles the actual name conversions, but any formatting changes or more in-depth changes should be handed during the Input or Output processing. As the policies in these three areas (Input, Output and Schema) are duplicated on both the Publisher and Subscriber channels (threads) you should not normally place policies there that only need to be processed in only one channel.

    A great reference article, IDM Proven Practices: Efficient IDM Input/Output Transformation Value Mappings written by covers a lot more details and is well worth reading.

    My recommendation is that you place your policy to handle this in the Pub Event Transform policy set, as you are effectively transforming the Delete Event into a Modify of the "Login Disabled" attribute.

    A further tip in handling the Delete event. The target Association value is provided in the delete event. Using the Resolve Noun, you can use the association to resolve the target DN in the vault. With the target DN you can then easily set the Login Disabled attribute, remove the association on the target object and then veto the delete event.

    Cheers,

    D

  • 0 in reply to   

    Hello,

    I did not get the idea behind Target Association, Resolve Noun and the DN values. Later, how can I use DN value to make Login Disabled attr to TRUE. I am new to NetIQ, so I can ask simple questions like this:)

  • 0 in reply to 

    Additionally, I am able to detect the Delete event, then get the Association value of a deleted user. But, now, I can not make the link between Association and Login Disabled? Can you please guide me on how to arrange this?

    Thanks

  • 0 in reply to 

    One more update. I am able to get the DN value in IDVault. Now, dont know how to use this DN value to set Login Disabled attribute to TRUE.

  • Suggested Answer

    0   in reply to 

    There is sub-ctp-entitlementImpl policy that does just that with one of it's rules in AD, I recommend you just copy that rule (change conditions of execute), you could even turn on entitlements and use integrated default policies...

  • 0 in reply to   

    Hello, Yes I saw the rule and like you said I just copied it into my policy. I have put a screenshot containing the log for the policy. Unfortunately, the user Login Disabled attribute did not turn into TRUE. I have specified the Association like it is done in sub-ctp-entitlementImlp. There was no error in the logs at the same time. I have received a successfull completed operation log. Login Disabled attribute is also present in schema mapping.

    <nds dtdversion="2.2">
    <source>
    <product build="20180125_120000" instance="\OGUZ_TREE\system\driverset1\Active Directory Driver" version="4.1.2.0">AD</product>
    <contact>NetIQ Corporation</contact>
    </source>
    <input>
    <modify class-name="User" event-id="Active Directory Driver##183f509f401##0">
    <association>b22f20ae456f3b42893d660cc8aba8f9</association>
    <modify-attr attr-name="Login Disabled">
    <remove-all-values/>
    <add-value>
    <value type="string">true</value>
    </add-value>
    </modify-attr>
    </modify>
    </input>
    </nds>

    Thanks

Reply
  • 0 in reply to   

    Hello, Yes I saw the rule and like you said I just copied it into my policy. I have put a screenshot containing the log for the policy. Unfortunately, the user Login Disabled attribute did not turn into TRUE. I have specified the Association like it is done in sub-ctp-entitlementImlp. There was no error in the logs at the same time. I have received a successfull completed operation log. Login Disabled attribute is also present in schema mapping.

    <nds dtdversion="2.2">
    <source>
    <product build="20180125_120000" instance="\OGUZ_TREE\system\driverset1\Active Directory Driver" version="4.1.2.0">AD</product>
    <contact>NetIQ Corporation</contact>
    </source>
    <input>
    <modify class-name="User" event-id="Active Directory Driver##183f509f401##0">
    <association>b22f20ae456f3b42893d660cc8aba8f9</association>
    <modify-attr attr-name="Login Disabled">
    <remove-all-values/>
    <add-value>
    <value type="string">true</value>
    </add-value>
    </modify-attr>
    </modify>
    </input>
    </nds>

    Thanks

Children
  • 0   in reply to 

    Hi Oguz,

    In your trace I can see, that modify operation going thru.

    Could you validate the rest of your trace and publish here, how modify operation was executed on your vault or maybe blocked?

  • Verified Answer

    +1 in reply to   

    Hello, I have found a solution implementing this requirement. What I did was to create a separate policy under Publisher - Event Transformation package. In the policy, I have used 

    <do-set-dest-attr-value class-name="User" name="Login Disabled" when="after">
    <arg-value type="string">
    <token-text xml:space="preserve">true</token-text>
    </arg-value>
    </do-set-dest-attr-value>

    As action and in Condition I have put <if-operation mode="regex" op="equal">modify|delete</if-operation>. The reason I have used modify is after I create the policy in Event Transformation container, I have realized that the operation turned into modify. I was delete before when my policy is in Publisher-itp.

  • 0   in reply to 

    Hi, if it works great.

    We asked you for the whole trace so we could see and advise on what is wrong.
    Trace would be still good to properly advise, but this policy should be under Command Transformation Policies as is 

    sub-ctp-entitlementImpl