Blog from December, 2017

At Georgia Tech, I am part of the Identity and Access Management team and we chose to implement Grouper in Docker as part of the Campus Success Program.  It was a natural fit for us as we were already in the middle of a project that was our first foray into making Grouper available to campus.  Our Campus Services IT department needed an easy way to manage groups for a Door Access project.  Grouper handles this nicely and is easily extensible using Grouper Web Services. As an added twist to our first real Grouper project, we decided to run Grouper in Docker as a way to facilitate development and testing as well as make Grouper as cloud-ready as possible in case we decide to migrate to AWS in the future.

As part of the Door Management project, in addition to granting some admin Grouper access to the Campus Services team for the Grouper UI, we wanted to make it easy for them to be able to build their own custom web ui for interacting with Grouper since their functional end-users may not want to use Grouper directly.  At Georgia Tech, we have a custom API framework called BuzzAPI that we use to give developers limited access to internal data.  We wrote BuzzAPI wrappers on top of Grouper's Web Services in order to take advantage of the security features and load balancing built in to Buzzapi.  With these API's, Campus Services was able to build their own UI to visualize and manipulate their Door Access groups in Grouper.

As we continued to work with Campus Services, they came up with additional uses of Grouper that would help them in other projects.  We are using the Grouper Loader to bring in groups from our PeopleSoft system which are then used as reference groups for Grouper groups maintained by Campus Services.  Membership in these groups determine which employees are required to take certain training courses in our Learning Management system.  The groups in Grouper are provisioned to entitlements in LDAP which can be easily read by the LMS.  Campus Services has also started using Grouper to centrally manage groups for their own internal applications that don't have good grouping built in like a Git based wiki system for their documentation.  

So far, I feel that our initial exploration into what Grouper has to offer has provided fruit in the form of useful features that fit the needs of our customers from other IT areas on campus.  As we learn more about Grouper and continue to improve our Docker architecture, we will expand the use of Grouper to the wider campus.  It is my hope that the Campus Success Program will help with that as well as be a good arena to gain feedback and share successes.

From University of Michigan

There is an idea in psychology, often referred to as Maslow's Hammer, that describes the over-reliance on a specific tool. The basic gist is "In the land of the hammer, every problem is a nail.".  And we, my friends, find ourselves in the land of the hammer.

For well over a decade, U-M has granted users the ability to create and manage their own groups in our LDAP directory with few restrictions.  Groups names have to be long enough as to not overlap with the username namespace.  Anyone with a valid username and password can create groups, which includes the 66% of our people registry whose only role is alumni.  

For a period of time that was enough; users wanted only to manage email groups and they were happy. Needs change over time. Services evolved needing authorization and provisioning solutions.  Resourceful users who needed to provision these services began to create and leverage groups in our LDAP directory as access control groups. Happy hour email groups were suddenly being used fulfill a variety of purposes for which they were not intended nor particularly well suited to. 

Today there are over 85,000 groups in our LDAP directory. Group usage continues to grow and use cases continue to increase in complexity. We need to retool group organization and management - especially around access control. We want provide a better tool for campus to easily access and use commonly needed groups like departmental groups. We want these departmental groups to be automatically derived from institutional data instead of manually maintained. We would like to empower people responsible for an access group to tweak them as needed with include/exclude functionality.  We would like to be able to accurately identify which groups are used for what and efficiently sync them to appropriate environments for provisioning.  We want to monitor groups provisioning higher risk access as well as keep better records of  group changes by whom/what, when and how.

‘Tis the season for wish lists.

Before the Campus Success Program, we (UMBC) had previously installed Grouper and created a few sample groups.  We have been able to pull data from our various Peoplesoft systems into Grouper, creating reference groups,  as a proof of concept.  We’ve created two types of groups.  Our first use-case was to create a group to give access to Our contract stated we could give access anyone that met one of the following criteria: ART majors,  a student taking an ART class and faculty teaching an ART class.  We created the three groups, based on select statements within Peoplesoft and then combined the three into a group we called Access. Our web SSO solution checked to make sure, when someone logs into, that they are a member of the Access group. Our second use-case (still a work on progress) was/is to create a Grouper group that contained part-time faculty members.  Our Peoplesoft HR SME gave us a big select statement to pull just that population, based on a number of Peoplesoft tables.  We directly loaded that into a single Grouper group.  The end goal is to replicate this group into Google apps allowing the Faculty Development Center to target part-time faculty members with emails, calendar notices and file sharing.

So, where does the Campus Success Program come in?  We wanted to be part of a cohort of other institutions that were in the same boat - New or mostly new to Grouper and be able to work through issues together. Having access to the Grouper development team will also allow us to have answered for us some of the issues that naturally creep up during a new implementation.  

Our Grouper project for Campus Success is to make use of the delivered TIER Docker containers. This will greatly speed up Grouper deployment and upgrades.  Down the road, we will look to moving to AWS and make use of Kubernetes for automated resource provisioning.  Our second goal is to be able to automatically provision and manage Google groups via membership in Grouper groups.  These could be groups provisioned for each class, so BIOL 100 in Spring 2018 would have a corresponding Google group.   Also, clubs and organizations would have a Google group provisioned based on membership in one of our campus portal organization groups.

We are early on in the project, but feel we are making decent progress.  We’ve been able to successfully install and run the TIER Docker container. It was rather easy to setup but we had some issues with the Shibboleth integration.  Thankfully that was resolved once we realized that our Puppet implementation was regularly clobbering our IP tables. Just this week we were able to use the Grouper to Google connector, written by Unicon, to mirror our first Grouper group to Google.  Next we need to figure out what that really means in the way of user management.  When a member of the Grouper group is removed, what happens in Google?  Who owns the Google group?  What sort of user management rights do they have?  All good questions that we now need to work through.

Before we get too far along in the project, we will have to better understand group naming and organization within Grouper.  At this point we feel that we are randomly throwing groups into Grouper.  The Grouper deployment guide gives guidance for organization and naming.  This will be a great resource. We plan on working closely with other Campus Success program participants to see their naming and organization strategies as well.

Stay tuned...

As the newest campus in the University of California system and the first US research university built in the 21st century, it's hard to imagine such a new institution grappling with the effects of an aging infrastructure and identity platform. The world was a different place in the early 2000s when UC Merced was emerging from a former golf course in California's San Joaquin valley - resources and budgets were (relatively) plentiful, Sun Microsystems was throwing dirt-cheap hardware and software at higher-ed institutions across the country, and "the cloud" was still a weather phenomenon rarely seen during the summer in interior California. UC Merced, like many institutions at the time, invested heavily in local computing capacity with racks of purple computers running Oracle databases, Sun Identity Manager, and Netscape iPlanet Sun ONE Sun Java System Directory Server.

Time marched on, budgets got lean, and Oracle swallowed Sun, leaving UC Merced with no clear path forward to turn its purple data center into something that could continue to support the needs of a rapidly growing research university. Over the years, various efforts to replace the identity management system sputtered and stalled, hardware continued to age, and support for Sun's Identity Manager dried up. Sensing an opportunity to right the ship and contribute to the community at large, UC Merced became a TIER investor campus in 2015 and developed a multi-year IAM roadmap with the ultimate goal of adopting TIER.

Work on an interim solution set off immediately, converting ~10,000 lines of Waveset XPRESS business logic code to Java and retiring the Sun Identity Manager for a homegrown, interim solution. A front-end web application was created in Angular for account management and self-service. Through participation in the TIER Campus Success Program, UC Merced hopes to build on that momentum and replace our interim solutions with midPoint and Grouper. 

UC Merced has been working on project planning and securing the resources and talent necessary to pivot towards TIER, containerized apps, and the devops model. To that end, all of you devops engineers looking for an exciting opportunity in the UC system can contact me directly! Our identity and operations teams have been heavily impacted by another project, replacing the University of California's 35+ year old payroll system. Work on that project wraps up this month and the team is looking forward to making significant progress on midPoint and Grouper in 2018. 

More and more, people outside of the defined CSU member population need access to a limited set of protected campus resources.  Two of our departments, Advancement & the Registrar’s Office, requested the capability to allow former students and donors to use a social identity for authentication into their systems for a variety of reasons.  Student user IDs that allow access to online systems, expire one year after graduation. Past students with expired IDs sometimes need online access to records, transcripts, etc.  Donors may have never had a university ID.  Advancement maintains a system to connect with alumni and donors, which also facilitates giving to the university.

These needs kicked off our team’s goal of implementing COmanage for use as an entity registry with account linking capabilities.  The COmanage registry will supply a unique CSU identifier for internal and external populations, which can be referenced by consuming services.  The vision is for any CSU service using an external authentication to reference a unique university ID for authorization purposes.

At this point, our team at CSU has put an instance of COmanage into production and we plan to populate CSU accounts soon in order to create the registry IDs. We will also look to implement a test Docker version when available.

Grouper is in production and working well.  Our team is evaluating its current structure based on the recently released Grouper deployment guidelines, making sure our structure and the guidelines align properly. The first production LDAP directory, which will support provisioning from Grouper, has been created. We will be bringing up other production nodes and implementing replication in our next steps.

Our team continues to work hard on the development and implementation of these programs and are confident in the process moving forward with no foreseen roadblocks at this point. In the long term, we will be looking to containerize Grouper and COmanage through Docker, as well as review midPoint and how it may fit in at our institution.

Since this is our first foray into running containerized applications, we wanted to explore as many options as we could to find the right fit for our needs, available resources,  and comfort level. We want something that we can play with and develop on-premise but will allow for us to migrate into the cloud easily should the opportunity become available.

To that end, we came up with an initial list of possible options: Docker Swarm, Rancher, Kubernetes, OpenShift Origin, and Tectonic. Tectonic was a non-starter; their licensing and installation requirements were not a good fit. Docker Swarm, while being the standard currently used by TIER, was also ruled out due to the lack of a UI for management and the inability to scale up in a non-disruptive manner. Vanilla Kubernetes appeared to require more configuration than the others to get up and running. That left us with Rancher and OpenShift Origin.

We went with Rancher first for its ability to support multiple isolated container orchestration frameworks, including Kubernetes and its own native orchestrator, Cattle. (Besides, this is Texas; ranching is in our blood.) OpenShift Origin was still using Kubernetes v1.6, and there were concerns about how long it would take RedHat (our campus OS distribution of choice) to release updated versions. Rancher also supports easily adding hosts or nodes regardless of the orchestrator via a web front-end that natively supports AWS EC2 and Digital Ocean.

The Cattle orchestrator was initially more attractive because it supports the ability to use the Docker Compose file format and everything can be done within the UI. However we were dissuaded by the lack of auto-scaling and the fact that Secrets support is still experimental. On top of that, it seemed clear that the Rancher project was moving on; Rancher 2.0 was just announced, and it is using Kubernetes as its default orchestrator.

Eager to get something going, we tried setting up the Rancher 2.0 Tech Preview. It was immediately clear that the preview was really just a preview. It's lacking in very basic functionality (authentication, anyone?) So we dropped back down to Rancher 1.6 using Kubernetes as the default orchestrator in the hopes that as 2.0 becomes more viable the transition will be smoother.

We tested and enjoyed working with Kubernetes. We tried out running containers of a few basic applications and explored the auto-scaling features. Things were going great until we hit a wall trying to build an image. We spent some time troubleshooting the issue. It turns out the development VM infrastructure we were given to work with had some I/O constraints that didn't play at all nicely with the overlay2 filesystem. Reads and writes were too slow to perform part of the Dockerfile build for the application we were trying to containerize. We made note of the issue and continued our testing with less I/O intensive applications for now.

After a while, it started to become clear that while Kubernetes was enjoyable to work with, Kubernetes under Rancher 1.6 is less so. We found that in our setup we were having to drop down into the default Kubernetes UI from within the Rancher UI to get tasks done more often than not. Most irritating was the load balancing configuration, which necessitated backing out of the Kubernetes UI to create the config with the Rancher UI and then dropping down into the Kubernetes UI again to configure the nodes. We have hopes that with the focus on Kubernetes for Rancher 2.0 these problems will be mitigated.

So now it's time to try out OpenShift Origin. We're currently waiting for more resources to spin up a dev environment to play with it and see how it compares. Stay tuned!

Oregon State University is currently in the process of scoping our TIER midPoint entity registry implementation project. A big first step is actually deploying the midPoint application so we can learn how it works and what it can do.

Since the TIER midPoint Docker installation was not yet available, we followed our standard processes at OSU to use Ansible to automate our application deployments. To that end, we have written an Ansible playbook that allows us to deploy midPoint on RedHat/CentOS with a single command, optionally installing a MariaDB backend and Apache with SSL frontend.

The playbook is available on GitHub:


  • You want to install midPoint 3.6.1
  • You are running Ansible 2.4+
  • Your target system is running RedHat/CentOS

Minimal Install

A minimal install will deploy midPoint with its default H2 database.

Create a variable file in group_vars/

  use_apache_ssl: false

And a matching inventory file in inventory/


Then run the playbook:
$ ansible-playbook -i inventory/dev install.yml

Install With Optional Components

Installing midPoint with MariaDB or Apache with SSL requires additional configuration options in the variable file. See in the playbook for details.

Playbook Structure

  • install.yml - playbook file
  • group_vars/ - contains variable files to configure the playbook and target host(s)
  • inventory/ - contains inventory files for target host(s)
  • roles/install/tasks/ - task files for installing and setting up the software
  • roles/install/files/ - configuration files for midPoint and supporting software
  • roles/install/templates/ - configuration files for midPoint and supporting software

Next Steps

The playbook installs midPoint 3.6.1. We'd like to make the version configurable in the future.

As the midPoint Docker version is now available, we will review how to install it into our environment.

We are currently evaluating options and need to select the database platform we will use for production.