<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel><title>Pulumi Blog: Boris Schlosser</title><link>https://www.pulumi.com/blog/author/boris-schlosser/</link><description>Pulumi blog posts: Boris Schlosser.</description><language>en-us</language><pubDate>Wed, 22 Jul 2026 00:00:00 +0000</pubDate><item><title>The Standalone ESC CLI Retired: Use pulumi env</title><link>https://www.pulumi.com/blog/esc-cli-retiring-use-pulumi-env/</link><pubDate>Wed, 22 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/esc-cli-retiring-use-pulumi-env/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/esc-cli-retiring-use-pulumi-env/index.png" /&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/docs/esc/"&gt;Pulumi ESC&lt;/a&gt; CLI v0.26.0 is the latest standalone release. We encourage users to use the &lt;a href="https://www.pulumi.com/docs/iac/cli/"&gt;Pulumi CLI&lt;/a&gt; instead.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://github.com/pulumi/esc"&gt;ESC repository&lt;/a&gt; has been archived and the code now lives under &lt;a href="https://github.com/pulumi/pulumi"&gt;pulumi&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="why-are-we-making-this-change"&gt;Why are we making this change&lt;/h2&gt;
&lt;p&gt;Pulumi ESC is the best way to store and manage configuration and secrets in your Pulumi programs and while you can certainly use ESC to store secrets and configurations for your applications or to manage your AI agents&amp;rsquo; credentials, it&amp;rsquo;s still a core feature of &lt;a href="https://www.pulumi.com/docs/iac/guides/basics/pulumi-cloud-vs-oss/"&gt;Pulumi Cloud&lt;/a&gt;, and we want to make sure we deliver a consistent experience across our entire suite.&lt;/p&gt;
&lt;p&gt;In addition to consistency, ESC and the Pulumi CLI share a lot of capabilities to interface to Pulumi Cloud and we want to make it easier and simpler for our customers: it&amp;rsquo;s now easier to understand which Pulumi organization you are working with, which user is logged in, etc.&lt;/p&gt;
&lt;h3 id="playing-nicer-with-humans-and-ai-agents"&gt;Playing nicer with humans and AI agents&lt;/h3&gt;
&lt;p&gt;A single CLI means one binary to install, one login to manage, and one place to look things up. This simplicity is beneficial whether the operator is a person or an agent.&lt;/p&gt;
&lt;p&gt;AI agents love code, and they love CLIs. By unifying the Pulumi CLI and ESC we offer a single place to look up operations around your Pulumi programs. Agents can now reason better about where to store configuration and secrets, without being confused by multiple CLI options that interface against the same service.&lt;/p&gt;
&lt;h3 id="faster-improvements"&gt;Faster improvements&lt;/h3&gt;
&lt;p&gt;With a shared CLI, any improvement to account management is automatically delivered to both: Pulumi and ESC users. At the same time, both benefit from ESC improvements and new features from day 1.&lt;/p&gt;
&lt;p&gt;ESC is a core component of our platform; a separate interface no longer makes sense.&lt;/p&gt;
&lt;h3 id="the-same-code-all-along"&gt;The same code all along&lt;/h3&gt;
&lt;p&gt;If you&amp;rsquo;re wondering what actually changes under the hood: nothing about how the commands work. The &lt;code&gt;pulumi env&lt;/code&gt; commands were never a reimplementation — the Pulumi CLI has built them from the ESC CLI&amp;rsquo;s own code since ESC&amp;rsquo;s first release, which is why the same command surface has always been available under &lt;a href="https://www.pulumi.com/docs/iac/cli/commands/pulumi_env/"&gt;&lt;code&gt;pulumi env&lt;/code&gt;&lt;/a&gt;. What we&amp;rsquo;re retiring is a second way to ship and install that code, not the code itself.&lt;/p&gt;
&lt;h2 id="do-i-need-to-update"&gt;Do I need to update?&lt;/h2&gt;
&lt;p&gt;If you are using the ESC CLI, you should switch as soon as possible, as the standalone binary will not get the latest features. Don&amp;rsquo;t worry — the mapping is mechanical, and the &lt;a href="https://www.pulumi.com/docs/esc/guides/migrate-from-esc-cli/"&gt;migration guide&lt;/a&gt; covers it command by command:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;esc env &amp;lt;command&amp;gt;&lt;/code&gt; becomes &lt;code&gt;pulumi env &amp;lt;command&amp;gt;&lt;/code&gt;. For example, &lt;code&gt;esc env ls&lt;/code&gt; becomes &lt;code&gt;pulumi env ls&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;esc open&lt;/code&gt; and &lt;code&gt;esc run&lt;/code&gt; shortcuts become &lt;code&gt;pulumi env open&lt;/code&gt; and &lt;code&gt;pulumi env run&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;esc login&lt;/code&gt;, &lt;code&gt;esc logout&lt;/code&gt;, and &lt;code&gt;esc version&lt;/code&gt; become &lt;code&gt;pulumi login&lt;/code&gt;, &lt;code&gt;pulumi logout&lt;/code&gt;, and &lt;code&gt;pulumi version&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are already using the Pulumi CLI, you have nothing to worry about; this has no effect since ESC commands were already available under the &lt;code&gt;pulumi env&lt;/code&gt; sub-command.&lt;/p&gt;
&lt;p&gt;Ready to switch? &lt;a href="https://www.pulumi.com/docs/install/"&gt;Install the Pulumi CLI&lt;/a&gt; if you don&amp;rsquo;t have it yet, then run &lt;code&gt;pulumi env ls&lt;/code&gt; to see your environments. Every command is documented in the &lt;a href="https://www.pulumi.com/docs/iac/cli/commands/pulumi_env/"&gt;&lt;code&gt;pulumi env&lt;/code&gt; reference&lt;/a&gt;.&lt;/p&gt;</description><author>Pablo Terradillos</author><author>Boris Schlosser</author><category>esc</category><category>features</category></item><item><title>How We Eliminated Long-Lived CI Secrets Across 70+ Repos</title><link>https://www.pulumi.com/blog/eliminating-ci-secrets-with-pulumi-esc/</link><pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/eliminating-ci-secrets-with-pulumi-esc/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/eliminating-ci-secrets-with-pulumi-esc/index.png" /&gt;
&lt;p&gt;Supply chain attacks on CI/CD pipelines are accelerating. A growing pattern involves attackers compromising popular &lt;a href="https://github.com/features/actions"&gt;GitHub Actions&lt;/a&gt; through &lt;em&gt;tag poisoning&lt;/em&gt; — rewriting trusted version tags to point to malicious code that harvests environment variables, cloud credentials, and API tokens from runner environments. The stolen credentials are then exfiltrated to attacker-controlled infrastructure, often before anyone notices.&lt;/p&gt;
&lt;p&gt;For every engineering organization, the question is no longer &lt;em&gt;if&lt;/em&gt; your CI pipeline will encounter a compromised dependency, but &lt;em&gt;what is exposed when it does&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;At Pulumi, we asked ourselves that question and decided the answer should be &amp;ldquo;nothing useful.&amp;rdquo; Here&amp;rsquo;s how we got there.&lt;/p&gt;
&lt;h2 id="the-problem-with-static-ci-secrets"&gt;The problem with static CI secrets&lt;/h2&gt;
&lt;p&gt;Most organizations store long-lived cloud credentials, API tokens, and service account keys as GitHub repository or organization secrets. But this approach has several well-known problems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Broad availability.&lt;/strong&gt; Every workflow run on a repository can access every secret stored in that repo. A compromised action in any workflow can read them all.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No expiration.&lt;/strong&gt; Secrets persist until someone manually rotates them. If exfiltrated, they give attackers persistent access for weeks or months.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No granular audit trail.&lt;/strong&gt; GitHub tells you a secret was used, but not which workflow, which step, or what it was used for.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Secret sprawl.&lt;/strong&gt; Across dozens or hundreds of repos, the same credentials are often duplicated, making rotation a coordinated, error-prone effort.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In a supply chain attack scenario, this is exactly what attackers count on: a single compromised action that can dump a trove of long-lived credentials.&lt;/p&gt;
&lt;h2 id="our-approach-zero-static-secrets"&gt;Our approach: zero static secrets&lt;/h2&gt;
&lt;p&gt;We replaced every static GitHub Secret across our CI pipelines with short-lived, dynamically fetched credentials using &lt;a href="https://www.pulumi.com/docs/esc/"&gt;Pulumi ESC&lt;/a&gt; and &lt;a href="https://openid.net/developers/how-connect-works/"&gt;OpenID Connect (OIDC)&lt;/a&gt;. The credential flow works in layers, each scoped and ephemeral:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;GitHub generates a short-lived OIDC token&lt;/strong&gt; scoped to the specific workflow run, repository, and branch. This token is cryptographically signed by GitHub&amp;rsquo;s OIDC provider.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The token is exchanged with Pulumi Cloud&lt;/strong&gt; for a short-lived Pulumi access token. Pulumi Cloud validates the OIDC claims (organization, repository, branch) against a configured trust policy before issuing the token.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Pulumi access token opens an ESC environment&lt;/strong&gt; to retrieve the credentials the workflow needs — cloud provider keys, API tokens, or other secrets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud credentials themselves are dynamic.&lt;/strong&gt; ESC environments use &lt;a href="https://www.pulumi.com/docs/esc/guides/configuring-oidc/"&gt;OIDC login providers&lt;/a&gt; to fetch short-lived credentials directly from AWS, Azure, or GCP. No static keys or cloud credentials are stored anywhere.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The &lt;a href="https://github.com/marketplace/actions/esc-action"&gt;&lt;code&gt;pulumi/esc-action&lt;/code&gt;&lt;/a&gt; GitHub Action handles this entire flow in a single workflow step.&lt;/p&gt;
&lt;pre class="mermaid"&gt;
sequenceDiagram
participant Runner as GitHub Actions Runner
participant GH as GitHub OIDC Provider
participant PC as Pulumi Cloud
participant ESC as Pulumi ESC
participant Cloud as Cloud Provider (AWS/Azure/GCP)
Runner-&amp;gt;&amp;gt;GH: Request OIDC token (scoped to workflow run)
GH--&amp;gt;&amp;gt;Runner: Short-lived JWT
Runner-&amp;gt;&amp;gt;PC: Exchange JWT for Pulumi access token
PC--&amp;gt;&amp;gt;Runner: Short-lived access token
Runner-&amp;gt;&amp;gt;ESC: Open environment with access token
ESC-&amp;gt;&amp;gt;Cloud: OIDC login (assume role / federated identity)
Cloud--&amp;gt;&amp;gt;ESC: Short-lived cloud credentials
ESC--&amp;gt;&amp;gt;Runner: Cloud credentials + secrets
Note over Runner,Cloud: Nothing is stored. Everything expires.
&lt;/pre&gt;
&lt;h2 id="what-the-change-looks-like"&gt;What the change looks like&lt;/h2&gt;
&lt;p&gt;Before this migration, our workflows referenced static secrets stored in GitHub:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;AWS_ACCESS_KEY_ID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${{ secrets.AWS_ACCESS_KEY_ID }}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;AWS_SECRET_ACCESS_KEY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${{ secrets.AWS_SECRET_ACCESS_KEY }}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After the migration, an &lt;a href="https://www.pulumi.com/docs/esc/environments/"&gt;ESC environment&lt;/a&gt; handles credential fetching via OIDC. Here is what the environment definition looks like:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;values&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;login&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;fn::open::aws-login&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;oidc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;1h&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;roleArn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;arn:aws:iam::123456789012:role/pulumi-esc-role&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sessionName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;esc-${context.pulumi.user.login}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Optional: scope down the session beyond what the role allows&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;policyArns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;arn:aws:iam::123456789012:policy/ci-build-minimal&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environmentVariables&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;AWS_ACCESS_KEY_ID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${aws.login.accessKeyId}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;AWS_SECRET_ACCESS_KEY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${aws.login.secretAccessKey}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;roleArn&lt;/code&gt; and optional &lt;a href="https://www.pulumi.com/docs/esc/integrations/dynamic-login-credentials/aws-login/"&gt;&lt;code&gt;policyArns&lt;/code&gt;&lt;/a&gt; make least-privilege straightforward: each login provider assumes a specific role, and &lt;code&gt;policyArns&lt;/code&gt; can scope the session down further. You can use multiple login providers in one environment or separate environments per workflow to match permissions to each job&amp;rsquo;s needs.&lt;/p&gt;
&lt;p&gt;The workflow itself becomes minimal — a single step that authenticates via OIDC and injects the credentials:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;permissions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;contents&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;read&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;id-token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;write &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Required for OIDC&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Fetch secrets from ESC&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pulumi/esc-action@v3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;your-organization&amp;gt;/&amp;lt;your-esc-env&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The static &lt;code&gt;secrets.*&lt;/code&gt; references are gone entirely. Every credential is fetched at runtime through ESC.&lt;/p&gt;
&lt;h2 id="scale-70-repos-zero-static-secrets"&gt;Scale: 70+ repos, zero static secrets&lt;/h2&gt;
&lt;p&gt;We didn&amp;rsquo;t do this for one or two flagship repos; we rolled it out across &lt;strong&gt;every Pulumi provider repository&lt;/strong&gt;: AWS, Azure, GCP, Kubernetes, and over 60 more. The migration was managed centrally through our &lt;a href="https://github.com/pulumi/ci-mgmt"&gt;&lt;code&gt;ci-mgmt&lt;/code&gt;&lt;/a&gt; tooling, which generates consistent workflow configurations across all provider repos.&lt;/p&gt;
&lt;p&gt;The pattern is the same everywhere:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Each repo has a corresponding ESC environment under a &lt;code&gt;github-secrets/&lt;/code&gt; project.&lt;/li&gt;
&lt;li&gt;All workflow-level &lt;code&gt;${{ secrets.* }}&lt;/code&gt; references have been removed.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;pulumi/esc-action&lt;/code&gt; step with OIDC auth is the single entry point for all credentials.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When every repo follows the same pattern like this, security posture is much more easily verifiable and auditable.&lt;/p&gt;
&lt;h2 id="auditability-and-centralized-control"&gt;Auditability and centralized control&lt;/h2&gt;
&lt;p&gt;Beyond eliminating static secrets, this migration gave us centralized visibility and control that GitHub Secrets cannot provide:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/docs/esc/administration/audit-logs/"&gt;Audit logging&lt;/a&gt;.&lt;/strong&gt; ESC records which credentials were accessed, when, and by which workflow. This is a meaningful improvement over GitHub&amp;rsquo;s binary &amp;ldquo;secret was used&amp;rdquo; signal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Centralized access policies.&lt;/strong&gt; Access rules are defined once in ESC rather than scattered across individual repository settings pages.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Single-point rotation.&lt;/strong&gt; Because ESC environments can &lt;a href="https://www.pulumi.com/docs/esc/environments/imports/"&gt;import other environments&lt;/a&gt;, shared credentials live in a common base that all 70+ repo environments are composed of. Update it once, and every repo picks up the change on its next run.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic credentials by default.&lt;/strong&gt; For cloud providers like AWS, Azure, and GCP, ESC fetches credentials via OIDC at open time. There is nothing to rotate because nothing is stored.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="what-happens-if-a-github-action-is-compromised"&gt;What happens if a GitHub Action is compromised&lt;/h2&gt;
&lt;p&gt;With this architecture in place, here is what an attacker gets if a compromised GitHub Action runs in our CI:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No GitHub Secrets to dump.&lt;/strong&gt; The repository settings page has no stored secrets for a malicious action to exfiltrate.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OIDC tokens are scoped and short-lived.&lt;/strong&gt; The GitHub-issued JWT is valid only for the specific workflow run and expires within minutes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud credentials are ephemeral.&lt;/strong&gt; Any AWS, Azure, or GCP credentials fetched through ESC are short-lived and scoped to the role assumed during that run.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No persistent access.&lt;/strong&gt; There are no long-lived tokens to reuse hours or days later.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Compare this to the traditional model, where a single compromised action could exfiltrate AWS access keys that remain valid until someone manually rotates them — which could be weeks or months.&lt;/p&gt;
&lt;p&gt;The goal is not to prevent every possible attack. It is to make the blast radius as small as possible when something goes wrong.&lt;/p&gt;
&lt;h2 id="get-started"&gt;Get started&lt;/h2&gt;
&lt;p&gt;If you want to adopt the same pattern in your own CI pipelines:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/tutorials/esc-github/"&gt;&lt;strong&gt;Tutorial: Using ESC with GitHub Actions&lt;/strong&gt;&lt;/a&gt; — Step-by-step setup guide.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/announcing-pulumi-esc-github-action/"&gt;&lt;strong&gt;Announcing the Pulumi ESC GitHub Action&lt;/strong&gt;&lt;/a&gt; — Full feature overview and capabilities.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/esc/guides/configuring-oidc/"&gt;&lt;strong&gt;Configuring OIDC for ESC&lt;/strong&gt;&lt;/a&gt; — Set up OIDC trust between ESC and your cloud providers.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/esc/"&gt;&lt;strong&gt;Pulumi ESC documentation&lt;/strong&gt;&lt;/a&gt; — Full documentation for environments, secrets, and configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Your CI secrets do not have to be a liability. With OIDC and Pulumi ESC, they do not have to exist at all.&lt;/p&gt;</description><author>Boris Schlosser</author><category>esc</category><category>security</category><category>github-actions</category><category>continuous-delivery</category></item><item><title>Expanded Version Control Support in Pulumi Cloud</title><link>https://www.pulumi.com/blog/expanded-version-control-support/</link><pubDate>Mon, 09 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/expanded-version-control-support/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/expanded-version-control-support/index.png" /&gt;
&lt;p&gt;Your version control provider shouldn&amp;rsquo;t limit your infrastructure workflows. Pulumi Cloud now works with &lt;a href="https://www.pulumi.com/docs/version-control/github-app/"&gt;GitHub&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/version-control/github-app/#github-enterprise-server-support"&gt;GitHub Enterprise Server&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/version-control/azure-devops-integration/"&gt;Azure DevOps&lt;/a&gt;, and &lt;a href="https://www.pulumi.com/docs/version-control/gitlab/"&gt;GitLab&lt;/a&gt;. Every team gets the same &lt;a href="https://www.pulumi.com/docs/deployments/deployments/"&gt;deployment pipelines&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/deployments/deployments/review-stacks/"&gt;PR previews&lt;/a&gt;, and &lt;a href="https://www.pulumi.com/docs/ai/"&gt;AI-powered change summaries&lt;/a&gt; regardless of where their code lives.&lt;/p&gt;
&lt;p&gt;&lt;img src="VCS.png" alt="Add account screen showing GitHub, GitLab, and Azure DevOps as VCS options"&gt;&lt;/p&gt;
&lt;h2 id="connect-multiple-providers-and-accounts"&gt;Connect multiple providers and accounts&lt;/h2&gt;
&lt;p&gt;You can connect multiple VCS providers to a single Pulumi organization simultaneously, like GitHub, GitLab, and Azure DevOps all at once. You can also connect multiple accounts of the same provider, such as two separate GitHub organizations or two GitLab groups. This means teams that work across different repositories, providers, or organizational boundaries can manage everything from one place.&lt;/p&gt;
&lt;div class="note note-info"&gt;
&lt;div class="icon-and-line"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" class="ph-icon ph-icon--fill" fill="currentColor" aria-hidden="true" focusable="false"&gt;&lt;use href="https://www.pulumi.com/icons/sprite.4a9ac1016b9d8a688a5e7e867f96bdf80115a0739af8c688ba04791e15f64461.svg#p-info-fill"/&gt;&lt;/svg&gt;
&lt;div class="line"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="content"&gt;GitHub Enterprise Server is currently limited to one connection per Pulumi organization.&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="what-your-team-can-do"&gt;What your team can do&lt;/h2&gt;
&lt;h3 id="deploy-on-every-push"&gt;Deploy on every push&lt;/h3&gt;
&lt;p&gt;Connect a repository to a stack, and infrastructure deploys automatically when you push. Configure path filters to trigger only when relevant files change, and manage environment variables and secrets directly in Pulumi Cloud. No external CI/CD pipeline required.&lt;/p&gt;
&lt;h3 id="preview-changes-on-pull-requests"&gt;Preview changes on pull requests&lt;/h3&gt;
&lt;p&gt;Every pull request gets an infrastructure preview so reviewers can see exactly what will change before merging. The preview runs the same Pulumi operations your deployment would, giving your team confidence that a merge won&amp;rsquo;t break anything.&lt;/p&gt;
&lt;h3 id="neo-explains-your-changes"&gt;Neo explains your changes&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/product/neo/"&gt;Neo&lt;/a&gt; posts AI-generated summaries on your pull requests explaining what infrastructure changes mean in plain language. Reviewers who aren&amp;rsquo;t Pulumi experts can still understand the impact of a change without reading resource diffs.&lt;/p&gt;
&lt;p&gt;&lt;img src="ado-prcomments.png" alt="Neo posting an infrastructure change summary on a pull request"&gt;&lt;/p&gt;
&lt;h3 id="let-neo-open-pull-requests-for-you"&gt;Let Neo open pull requests for you&lt;/h3&gt;
&lt;p&gt;Ask Neo to make infrastructure changes and it opens pull requests directly against your connected repositories. Describe what you want in natural language, and Neo writes the code, opens the PR, and kicks off a preview, all without leaving Pulumi Cloud.&lt;/p&gt;
&lt;h3 id="detect-and-fix-drift"&gt;Detect and fix drift&lt;/h3&gt;
&lt;p&gt;Schedule &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/deployments/drift/"&gt;drift detection&lt;/a&gt; to catch out-of-band changes automatically. When someone modifies infrastructure outside of your Pulumi programs, drift detection flags the difference so your team can remediate before it causes issues.&lt;/p&gt;
&lt;h3 id="secure-authentication"&gt;Secure authentication&lt;/h3&gt;
&lt;p&gt;Pulumi Cloud authenticates with your VCS provider using OIDC or OAuth so no long-lived credentials need to be stored. Short-lived tokens keep your deployment pipelines secure without manual secret rotation.&lt;/p&gt;
&lt;h3 id="set-up-new-projects-from-your-vcs"&gt;Set up new projects from your VCS&lt;/h3&gt;
&lt;p&gt;The new project wizard discovers your organizations, repositories, and branches so you can scaffold and deploy a new stack without leaving Pulumi Cloud. Pick your repo, choose a branch, and you&amp;rsquo;re ready to deploy.&lt;/p&gt;
&lt;p&gt;&lt;img src="ado-npw.png" alt="New project wizard showing repository settings"&gt;&lt;/p&gt;
&lt;h2 id="getting-started"&gt;Getting started&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;An org admin configures the integration under &lt;strong&gt;Settings&lt;/strong&gt; &amp;gt; &lt;strong&gt;Version Control&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Authorize with your VCS provider.&lt;/li&gt;
&lt;li&gt;Deploy infrastructure with first-class workflows.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For setup details, see the docs for &lt;a href="https://www.pulumi.com/docs/version-control/github-app/"&gt;GitHub&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/version-control/github-app/#github-enterprise-server-support"&gt;GitHub Enterprise Server&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/version-control/azure-devops-integration/"&gt;Azure DevOps&lt;/a&gt;, and &lt;a href="https://www.pulumi.com/docs/version-control/gitlab/"&gt;GitLab&lt;/a&gt;.&lt;/p&gt;
&lt;a
href="https://app.pulumi.com/signin"
class="btn btn-primary"
target="_blank"
rel="noopener noreferrer"
&gt;
Connect your VCS
&lt;svg xmlns="http://www.w3.org/2000/svg" class="ph-icon ph-icon--regular text-sm ml-2" fill="currentColor" aria-hidden="true" focusable="false"&gt;&lt;use href="https://www.pulumi.com/icons/sprite.4a9ac1016b9d8a688a5e7e867f96bdf80115a0739af8c688ba04791e15f64461.svg#p-arrow-square-out-regular"/&gt;&lt;/svg&gt;
&lt;/a&gt;</description><author>Luke Ward</author><author>Michael Fallihee</author><author>Boris Schlosser</author><author>Dan Biwer</author><category>features</category><category>pulumi-cloud</category><category>azure</category><category>github</category><category>gitlab</category></item><item><title>Native OIDC Token Exchange for Pulumi CLI</title><link>https://www.pulumi.com/blog/native-oidc-token-exchange/</link><pubDate>Tue, 16 Dec 2025 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/native-oidc-token-exchange/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/native-oidc-token-exchange/index.png" /&gt;
&lt;p&gt;Managing credentials in CI/CD pipelines has always involved tradeoffs. Long-lived access tokens are convenient but
create security risks when they leak or fall into the wrong hands. Short-lived credentials are more secure but require
additional tooling to obtain and manage. Today, we&amp;rsquo;re eliminating this tradeoff with native OIDC token exchange support
in the Pulumi CLI.&lt;/p&gt;
&lt;p&gt;The Pulumi CLI now includes built-in support for exchanging OIDC tokens from your identity provider for short-lived
Pulumi Cloud access tokens. This means you can authenticate to Pulumi Cloud directly from CI/CD environments like GitHub
Actions, GitLab CI, or Kubernetes without storing any long-lived Pulumi credentials as secrets.&lt;/p&gt;
&lt;h2 id="why-oidc-token-exchange-matters"&gt;Why OIDC token exchange matters&lt;/h2&gt;
&lt;p&gt;Most CI/CD workflows authenticate to Pulumi Cloud using personal access tokens or organization tokens stored as secrets.
While this approach works, it comes with significant security concerns:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Credential exposure&lt;/strong&gt;: If a token is accidentally committed to a repository or logged in CI output, attackers gain
long-term access to your infrastructure&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rotation complexity&lt;/strong&gt;: Rotating tokens requires updating secrets across multiple CI/CD systems&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Over-privileged access&lt;/strong&gt;: Tokens often have broader permissions than needed for specific workflows&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audit trail gaps&lt;/strong&gt;: Difficult to trace which workflow run used which credentials&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With OIDC token exchange, you eliminate these risks by leveraging short-lived tokens that your CI/CD platform or
identity provider already issues. No long-lived secrets to manage, rotate, or secure.&lt;/p&gt;
&lt;h2 id="how-it-works"&gt;How it works&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;pulumi login&lt;/code&gt; command now accepts OIDC tokens directly:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pulumi login --oidc-token &amp;lt;token&amp;gt; --oidc-org &amp;lt;org-name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The CLI exchanges your OIDC token for a short-lived Pulumi Cloud access token, which is then used for all subsequent
operations. Tokens expire after 2 hours by default, though you can customize this with the &lt;code&gt;--oidc-expiration&lt;/code&gt; flag.&lt;/p&gt;
&lt;p&gt;You can scope tokens to specific teams or users:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Scope to a team&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pulumi login --oidc-token &amp;lt;token&amp;gt; --oidc-org my-org --oidc-team platform-team
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Scope to a user&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pulumi login --oidc-token &amp;lt;token&amp;gt; --oidc-org my-org --oidc-user alice
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;--oidc-token&lt;/code&gt; flag accepts either a raw token string or a file path prefixed with &lt;code&gt;file://&lt;/code&gt;, making it easy to
integrate with various token delivery mechanisms.&lt;/p&gt;
&lt;h2 id="example-kubernetes-eks"&gt;Example: Kubernetes (EKS)&lt;/h2&gt;
&lt;p&gt;For workloads running in Kubernetes, you can use service account tokens and exchange them for Pulumi access tokens. The
following example uses a Pulumi program to define a Kubernetes Job resource.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;kubernetes&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;@pulumi/kubernetes&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;script&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;kubernetes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;core&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ConfigMap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;script&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;entrypoint.sh&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="sb"&gt;`#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt;EKS_ID_TOKEN=$(cat /var/run/secrets/eks.amazonaws.com/serviceaccount/token)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt;pulumi login --oidc-token $EKS_ID_TOKEN --oidc-org MY_ORG_NAME
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt;pulumi whoami
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;job&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;kubernetes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;batch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Job&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;runner&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;metadata&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;spec&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;template&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;spec&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;serviceAccountName&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;pulumi-service-account&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;containers&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;runner&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;pulumi/pulumi:latest&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/bin/entrypoint.sh&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;volumeMounts&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;script&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;mountPath&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/bin/entrypoint.sh&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;readOnly&lt;/span&gt;: &lt;span class="kt"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;subPath&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;entrypoint.sh&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;restartPolicy&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Never&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;volumes&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;script&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;configMap&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;defaultMode&lt;/span&gt;: &lt;span class="kt"&gt;0o700&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;name&lt;/span&gt;: &lt;span class="kt"&gt;script.metadata.name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;backoffLimit&lt;/span&gt;: &lt;span class="kt"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;jobName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;job&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This approach works with any Kubernetes cluster that supports service account token projection, including EKS, GKE, and
AKS. The example uses EKS&amp;rsquo;s default token location at &lt;code&gt;/var/run/secrets/eks.amazonaws.com/serviceaccount/token&lt;/code&gt;, but you
can adapt the token path for other Kubernetes distributions.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;Before using OIDC token exchange with the Pulumi CLI, you need to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/administration/access-identity/oidc-client/#configuring-trust-relationships"&gt;Register your OIDC provider as a trusted issuer in your Pulumi organization settings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Configure authorization policies that specify which tokens can be exchanged and what permissions they receive&lt;/li&gt;
&lt;li&gt;Ensure your CI/CD system or identity provider is configured to issue OIDC tokens with the appropriate audience claim&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="get-started"&gt;Get started&lt;/h2&gt;
&lt;p&gt;Native OIDC token exchange is available now in the latest version of the Pulumi CLI. To get started:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Update to the latest Pulumi CLI version&lt;/li&gt;
&lt;li&gt;Configure your OIDC provider and authorization policies in &lt;a href="https://app.pulumi.com/signin"&gt;Pulumi Cloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Update your CI/CD workflows to use &lt;code&gt;pulumi login --oidc-token&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For complete documentation, including setup guides for specific identity providers, see:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/iac/cli/commands/pulumi_login/#oidc-token-exchange"&gt;&lt;code&gt;pulumi login&lt;/code&gt; command reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/administration/access-identity/oidc-client/"&gt;OIDC client integration guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/administration/access-identity/oidc-client/github/"&gt;GitHub OIDC setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/administration/access-identity/oidc-client/kubernetes-gke/"&gt;GKE OIDC setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/administration/access-identity/oidc-client/kubernetes-eks/"&gt;EKS OIDC setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We&amp;rsquo;re excited to see how this feature helps you build more secure infrastructure automation workflows. If you have
questions or feedback, join us in the &lt;a href="https://slack.pulumi.com"&gt;Pulumi Community Slack&lt;/a&gt;.&lt;/p&gt;</description><author>Boris Schlosser</author><category>features</category><category>security</category><category>oidc</category><category>authentication</category><category>ci-cd</category></item><item><title>Secrets Management Tools: The Complete 2025 Guide</title><link>https://www.pulumi.com/blog/secrets-management-tools-guide/</link><pubDate>Thu, 24 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/secrets-management-tools-guide/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/secrets-management-tools-guide/index.png" /&gt;
&lt;p&gt;Every modern application depends on secrets to function: database passwords, API keys, certificates, and configuration values that enable secure communication between services. But here&amp;rsquo;s the challenge: as your infrastructure grows, managing these secrets becomes exponentially more complex.&lt;/p&gt;
&lt;p&gt;The numbers tell a stark story. According to the &lt;a href="https://www.prnewswire.com/news-releases/the-akeyless-state-of-secrets-management-report-96-of-organizations-are-vulnerable-to-breach-due-to-mismanaged-secrets-301987276.html"&gt;Akeyless State of Secrets Management Report&lt;/a&gt;, 96% of organizations struggle with secrets sprawl such as credentials scattered across code repositories, configuration files, and deployment scripts. The consequences are severe: &lt;a href="https://www.verizon.com/business/resources/reports/dbir/"&gt;Verizon&amp;rsquo;s 2025 Data Breach Investigations Report&lt;/a&gt; found that 88% of data breaches involved compromised credentials, with &lt;a href="https://www.ibm.com/reports/data-breach"&gt;IBM&amp;rsquo;s research&lt;/a&gt; showing the average breach now costs organizations $4.88 million.&lt;/p&gt;
&lt;p&gt;The path forward requires more than just storing secrets securely, it demands intelligent orchestration across your entire infrastructure. But with dozens of solutions available, from traditional enterprise vaults to modern orchestration platforms, finding the right approach can feel overwhelming.&lt;/p&gt;
&lt;p&gt;This guide cuts through the complexity. We&amp;rsquo;ll examine the leading secrets management tools across multiple categories, helping you understand not just what they do, but when and why to use them. Whether you&amp;rsquo;re architecting your startup&amp;rsquo;s first production environment or modernizing enterprise legacy systems, you&amp;rsquo;ll find actionable insights to make the right choice for your specific needs.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h2 id="secrets-management-tools-overview"&gt;Secrets Management Tools Overview&lt;/h2&gt;
&lt;h3 id="secrets-orchestration-platforms"&gt;Secrets Orchestration Platforms&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#pulumi-esc-environments-secrets-and-configuration"&gt;Pulumi ESC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#doppler"&gt;Doppler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#infisical"&gt;Infisical&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="enterprise-secrets-vaults"&gt;Enterprise Secrets Vaults&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#hashicorp-vault"&gt;HashiCorp Vault&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#cyberark-conjur"&gt;CyberArk Conjur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#akeyless"&gt;Akeyless&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="cloud-native-secrets-managers"&gt;Cloud-Native Secrets Managers&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#aws-secrets-manager"&gt;AWS Secrets Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#azure-key-vault"&gt;Azure Key Vault&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#google-secret-manager"&gt;Google Secret Manager&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="developer-focused-tools"&gt;Developer-Focused Tools&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#1password-secrets-automation"&gt;1Password Secrets Automation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#bitwarden-secrets-manager"&gt;Bitwarden Secrets Manager&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="application-security--scanning"&gt;Application Security &amp;amp; Scanning&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#gitguardian"&gt;GitGuardian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#trufflehog"&gt;TruffleHog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="specialized--integration-tools"&gt;Specialized &amp;amp; Integration Tools&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#external-secrets-operator"&gt;External Secrets Operator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#berglas"&gt;Berglas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#confidant"&gt;Confidant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#chamber"&gt;Chamber&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="the-evolution-beyond-simple-secret-storage"&gt;The Evolution Beyond Simple Secret Storage&lt;/h2&gt;
&lt;p&gt;What started as simple password vaults has evolved into something far more sophisticated. Traditional secret storage addressed only part of the challenge: keeping credentials secure. But modern infrastructure demands orchestration across complex, distributed environments where applications need dozens of different secrets available across multiple cloud providers and deployment stages.&lt;/p&gt;
&lt;p&gt;The fundamental shift happened when teams realized that managing secrets effectively requires treating them as infrastructure components, not just security artifacts. Your applications don&amp;rsquo;t just need database passwords stored securely—they need those credentials dynamically generated, automatically rotated, and consistently available across development, staging, and production environments without manual intervention.&lt;/p&gt;
&lt;p&gt;Today&amp;rsquo;s leading platforms function as intelligent orchestrators rather than simple storage systems. They aggregate secrets from multiple existing sources, provide &lt;a href="https://www.pulumi.com/what-is/what-is-infrastructure-as-code/"&gt;configuration-as-code&lt;/a&gt; capabilities that enable version control and reproducible deployments, and generate dynamic credentials with automatic expiration. This orchestration approach means you can work with your existing secret stores while gaining centralized management and modern capabilities like hierarchical organization that reduces duplication across environments.&lt;/p&gt;
&lt;p&gt;The best solutions recognize that secrets management is fundamentally an infrastructure orchestration problem. They provide unified access patterns that work seamlessly across &lt;a href="https://www.pulumi.com/docs/clouds/"&gt;multi-cloud environments&lt;/a&gt;, comprehensive audit logging for compliance requirements, and fine-grained access controls that adapt to your organizational structure all while maintaining compatibility with the tools and workflows your teams already use.&lt;/p&gt;
&lt;h2 id="most-popular-secrets-management-tools"&gt;Most Popular Secrets Management Tools&lt;/h2&gt;
&lt;h3 id="secrets-orchestration-platforms-1"&gt;Secrets Orchestration Platforms&lt;/h3&gt;
&lt;p&gt;This represents the newest evolution in secrets management: platforms that connect and coordinate multiple secret sources rather than forcing you to abandon your existing infrastructure. Instead of requiring wholesale migration to yet another secret store, these intelligent brokers provide unified interfaces that work with your current tools while adding modern capabilities like dynamic credential generation and configuration-as-code workflows.&lt;/p&gt;
&lt;h4 id="pulumi-esc-environments-secrets-and-configuration"&gt;Pulumi ESC (Environments, Secrets, and Configuration)&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/docs/esc/"&gt;Pulumi ESC&lt;/a&gt; takes a fundamentally different approach to secrets management. Rather than forcing you to migrate from your existing secret stores, it orchestrates them connecting HashiCorp Vault, AWS Secrets Manager, Azure Key Vault, Google Secret Manager, and over 20 other providers through a unified interface. This means you can modernize your secrets workflow without abandoning your current infrastructure investments.&lt;/p&gt;
&lt;p&gt;The platform&amp;rsquo;s strength lies in its &lt;a href="https://www.pulumi.com/docs/esc/concepts/"&gt;configuration-as-code approach&lt;/a&gt;. You define hierarchical YAML environments that cascade from base configurations through development, staging, and production. This eliminates the manual configuration copying that leads to secrets sprawl: define common settings once, inherit them everywhere they&amp;rsquo;re needed, while maintaining appropriate security boundaries between environments.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Enterprise-Grade Security and Compliance&lt;/strong&gt;: ESC provides comprehensive &lt;a href="https://www.pulumi.com/docs/esc/administration/audit-logs/"&gt;audit logging&lt;/a&gt; with detailed access trails, including user identity, timestamp, access method, and resource details. The platform&amp;rsquo;s audit capabilities support compliance requirements for frameworks like SOC 2, GDPR, and industry-specific regulations by providing immutable audit logs and real-time monitoring of secret access patterns.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Performance and Scalability&lt;/strong&gt;: ESC delivers enterprise-scale performance with low-latency secret retrieval, high availability across multiple regions, and the ability to handle thousands of concurrent requests. The architecture is designed to scale automatically with organizational growth while maintaining consistent sub-second response times for secret operations.&lt;/p&gt;
&lt;p&gt;Dynamic credential generation sets Pulumi ESC apart from traditional storage-focused tools. Instead of storing long-lived AWS access keys or Azure service principal secrets, it automatically provisions short-lived OIDC tokens on-demand. This &lt;a href="https://www.pulumi.com/docs/esc/providers/"&gt;dynamic approach&lt;/a&gt; eliminates entire categories of security risk by ensuring credentials expire automatically and can&amp;rsquo;t be misused over extended periods.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Advanced Key Management&lt;/strong&gt;: ESC provides advanced key management capabilities with support for industry-standard encryption algorithms, automated key rotation, and secure key derivation. The platform offers envelope encryption and fine-grained access controls that ensure encryption keys are managed securely and in accordance with regulatory requirements.&lt;/p&gt;
&lt;p&gt;The platform maintains a zero vendor lock-in philosophy through its &lt;a href="https://github.com/pulumi/esc"&gt;open-source engine&lt;/a&gt; and comprehensive &lt;a href="https://www.pulumi.com/docs/esc/sdk/"&gt;multi-language SDK support&lt;/a&gt; for TypeScript, Python, Go, and .NET. Teams can integrate ESC into existing workflows through familiar CLI tooling while maintaining full visibility into orchestration logic through transparent, auditable code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cost-Effective Enterprise Solution&lt;/strong&gt;: Pulumi ESC offers significant cost advantages through its unified platform approach, reducing the need for multiple point solutions and simplifying operational overhead. ESC&amp;rsquo;s integration with existing infrastructure workflows eliminates the need for separate tools and reduces training costs, while its automated rotation and compliance features reduce manual administrative tasks and associated labor costs. For organizations with strict data residency requirements, &lt;a href="https://www.pulumi.com/product/self-hosted/"&gt;Pulumi Service offers self-hosting options&lt;/a&gt; that provide additional cost predictability and security control.&lt;/p&gt;
&lt;p&gt;Pulumi ESC offers a &lt;a href="https://www.pulumi.com/pricing/"&gt;generous free tier&lt;/a&gt; with unlimited environments, making it accessible for teams to experiment with configuration-as-code principles. Usage-based pricing for advanced features scales naturally with organizational growth, making it particularly attractive for multi-cloud environments and teams prioritizing systematic approaches to eliminating secrets sprawl.&lt;/p&gt;
&lt;h4 id="doppler"&gt;Doppler&lt;/h4&gt;
&lt;p&gt;Doppler focuses on developer experience with an intuitive interface and extensive integrations for modern development workflows. The platform provides branch-based environment management and real-time secret synchronization across connected services, with plans starting at $3 per user per month.&lt;/p&gt;
&lt;h4 id="infisical"&gt;Infisical&lt;/h4&gt;
&lt;p&gt;Infisical combines open-source transparency with modern secrets management, offering both self-hosted and cloud options. The platform includes built-in secrets scanning capabilities and comprehensive SDK support, with cloud service starting at $8 per user per month.&lt;/p&gt;
&lt;h3 id="enterprise-secrets-vaults-1"&gt;Enterprise Secrets Vaults&lt;/h3&gt;
&lt;p&gt;Traditional enterprise vaults focus on maximum security and compliance, offering comprehensive secret storage with advanced features designed for large organizations with sophisticated security requirements.&lt;/p&gt;
&lt;h4 id="hashicorp-vault"&gt;HashiCorp Vault&lt;/h4&gt;
&lt;p&gt;HashiCorp Vault remains the established standard for enterprise secrets management, offering unmatched flexibility and a comprehensive feature set for complex environments. The platform provides dynamic secrets generation with automatic expiration for over 50 different systems, enabling organizations to move away from static, long-lived credentials toward more secure, just-in-time access patterns.&lt;/p&gt;
&lt;p&gt;Vault&amp;rsquo;s architecture supports over 100 authentication methods and secret engines, providing flexibility to integrate with virtually any existing infrastructure or identity system. Multi-region clustering with strong consistency guarantees ensures high availability and data integrity across geographically distributed deployments. Extensive audit logging and compliance reporting capabilities help organizations meet regulatory requirements while maintaining operational visibility.&lt;/p&gt;
&lt;p&gt;The platform&amp;rsquo;s cloud-agnostic deployment options support both &lt;a href="https://www.pulumi.com/docs/clouds/kubernetes/"&gt;Kubernetes&lt;/a&gt; and traditional VM-based infrastructure, making it suitable for organizations with diverse technical environments. Vault&amp;rsquo;s open-source core provides transparency and community-driven development, while commercial enterprise features starting at $2 per node per hour add advanced management, replication, and support capabilities.&lt;/p&gt;
&lt;p&gt;HashiCorp Vault excels in organizations requiring maximum flexibility and customization, complex &lt;a href="https://www.pulumi.com/docs/clouds/"&gt;multi-cloud environments&lt;/a&gt;, and teams with strong DevOps expertise capable of managing sophisticated infrastructure platforms.&lt;/p&gt;
&lt;h4 id="cyberark-conjur"&gt;CyberArk Conjur&lt;/h4&gt;
&lt;p&gt;CyberArk Conjur focuses on enterprise security with advanced compliance features and integration with broader privileged access management systems. The platform provides enterprise-grade role-based access control with comprehensive audit capabilities, enabling organizations to implement fine-grained security policies across their entire infrastructure.&lt;/p&gt;
&lt;p&gt;Modern versions of Conjur incorporate AI-powered anomaly detection and threat analysis, helping security teams identify unusual access patterns that may indicate compromise or policy violations. Automated compliance reporting supports SOC 2, PCI-DSS, and other regulatory frameworks, reducing the operational overhead of maintaining compliance documentation.&lt;/p&gt;
&lt;p&gt;Conjur&amp;rsquo;s integration with CyberArk&amp;rsquo;s broader privileged access management suite provides a comprehensive approach to credential security that extends beyond simple secret storage to include session monitoring, just-in-time access provisioning, and threat detection. The platform&amp;rsquo;s advanced policy engine enables fine-grained access controls that can adapt to changing organizational and regulatory requirements.&lt;/p&gt;
&lt;p&gt;With enterprise licensing based on scale and deployment requirements, CyberArk Conjur targets regulated industries, enterprises with strict compliance requirements, and organizations prioritizing maximum security over operational simplicity.&lt;/p&gt;
&lt;h4 id="akeyless"&gt;Akeyless&lt;/h4&gt;
&lt;p&gt;Akeyless offers a modern, cloud-native approach to enterprise secrets management without the operational complexity of traditional self-hosted solutions. The platform&amp;rsquo;s SaaS-first architecture eliminates infrastructure management overhead while providing enterprise-grade capabilities including just-in-time access and automated credential rotation.&lt;/p&gt;
&lt;p&gt;The platform implements zero-knowledge encryption with client-side key management, ensuring that even Akeyless cannot access customer secrets. This approach addresses concerns about cloud-based secret storage while maintaining the operational benefits of a managed service. A comprehensive API and integration ecosystem enables connection with existing tools and workflows.&lt;/p&gt;
&lt;p&gt;Akeyless provides a generous free tier supporting up to 5 clients, with usage-based pricing that scales naturally with organizational growth. This pricing model, combined with the elimination of operational overhead, makes Akeyless attractive for organizations seeking enterprise features without the complexity of self-managed infrastructure, particularly cloud-first teams prioritizing rapid deployment and scaling.&lt;/p&gt;
&lt;h3 id="cloud-native-secrets-managers-1"&gt;Cloud-Native Secrets Managers&lt;/h3&gt;
&lt;p&gt;Cloud-native solutions provide tight integration with specific cloud platforms, offering optimized experiences for organizations committed to particular cloud ecosystems. These platforms leverage native cloud services and identity systems to provide seamless integration with existing infrastructure.&lt;/p&gt;
&lt;h4 id="aws-secrets-manager"&gt;AWS Secrets Manager&lt;/h4&gt;
&lt;p&gt;Amazon&amp;rsquo;s native secrets management service provides deep integration with the AWS ecosystem and automatic rotation capabilities specifically designed for AWS services. The platform offers native integration with over 50 AWS services including RDS, Lambda, ECS, and EKS, enabling seamless credential management across the entire AWS service portfolio.&lt;/p&gt;
&lt;p&gt;Automatic rotation capabilities for supported databases and AWS services eliminate the operational overhead of manual credential management while improving security through regular rotation cycles. Cross-region replication with automatic failover ensures high availability for critical secrets, while fine-grained IAM permissions with resource-based policies provide precise access control aligned with AWS security best practices.&lt;/p&gt;
&lt;p&gt;VPC endpoint support enables private network access without internet routing, addressing security requirements for air-gapped or highly secure environments. The service&amp;rsquo;s pricing model of $0.40 per secret per month plus $0.05 per 10,000 API calls provides predictable costs that scale with usage.&lt;/p&gt;
&lt;p&gt;AWS Secrets Manager excels for &lt;a href="https://www.pulumi.com/docs/clouds/aws/"&gt;AWS-native organizations&lt;/a&gt;, applications requiring automatic credential rotation, and teams leveraging extensive AWS service portfolios where tight integration provides operational efficiency and security benefits.&lt;/p&gt;
&lt;h4 id="azure-key-vault"&gt;Azure Key Vault&lt;/h4&gt;
&lt;p&gt;Microsoft&amp;rsquo;s comprehensive platform manages secrets, keys, and certificates within the Azure ecosystem while providing strong compliance features particularly valued by government and enterprise customers. The platform integrates seamlessly with Azure services and Active Directory authentication, leveraging existing identity infrastructure to provide consistent access control across the Azure ecosystem.&lt;/p&gt;
&lt;p&gt;FIPS 140-2 Level 2 validated Hardware Security Modules provide the highest levels of cryptographic security, making Azure Key Vault suitable for government contractors and organizations with stringent security requirements. Managed HSM support extends these capabilities for scenarios requiring maximum security control and audit capabilities.&lt;/p&gt;
&lt;p&gt;Certificate lifecycle management with automatic renewal reduces operational overhead while ensuring consistent security posture across web applications and services. Virtual network integration and private endpoint support enable secure access patterns that align with enterprise network security architectures.&lt;/p&gt;
&lt;p&gt;Azure Key Vault&amp;rsquo;s standard tier pricing of $0.03 per 10,000 operations provides cost-effective secret management for &lt;a href="https://www.pulumi.com/docs/clouds/azure/"&gt;Azure-centric organizations&lt;/a&gt;, government contractors requiring FIPS compliance, and enterprises with Microsoft-heavy infrastructure environments.&lt;/p&gt;
&lt;h4 id="google-secret-manager"&gt;Google Secret Manager&lt;/h4&gt;
&lt;p&gt;Google Cloud&amp;rsquo;s scalable secrets management service is optimized for high-volume, global deployments with strong integration across GCP services. The platform provides automatic global replication across all GCP regions, ensuring low-latency access to secrets regardless of geographic distribution.&lt;/p&gt;
&lt;p&gt;IAM integration supports fine-grained, condition-based permissions that can adapt to complex organizational structures and security requirements. Secret versioning with automatic rollback capabilities provides operational safety for configuration changes, while integration with Cloud Build, GKE, Cloud Run, and App Engine enables seamless secret management across Google Cloud&amp;rsquo;s entire service portfolio.&lt;/p&gt;
&lt;p&gt;The platform&amp;rsquo;s high-performance API with global edge caching minimizes latency for high-frequency secret retrieval operations, making it suitable for applications with demanding performance requirements. Pricing of $0.06 per secret version per month plus $0.03 per 10,000 API calls provides cost-effective scaling for high-volume usage patterns.&lt;/p&gt;
&lt;p&gt;Google Secret Manager serves &lt;a href="https://www.pulumi.com/docs/clouds/gcp/"&gt;Google Cloud-native organizations&lt;/a&gt;, applications requiring massive scale, and global deployments where low latency and high availability are critical operational requirements.&lt;/p&gt;
&lt;h3 id="developer-focused-tools-1"&gt;Developer-Focused Tools&lt;/h3&gt;
&lt;p&gt;These tools prioritize user experience and ease of adoption, often serving as excellent entry points for teams beginning their secrets management journey. They emphasize intuitive interfaces and efficient workflows that reduce barriers to adoption.&lt;/p&gt;
&lt;h4 id="1password-secrets-automation"&gt;1Password Secrets Automation&lt;/h4&gt;
&lt;p&gt;1Password has successfully expanded beyond personal password management to offer comprehensive business secrets management while maintaining their renowned user experience. The platform implements zero-knowledge architecture with client-side encryption, ensuring that even 1Password cannot access customer secrets while providing the usability that made their consumer products successful.&lt;/p&gt;
&lt;p&gt;The intuitive interface remains accessible to both technical and non-technical users, addressing the common challenge of secrets management tools that require specialized expertise. Comprehensive SDK and CLI support enables developer workflows while maintaining the simplicity that drives organization-wide adoption. Integration with popular CI/CD platforms and development tools provides the automation capabilities modern development teams require.&lt;/p&gt;
&lt;p&gt;Advanced sharing capabilities include granular, time-limited permissions that enable secure collaboration while maintaining audit trails and access control. This combination of security and usability makes 1Password particularly effective in mixed environments where both technical and business users need access to secrets.&lt;/p&gt;
&lt;p&gt;At $8 per user per month with volume discounts available, 1Password Secrets Automation targets teams prioritizing usability over advanced features, mixed technical/non-technical environments, and organizations already invested in the 1Password ecosystem.&lt;/p&gt;
&lt;h4 id="bitwarden-secrets-manager"&gt;Bitwarden Secrets Manager&lt;/h4&gt;
&lt;p&gt;Bitwarden leverages their password management expertise to provide cost-effective secrets management specifically designed for development teams. The platform includes machine account support for automated CI/CD workflows, addressing the common requirement for non-human access to secrets in modern development processes.&lt;/p&gt;
&lt;p&gt;CLI and SDK integration covers major programming languages while maintaining the straightforward approach that characterizes Bitwarden&amp;rsquo;s products. Comprehensive event logging and audit trails provide the visibility required for security and compliance, while two-person integrity controls add an extra layer of protection for sensitive operations.&lt;/p&gt;
&lt;p&gt;The platform&amp;rsquo;s competitive per-user pricing of $3 per month with transparent costs makes it particularly attractive for small to medium teams, organizations seeking simple and cost-effective solutions, and existing Bitwarden users looking to extend their investment into development workflows.&lt;/p&gt;
&lt;h3 id="application-security--scanning-1"&gt;Application Security &amp;amp; Scanning&lt;/h3&gt;
&lt;p&gt;These tools focus on preventing secrets leakage by detecting credentials in code repositories, CI/CD pipelines, and other development artifacts. Rather than managing secrets after they&amp;rsquo;re created, these platforms prevent security incidents by identifying and remediating credential exposure.&lt;/p&gt;
&lt;h4 id="gitguardian"&gt;GitGuardian&lt;/h4&gt;
&lt;p&gt;GitGuardian provides comprehensive secrets detection and remediation across the entire software development lifecycle with high accuracy and low false positives. The platform offers real-time scanning of commits, pull requests, and issues across all major Git platforms, ensuring that credential exposure is identified and addressed before code reaches production environments.&lt;/p&gt;
&lt;p&gt;Advanced machine learning algorithms detect over 350 secret types while minimizing false positives that can lead to alert fatigue. Developer-friendly remediation workflows provide guided resolution steps that help development teams address issues quickly without disrupting their normal workflows. Historical repository scanning capabilities enable comprehensive security assessment of existing codebases.&lt;/p&gt;
&lt;p&gt;Integration with GitHub, GitLab, Bitbucket, and Azure DevOps ensures coverage across diverse development environments. The platform&amp;rsquo;s free tier supports small teams, while enterprise plans starting at $18 per developer per month provide advanced features and support for larger organizations.&lt;/p&gt;
&lt;p&gt;GitGuardian excels in organizations with large codebases, teams implementing &lt;a href="https://www.pulumi.com/blog/devsecops-strategy-security-automation-tivity-health/"&gt;DevSecOps practices&lt;/a&gt;, and compliance-focused environments where preventing credential exposure is critical to maintaining security posture.&lt;/p&gt;
&lt;h4 id="trufflehog"&gt;TruffleHog&lt;/h4&gt;
&lt;p&gt;TruffleHog offers powerful open-source secrets detection with both community and enterprise versions for comprehensive credential scanning. The platform uses high-performance scanning algorithms that combine advanced entropy analysis with pattern matching to identify credentials across diverse file types and encoding formats.&lt;/p&gt;
&lt;p&gt;Support for over 700 credential types includes custom patterns that can adapt to organization-specific secret formats. CI/CD integration with GitHub Actions, GitLab CI, and Jenkins enables automated scanning as part of existing development workflows. Historical git repository scanning provides commit-level analysis that can identify when and how credentials entered the codebase.&lt;/p&gt;
&lt;p&gt;The active open-source community ensures regular updates and improvements while providing transparency into detection algorithms. Enterprise features and support options are available for organizations requiring commercial backing and advanced capabilities.&lt;/p&gt;
&lt;p&gt;TruffleHog serves open-source advocates, security-conscious development teams, and organizations with strong technical security expertise capable of implementing and maintaining open-source security tools.&lt;/p&gt;
&lt;h3 id="specialized--integration-tools-1"&gt;Specialized &amp;amp; Integration Tools&lt;/h3&gt;
&lt;p&gt;These tools address specific use cases or provide bridge functionality between secrets managers and deployment platforms, filling gaps in comprehensive secrets management architectures.&lt;/p&gt;
&lt;h4 id="external-secrets-operator"&gt;External Secrets Operator&lt;/h4&gt;
&lt;p&gt;The External Secrets Operator provides &lt;a href="https://www.pulumi.com/docs/clouds/kubernetes/"&gt;Kubernetes&lt;/a&gt;-native integration with external secrets management systems, enabling GitOps workflows with secure secret handling. The platform uses Kubernetes Custom Resource Definitions to provide native resource management that integrates seamlessly with existing Kubernetes operational patterns.&lt;/p&gt;
&lt;p&gt;Multi-provider support includes Vault, AWS, Azure, GCP, and numerous other secret sources, enabling organizations to maintain consistent Kubernetes secret management regardless of their underlying secret storage choices. Automatic secret synchronization with configurable refresh intervals ensures that Kubernetes secrets remain current with external sources while minimizing API load.&lt;/p&gt;
&lt;p&gt;Template-based secret transformation and formatting capabilities enable adaptation of external secret formats to Kubernetes requirements. As an active CNCF community project with growing enterprise adoption, the External Secrets Operator benefits from diverse contributions and broad compatibility testing.&lt;/p&gt;
&lt;p&gt;This free and open-source tool excels in &lt;a href="https://www.pulumi.com/docs/clouds/kubernetes/"&gt;Kubernetes-heavy environments&lt;/a&gt;, teams adopting &lt;a href="https://www.pulumi.com/blog/pulumi-developer-workflow/"&gt;GitOps practices&lt;/a&gt;, and organizations requiring cloud-agnostic secret synchronization across diverse infrastructure platforms.&lt;/p&gt;
&lt;h4 id="berglas"&gt;Berglas&lt;/h4&gt;
&lt;p&gt;Google&amp;rsquo;s Berglas provides optimized secrets injection for serverless and container environments, particularly Google Cloud Run and similar platforms. The platform&amp;rsquo;s serverless-optimized secret injection minimizes cold start impact, addressing one of the key performance challenges in serverless architectures.&lt;/p&gt;
&lt;p&gt;Deep integration with Google Cloud services and IAM leverages existing cloud infrastructure to provide secure, efficient secret access. Container-native deployment patterns use init container approaches that work seamlessly with existing containerized application architectures. Minimal runtime overhead and memory footprint ensure that secret management doesn&amp;rsquo;t impact application performance.&lt;/p&gt;
&lt;p&gt;As an open-source project backed by Google&amp;rsquo;s engineering team, Berglas benefits from direct integration with Google Cloud services and ongoing development aligned with Google Cloud platform evolution. The free and open-source nature makes it accessible for teams of all sizes.&lt;/p&gt;
&lt;p&gt;Berglas serves &lt;a href="https://www.pulumi.com/docs/clouds/gcp/"&gt;Google Cloud serverless deployments&lt;/a&gt;, container-native applications, and teams prioritizing minimal overhead in performance-sensitive environments.&lt;/p&gt;
&lt;h4 id="confidant"&gt;Confidant&lt;/h4&gt;
&lt;p&gt;Lyft&amp;rsquo;s open-source Confidant offers a production-proven approach to secrets management with focus on developer experience and AWS optimization. Battle-tested at Lyft&amp;rsquo;s scale with millions of requests daily, Confidant provides real-world validation of its architecture and performance characteristics.&lt;/p&gt;
&lt;p&gt;AWS-optimized architecture leverages KMS and DynamoDB to provide secure, scalable secret storage using proven AWS services. Developer-centric design emphasizes simple API and CLI interfaces that reduce friction in day-to-day development workflows. The blind credentials feature provides enhanced security by ensuring that even system administrators cannot access certain types of sensitive information.&lt;/p&gt;
&lt;p&gt;IAM integration with fine-grained permissions leverages AWS&amp;rsquo;s native access control systems to provide consistent security policies across the entire infrastructure. As a free and open-source solution, Confidant enables organizations to implement enterprise-grade secret management without licensing costs.&lt;/p&gt;
&lt;p&gt;Confidant excels in &lt;a href="https://www.pulumi.com/docs/clouds/aws/"&gt;AWS-heavy environments&lt;/a&gt;, teams with strong technical capabilities, and organizations seeking proven open-source solutions with demonstrated scale and reliability.&lt;/p&gt;
&lt;h4 id="chamber"&gt;Chamber&lt;/h4&gt;
&lt;p&gt;Segment&amp;rsquo;s Chamber provides elegant secrets management using AWS Parameter Store, optimizing for simplicity and cost-effectiveness. The platform leverages existing AWS infrastructure to minimize complexity while providing essential secret management capabilities.&lt;/p&gt;
&lt;p&gt;Cost-effective operations use Parameter Store&amp;rsquo;s generous free tier to provide secret storage without additional infrastructure or licensing costs. Simple deployment requires minimal operational overhead, making it suitable for teams with limited DevOps resources. Version control integration supports &lt;a href="https://www.pulumi.com/what-is/what-is-infrastructure-as-code/"&gt;infrastructure as code practices&lt;/a&gt; by enabling secret management through familiar development workflows.&lt;/p&gt;
&lt;p&gt;Namespace organization with hierarchical parameter structure provides logical organization that scales with application complexity while maintaining simplicity of operation. As a free and open-source tool with only AWS Parameter Store costs, Chamber provides extremely cost-effective secret management.&lt;/p&gt;
&lt;p&gt;Chamber serves &lt;a href="https://www.pulumi.com/docs/clouds/aws/"&gt;AWS-native deployments&lt;/a&gt; seeking simplicity, teams with cost constraints, and organizations preferring minimal tooling complexity over advanced feature sets.&lt;/p&gt;
&lt;h2 id="top-features-to-look-for-in-secrets-management-tools"&gt;Top Features to Look for in Secrets Management Tools&lt;/h2&gt;
&lt;h3 id="secrets-orchestration-and-multi-source-integration"&gt;Secrets Orchestration and Multi-Source Integration&lt;/h3&gt;
&lt;p&gt;The most advanced secrets management platforms function as intelligent orchestrators, connecting multiple secret sources and providing unified access patterns. This capability is crucial for organizations with heterogeneous environments where secrets are distributed across multiple systems. Rather than forcing migration to a single secret store, orchestration platforms work with existing infrastructure investments while providing centralized management and consistent access patterns.&lt;/p&gt;
&lt;p&gt;Effective orchestration platforms can aggregate secrets from existing enterprise vaults like HashiCorp Vault and CyberArk, cloud-native services including AWS Secrets Manager, Azure Key Vault, and Google Secret Manager, legacy systems with database configuration and file-based secrets, and third-party services like 1Password, Bitwarden, and specialized tools. &lt;a href="https://www.pulumi.com/docs/esc/"&gt;Pulumi ESC&lt;/a&gt; exemplifies this orchestration approach, providing a unified interface across over 20 secret sources while maintaining compatibility with existing infrastructure investments.&lt;/p&gt;
&lt;p&gt;This orchestration capability reduces migration risk and preserves existing investments while enabling gradual adoption of modern secret management practices. Organizations can maintain their current secret stores while gaining the benefits of centralized management, consistent access patterns, and advanced features like dynamic credential generation.&lt;/p&gt;
&lt;h3 id="configuration-as-code-and-environment-management"&gt;Configuration as Code and Environment Management&lt;/h3&gt;
&lt;p&gt;Modern secrets management extends beyond simple credential storage to comprehensive configuration management. The best platforms support &lt;a href="https://www.pulumi.com/what-is/what-is-infrastructure-as-code/"&gt;configuration-as-code principles&lt;/a&gt; that bring software engineering discipline to environment management and secret distribution.&lt;/p&gt;
&lt;p&gt;Version control integration with full change tracking and rollback capabilities ensures that configuration changes undergo the same scrutiny as application code. Hierarchical organization reduces duplication through inheritance and composition, enabling teams to define common configurations once and apply them consistently across multiple environments. Reproducible deployments ensure consistency across environments while code review processes apply software engineering practices to configuration changes. Automated testing capabilities validate configuration changes before deployment, preventing configuration errors that could lead to security vulnerabilities or application failures.&lt;/p&gt;
&lt;p&gt;This approach transforms secrets from scattered, manual processes into systematic, auditable infrastructure that follows established software engineering best practices. Teams can apply familiar development workflows to secret management, improving both security and operational efficiency.&lt;/p&gt;
&lt;h3 id="dynamic-credential-generation"&gt;Dynamic Credential Generation&lt;/h3&gt;
&lt;p&gt;Static secrets pose inherent security risks due to their long-lived nature and potential for unauthorized sharing. &lt;a href="https://www.pulumi.com/docs/esc/providers/"&gt;Dynamic credential generation&lt;/a&gt; addresses these challenges by creating credentials on-demand with automatic expiration, significantly reducing the attack surface associated with credential compromise.&lt;/p&gt;
&lt;p&gt;Effective dynamic credential systems provide short-lived tokens with automatic expiration and renewal, eliminating the need for manual rotation while ensuring credentials cannot be misused over extended periods. Just-in-time access generates credentials only when needed, reducing the window of opportunity for credential misuse. OIDC integration leverages identity providers for cloud access, enabling seamless authentication without storing long-lived cloud credentials.&lt;/p&gt;
&lt;p&gt;Database credentials with automatic rotation for major database systems ensure that application access remains current while removing the operational burden of manual credential management. API keys with configurable lifespans and scope limitations provide fine-grained control over third-party service access. This dynamic approach significantly improves security posture while reducing operational overhead.&lt;/p&gt;
&lt;h3 id="multi-platform-integration-and-sdk-support"&gt;Multi-Platform Integration and SDK Support&lt;/h3&gt;
&lt;p&gt;Your secrets management platform should integrate seamlessly with your existing development and deployment infrastructure, providing native support for the tools and workflows your teams already use. Effective integration reduces friction in adoption while ensuring that secret management becomes a natural part of existing processes rather than an additional burden.&lt;/p&gt;
&lt;p&gt;Development integration should include &lt;a href="https://www.pulumi.com/docs/using-pulumi/continuous-delivery/"&gt;CI/CD platforms&lt;/a&gt; like GitHub Actions, GitLab CI, Jenkins, and Azure DevOps, enabling automated secret management as part of deployment workflows. &lt;a href="https://www.pulumi.com/docs/clouds/kubernetes/"&gt;Container orchestration&lt;/a&gt; platforms including Kubernetes, Docker Swarm, and Nomad should provide native secret injection capabilities. &lt;a href="https://www.pulumi.com/what-is/what-is-infrastructure-as-code/"&gt;Infrastructure as Code&lt;/a&gt; tools like Terraform, Pulumi, and CloudFormation should support secret management through familiar provisioning workflows. Local development integration should include environment synchronization and IDE integration to provide consistent experiences across development and production environments.&lt;/p&gt;
&lt;p&gt;Runtime integration capabilities should extend to application frameworks like Spring Boot, Django, and Express.js, enabling developers to access secrets through familiar programming patterns. &lt;a href="https://www.pulumi.com/docs/clouds/"&gt;Cloud platforms&lt;/a&gt; including AWS Lambda, Azure Functions, and Google Cloud Run should provide optimized secret injection with minimal performance impact. Monitoring tools, service meshes, and other infrastructure components should integrate seamlessly to provide comprehensive observability and management capabilities.&lt;/p&gt;
&lt;h3 id="comprehensive-audit-and-compliance-capabilities"&gt;Comprehensive Audit and Compliance Capabilities&lt;/h3&gt;
&lt;p&gt;Security and compliance requirements demand detailed visibility into secret access and management activities. Effective audit capabilities provide the transparency required for security monitoring, compliance reporting, and incident investigation while enabling organizations to demonstrate adherence to regulatory requirements.&lt;/p&gt;
&lt;p&gt;Complete audit trails with detailed attribution, timestamps, and context enable security teams to understand exactly who accessed which secrets when and from where. Change tracking for all secret modifications, rotations, and access grants provides visibility into the complete lifecycle of credential management. Compliance reporting supporting SOC 2, ISO 27001, PCI-DSS, and other regulatory frameworks automates the documentation required for compliance audits.&lt;/p&gt;
&lt;p&gt;Anomaly detection capabilities identify unusual access patterns that may indicate compromise or policy violations, enabling proactive security response. Integration with SIEM systems provides centralized security monitoring and alerting, ensuring that secret management activities are included in overall security operations. These capabilities transform secret management from a potential compliance liability into a security asset that enhances overall organizational security posture.&lt;/p&gt;
&lt;h3 id="performance-and-scalability"&gt;Performance and Scalability&lt;/h3&gt;
&lt;p&gt;Consider both current requirements and future growth when evaluating secrets management platforms. API performance with low latency for high-frequency secret retrieval ensures that secret management doesn&amp;rsquo;t become a bottleneck in application performance. Geographic distribution supporting global deployments with regional access provides consistent performance regardless of deployment location.&lt;/p&gt;
&lt;p&gt;High availability with automatic failover and disaster recovery ensures that secret management doesn&amp;rsquo;t become a single point of failure in critical applications. Horizontal scaling capabilities handle increased load without performance degradation as organizations grow. Intelligent caching strategies optimize performance while maintaining security, reducing API load while ensuring secrets remain current.&lt;/p&gt;
&lt;p&gt;Effective performance and scalability ensure that secret management enhances rather than hinders application performance, enabling organizations to scale their security practices alongside their infrastructure growth.&lt;/p&gt;
&lt;div class="rounded-lg bg-violet-50 p-6 my-8"&gt;
&lt;p class="heading-4 m-0 mb-3 flex items-center gap-1.5"&gt;Try secrets orchestration&lt;/p&gt;
&lt;div class="body-base m-0 text-gray-950"&gt;Pulumi ESC connects your existing secret stores behind a single interface, adding configuration as code and dynamic, short-lived credentials.&lt;/div&gt;
&lt;a href="https://www.pulumi.com/docs/esc/" data-track="blog-body-cta" class="btn btn-primary mt-4"&gt;
Get started
&lt;svg xmlns="http://www.w3.org/2000/svg" class="ph-icon ph-icon--regular size-4" fill="currentColor" aria-hidden="true" focusable="false"&gt;&lt;use href="https://www.pulumi.com/icons/sprite.4a9ac1016b9d8a688a5e7e867f96bdf80115a0739af8c688ba04791e15f64461.svg#p-arrow-right-regular"/&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;h2 id="key-considerations-for-choosing-secrets-management-tools"&gt;Key Considerations for Choosing Secrets Management Tools&lt;/h2&gt;
&lt;h3 id="orchestration-vs-replacement-strategy"&gt;Orchestration vs. Replacement Strategy&lt;/h3&gt;
&lt;p&gt;The fundamental choice between orchestration and replacement approaches significantly impacts both implementation complexity and long-term flexibility. Orchestration platforms like &lt;a href="https://www.pulumi.com/docs/esc/"&gt;Pulumi ESC&lt;/a&gt; work with existing infrastructure, providing unified interfaces without requiring complete migration. This approach offers reduced migration risk with gradual adoption, preserved investments in existing secret stores and processes, flexibility to use best-of-breed solutions for different use cases, and simplified operations through centralized management of distributed secrets.&lt;/p&gt;
&lt;p&gt;Replacement approaches require migration of all secrets to a single platform. While potentially simpler architecturally, this approach involves higher migration costs and extended transition periods, vendor lock-in that makes future changes more difficult, all-or-nothing adoption requiring complete workflow changes, and potential loss of functionality from specialized existing systems.&lt;/p&gt;
&lt;p&gt;Organizations with heterogeneous environments, multiple cloud providers, or significant existing investments in secret management infrastructure typically benefit from orchestration approaches that preserve flexibility while providing centralized management capabilities.&lt;/p&gt;
&lt;h3 id="cloud-strategy-alignment"&gt;Cloud Strategy Alignment&lt;/h3&gt;
&lt;p&gt;Your choice of secrets management platform should align with your overall cloud strategy and deployment patterns. Organizations with &lt;a href="https://www.pulumi.com/docs/clouds/"&gt;multi-cloud&lt;/a&gt; or hybrid strategies benefit from cloud-agnostic solutions that provide consistent experiences across platforms. &lt;a href="https://www.pulumi.com/docs/esc/"&gt;Pulumi ESC&lt;/a&gt;, HashiCorp Vault, and other orchestration platforms excel in these environments by providing unified interfaces regardless of underlying infrastructure.&lt;/p&gt;
&lt;p&gt;Organizations committed to specific cloud platforms can leverage native services like AWS Secrets Manager, Azure Key Vault, and Google Secret Manager for optimal integration and cost efficiency within their chosen ecosystem. These platforms provide deep integration with cloud-native services while optimizing costs through native billing and resource management.&lt;/p&gt;
&lt;p&gt;Migration flexibility becomes important as organizational requirements evolve. Orchestration platforms provide natural migration paths between different underlying secret stores as requirements change, while cloud-native solutions may require more significant changes if cloud strategy evolves. Consider solutions that maintain flexibility for future changes while meeting current operational requirements.&lt;/p&gt;
&lt;h3 id="team-structure-and-expertise"&gt;Team Structure and Expertise&lt;/h3&gt;
&lt;p&gt;The technical complexity and operational requirements of different secrets management platforms vary significantly, making team structure and expertise critical factors in platform selection. High-complexity tools like HashiCorp Vault and CyberArk Conjur suit organizations with dedicated security or platform teams capable of managing sophisticated infrastructure. These platforms offer maximum flexibility and features but require significant expertise to implement and operate effectively.&lt;/p&gt;
&lt;p&gt;Medium-complexity tools like &lt;a href="https://www.pulumi.com/docs/esc/"&gt;Pulumi ESC&lt;/a&gt; and Doppler balance advanced features with operational simplicity, making them suitable for organizations with strong technical teams that prefer managed services or simplified operations. These platforms provide enterprise-grade capabilities without the operational overhead of self-managed infrastructure.&lt;/p&gt;
&lt;p&gt;Low-complexity tools like 1Password and Bitwarden prioritize ease of use over advanced capabilities, making them suitable for organizations with limited technical resources or mixed teams where non-technical users require access to secrets. These platforms excel in environments where adoption and usability take priority over advanced features.&lt;/p&gt;
&lt;p&gt;Organizational structure also influences platform choice. Centralized teams can manage sophisticated platforms and enforce consistent policies across the organization, while distributed teams benefit from self-service capabilities and intuitive interfaces that enable independent operation. Mixed environments require tools accessible to both technical and non-technical users, emphasizing usability and clear documentation.&lt;/p&gt;
&lt;h3 id="security-and-compliance-requirements"&gt;Security and Compliance Requirements&lt;/h3&gt;
&lt;p&gt;Regulatory and security requirements significantly influence platform selection, with different industries and use cases demanding specific capabilities and certifications. Government and defense organizations may require FIPS 140-2 Level 2 validation provided by platforms like Azure Key Vault and CyberArk, while financial services often need comprehensive audit trails and segregation of duties capabilities.&lt;/p&gt;
&lt;p&gt;Healthcare organizations require HIPAA-compliant secret handling and access controls, while European operations must consider GDPR implications for secret storage and processing. Understanding these requirements early in the selection process helps narrow platform choices and avoid costly compliance gaps.&lt;/p&gt;
&lt;p&gt;Security model preferences also vary significantly between organizations. Zero-knowledge encryption models where service providers cannot access secrets appeal to security-conscious organizations, while Hardware Security Module support provides the highest levels of cryptographic security for sensitive applications. Network isolation capabilities become important for air-gapped or highly secure environments, while multi-factor authentication integration with existing identity systems ensures consistent security policies.&lt;/p&gt;
&lt;h3 id="cost-optimization"&gt;Cost Optimization&lt;/h3&gt;
&lt;p&gt;Understanding the total cost of ownership for different secrets management approaches requires consideration of both direct and indirect costs. Per-user pricing models suit teams with predictable user counts but can become expensive as organizations scale. Usage-based pricing scales naturally with actual consumption but requires careful monitoring to avoid unexpected costs. Per-secret pricing works well for applications with many users but few secrets, while enterprise licensing may provide cost-effective solutions for large deployments.&lt;/p&gt;
&lt;p&gt;Total cost of ownership extends beyond licensing to include operational overhead for self-hosted versus managed solutions, training and certification requirements for specialized platforms, integration costs including development time and ongoing maintenance, and migration expenses from existing solutions. Managed services may appear more expensive initially but often provide better total cost of ownership when operational overhead is considered.&lt;/p&gt;
&lt;p&gt;Consider both current costs and future scaling requirements when evaluating pricing models. Platforms that provide cost-effective entry points while supporting growth can provide better long-term value than solutions optimized only for current requirements.&lt;/p&gt;
&lt;h2 id="the-future-of-secrets-management-orchestration-and-configuration-as-code"&gt;The Future of Secrets Management: Orchestration and Configuration as Code&lt;/h2&gt;
&lt;p&gt;The secrets management landscape is undergoing a fundamental shift from simple storage systems to sophisticated orchestration platforms. This evolution reflects the reality of modern infrastructure—applications span &lt;a href="https://www.pulumi.com/docs/clouds/"&gt;multiple clouds&lt;/a&gt;, integrate with dozens of services, and require dynamic adaptation to changing requirements.&lt;/p&gt;
&lt;h3 id="from-storage-to-orchestration"&gt;From Storage to Orchestration&lt;/h3&gt;
&lt;p&gt;Traditional secret management models rely on centralized vaults where all secrets are stored in a single system, requiring applications to understand specific retrieval mechanisms and access patterns. This approach often creates vendor lock-in and forces organizations to migrate from existing secret stores, disrupting established workflows and creating migration risk.&lt;/p&gt;
&lt;p&gt;The emerging orchestration model uses intelligent brokers that aggregate secrets from multiple sources—existing vaults, cloud services, legacy systems—presenting them through unified, consistent interfaces. This orchestration approach provides investment protection by working with existing secret stores, gradual migration without disruptive all-or-nothing transitions, best-of-breed integration leveraging specialized solutions where appropriate, and operational simplification through centralized management of distributed secrets.&lt;/p&gt;
&lt;p&gt;Orchestration platforms enable organizations to maintain their current infrastructure investments while gaining the benefits of centralized management, consistent access patterns, and modern capabilities like dynamic credential generation. This approach reduces both risk and cost while providing a clear path toward modern secret management practices.&lt;/p&gt;
&lt;h3 id="configuration-as-code-revolution"&gt;Configuration as Code Revolution&lt;/h3&gt;
&lt;p&gt;The convergence of secrets and configuration management represents the next major evolution in infrastructure management. Modern applications require more than isolated credentials—they need comprehensive environment configuration including secrets, feature flags, service endpoints, and deployment parameters. Managing these elements separately creates complexity and increases the risk of configuration drift between environments.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/what-is/what-is-infrastructure-as-code/"&gt;Configuration-as-code principles&lt;/a&gt; bring software engineering discipline to environment management by providing version control with complete change history and rollback capabilities, code review processes that ensure changes undergo appropriate scrutiny, automated testing that validates configuration changes before deployment, and reproducible environments that eliminate configuration drift between stages.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/blog/environments-secrets-configurations-management/"&gt;Pulumi ESC&lt;/a&gt; pioneered this approach, demonstrating how configuration-as-code can systematically address secrets sprawl while improving security, reliability, and developer productivity. This convergence transforms environment management from manual, error-prone processes into systematic, auditable infrastructure that follows established software engineering best practices.&lt;/p&gt;
&lt;h3 id="dynamic-credentials-and-zero-trust-architecture"&gt;Dynamic Credentials and Zero-Trust Architecture&lt;/h3&gt;
&lt;p&gt;The shift toward dynamic, short-lived credentials aligns with zero-trust security principles that assume compromise and limit blast radius through minimal access grants. Rather than managing long-lived secrets that require careful rotation and access control, modern platforms generate credentials on-demand with automatic expiration.&lt;/p&gt;
&lt;p&gt;This approach provides reduced attack surface through minimal credential lifetime, simplified rotation with automatic credential lifecycle management, enhanced audit trails with precise attribution and timing, and improved compliance through automated policy enforcement. Dynamic credentials eliminate many of the operational challenges associated with traditional secret management while significantly improving security posture.&lt;/p&gt;
&lt;p&gt;Organizations adopting zero-trust architectures benefit from secret management platforms that support dynamic credential generation, fine-grained access controls, and comprehensive audit capabilities. These platforms become integral components of zero-trust implementations rather than separate security tools.&lt;/p&gt;
&lt;h3 id="ai-and-machine-learning-integration"&gt;AI and Machine Learning Integration&lt;/h3&gt;
&lt;p&gt;Advanced platforms are incorporating AI and machine learning capabilities to enhance security and operational efficiency. Anomaly detection algorithms identify unusual access patterns that may indicate compromise or policy violations, enabling proactive security response before incidents escalate. Intelligent rotation systems optimize credential lifecycles based on usage patterns and risk assessment, balancing security requirements with operational efficiency.&lt;/p&gt;
&lt;p&gt;Automated compliance capabilities ensure policies are consistently applied across all environments while predictive security features identify potential vulnerabilities before they&amp;rsquo;re exploited. These AI-powered capabilities transform secret management from reactive operations into proactive security systems that enhance overall organizational security posture.&lt;/p&gt;
&lt;h2 id="choosing-the-right-path-forward"&gt;Choosing the Right Path Forward&lt;/h2&gt;
&lt;p&gt;The secrets management landscape has fundamentally shifted from simple storage to intelligent orchestration. Your choice today will determine not just your current security posture, but your ability to scale and adapt as your infrastructure grows more complex.&lt;/p&gt;
&lt;p&gt;The decision framework is clearer than you might expect. If you&amp;rsquo;re managing multi-cloud environments or have significant existing secret store investments, orchestration platforms like &lt;a href="https://www.pulumi.com/docs/esc/"&gt;Pulumi ESC&lt;/a&gt; provide the most strategic value. They let you modernize your approach without disrupting current workflows, while adding &lt;a href="https://www.pulumi.com/what-is/what-is-infrastructure-as-code/"&gt;configuration-as-code capabilities&lt;/a&gt; and &lt;a href="https://www.pulumi.com/docs/esc/environments/"&gt;hierarchical environment management&lt;/a&gt; that systematically address secrets sprawl.&lt;/p&gt;
&lt;p&gt;Organizations committed to maximum flexibility and customization will find HashiCorp Vault&amp;rsquo;s extensibility unmatched, though it requires substantial technical expertise to operate effectively. Cloud-native teams can leverage AWS Secrets Manager, Azure Key Vault, or Google Secret Manager for seamless integration within their chosen ecosystem, optimizing both cost and operational complexity.&lt;/p&gt;
&lt;p&gt;Teams prioritizing rapid adoption and developer experience should consider Doppler, Infisical, or 1Password Secrets Automation. These platforms excel at driving organization-wide adoption through intuitive interfaces while providing essential capabilities without overwhelming complexity.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the critical insight: secrets management isn&amp;rsquo;t just a security decision—it directly impacts your development velocity and operational efficiency. Platforms that embrace orchestration, &lt;a href="https://www.pulumi.com/what-is/what-is-infrastructure-as-code/"&gt;configuration-as-code&lt;/a&gt;, and dynamic credentials enable faster development cycles while reducing the operational overhead that comes from managing scattered, manual processes.&lt;/p&gt;
&lt;p&gt;The cost of maintaining ad-hoc secrets management extends far beyond security incidents. Developer productivity losses from hunting down credentials, operational complexity from manual rotation processes, and the constant risk of configuration drift between environments create technical debt that compounds over time. The investment in systematic solutions pays dividends immediately through reduced operational overhead and improved security posture.&lt;/p&gt;
&lt;p&gt;The industry&amp;rsquo;s evolution toward zero-trust architectures and configuration-as-code practices isn&amp;rsquo;t slowing down. Organizations that adopt systematic approaches today position themselves to handle tomorrow&amp;rsquo;s infrastructure complexity with confidence, while those that delay face increasingly difficult migration challenges as their systems grow more distributed and interdependent.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Ready to revolutionize your secrets and configuration management? &lt;a href="https://www.pulumi.com/docs/esc/"&gt;Explore Pulumi ESC&lt;/a&gt; and discover how secrets orchestration can transform your development workflows while eliminating sprawl across your entire infrastructure.&lt;/em&gt;&lt;/p&gt;</description><author>Asaf Ashirov</author><author>Boris Schlosser</author><category>secrets-management</category><category>security</category><category>devops</category><category>configuration-as-code</category><category>esc</category></item><item><title>Bring Your Own Keys With Pulumi ESC</title><link>https://www.pulumi.com/blog/bring-your-own-keys-with-pulumi-esc/</link><pubDate>Wed, 18 Jun 2025 13:25:26 -0300</pubDate><guid>https://www.pulumi.com/blog/bring-your-own-keys-with-pulumi-esc/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/bring-your-own-keys-with-pulumi-esc/index.png" /&gt;
&lt;p&gt;Today we’re excited to launch support for Customer-Managed Keys (CMKs) in Pulumi ESC. This feature gives your organization full control over how your secrets and state are encrypted — empowering you to meet the most demanding compliance requirements like HIPAA, GDPR, and FedRAMP, all while maintaining the ease-of-use that Pulumi is known for.&lt;/p&gt;
&lt;h2 id="why-customer-managed-keys"&gt;Why Customer-Managed Keys?&lt;/h2&gt;
&lt;p&gt;Pulumi encrypts secrets and other sensitive information stored in ESC using data keys, which are encrypted with Pulumi-Managed Keys using strong security standards. However, customers might need to use their own keys to gain full control over their lifecycle and revocation, maintain a centralized audit trail, and enforce custom rotation policies. This is especially important to meet compliance requirements or specific regulations (e.g., HIPAA, GDPR, FedRAMP, etc.). Customer-Managed Keys give customers that control while keeping these aspects transparent for the consumers of those secrets.&lt;/p&gt;
&lt;h2 id="how-it-works"&gt;How It Works&lt;/h2&gt;
&lt;p&gt;Customer-Managed Keys integrate seamlessly with your Pulumi Cloud Organization. Once enabled, all existing data keys used to encrypt your ESC secrets, previously encrypted with the Pulumi-managed key, will be automatically re-encrypted with the new CMK.&lt;/p&gt;
&lt;p&gt;Setting it up takes just a few minutes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Create&lt;/strong&gt; a KMS key in your AWS account.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Grant access&lt;/strong&gt; to the KMS key using OIDC in your AWS account.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configure&lt;/strong&gt; your Pulumi Cloud organization to use your new KMS key.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="available-today"&gt;Available Today&lt;/h2&gt;
&lt;p&gt;Customer-Managed Keys with support for AWS KMS are available today for all organizations on the &lt;strong&gt;Pulumi Enterprise&lt;/strong&gt; or &lt;strong&gt;Business Critical&lt;/strong&gt; plans. You can set it up by following the instructions &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/admin/customer-managed-keys"&gt;in the Pulumi Cloud documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We expect to add support for more cloud providers in the future. Please vote on the following GitHub issues for your favorite to support prioritization:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/pulumi/pulumi-cloud-requests/issues/521"&gt;Azure Key Vault&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pulumi/pulumi-cloud-requests/issues/522"&gt;Google Cloud KMS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="share-your-feedback"&gt;Share Your Feedback&lt;/h2&gt;
&lt;p&gt;We’re excited to see how Customer-Managed Keys help you and your organization meet your compliance goals with Pulumi Cloud. Your feedback is essential as we continue to evolve this feature:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Connect with us in the &lt;a href="https://slack.pulumi.com"&gt;Pulumi Community Slack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Open an issue on &lt;a href="https://github.com/pulumi/pulumi"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Read the full documentation on &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/admin/customer-managed-keys"&gt;Customer-Managed Keys&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Try this today, &lt;a href="https://pulumi.com/start"&gt;Get Started with Pulumi for free&lt;/a&gt;&lt;/p&gt;</description><author>Pablo Terradillos</author><author>Boris Schlosser</author><category>esc</category><category>aws</category><category>features</category><category>secrets</category></item><item><title>Announcing Infisical Providers for Pulumi ESC: Dynamic Login and Dynamic Secrets</title><link>https://www.pulumi.com/blog/esc-infisical-providers-launch/</link><pubDate>Mon, 28 Apr 2025 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/esc-infisical-providers-launch/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/esc-infisical-providers-launch/index.png" /&gt;
&lt;p&gt;We are thrilled to announce enhanced integration support for &lt;a href="https://infisical.com/"&gt;Infisical&lt;/a&gt; within &lt;a href="https://www.pulumi.com/product/esc"&gt;Pulumi ESC&lt;/a&gt;! Pulumi ESC centralizes secrets and configuration management, providing a unified source of truth across your environments. With the addition of Infisical, a popular open-source secrets management platform, ESC further extends its ecosystem, enabling seamless and secure access to secrets stored across diverse systems.&lt;/p&gt;
&lt;p&gt;This release introduces two distinct dynamic providers for Infisical, each designed to improve security and streamline your workflows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/docs/esc/integrations/dynamic-login-credentials/infisical-login/"&gt;&lt;code&gt;infisical-login&lt;/code&gt;&lt;/a&gt; (Dynamic Login):&lt;/strong&gt; This provider securely generates short-lived OIDC access tokens for authenticating &lt;em&gt;to&lt;/em&gt; Infisical. Static, long-lived credentials are a significant security risk. The &lt;code&gt;infisical-login&lt;/code&gt; provider directly addresses this by generating temporary, just-in-time credentials using OIDC. &lt;strong&gt;Use this provider when you need temporary credentials to interact directly with Infisical&lt;/strong&gt;, for instance, using the Infisical CLI or SDKs in local development or CI/CD pipelines, without storing long-lived static tokens. ESC manages the OIDC flow, providing a fresh token when needed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.pulumi.com/docs/esc/integrations/dynamic-secrets/infisical-secrets/"&gt;&lt;code&gt;infisical-secrets&lt;/code&gt;&lt;/a&gt; (Dynamic Secrets):&lt;/strong&gt; This provider dynamically fetches secrets stored &lt;em&gt;within&lt;/em&gt; your Infisical projects and makes them available within the Pulumi ESC environment. &lt;strong&gt;Use this provider when you need specific secrets &lt;em&gt;from&lt;/em&gt; Infisical to configure your applications or infrastructure managed via ESC.&lt;/strong&gt; This centralizes secret consumption, allowing you to access Infisical secrets using the same consistent ESC patterns used for AWS, Azure, GCP, Vault, 1Password, and more.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pulumi ESC acts as a robust &lt;strong&gt;secrets broker&lt;/strong&gt; provider consistent API interface for all your tools, applications and workflows. It securely handles &lt;em&gt;both&lt;/em&gt; the generation of temporary authentication credentials (like with &lt;code&gt;infisical-login&lt;/code&gt;) and the fetching of application secrets (like with &lt;code&gt;infisical-secrets&lt;/code&gt;) from various providers such as Infisical, cloud platforms (&lt;a href="https://www.pulumi.com/docs/esc/integrations/dynamic-secrets/aws-secrets/"&gt;AWS&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/esc/integrations/dynamic-secrets/azure-secrets/"&gt;Azure&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/esc/integrations/dynamic-secrets/gcp-secrets/"&gt;GCP&lt;/a&gt;), and other secret managers (&lt;a href="https://www.pulumi.com/docs/esc/integrations/dynamic-secrets/vault-secrets/"&gt;Vault&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/esc/integrations/dynamic-secrets/1password-secrets/"&gt;1Password&lt;/a&gt;). Once centralized in ESC, these secrets and configurations are consistently available for you to consume via ESC&amp;rsquo;s many developer friendly methods including the &lt;a href="https://www.pulumi.com/docs/esc/development/languages-sdks/"&gt;ESC SDK&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/iac/cli/commands/pulumi_env/"&gt;Pulumi CLI&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/esc/integrations/kubernetes/external-secrets-operator/"&gt;Kubernetes External Secrets Operator&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/esc/integrations/kubernetes/secret-store-csi-driver/"&gt;CSI Driver&lt;/a&gt;, or sync them to various platforms where they are needed such as &lt;a href="https://github.com/pulumi/esc-examples/tree/main/sync/github-secrets"&gt;GitHub Secrets&lt;/a&gt;, &lt;a href="https://github.com/pulumi/esc-examples/tree/main/sync/aws-secrets-manager"&gt;AWS Secrets Manager&lt;/a&gt;, and more!&lt;/p&gt;
&lt;h2 id="getting-started-using-the-infisical-providers"&gt;Getting Started: Using the Infisical Providers&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s walk through how to configure and use each provider.&lt;/p&gt;
&lt;h3 id="prerequisites"&gt;Prerequisites&lt;/h3&gt;
&lt;p&gt;Configure Infisical for OpenID Connect(OIDC) before you try out the providers. Follow the steps in &lt;a href="https://www.pulumi.com/docs/esc/environments/configuring-oidc/infisical/"&gt;Infisical OIDC documentation&lt;/a&gt;. This involves creating an Identity in Infisical, adding OIDC authentication pointing to &lt;code&gt;https://api.pulumi.com/oidc&lt;/code&gt;, and configuring the audience and subject claims. Note down the &lt;strong&gt;Identity ID&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id="how-to-use-the-infisical-login-provider-dynamic-authentication"&gt;How to Use the infisical-login Provider (Dynamic Authentication)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a Pulumi ESC environment (e.g., &lt;code&gt;pulumi-org/infisical-auth/oidc-login&lt;/code&gt;) with the following environment definition and update the &lt;code&gt;identityId&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Environment: pulumi-org/infisical-auth/oidc-login&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;values&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;infisical&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Configure the Dynamic Login provider using OIDC&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;login&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;fn::open::infisical-login&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;oidc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;identityId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;&amp;lt;your-identity-id&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Replace with your Infisical Identity ID&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Expose the token as an environment variable for easy consumption&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environmentVariables&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;INFISICAL_TOKEN&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${infisical.login.accessToken}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Save the environment.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Validate the environment by clicking on Open in the Pulumi Cloud console, or running &lt;code&gt;pulumi env open pulumi-org/infisical-auth/oidc-login&lt;/code&gt; in your CLI. The output will include the infisical.login.accessToken.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Usage Example: Run Infisical CLI commands dynamically:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pulumi env run pulumi-org/infisical-auth/oidc-login -- infisical secrets get API_KEY --projectId&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;your-project-id&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# The INFISICAL_TOKEN env var is automatically injected&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="how-to-use-the-infisical-secrets-provider-dynamically-fetching-secrets"&gt;How to Use the infisical-secrets Provider (Dynamically Fetching Secrets)&lt;/h3&gt;
&lt;p&gt;Use this provider to pull secrets &lt;em&gt;from&lt;/em&gt; Infisical &lt;em&gt;into&lt;/em&gt; your ESC environment for consumption by your applications, CI/CD systems, Pulumi IaC, Terraform and more!&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create an ESC environment where you need the secrets (e.g., &lt;code&gt;pulumi-org/my-app/dev&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Import&lt;/strong&gt; the dynamic login environment (if using OIDC for authentication, which is recommended). This makes the temporary Infisical token available.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure the &lt;code&gt;infisical-secrets&lt;/code&gt; provider, referencing the imported login details. See example below.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Specify the secrets to fetch using the &lt;code&gt;get&lt;/code&gt; block. Replace placeholders.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Environment: pulumi-org/my-app/dev&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;imports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Import the environment performing Dynamic Login (recommended)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;pulumi-org/infisical-auth/oidc-login&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Use the path to your login environment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;values&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Define a structure to hold secrets fetched from Infisical&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;infisicalSecrets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;fn::open::infisical-secrets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Authenticate using the token from the imported Dynamic Login environment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;login&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${infisical.login}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Pass the login object from the import&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Specify secrets to retrieve from Infisical&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;get&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Define names for the secrets as they will appear in ESC&amp;#39;s output under &amp;#39;infisicalSecrets&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# This is the name within ESC&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;projectId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;&amp;lt;your-infisical-project-id&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;prod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# The Infisical environment slug (e.g., &amp;#39;prod&amp;#39;, &amp;#39;dev&amp;#39;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;secretKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;api-key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# The key of the secret in Infisical&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;appSecret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Pull another secret `app-secret` into ESC&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;projectId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;&amp;lt;your-infisical-project-id&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;dev&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;secretKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;app-secret&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Optionally, map fetched secrets to environment variables for application consumption&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environmentVariables&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${infisicalSecrets.apiKey}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;APP_SECRET&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;${infisicalSecrets.appSecret}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Save the environment.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Validate the environment by clicking on Open in the Pulumi Cloud console, or running &lt;code&gt;pulumi env open pulumi-org/my-app/dev&lt;/code&gt; in your CLI. The output will show the imported &lt;code&gt;infisical.login&lt;/code&gt;, the fetched secrets under &lt;code&gt;infisicalSecrets&lt;/code&gt;, and the mapped &lt;code&gt;environmentVariables&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Usage Example:&lt;/strong&gt; Run an application that needs these secrets:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pulumi env run pulumi-org/my-app/dev -- node app.js
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# The API_KEY and APP_SECRET env vars are automatically injected&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;The new &lt;code&gt;infisical-login&lt;/code&gt; and &lt;code&gt;infisical-secrets&lt;/code&gt; providers for Pulumi ESC offer powerful and secure ways to interact with Infisical. Use &lt;code&gt;infisical-login&lt;/code&gt; for dynamic, short-lived OIDC authentication when interacting directly with Infisical APIs or CLIs. Use &lt;code&gt;infisical-secrets&lt;/code&gt; to securely fetch secrets &lt;em&gt;from&lt;/em&gt; Infisical &lt;em&gt;into&lt;/em&gt; your centralized ESC environment. Together, they enhance your security posture and simplify configuration management.&lt;/p&gt;
&lt;p&gt;We encourage you to explore these new capabilities. Dive into the &lt;a href="https://www.pulumi.com/docs/esc/integrations/dynamic-login-credentials/infisical-login/"&gt;infisical-login&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/esc/integrations/dynamic-secrets/infisical-secrets/"&gt;infisical-secrets&lt;/a&gt; for detailed configuration options, check out the broader &lt;a href="https://www.pulumi.com/docs/esc/"&gt;Pulumi ESC Documentation&lt;/a&gt;, and share your feedback or ask questions in the &lt;a href="https://slack.pulumi.com/"&gt;Pulumi Community Slack&lt;/a&gt;.&lt;/p&gt;</description><author>Boris Schlosser</author><author>Arun Loganathan</author><category>esc</category><category>secrets</category><category>infisical</category><category>features</category><category>configuration-management</category><category>dynamic-secrets</category><category>oidc</category></item></channel></rss>