This is the third and last post in this series of integrating Microsoft Identity Manager with Azure Functions.
The first detailed how to use an Azure Function to retrieve data from the MIM Service Server. The second detailed how to use an Azure Function to retrieve data from the MIM Sync (Metaverse) Server.
This third post combines the two and then performs an action in the MIM Service. The practical purpose of this could be functions like “find all users in location y” and “enable them for entitlement x” or “add an attribute value on each of their objects”.
The reasoning for the two stage approach is that in my experience it is a lot easier to search the Metaverse than the MIM Service to find an object(s), but also the Metaverse has all the information about objects whereas the MIM Service is a ShadowVerse of the Metaverse containing a subset of the managed objects metadata.
Moving forward then the architecture is a hybrid of the first two posts that introduced the concepts associated with integrating MIM with Azure Functions. As per the other two posts this is a base working example and concept.
The prerequisites are the same as for the 1st and 2nd posts in this series. You’ll need to work through those examples to setup the dependencies and prerequisites. From there you can create one more Azure Function that brings everything together. That’s what I’m covering in this post.
Therefore the prerequisites are;
- Azure Tenant and a Function Plan
- Microsoft Identity Manager implementation
- Remote Powershell configured for your MIM Sync Server
- Lithnet FIM MIIS Automation Powershell Module installed on your MIM Sync Server
- The necessary Firewall Rules on your MIM Sync Server and your Azure Network Security Group (assuming your MIM Infrastructure is in Azure) to allow Azure Functions to communicate with MIM Sync and Service Servers
This Example performs the following
In this example the HTTP Trigger Azure Function;
- Takes input for ObjectType, Attribute, AttributeValue, SetName
- Searches the MIM Sync Metaverse for the input ObjectType, with the AttributeValue in the Attribute
- Connects to the MIM Service
- Creates the Set based of the input SetName if it doesn’t exist
- Adds the objects from the search to the Set
- Returns the objects added to the Set
In a real world implementation you’d do the above with a criteria based set. This post is a concept of search and find, performing a create and updating. That has many practical applications.
Create your new Azure Function
Just like the other two posts, we’re going to create a new Powershell HTTP Trigger Azure Function.
Upload the Lithnet RMA PS Module to your new Azure Function (as per blog post 1 in this series). You should also be using protected credentials now as well. So upload your username/password encryption key.
Here is the Azure Function Powershell Script that performs the process detailed above.
Test it out. Looks good. 88 users matched the value of Sydney in their location attribute.
Verify that the Set was created and the membership updated.
Test calling the Azure Function remotely
Now that it is all working in the Azure Function, lets try doing it from Powershell remotely. This time I’m again looking for Person objects that have Sydney in their location attribute and I’ll create a set named Sydney-NSW and put them in it.
Brilliant, that works nicely. Let’s verify that the Set was created and has the correct number of users in it. Yes, a perfect match.
Putting Azure Functions and Powershell together along with the Lithnet Powershell Modules opens up a world of possibilities for automation and integration of the MIM Service without the need for any additional infrastructure or any considerable effort.
Experiment and let me know what you do with this style of integration.
Follow Darren on Twitter @darrenjrobinson