{"id":9939,"date":"2022-02-22T16:09:37","date_gmt":"2022-02-22T10:39:37","guid":{"rendered":"https:\/\/opstree.com\/blog\/\/?p=9939"},"modified":"2022-02-22T16:58:06","modified_gmt":"2022-02-22T11:28:06","slug":"handling-private-affair-a-guide-to-secrets-management-system","status":"publish","type":"post","link":"https:\/\/opstree.com\/blog\/2022\/02\/22\/handling-private-affair-a-guide-to-secrets-management-system\/","title":{"rendered":"Handling Private Affair: A Guide to Secrets Management System"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"420\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/02\/design_secrets.gif?w=720\" alt=\"\" class=\"wp-image-9950\" \/><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Needless to say an automated system, no matter how big or small, must be designed with scale in mind. We\u2019ll talk about laying foundation for a robust and malleable setup which is a useful read for everyone.<\/p><\/blockquote>\n\n\n\n<p class=\"has-text-align-justify\">In my experience as DevOps and SRE, I\u2019ve enjoyed quite a lot of things this profession offered. From the satisfaction of fulfilled curiosities to the anxiety of unforeseen mishaps, it delivered one day after the other. The nervousness in the face of new challenges, happiness on receiving appreciation, thrill during troubleshooting, the pride after a successful implementation, and a lot more. But the one I found myself seeking was boredom. Yes, plain old <em>silence<\/em> where no surprises are met, everything runs exactly as it should and you enjoy listening to dropping pins. This is especially true when the system in question is your own design. There\u2019s no greater sentiment. It is like <em>watching a<\/em> <em>bird that you\u2019ve freed soar.<\/em><\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"has-text-align-justify\">For the same reason, in this article, we\u2019ll talk about the considerations while designing a secret management system for large-scale infrastructure. Having a grip over our secret flow is paramount w.r.t functioning of our distributed system as well the safety of our intellectual property. Therefore, keeping it stable is a huge part of preserving that <em>silence<\/em> on a big scale. Needless to say an automated system, no matter how big or small, must be designed with scale in mind. We\u2019ll talk about laying the foundation for a robust and malleable setup which is a useful read for everyone. This article assumes that the reader is aware of secrets and their importance in a microservices infrastructure. However, if not so, a quick google search should yield ample information.<\/p>\n\n\n\n<p class=\"has-text-align-justify has-medium-font-size\"><strong>Encrypted Store<\/strong><\/p>\n\n\n\n<p class=\"has-text-align-justify\"><strong>Secrets Management System<\/strong> consists of a lot more than just a secret store. It consists of processes to map secrets to appropriate CI pipelines, maintain different versions, and ways to incorporate secrets during deployments to various services regardless of changes in infrastructure. We\u2019ll talk more about it later but all these facts do not downplay the importance of a hardened, highly-available storage application at all. HashiCorp Vault, for example, is quite popular in this area. It is a distributed system, which has below desirable features:<\/p>\n\n\n\n<ol><li><em>RESTful API<\/em><\/li><li><em>Scalable<\/em><\/li><li><em>Highly-available<\/em><\/li><li><em>Secure storage<\/em><\/li><\/ol>\n\n\n\n<p class=\"has-text-align-justify\">A secret storage system should be, preferably, central. One place where all clients can request the secrets they need. This type of setup has its undeniable advantages:<\/p>\n\n\n\n<ol><li><em>It is simple to manage secrets<\/em><\/li><li><em>Chances of spill or leak are minimized<\/em><\/li><li><em>Facilitates coordination among teams<\/em><\/li><li><em>Keeps code-base secure<\/em><\/li><\/ol>\n\n\n\n<p class=\"has-text-align-justify\"><em><strong>HashiCorp Vault<\/strong><\/em> is one good example but <a href=\"https:\/\/opstree.com\/blog\/\/2021\/11\/16\/aws-secret-manager\/\">AWS Secret Manager<\/a> is also highly recommended. It may not have as many features as the vault, however, if your infra is mostly on AWS, it is a compelling choice with <em>seamless services integration and IAM authentication.<\/em><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Certificates<\/strong><\/p>\n\n\n\n<p class=\"has-text-align-justify\">All official documents need to be attested. That is how we validate the authenticity of their source. Why should it be any different for our microservices? I am talking, of course, about certificates. It is recommended to use them during any or all communication even in a private network. Our focus, however, is secrets management, hence we\u2019ll discuss certificates and their importance while adding and fetching secrets from the secret vault.&nbsp;<\/p>\n\n\n\n<p class=\"has-text-align-justify\">Ideally, we\u2019ll read\/write secrets using RESTful APIs. From a security point of view, these requests must go over SSL\/TLS with certificates issued from a trusted CA. In this regard, there are a few things we must understand:<\/p>\n\n\n\n<ol><li><em>Depending on the scale, a large number of clients will be requesting secrets from our secret vault<\/em><\/li><li><em>We cannot keep issuing certificates for these clients and forget about them<\/em><\/li><li><em>Certificates must come from a trusted CA or we\u2019ll have major security loopholes in our system.<\/em><\/li><\/ol>\n\n\n\n<p class=\"has-text-align-justify\">Due to the above reasons, there are best practices in regard to PKI\u2019s that we must follow. These practices ensure that we not only have visibility over all issued certificates but can also backtrack and pinpoint culprits during unprecedented security incidents. Here are some recommendations:<\/p>\n\n\n\n<ol><li><em><strong>Integrate secrets management with policy-compliant certificate issuers (public or private CA)<\/strong><\/em><\/li><li><em><strong>Track every certificate being issued for audit purposes<\/strong><\/em><\/li><li><em><strong>Certificates must have a managed life-cycle. No certificate must stay valid longer than required.<\/strong><\/em><\/li><\/ol>\n\n\n\n<p class=\"has-text-align-justify\">If you have a private trusted CA setup, you\u2019re golden. If not, it is definitely worth looking into.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Automation<\/strong><\/p>\n\n\n\n<p class=\"has-text-align-justify\">Finally! here we are. Time to write some code. Like I mentioned before, secrets management is not just about storing and fetching. We also need to govern transmission, CRUD, availability, visibility, scalability of deployment infra, etc.&nbsp; We can address these requirements by writing utilities and automation to streamline them as much as possible. Let\u2019s start by reflecting on what we want from scalable automation around our secrets:<\/p>\n\n\n\n<ol><li><em><strong>Should support distributing secrets to multiple environments and sub-environments in run-time<\/strong><\/em>. It is the best way as it omits the possibility of storing or committing secrets anywhere else except the secret vault. Secrets are pulled via APIs directly from the vault as the deployment is happening. Here\u2019s a related<a href=\"https:\/\/opstree.com\/blog\/\/2021\/09\/14\/introducing-kubernetes-vault-web-hook\/\"> interesting tool<\/a> for Kubernetes.<\/li><li><strong><em>Provide an easy way to do CRUD operations on a secret vault as per the specific design of our system<\/em><\/strong>. The application we\u2019re using as vault may provide easy ways to do this but, often, in my experience, writing a wrapper on top of it has been crucial. Particularly when the goal is to design a self-service system where the dependency on DevOps is minimal.<\/li><li><strong><em>Authenticate users via Central Identity Management<\/em><\/strong>. It may be Active Directory or IAM but automation must have checks in place to regulate access. This way we can have tight control over the system.<\/li><li><strong><em>Expose metrics for monitoring the automation. <\/em><\/strong>A tailored system would require custom metrics for insightful monitoring. The more detailed metrics, the better dashboard and alerting. Also, goes without saying, integrate it with your monitoring system.<\/li><li><strong><em>Write test cases for automation<\/em><\/strong>. Whether it is Go, Python, Shell, or HCL, test cases can be written for all of them. As the system scales up, it might overflow with features and fixes. Having a test-suite handy will make the whole thing reliable by reducing the chances of something breaking exponentially.<\/li><\/ol>\n\n\n\n<p class=\"has-medium-font-size\"><strong>What&#8217;s next?<\/strong><\/p>\n\n\n\n<p class=\"has-text-align-justify\">That\u2019s all for now. I know what would help you more in grasping these concepts. An already implemented, large-scale, intricate secrets management system that we can take apart and study, like <em><strong>Rancho with the refrigerator i<\/strong>n<a href=\"https:\/\/g.co\/kgs\/e3f4UF\"> 3 idiots<\/a>.<\/em> Well, I am planning something like that for my next article, which will be in continuation to this one. Thanks for reading. Stay tuned!<\/p>\n\n\n\n<p><a href=\"https:\/\/creative.artisantalent.com\/secrets-from-the-worlds-best-design-schools\" target=\"_blank\" rel=\"noreferrer noopener\">Image Source<\/a><\/p>\n\n\n\n<p><br><strong style=\"font-weight:bold;\">Blog Pundit:<\/strong> <strong>Sanjeev Pandey<\/strong><\/p>\n\n\n\n<p><strong><a href=\"https:\/\/www.opstree.com\/contact-us?utm_source=blog&amp;utm_medium=wordpress+&amp;utm_campaign=Handling-Private+Affair+-A-Guide-to-Se-rets-Management-System\" target=\"_blank\" rel=\"noreferrer noopener\">Opstree<\/a><\/strong> is an End to End DevOps solution provider<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button is-style-fill\"><a class=\"wp-block-button__link\" href=\"https:\/\/www.opstree.com\/contact-us\" target=\"_blank\" rel=\"noreferrer noopener\">CONTACT US<\/a><\/div>\n<\/div>\n\n\n\n<p class=\"has-text-align-center\"><strong>Connect Us <\/strong><\/p>\n\n\n\n<ul class=\"wp-block-social-links aligncenter is-content-justification-right is-layout-flex wp-container-core-social-links-is-layout-1 wp-block-social-links-is-layout-flex\"><li class=\"wp-social-link wp-social-link-linkedin  wp-block-social-link\"><a href=\"https:\/\/www.linkedin.com\/company\/opstree-solutions\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">LinkedIn<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-youtube  wp-block-social-link\"><a href=\"https:\/\/www.youtube.com\/channel\/UCeLma6SpNYH7jjYKSBNSexw\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">YouTube<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-github  wp-block-social-link\"><a href=\"https:\/\/github.com\/OpsTree\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">GitHub<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-facebook  wp-block-social-link\"><a href=\"https:\/\/www.facebook.com\/opstree\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Facebook<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-medium  wp-block-social-link\"><a href=\"https:\/\/medium.com\/buildpiper\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M20.962,7.257l-5.457,8.867l-3.923-6.375l3.126-5.08c0.112-0.182,0.319-0.286,0.527-0.286c0.05,0,0.1,0.008,0.149,0.02 c0.039,0.01,0.078,0.023,0.114,0.041l5.43,2.715l0.006,0.003c0.004,0.002,0.007,0.006,0.011,0.008 C20.971,7.191,20.98,7.227,20.962,7.257z M9.86,8.592v5.783l5.14,2.57L9.86,8.592z M15.772,17.331l4.231,2.115 C20.554,19.721,21,19.529,21,19.016V8.835L15.772,17.331z M8.968,7.178L3.665,4.527C3.569,4.479,3.478,4.456,3.395,4.456 C3.163,4.456,3,4.636,3,4.938v11.45c0,0.306,0.224,0.669,0.498,0.806l4.671,2.335c0.12,0.06,0.234,0.088,0.337,0.088 c0.29,0,0.494-0.225,0.494-0.602V7.231C9,7.208,8.988,7.188,8.968,7.178z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Medium<\/span><\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Needless to say an automated system, no matter how big or small, must be designed with scale in mind. We\u2019ll talk about laying foundation for a robust and malleable setup which is a useful read for everyone. In my experience as DevOps and SRE, I\u2019ve enjoyed quite a lot of things this profession offered. From &hellip; <a href=\"https:\/\/opstree.com\/blog\/2022\/02\/22\/handling-private-affair-a-guide-to-secrets-management-system\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Handling Private Affair: A Guide to Secrets Management System&#8221;<\/span><\/a><\/p>\n","protected":false},"author":155574231,"featured_media":29900,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[28070474],"tags":[768739294,681911755,460,730207413,351238484,4996032,130260],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/opstree.com\/blog\/wp-content\/uploads\/2025\/11\/DevSecOps-1.jpg","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pfDBOm-2Aj","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/9939"}],"collection":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/users\/155574231"}],"replies":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/comments?post=9939"}],"version-history":[{"count":23,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/9939\/revisions"}],"predecessor-version":[{"id":10003,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/9939\/revisions\/10003"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media\/29900"}],"wp:attachment":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media?parent=9939"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/categories?post=9939"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/tags?post=9939"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}