ludopoitou.com
Open in
urlscan Pro
192.0.78.25
Public Scan
URL:
https://ludopoitou.com/
Submission: On September 28 via api from CH — Scanned from DE
Submission: On September 28 via api from CH — Scanned from DE
Form analysis
5 forms found in the DOMGET https://ludopoitou.com/
<form role="search" method="get" class="search-form" action="https://ludopoitou.com/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Search …" value="" name="s">
</label>
<input type="submit" class="search-submit" value="Search">
</form>
GET https://ludopoitou.com/
<form role="search" method="get" class="search-form" action="https://ludopoitou.com/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Search …" value="" name="s">
</label>
<input type="submit" class="search-submit" value="Search">
</form>
<form id="jp-carousel-comment-form">
<label for="jp-carousel-comment-form-comment-field" class="screen-reader-text">Write a Comment...</label>
<textarea name="comment" class="jp-carousel-comment-form-field jp-carousel-comment-form-textarea" id="jp-carousel-comment-form-comment-field" placeholder="Write a Comment..."></textarea>
<div id="jp-carousel-comment-form-submit-and-info-wrapper">
<div id="jp-carousel-comment-form-commenting-as">
<fieldset>
<label for="jp-carousel-comment-form-email-field">Email (Required)</label>
<input type="text" name="email" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-email-field">
</fieldset>
<fieldset>
<label for="jp-carousel-comment-form-author-field">Name (Required)</label>
<input type="text" name="author" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-author-field">
</fieldset>
<fieldset>
<label for="jp-carousel-comment-form-url-field">Website</label>
<input type="text" name="url" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-url-field">
</fieldset>
</div>
<input type="submit" name="submit" class="jp-carousel-comment-form-button" id="jp-carousel-comment-form-button-submit" value="Post Comment">
</div>
</form>
POST /
<form action="/" method="post">
<label for="target_email">Send to Email Address</label>
<input type="email" name="target_email" id="target_email" value="">
<label for="source_name">Your Name</label>
<input type="text" name="source_name" id="source_name" value="">
<label for="source_email">Your Email Address</label>
<input type="email" name="source_email" id="source_email" value="">
<input type="text" id="jetpack-source_f_name" name="source_f_name" class="input" value="" size="25" autocomplete="off" title="This field is for validation and should not be changed">
<div class="g-recaptcha" data-sitekey="6LcmyE0UAAAAALID28yVNg7pFCodGaArJzHitez_" data-theme="light" data-type="image" data-tabindex="0" data-lazy="true" data-url="https://www.google.com/recaptcha/api.js?hl=en"></div>
<img style="float: right; display: none" class="loading" src="https://s0.wp.com/wp-content/mu-plugins/post-flair/sharing/images/loading.gif" alt="loading" width="16" height="16">
<input type="submit" value="Send Email" class="sharing_send">
<a rel="nofollow" href="#cancel" class="sharing_cancel" role="button">Cancel</a>
<div class="errors errors-1" style="display: none;"> Post was not sent - check your email addresses! </div>
<div class="errors errors-2" style="display: none;"> Email check failed, please try again </div>
<div class="errors errors-3" style="display: none;"> Sorry, your blog cannot share posts by email. </div>
</form>
<form>
<li class="actnbr-login-nudge">
<div>Already have a WordPress.com account?
<a href="https://wordpress.com/log-in?redirect_to=https%3A%2F%2Fr-login.wordpress.com%2Fremote-login.php%3Faction%3Dlink%26back%3Dhttps%253A%252F%252Fludopoitou.com%252F2021%252F09%252F16%252Fwe-did-it%252F">Log in now.</a></div>
</li>
</form>
Text Content
Skip to content Primary Menu * Home * About * keybase.txt Search Search for: LUDO SKETCHES LUDOVIC POITOU BLOG ABOUT IDENTITY, DIRECTORY AND OTHERS… WE DID IT ! 16 September 202116 September 2021LudoLeave a comment Exactly 11 years ago, I was out of Sun/Oracle and started to work for an emerging startup, with a bunch of former colleagues from Sun (although my official starting date in the French subsidiary is November 1st, which is also my birthdate). * * A couple of pictures from my 1st company meeting, in Portugal, end of September 2010. Fast forward 11 years… Today is an huge milestone for ForgeRock. We are becoming a public company, with our stock publicly traded under the “FORG” symbol, at the New York Stock Exchange. I cannot thank enough the founders of ForgeRock for giving me this gigantic opportunity to create the First ForgeRock Engineering Center just outside Grenoble, France, and to drive the destiny of very successful products, especially ForgeRock Directory Services. SHARE THIS: * Twitter * LinkedIn * Facebook * More * * Email * Print * * Reddit * Tumblr * * Pinterest * LIKE THIS: Like Loading... General$FORG, ForgeRock, IPO, NYSE FORGEROCK DIRECTORY SERVICES 7 12 February 2021LudoLeave a comment In August 2020, we’ve rolled out a new release of the ForgeRock Identity Platform which included updated versions of all of the products, including Directory Services 7.0. I didn’t write a post about the new release, mostly due to our focus to deliver the ForgeRock Identity Cloud and family vacation. But ForgeRock Directory Services 7.0 is a major release in many ways. It is the first to be released with a sample docker file and full support to run in Kubernetes environments in the Cloud. To achieve that, we’ve made a number of significant changes especially in how security is managed, and how replication is configured and enabled. The rest of the server remains quite the same, delivering consistent performance and reliability. You should read the release notes for all the details. Since, DS 7 was successfully deployed in production, in VMs or in Docker/Kubernetes, and our customers have praised the simplicity and efficiency of the new version. However, some customers have experienced some difficulties with upgrading their current deployment to the 7.0 release, mostly due to the changes I’ve mentioned above. So we have been improving our Upgrade Guide, with greater details, and my colleague Mark Craig, has posted a series of 3 articles on Upgrading to Directory Services 7: * What has changed? * Upgrading by adding new servers * Doing In-place Upgrade If you’re planning to upgrade an OpenDJ or a ForgeRock Directory Services to the latest release, I would high recommend to read the Directory Services Upgrade Guide, and then Mark’s posts. SHARE THIS: * Twitter * LinkedIn * Facebook * More * * Email * Print * * Reddit * Tumblr * * Pinterest * LIKE THIS: Like Loading... Directory ServicesDirectory Services, Docker, documentation, ForgeRock, Kubernetes, release, upgrade DIRECTORY SERVICES CONTAINERIZATION WEBINAR 02 October 2020LudoLeave a comment If you’ve missed the webinar I did this week, with Steve Giovannetti, CTO and Co-Founder of Hub City Media, don’t worry: the webinar is available for replay on demand. In the last part of the webinar, we’ve been trying to address many of the questions we’ve received. But if you have some additional questions, I’d be happy to answer them. Just send them to me. SHARE THIS: * Twitter * LinkedIn * Facebook * More * * Email * Print * * Reddit * Tumblr * * Pinterest * LIKE THIS: Like Loading... Directory Servicescloud, Containers, Directory Services, Docker, Kubernetes, webinar SNOWCAMP 2020, C’EST DÉJÀ FINI 😢 27 January 202009 March 2020LudoLeave a comment La 5ème édition du SnowCamp, la conférence pour les développeurs qui se passe au coeur des Alpes, s’est achevée Samedi dernier. Et ce fut, encore une fois, un superbe événement. En tant que co-organisateur du SnowCamp, je ne peux qu’être fier de cette conférence qui a accueilli plus de 500 participants et 60 présentateurs. Les retours que nous avons de tous, y compris les sponsors, sont tous positifs et motivants. C’est difficile de résumer 4 jours en quelques mots, alors je vous laisserai regarder les photos que j’ai faites. Et j’espère que cela vous donnera envie de participer l’an prochain, en tant que présentateur ou simple participant. Et si jamais vous souhaitez soutenir cette conférence, n’hésitez pas à contacter l’équipe par mail: sponsor@snowcamp.io A Janvier 2021 ! SHARE THIS: * Twitter * LinkedIn * Facebook * More * * Email * Print * * Reddit * Tumblr * * Pinterest * LIKE THIS: Like Loading... General, InFrench, SoftwareAlps, conference, france, grenoble, snowcamp, snowcamp.io, SnowCampIO, software, unconference FORGEROCK SKO IN LAS VEGAS 21 January 202020 January 2020LudoLeave a comment Last week, ForgeRock ran its annual Sales and Marketing Kick Off on the shores of Lake Las Vegas. It was great week for all of us, getting prepared for 2020. Looking forward to great things again this year! And I feel really proud and grateful to be part of such an amazing Product Management team. SHARE THIS: * Twitter * LinkedIn * Facebook * More * * Email * Print * * Reddit * Tumblr * * Pinterest * LIKE THIS: Like Loading... General, Identityaward, ForgeRock, product-management, sko, team HAPPY NEW YEAR 2020! 20 January 2020LudoLeave a comment Wow, time is flying! We’re already past mid-January, and it’s almost getting late for this! I’m wishing you all a very happy, joyful and prosperous 2020! Happy New Year! Bonne Année ! Godt Nytt í r ! ¡ Feliz año nuevo ! あけましておめでとうございます。 … SHARE THIS: * Twitter * LinkedIn * Facebook * More * * Email * Print * * Reddit * Tumblr * * Pinterest * LIKE THIS: Like Loading... General FORGEROCK IDENTITY DAY PARIS (2019) 25 November 201923 November 2019LudoLeave a comment Jeudi 21 Novembre, c’est tenu à Paris le ForgeRock Identity Day, une demi journée d’information sur notre société et nos produits, destinée à nos clients, prospects et partenaires. Animé par Christophe Badot, VP de la Région France, Benelux, Europe du Sud, cet événement a commencé par une présentation de Alexander Laurie, VP Global Solution Architecture, sur les tendances du marché et la vision de ForgeRock, en Français avec un bel accent Anglais. * * Nous avons eu des témoignages de nos clients: CNP Assurance, GRDF et l’Alliance Renault-Nissan-Mitsubishi. Merci à eux d’avoir partagé leurs besoins et la solution apportée par ForgeRock. * * * Léonard Moustacchis et Stéphane Orluc, Solutions Architects chez ForgeRock, ont fait une démonstration en direct de la force de la Plateforme d’Identité de ForgeRock, à travers une application bancaire web et mobile. Et j’ai eu l’honneur de clore la journée avec une présentation de la roadmap produits, et surtout du ForgeRock Identity Cloud, notre offre SaaS disponible depuis la fin Octobre. * * Cette après-midi s’est terminée sur un cocktail qui nous a permis de discuter plus en détail avec les participants. Toutes les photos de l’événement sont visible dans l’album sur mon compte Flickr. -------------------------------------------------------------------------------- And now the English shorter version: On Thursday November 21st, we hosted ForgeRock Identity Day in Paris, a half day event for our customers, prospect customers and partners. We presented our vision of the identity landscape, our products and the roadmap. And three of our French customers : CNP Assurances, GRDF, Renault-Nissan-Mitsubishi Alliance, presented how ForgeRock has helped them with their digital transformation and identity needs. My colleagues from the Solutions Architect team ran a live demo of our web and mobile sample banking applications, to illustrate the power of the ForgeRock Identity Platform. And I closed the day with a presentation of the product roadmap and especially of ForgeRock Identity Cloud, our solution as a service. As usual, all my photos are visible in this public Flickr album. SHARE THIS: * Twitter * LinkedIn * Facebook * More * * Email * Print * * Reddit * Tumblr * * Pinterest * LIKE THIS: Like Loading... General, Identity, InFrenchcloud, events, ForgeRock, identity, Identity as a Service, identityLive, Paris, SaaS FORGEROCK IDENTITYLIVE LONDON (2019) 14 October 201914 October 2019LudoLeave a comment Last week, I was in London to attend the last ForgeRock IdentityLive summit of 2019. Once again, it was a great event, very well attended by over 250 customers and prospects, in locations close to London Bridge. The first day was packed with presentations from ForgeRock (keynote, roadmap, demos by the Product Management team…) and from 5 different customers: E-Trade, Hargreaves Lansdown, SwissCom, NHS Digital and BMW. I really enjoyed these customers’ testimony and I want to address special kudos to Anthony Wilson, Product Manager for Identity at NHS Digital, for running a live (and successful) demo of an iPad application specifically built for paramedics to allow them to access patients medical records, in a highly trusted yet password-less manner. The second day is the usual unSummit, with more technical discussions and hands-on workshops. I ran a session about my favorite subject: Directory Services, and everyone else favorite subject: Containers and Kubernetes. I explained all the work we’re doing to automate the deployment of replicated DS instances and ran a live demonstration of deploying a 3 way replicated service on MiniKube on my laptop, in a couple of minutes; and also how to scale it up to 4 instances in just a click. Kudos to the Directory Services engineering team for reaching that milestone on the way to the 7.0 release of the ForgeRock Identity Platform. During the event, we also showed our support for Women In Identity, a program I’m particularly fond of, as a father of 3 girls (although probably none of them will work in Identity or even IT). * * Finally, here’s the obligatory link to my photo album of IdentityLive London. SHARE THIS: * Twitter * LinkedIn * Facebook * More * * Email * Print * * Reddit * Tumblr * * Pinterest * LIKE THIS: Like Loading... GeneralCIAM, Containers, Directory Services, identity, identityLive, Kubernetes, WomenInIdentity LDAPCON 2019 UPDATE… 02 August 2019LudoLeave a comment The Call for Participation has been extended until August 18th. Please do not wait until last minute to submit your proposals. SHARE THIS: * Twitter * LinkedIn * Facebook * More * * Email * Print * * Reddit * Tumblr * * Pinterest * LIKE THIS: Like Loading... Directory Services, General, Identityconference, identity, ldap, ldapcon LDAPCON 2019 04 July 201902 August 2019LudoLeave a comment The 7th International LDAP Conference has been announced and will take place in Sofia, Bulgaria on November 4-6. The first day will be reserved for workshops, the main conference taking place on the 5th and 6th. Some rights reserved by deensel LDAPCon brings together vendors, developers, active LDAP practitioners, system administrators to share their experiences about service operations, interoperability, application development and discuss LDAP at large, in a friendly and passionated atmosphere. A call for participation has been opened and will remain open until August 1st 18th. Update on CfP closure, now August 18th. SHARE THIS: * Twitter * LinkedIn * Facebook * More * * Email * Print * * Reddit * Tumblr * * Pinterest * LIKE THIS: Like Loading... Directory Services, General, Identitycfp, conference, identity, ldap, ldapcon DIRECTORY SERVICES – DOCKER, KUBERNETES: FRIENDS OR FOES? 18 June 2019Ludo2 Comments Two weeks ago, at the ForgeRock Identity Live conference, I did a talk about ForgeRock Directory Services (DS) in the Docker/Kubernetes (K8S) world, trying to answer the question whether DS and Docker/K8S were friends or foes. Before I dive into the question, let me say that it’s obvious that our whole industry is moving to the Cloud, and that Docker/Kubernetes are becoming the standard way to deploy software in the Cloud, in any Cloud. Therefore whether DS and K8S are ultimately friends or foes is not the right question. I believe it is unavoidable and that in the near future we will deploy and fully support Directory Services in K8S. But is it a good idea to do it today? Let’s examine why we are questioning this today, what are the benefits of using Kubernetes to deploy software, what are the constraints of deploying the current version of Directory Services (6.5) in Kubernetes, and what ForgeRock is working on to improve DS in K8S. Finally I will highlight why Directory Services is a good solution to persist data, whether it’s on premise or in the Cloud. WHY THE DISCUSSION ABOUT DS AND K8S? The main reason we are having this discussion is due to the nature of Directory Services. DS is not the usual stateless web application. Directory Services is both a stateful application and a distributed one. These are two main aspects that require special care when trying to deploy in containers. First Directory Services is a stateful application because it is the place where one can store the state for all these stateless web-applications. In our platform, we use DS to store ForgeRock Access Management data, whether it’s runtime configuration data, tokens and user identities. Second Directory Services is a distributed application because instances need to talk with each other so that the data is replicated and consistent. Because databases and distributed applications require stronger orchestration and coordination between elements of the system, they are implemented as Stateful Sets in the Kubernetes world, and make use of Persistent Volumes (PV). Therefore our Cloud Deployment Model of ForgeRock Directory Services is also implemented this way. It’s worth noting that Persistent Volume is a Kubernetes API and there are several types of volumes and many different providers implementations. Some of the PV types are very recent and still beta versions. So, when using Kubernetes for applications that persist data, you should have a good understanding of the characteristics and the performance of the Persistent Volumes choices that are available in your environment. BENEFITS OF CONTAINERS AND KUBERNETES Developers are making a great use of containers because it simplifies focus on what they have to build and test. Instead of spending hours figuring how to install and configure a database, and build a monitoring platform to validate their work, they can pull one or more docker images that will automate this task. When going into production, the automation is a key aspect. Kubernetes and its family of tools, allow administrators to describe their target architectures, automate deployment, monitoring and incident response. Typically in a Kubernetes cluster, if the administrator requires at least 3 instances of an application, Kubernetes will react to the disappearance of an instance and will restart a new one immediately. Another key benefit of Kubernetes is auto-scalability. The Kubernetes deployment can react to monitoring alerts or external signals to add or remove instances of an application in order to support a greater or smaller workload. This optimises the cost of running the solution, balancing the capacity to absorb peak loads with the cost of running at normal or low usage levels. DIRECTORY SERVICES 6.5 CONSTRAINTS IN K8S But auto-scaling is not something that is suitable to all applications, and typically Directory Services, like most of the databases, does not scale automatically by adding more running instances. Because databases have state and data, and expect exclusive access to the files, adding a new replica is a costly operation. The data needs to be duplicated in order to let another instance using it. Also, adding a Directory Services instance only helps to scale read operations. A write operation on any server will need to be replicated to all other servers. So all servers will have the same write throughput and the same amount of disk I/Os. In the world of databases, the only way to scale write operations is to distribute (shard) the data to multiple servers. Such capability is not yet available in Directory Services, but it’s planned for future releases. (Note that Directory Proxy Services 6.5 already has support for sharding, but with some constraints. And the proxy is not yet part of the Cloud Deployment Model). Another constraint of Directory Services 6.5 is how replication works. The DS replication feature was designed years ago when customers would deploy servers and would not touch them unless they were broken. Servers had stable hostnames or IP addresses and would know all of their peers. In the container world, the address of an instance is only known after the instance is started. And sometimes you want to start several instances at the same time. The current ForgeRock Cloud Deployment Model and the Directory Services docker images that we propose, work around the design limitation of replication management, by pre-configuring replication for a fixed (and small) maximum number of replicas. It’s not possible to dynamically add another replica after that. Also, the “dsreplication” utility cannot be used in Kubernetes. Luckily, monitoring replication and more importantly its latency is possible with Prometheus which is the default monitoring technology in Kubernetes. COMING IMPROVEMENTS IN DIRECTORY SERVICES For the past year, we’ve been working hard on redesigning how we manage and bootstrap replication between Directory Services instances. Our main challenge with that work has been to do it in a way that allows us to continue to replicate with previous versions. Interoperability and compatibility of replication between different versions of Directory Services has been and will remain a key value of the product, allowing customers to roll out new versions with zero downtime of the service. We’re moving towards using full CA-based certificates and mutual TLS authentication for establishing trust between replicas. Configuring a new replica will no longer require updating all servers in the topology, and replicas that are uninstalled or stopped for some time will be automatically removed from the topology (and so will be their associated change logs and meta-data). When starting a new replica, it will only need to know of one other running replica (or be told that it is the first one). These changes will make automating the deployment of new replica much simpler and remove the limit to the number of replicas. We are also improving the way we are doing backup and restore of a database backend or the whole server, allowing to directly use cloud buckets such as S3 or GCS. All of these things are planned for the next major release due in the first half of 2020. Most of these features will be used by our own ForgeRock Identity Platform as a Service offering that will go in stages of Early Access and Beta later this year. Once we have the ability to fully automate the deployment and the upgrade of a cluster of Directory Services instances, in one or more data-centres, we will start working on horizontal scalability for Directory Services, and provide a way to scale the number of servers as the data stored grows, allowing a consistent level of write throughout. All of this fully automated to be deployed in the Cloud using Kubernetes. BENEFITS OF USING DIRECTORY SERVICES AS A DATA STORE Often people ask me why they should use ForgeRock Directory Services rather than a real database. First of all, Directory Services is a database. It’s a specialised database, built on a standard data model and a standard access protocol: Lightweight Directory Access Protocol aka LDAP. Several people in the past have pointed out that LDAP might have even been the first successful NoSQL database! 🙂 Furthermore, Directory Services also exposes all of the data through a REST/JSON API, yet still providing the same security and fine grained access controls mechanisms as through LDAP. But the main value of Directory Services is that you can achieve very high availability of the data (in the 5 9’s), using standard systems (whether they are bare metal systems or virtual hosts or containers), even with world wide geographic distribution. We have many customers that have deployed a single directory services distributed in 3 to 6 data centers around the globe. The LDAP data model has a flexible schema that can be extended, customised without having to rebuild the database nor even restart the servers. The data can even be exposed through versioned APIs using our REST API. Finally, the combination of flexible and extensive schema with fine-grained access controls, allow multiple applications to access the data, but with great control of which application can read or write which data. This results in a single identity and credentials for a user, but multiple sets of attributes, that can be shared by applications or restricted to a single one: a single central view of the user that is then easier and more cost effective to manage. CONCLUSION Back to the track of Kubernetes, and because of the constraints of the current Directory Services Cloud Deployment Model with version 6.5, we would recommend that you try to keep your Directory Services deployed in VMs or on bare metal. But with the next release which underpins the ForgeRock Cloud offering, we will fully support deploying Directory Services on Docker/Kubernetes. We will continue our investment in the product to be able to support Auto-Scaling (using data sharding) in subsequent releases. Building these solutions is not extremely difficult, but we need time to prove that it’s 100% reliable in all conditions, because in the end, the most wanted and appreciated feature of ForgeRock Directory Services is its reliability. SHARE THIS: * Twitter * LinkedIn * Facebook * More * * Email * Print * * Reddit * Tumblr * * Pinterest * LIKE THIS: Like Loading... Directory Servicesautomation, cloud, Containers, Directory Services, directory-server, Docker, ForgeRock, Kubernetes, Prometheus FORGEROCK IDENTITY LIVE BERLIN 12 June 2019Ludo1 Comment Last week, the IdentityLive tour stopped in Berlin for the first European event of 2019 (the second one will be in London on October 8th-9th). It was a good opportunity to meet and discuss with our European customers (or the European teams of our global customers). For me, the main topic of discussion was Kubernetes and running Directory Services in Docker/K8S. It was also something that I’ve discussed a little bit during the Nashville Identity Live, but not as much as I did in Berlin. I also did a talk on that subject at the Identity Live Cloud Workshop (the second day of the event is focusing on the technical aspects of our products and solutions). I’ve started to write another article to detail my talk. I hope to publish it here in the next few days. Meanwhile, you can find all the photos from Identity Live Berlin on my Flickr page as usual. Note that Identity Live Berlin took place at the “Classic Remise” which is a showroom for old and sports cars. An unusual place for a conference, but a good opportunity to admire some pretty old cars and try to take a different kind of photos. SHARE THIS: * Twitter * LinkedIn * Facebook * More * * Email * Print * * Reddit * Tumblr * * Pinterest * LIKE THIS: Like Loading... GeneralCIAM, conference, Directory Services, ForgeRock, identity, identityLive, summit FORGEROCK IDENTITY LIVE NASHVILLE, TN 13 May 2019LudoLeave a comment Two weeks ago debuted the ForgeRock Identity Live series of events. This year the USA based event moved to Nashville TN. This was my first visit to the city of Country Music and honky-tonks. It was fun listening to the live music everywhere, trying (and buying) boots, visiting the Country Music Hall of Fame, although we didn’t really have much time for leisure. The Identity Live event itself was really good and very well attended. The engagement of our Customers and Partners was great and we’ve had a myriad of discussions, feedbacks and questions about our products, our roadmap and our progress on our move to the Cloud. The videos of the sessions are already available on ForgeRock website. And you can also see the photos that I took during the event. Next is Berlin Identity Live, on June 6-7. Registration is still open! I’m looking forward to seeing you in Berlin! SHARE THIS: * Twitter * LinkedIn * Facebook * More * * Email * Print * * Reddit * Tumblr * * Pinterest * LIKE THIS: Like Loading... GeneralCIAM, conference, ForgeRock, identity, identityLive, Nashville FORGEROCK DS AND THE LDAP RELAX RULES CONTROL 17 January 201907 January 2019LudoLeave a comment In ForgeRock Directory Services 6.5, we’ve added the support for the LDAP Relax Rules Control, both on the server and our clients. One of my colleagues, involved with the customers’ deployment, asked me why we’ve added the control and what it should be used for. The LDAP Relax Rules Control is an LDAP extension that allows a directory user agent (a client) to request the directory service to temporarily relax enforcement of various data and service model rules. The internet-draft is explicit about which rules can be relaxed or not. But typically it can be used to allow a client to write specific operational attributes that should be read-only and managed by the server. Starting with OpenDJ 3.0, we’ve removed the ability to bulk import LDIF data to a server while preserving the existing data (the “append mode”). First, performing an import-ldif in append mode was breaking replication. The import needed to be applied to all replica, while no change was to happen on the new data. The process was cumbersome, especially when having multiple data-centers. But also, removing this feature allowed us to have a more generic interface and implement multiple backend using different underlying key-value stores. But we have a few customers that have the need to seldom bulk load a large set of users to their directory service. In DS 6.0, we’ve added an option to speed bulk operations using ldapmodify or ldapdelete: –numConnections. Instead of serialising all updates or adds contained in an LDIF file, the tool will run them in parallel across multiple connections, while also controlling dependencies of changes. With this options, some of our customers have added several millions of users to their replicated directory services in minutes. By controlling the number of connections, one can also balance the need for speed of bulk loading data against the need to keep bandwidth for the regular client applications. Doing bulk updates over LDAP is now fast, but some customers used the import process to also carry over some attributes that are usually managed by the directory server and thus read-only, such as the CreateTimeStamp, the CreatorsName. And this is specifically what the Relax Rules Control is meant to allow. So, if you have a need to bulk load large set of data, or synchronise over LDAP data from another server, and need to preserve some of the operational attribute, you can use the Relax Rules Control as illustrated below. Note that the OID for the control is 1.3.6.1.4.1.4203.666.5.12 but ForgeRock DS tools also recognise the RelaxRules string alias. $ ldapmodify -p 1389 -D cn=directory\ manager -w secret12 -J RelaxRules:true --numConnections 4 ../50Kusers.ldif ... ADD operation successful for DN uid=user.10021,ou=People,dc=example,dc=com ADD operation successful for DN uid=user.10022,ou=People,dc=example,dc=com ADD operation successful for DN uid=user.10001,ou=People,dc=example,dc=com ADD operation successful for DN uid=user.10020,ou=People,dc=example,dc=com ADD operation successful for DN uid=user.10026,ou=People,dc=example,dc=com ADD operation successful for DN uid=user.10025,ou=People,dc=example,dc=com ADD operation successful for DN uid=user.10024,ou=People,dc=example,dc=com ADD operation successful for DN uid=user.10005,ou=People,dc=example,dc=com ADD operation successful for DN uid=user.10033,ou=People,dc=example,dc=com ADD operation successful for DN uid=user.10029,ou=People,dc=example,dc=com ... Note that because the Relax Rules Control allows to override some of the rules enforced normally by the server, it’s important to control and restrict which clients or users are allowed to make use of it. In ForgeRock DS, you would use ACIs (global or not) to define who has permission to use the control. Out of the box, only Directory Manager can, because it has the bypass access controls privilege. Check the “Use Control or Extended Operation” section of the Administration Guide for the details on how to allow a user to use a control. SHARE THIS: * Twitter * LinkedIn * Facebook * More * * Email * Print * * Reddit * Tumblr * * Pinterest * LIKE THIS: Like Loading... Directory ServicesDirectory Services, directory-server, extensions, ForgeRock, howto, ldap EXPLAINING INDEX-ENTRY-LIMIT IN FORGEROCK DIRECTORY SERVICES / OPENDJ 15 January 201904 January 2019LudoLeave a comment A few years ago, I’ve explained the various resource limits in OpenDJ, the open source LDAP and REST directory server. A few months ago, someone read the post and asked on twitter about the index-entry-limit: The index-entry-limit is probably the least understood parameter in the OpenDJ directory server, as was the AllIDThreshold in Sun Directory Server (and its siblings : Netscape Directory, Red Hat Directory, Oracle DSEE…). So before I dive in explaining what is this parameter, how it’s used and how it can be tuned, let me start with answering the question : how does index-entry-limit relate to other administrative limits ? Answer: It doesn’t ! The index-entry-limit is an internal limit and does not really limits the results returned to clients. It just limits the resources consumed when processing indexes. A Directory Server is a very specialized data-store based on the LDAP standard, and its primary goal was to be able to search and return user information such as email addresses or names and phone numbers, very quickly and for a large number of different clients. For that, the directory servers were designed to favor reads over writes, and read optimization was achieved through the use of indexes. In LDAP, a search request (which can be used to read an entry or search for one or more through the whole database) contains a search filter. The filter may be simple or complex, and composed of one or more attribute value assertions. A simple filter can be “(sn=Smith)”. Complex filters combine operators and different attributes : “(&(objectclass=Person)(|(sn=Smith)(cn=*Smith*)))” – find a person whose surname is smith or whose common name contains smith – When the ForgeRock Directory Server / OpenDJ receives a search request, it processes it in 2 phases. In the first phase, it analyzes the search filter, to identify which attributes are indexed, and then uses these indexes to build a list of possible candidates to return. If there are no indexed attributes or the list is too large, the server decides that the list is actually the whole database. Such search request is tagged as “unindexed” and the server verify if the authenticated user has the “unindexed-search” privilege before continuing. In the second phase, it reads all the candidates from the database, and assess the full filter to decide to return the entry to the client or not (subject to access controls). ForgeRock DS / OpenDJ implements attribute indexes as reversed index. Meaning that for a specific attribute, we keep a pair of each unique value and a list of the entries that contain that value. Because maintaining a large list of entries for each value of all indexed attributes may have a big cost, both in term of memory usage and disk I/O (think that when you add an entry in the Directory, all of its indexed attributes will need to be updated), we introduced a limit to the number of entries that an index record can contain: the index-entry-limit. For example, if the number of entries that contain the objectClass person exceeds the limit, then we mark the key as “full” and we consider that the list of candidates is actually the whole set of directory entries. This saves us from updating and reading a very long record, allocating lots of data, to end up iterating through almost all entries. You might ask, so why having an index for objectClass then ? Well, in a directory server that contains millions of users, there are in fact very few entries that are not persons. These entries will have their objectClass values indexed, and searching for those entries will be very efficient thanks for the index. The index-entry-limit is a limit of the number of entries that are contained in a single index record, per value of an attribute index. Its default value is 4000 and works for most medium to large scale deployments. So, why is it a configurable parameter, and when should you change it? Because ForgeRock DS is used in many different environments with various use cases, and a great range of number of entries (some of our customers have over 100 millions entries in a directory service), we know that one size doesn’t fit all. But the default value works for most of the index usages. Also, the index-entry-limit can be set for each individual index, or for the whole backend (and this value applies to all indexes that don’t have a specific value). It is highly recommended that you only try to change the index-entry-limit of specific indexes, and not the backend default value. In no case, should you increase the index-entry-limit to a value close to the total number of entries in the directory. This will undermine performances of both searches and updates, significantly increase the footprint of the data stored on disk. There are few known cases where the index-entry-limit value should be changed (and equally cases where increasing the value will only consume more resources for no performance gain). Keep also in mind that when you change the index-entry-limit, you need to rebuild the indexes for which the limit was changed. So it’s not something that you want to do too often. And definitely not something that you need to adjust constantly. Groups. When the server starts, it issues an internal search to find all group entries and cache them for better performances. The search is based on the ObjectClass attribute. If there are more than 4000 groups of one kind (the search is for GroupOfNames, GroupOfUniqueNames, GroupOfEntries, DynamicGroup and ds-virtual-static-group), the search will be unindexed and can take a long time to proceed. In that case, you should increase the index-entry-limit for the ObjectClass attribute, to a value just above the number of groups. Members (or uniqueMembers). If you have more than 4000 static groups, and you know that some users are likely to be member of more than 4000 groups, then you should also increase the index-entry-limit for the member attribute (or uniqueMember) to a value just above the maximum number of group a user can be in, especially if you have enabled the Referential Integrity Plugin (that removes a user from groups when its entry is deleted). Another typical use case for increasing the index-entry-limit is when you have millions of entries, and an attribute doesn’t have a flat distribution of values. Think about the surname of users. In a wide range of population, there are probably more “Smith” or “Lee” than “Washington”. Within 10M users, would there be more than 4000 “Lee”? If it’s possible, and the server receives searches with filters such as “(sn=Lee)”, then you should consider increasing the limit for the sn attribute. Backendstat is the tool you want to use to verify the state of the index and whether some records have reached the index-entry-limit. For some attributes, such as ObjectClass, it is normal that the limit is reached. For others, such as sn, it’s probably something you want to check regularly. The backendstat tool requires exclusive access to the database, and thus can only run against a server that is stopped (or a backup). To list the indexes, use backendstat list-indexes: $ backendstat list-indexes -b dc=example,dc=com -n userRoot Index Name Raw DB Name Type Record Count dn2id /dc=com,dc=example/dn2id DN2ID 10002 id2entry /dc=com,dc=example/id2entry ID2Entry 10002 referral /dc=com,dc=example/referral DN2URI 0 id2childrencount /dc=com,dc=example/id2childrencount ID2ChildrenCount 3 state /dc=com,dc=example/state State 18 uniqueMember.uniqueMemberMatch /dc=com,dc=example/uniqueMember.uniqueMemberMatch MatchingRuleIndex 0 mail.caseIgnoreIA5SubstringsMatch:6 /dc=com,dc=example/mail.caseIgnoreIA5SubstringsMatch:6 MatchingRuleIndex 31232 mail.caseIgnoreIA5Match /dc=com,dc=example/mail.caseIgnoreIA5Match MatchingRuleIndex 10000 aci.presence /dc=com,dc=example/aci.presence MatchingRuleIndex 0 member.distinguishedNameMatch /dc=com,dc=example/member.distinguishedNameMatch MatchingRuleIndex 0 givenName.caseIgnoreMatch /dc=com,dc=example/givenName.caseIgnoreMatch MatchingRuleIndex 8605 givenName.caseIgnoreSubstringsMatch:6 /dc=com,dc=example/givenName.caseIgnoreSubstringsMatch:6 MatchingRuleIndex 19629 telephoneNumber.telephoneNumberSubstringsMatch:6 /dc=com,dc=example/telephoneNumber.telephoneNumberSubstringsMatch:6 MatchingRuleIndex 73235 telephoneNumber.telephoneNumberMatch /dc=com,dc=example/telephoneNumber.telephoneNumberMatch MatchingRuleIndex 10000 ds-sync-hist.changeSequenceNumberOrderingMatch /dc=com,dc=example/ds-sync-hist.changeSequenceNumberOrderingMatch MatchingRuleIndex 0 ds-sync-conflict.distinguishedNameMatch /dc=com,dc=example/ds-sync-conflict.distinguishedNameMatch MatchingRuleIndex 0 entryUUID.uuidMatch /dc=com,dc=example/entryUUID.uuidMatch MatchingRuleIndex 10002 sn.caseIgnoreMatch /dc=com,dc=example/sn.caseIgnoreMatch MatchingRuleIndex 10000 sn.caseIgnoreSubstringsMatch:6 /dc=com,dc=example/sn.caseIgnoreSubstringsMatch:6 MatchingRuleIndex 32217 cn.caseIgnoreMatch /dc=com,dc=example/cn.caseIgnoreMatch MatchingRuleIndex 10000 cn.caseIgnoreSubstringsMatch:6 /dc=com,dc=example/cn.caseIgnoreSubstringsMatch:6 MatchingRuleIndex 86040 objectClass.objectIdentifierMatch /dc=com,dc=example/objectClass.objectIdentifierMatch MatchingRuleIndex 6 uid.caseIgnoreMatch /dc=com,dc=example/uid.caseIgnoreMatch MatchingRuleIndex 10000 Total: 23 To check the status of the indexes and see which keys are full (i.e. exceeded the index-entry-limit), use backendstat show-index-status. Warning, this may take a long time. $ backendstat show-index-status -b dc=example,dc=com -n userRoot Index Name Raw DB Name Valid Confidential Record Count Over Entry Limit 95% 90% 85% uniqueMember.uniqueMemberMatch /dc=com,dc=example/uniqueMember.uniqueMemberMatch true false 0 0 0 0 0 mail.caseIgnoreIA5SubstringsMatch:6 /dc=com,dc=example/mail.caseIgnoreIA5SubstringsMatch:6 true false 31232 12 0 0 0 mail.caseIgnoreIA5Match /dc=com,dc=example/mail.caseIgnoreIA5Match true false 10000 0 0 0 0 aci.presence /dc=com,dc=example/aci.presence true false 0 0 0 0 0 member.distinguishedNameMatch /dc=com,dc=example/member.distinguishedNameMatch true false 0 0 0 0 0 givenName.caseIgnoreMatch /dc=com,dc=example/givenName.caseIgnoreMatch true false 8605 0 0 0 0 givenName.caseIgnoreSubstringsMatch:6 /dc=com,dc=example/givenName.caseIgnoreSubstringsMatch:6 true false 19629 0 0 0 0 telephoneNumber.telephoneNumberSubstringsMatch:6 /dc=com,dc=example/telephoneNumber.telephoneNumberSubstringsMatch:6 true false 73235 0 0 0 0 telephoneNumber.telephoneNumberMatch /dc=com,dc=example/telephoneNumber.telephoneNumberMatch true false 10000 0 0 0 0 ds-sync-hist.changeSequenceNumberOrderingMatch /dc=com,dc=example/ds-sync-hist.changeSequenceNumberOrderingMatch true false 0 0 0 0 0 ds-sync-conflict.distinguishedNameMatch /dc=com,dc=example/ds-sync-conflict.distinguishedNameMatch true false 0 0 0 0 0 entryUUID.uuidMatch /dc=com,dc=example/entryUUID.uuidMatch true false 10002 0 0 0 0 sn.caseIgnoreMatch /dc=com,dc=example/sn.caseIgnoreMatch true false 10000 0 0 0 0 sn.caseIgnoreSubstringsMatch:6 /dc=com,dc=example/sn.caseIgnoreSubstringsMatch:6 true false 32217 0 0 0 0 cn.caseIgnoreMatch /dc=com,dc=example/cn.caseIgnoreMatch true false 10000 0 0 0 0 cn.caseIgnoreSubstringsMatch:6 /dc=com,dc=example/cn.caseIgnoreSubstringsMatch:6 true false 86040 0 0 0 0 objectClass.objectIdentifierMatch /dc=com,dc=example/objectClass.objectIdentifierMatch true false 6 4 0 0 0 uid.caseIgnoreMatch /dc=com,dc=example/uid.caseIgnoreMatch true false 10000 0 0 0 0 Total: 18 Index: /dc=com,dc=example/mail.caseIgnoreIA5SubstringsMatch:6 Over index-entry-limit keys: [.com] [@examp] [ample.] [com] [e.com] [exampl] [le.com] [m] [mple.c] [om] [ple.co] [xample] Index: /dc=com,dc=example/objectClass.objectIdentifierMatch Over index-entry-limit keys: [inetorgperson] [organizationalperson] [person] [top] I hope this long article will help you better understand and tune your ForgeRock Directory Servers for search performances. Please let me know how it goes. SHARE THIS: * Twitter * LinkedIn * Facebook * More * * Email * Print * * Reddit * Tumblr * * Pinterest * LIKE THIS: Like Loading... Directory ServicesDirectory Services, directory-server, ForgeRock, index, performance, troubleshooting, tuning Previous Articles CATEGORIES * Directory Services * General * Identity * Identity Gateway * InFrench * Java * Life * security * Software * Uncategorized Search for: SOCIAL * View ludovic.poitou’s profile on Facebook * View ludomp’s profile on Twitter * View ludomp’s profile on Instagram * View ludovicp’s profile on LinkedIn * View ludomp’s profile on GitHub Follow me on RSS - Posts RECENT POSTS * WE DID IT ! * ForgeRock Directory Services 7 * Directory Services Containerization Webinar * SnowCamp 2020, c’est déjà fini 😢 * ForgeRock SKO in Las Vegas authentication authorization blog brazil build cloud community conference developer devoxxfr directory directory-server Directory Services documentation dsee eic engineering europe events fisl ForgeRock france gateway grenoble i18n iam identity identity gateway identityLive Identity Relationship Management IdentitySummit identité index IRM IRMSummit2014 java javaone javaone2012 Json Kubernetes ldap ldapcon linux localization monitoring office openam opendj OpenDS openidm openig opensolaris opensource opensso Paris password performance photography photos products release replication REST search security software startup summit sun team Tips training troubleshooting tuning video September 2021 M T W T F S S 12345 6789101112 13141516171819 20212223242526 27282930 « Feb BLOGROLL * De l'idée aux mots * ForgeRock Community Blog Syndication * My GitHub Account FOLLOW ME ON TWITTER My Tweets META * Register * Log in * Entries feed * Comments feed * WordPress.com LICENSE This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. Blog at WordPress.com. Ludo Sketches Blog at WordPress.com. Loading Comments... Write a Comment... Email (Required) Name (Required) Website %d bloggers like this: Send to Email Address Your Name Your Email Address Cancel Post was not sent - check your email addresses! Email check failed, please try again Sorry, your blog cannot share posts by email. * FollowFollowing * Ludo Sketches Already have a WordPress.com account? Log in now. * * Ludo Sketches * Customize * FollowFollowing * Sign up * Log in * Report this content * Manage subscriptions * Collapse this bar