<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel><title>Pulumi Blog: Secrets management</title><link>https://www.pulumi.com/blog/tag/secrets-management/</link><description>Pulumi blog posts: Secrets management.</description><language>en-us</language><pubDate>Thu, 24 Jul 2025 00:00:00 +0000</pubDate><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>Why Every Cloud Engineer Needs Pulumi ESC for Secrets Management</title><link>https://www.pulumi.com/blog/why-every-cloud-engineer-needs-pulumi-esc-secrets-management/</link><pubDate>Mon, 17 Mar 2025 07:28:56 +0000</pubDate><guid>https://www.pulumi.com/blog/why-every-cloud-engineer-needs-pulumi-esc-secrets-management/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/why-every-cloud-engineer-needs-pulumi-esc-secrets-management/index.png" /&gt;
&lt;p&gt;Managing secrets is one of the most critical responsibilities in cloud engineering. Secrets like API keys, database credentials, and encryption tokens are the backbone of secure and seamless cloud operations. Yet they are so often an afterthought. They get replicated across cloud-specific secrets managers and stuffed in GitHub secrets, compromising security for the sake of simplicity. ¿Por que no los dos? Why can&amp;rsquo;t secrets management be secure and simple?&lt;/p&gt;
&lt;p&gt;Enter &lt;strong&gt;Pulumi ESC (Environments, Secrets, and Configuration)&lt;/strong&gt;—a breakthrough in taming secrets sprawl and streamlining configuration management across infrastructure. Let&amp;rsquo;s explore why Pulumi ESC is a necessity for cloud engineers, helping make secrets management secure while keeping it simple.&lt;/p&gt;
&lt;h2 id="in-this-article"&gt;In this article:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/why-every-cloud-engineer-needs-pulumi-esc-secrets-management/#the-challenge-of-secrets-management-in-modern-cloud-environments"&gt;The Challenge of Secrets Management in Modern Cloud Environments&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/why-every-cloud-engineer-needs-pulumi-esc-secrets-management/#what-is-pulumi-esc"&gt;What is Pulumi ESC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/why-every-cloud-engineer-needs-pulumi-esc-secrets-management/#key-features-of-pulumi-esc"&gt;Key Features of Pulumi ESC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/why-every-cloud-engineer-needs-pulumi-esc-secrets-management/#why-cloud-engineers-need-pulumi-esc"&gt;Why Cloud Engineers Need Pulumi ESC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/blog/why-every-cloud-engineer-needs-pulumi-esc-secrets-management/#the-future-of-secrets-management-with-pulumi-esc"&gt;The Future of Secrets Management with Pulumi ESC&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="the-challenge-of-secrets-management-in-modern-cloud-environments"&gt;The Challenge of Secrets Management in Modern Cloud Environments&lt;/h2&gt;
&lt;p&gt;Secrets management has changed significantly over the past decade. Gone are the days when secrets could be hardcoded, manually maintained in static configuration files, or left floating around in plaintext on dev machines. Nowadays, cloud environments demand a higher level of sophistication:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Distributed Systems&lt;/strong&gt;: Even in multi-cloud and hybrid setups, secrets must be accessible across varied platforms without exposing vulnerabilities.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic Infrastructure&lt;/strong&gt;: Kubernetes, serverless architectures, and ephemeral environments must have secrets that adapt dynamically.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Risks&lt;/strong&gt;: Hardcoded or poorly managed secrets can lead to catastrophic breaches, costing companies millions in data recovery and compliance penalties.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Operational Burdens&lt;/strong&gt;: Manual secrets management is error-prone, inefficient, unscalable, and needs to align with DevOps and DevSecOps best practices.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pulumi ESC addresses these issues head-on, redefining how cloud engineers manage secrets efficiently, securely, and at scale.&lt;/p&gt;
&lt;div class="note note-tip"&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-lightbulb-fill"/&gt;&lt;/svg&gt;
&lt;div class="line"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="content"&gt;&lt;p&gt;Jk Jensen, Team Lead at Mysten Labs, said:&lt;/p&gt;
&lt;p&gt;&amp;ldquo;&lt;em&gt;Pulumi ESC has been a lifesaver for us. It’s nice to throw everything behind an ESC environment and eliminate one-off granting/IAM permissions and other issues related to static credentials. It gives us peace of mind knowing that we can grant permissions quickly and revoke easily limiting blast radius for any access.&lt;/em&gt;&amp;rdquo;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="what-is-pulumi-esc"&gt;What is Pulumi ESC?&lt;/h2&gt;
&lt;p&gt;Pulumi ESC simplifies how organizations manage secrets and configurations. It is designed to secure sensitive configurations across modern cloud environments and supports seamless integration, enabling engineers to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Access, share, and manage&lt;/strong&gt; secrets, passwords, API keys, and configuration settings like network and deployment options.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Synchronize secrets and configuration&lt;/strong&gt; from any secrets manager to any app, tool, or CI/CD platform.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Access secrets securely&lt;/strong&gt; through CLI, API, Kubernetes operator, the Pulumi Cloud UI, and in-code with Typescript/Javascript, Python, and Go SDKs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connect to cloud providers and secrets stores&lt;/strong&gt; via OIDC to generate dynamic, short-lived, auto-expiring credentials.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Set role-based access controls (RBAC)&lt;/strong&gt;, making securing secrets and configurations easy by assigning permissions to users based on their roles.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Whether integrated with Pulumi&amp;rsquo;s Infrastructure as Code (IaC) platform or used as a standalone service, Pulumi ESC enables cloud engineers to streamline secrets management with centralized control.&lt;/p&gt;
&lt;h2 id="key-features-of-pulumi-esc"&gt;Key Features of Pulumi ESC&lt;/h2&gt;
&lt;h3 id="1-seamless-integration-with-external-platforms"&gt;1. Seamless Integration with External Platforms&lt;/h3&gt;
&lt;p&gt;Pulumi ESC integrates with popular secrets providers, including &lt;a href="https://www.pulumi.com/docs/esc/integrations/dynamic-secrets/aws-secrets/"&gt;AWS Secrets Manager&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/esc/integrations/dynamic-secrets/azure-secrets/"&gt;Azure Key Vault&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/esc/integrations/dynamic-secrets/gcp-secrets/"&gt;GCP Secret Manager&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/esc/integrations/dynamic-secrets/1password-secrets/"&gt;1Password&lt;/a&gt;, and &lt;a href="https://www.pulumi.com/docs/esc/integrations/dynamic-secrets/vault-secrets/"&gt;HashiCorp Vault&lt;/a&gt;, making it adaptable for multi-cloud and hybrid cloud architectures.&lt;/p&gt;
&lt;h3 id="2-dynamic-secrets-synchronization-with-eso"&gt;2. Dynamic Secrets Synchronization with ESO&lt;/h3&gt;
&lt;p&gt;Partnering with the &lt;a href="https://www.pulumi.com/docs/esc/integrations/kubernetes/external-secrets-operator/"&gt;External Secrets Operator&lt;/a&gt;, Pulumi ESC synchronizes secrets securely into Kubernetes clusters. This eliminates hardcoding secrets into manifests or relying on unsecured manual processes.&lt;/p&gt;
&lt;h3 id="3-safely-roll-back-to-a-previous-version"&gt;3. Safely Roll Back to a Previous Version&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/blog/esc-versioning-launch/"&gt;Pulumi ESC Versioning&lt;/a&gt; gives you unprecedented control over your secrets and configuration. Every change is captured in an immutable revision history, allowing you to audit modifications, compare versions, and safely roll back.&lt;/p&gt;
&lt;h3 id="4-secure-by-design"&gt;4. Secure by Design&lt;/h3&gt;
&lt;p&gt;Pulumi ESC follows a &amp;ldquo;secure by default&amp;rdquo; model, employing encryption, access control, and detailed audit trails. Engineers can meet compliance regulations effortlessly while gaining full visibility into secret access patterns.&lt;/p&gt;
&lt;h3 id="5-automated-rotation-and-expiry"&gt;5. Automated Rotation and Expiry&lt;/h3&gt;
&lt;p&gt;Pulumi ESC minimizes security risks by automating the &lt;a href="https://www.pulumi.com/blog/esc-rotated-secrets-launch/"&gt;rotation of secrets&lt;/a&gt;. This feature aligns secrets management with CI/CD processes for cloud engineers focused on DevOps, ensuring credentials remain valid only when needed.&lt;/p&gt;
&lt;h3 id="6-configuration-as-code-automation-and-integration-everywhere"&gt;6. Configuration-as-Code, Automation, and Integration Everywhere&lt;/h3&gt;
&lt;p&gt;Pulumi ESC embraces an &amp;ldquo;as-code&amp;rdquo; approach, enabling configuration and secrets management using TypeScript, JavaScript, Go, Python, or YAML. The &amp;rsquo;esc&amp;rsquo; CLI and API support automation in CI/CD environments, reducing credential duplication and ensuring a single source of truth.&lt;/p&gt;
&lt;h3 id="7-dev-tools-integrations"&gt;7. Dev Tools Integrations&lt;/h3&gt;
&lt;p&gt;Pulumi ESC’s metadata and support for popular configuration formats enable seamless integration with tools like &lt;a href="https://www.pulumi.com/docs/esc/integrations/dev-tools/direnv/"&gt;Direnv&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/esc/integrations/dev-tools/docker/"&gt;Docker&lt;/a&gt;, and &lt;a href="https://www.pulumi.com/docs/esc/integrations/dev-tools/github/"&gt;GitHub&lt;/a&gt;, allowing easy management of environment variables, secrets, and configurations.&lt;/p&gt;
&lt;h3 id="8-infrastructure-tools-integrations"&gt;8. Infrastructure Tools Integrations&lt;/h3&gt;
&lt;p&gt;Pulumi ESC extends its capabilities beyond Pulumi IaC by integrating with other infrastructure tools such as &lt;a href="https://www.pulumi.com/docs/esc/integrations/infrastructure/cloudflare/"&gt;Cloudflare&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/esc/integrations/infrastructure/terraform/"&gt;Terraform&lt;/a&gt;, and OpenTofu. These integrations enable seamless provisioning of cloud credentials and input variables directly from ESC environments.&lt;/p&gt;
&lt;h2 id="why-cloud-engineers-need-pulumi-esc"&gt;Why Cloud Engineers Need Pulumi ESC&lt;/h2&gt;
&lt;h3 id="enhanced-security-and-compliance"&gt;Enhanced Security and Compliance&lt;/h3&gt;
&lt;p&gt;Cloud engineers often have to balance security and operations. Pulumi ESC centralizes secrets in a secure vault, ensuring encrypted storage, access control, and audit visibility. It also &lt;a href="https://www.pulumi.com/docs/administration/onboarding-guide/setting-up-for-success/#choose-your-compliance-approach"&gt;complies with industry standards like SOC 2, PCI-DSS, and MTCS&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="streamlined-multi-cloud-management"&gt;Streamlined Multi-Cloud Management&lt;/h3&gt;
&lt;p&gt;Managing secrets across AWS, Azure, and GCP can quickly become chaotic. Pulumi ESC&amp;rsquo;s cross-platform integration simplifies this process, ensuring engineers can manage and sync secrets from a single interface.&lt;/p&gt;
&lt;h3 id="simplified-kubernetes-secrets"&gt;Simplified Kubernetes Secrets&lt;/h3&gt;
&lt;p&gt;Kubernetes&amp;rsquo; default secrets offer limited security and scalability. Pulumi ESC with ESO and Secrets Store CSI Driver overcomes these limitations by securely synchronizing and managing secrets within Kubernetes clusters. This prevents unauthorized access and provides automated updates.&lt;/p&gt;
&lt;h3 id="zero-downtime-through-automation"&gt;Zero Downtime Through Automation&lt;/h3&gt;
&lt;p&gt;Manual secrets management often leads to errors such as expired credentials or outdated tokens. Pulumi ESC automates the entire lifecycle of secrets—creation, rotation, replication, and expiry—guaranteeing uninterrupted services.&lt;/p&gt;
&lt;h3 id="developer-friendly-workflows"&gt;Developer-Friendly Workflows&lt;/h3&gt;
&lt;p&gt;Tools should make engineers&amp;rsquo; lives easier, not harder. Pulumi ESC&amp;rsquo;s CLI, SDKs, and API provide intuitive ways to integrate into existing workflows. For cloud engineers leveraging Infrastructure as Code with Pulumi, managing secrets alongside the stack becomes effortless.&lt;/p&gt;
&lt;div class="note note-tip"&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-lightbulb-fill"/&gt;&lt;/svg&gt;
&lt;div class="line"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="content"&gt;&lt;p&gt;Thomas Meckel, Senior Cloud Architect at Ophios GmbH, explains:&lt;/p&gt;
&lt;p&gt;&amp;ldquo;&lt;em&gt;Pulumi&amp;rsquo;s built-in encryption of secrets sets it apart as a leader in secure infrastructure management. Unlike other tools that leave sensitive data exposed or require complex configurations, Pulumi ensures secrets are encrypted by default, leveraging flexible options like Azure Key Vault or AWS KMS. This eliminates the risk of plaintext exposure and simplifies secure deployments. For any organization serious about cloud security, Pulumi&amp;rsquo;s approach to secrets management is a critical differentiator, combining ease of use with robust protection against breaches.&lt;/em&gt;&amp;rdquo;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="kubernetes-secrets-management"&gt;Kubernetes Secrets Management&lt;/h3&gt;
&lt;p&gt;For secrets management in Kubernetes environments, Pulumi ESC becomes even more powerful when paired with External Secrets Operator (ESO) or the Secrets Store CSI Driver. Here&amp;rsquo;s how it works:&lt;/p&gt;
&lt;h4 id="using-pulumi-esc-with-external-secrets-operator"&gt;Using Pulumi ESC with External Secrets Operator&lt;/h4&gt;
&lt;p&gt;External Secrets Operator is an open-source Kubernetes operator that syncs secrets from external providers (like Pulumi ESC) into Kubernetes as native secrets.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Centralized Storage&lt;/strong&gt;: Store secrets securely in Pulumi ESC and synchronize them with Kubernetes across multiple clusters.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic Updates&lt;/strong&gt;: Whenever a secret is updated in ESC, ESO automatically replicates the changes into Kubernetes, eliminating manual intervention.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Granular Management&lt;/strong&gt;: Define which secrets are synchronized and to which namespaces, ensuring tight access controls and minimizing risk.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automated Secret Rotation&lt;/strong&gt;: By leveraging ESC&amp;rsquo;s rotation capabilities, ESO ensures Kubernetes receives refreshed credentials without requiring downtime.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Learn how to manage Kubernetes secrets with &lt;a href="https://www.pulumi.com/blog/cloud-native-secret-management-with-pulumi-esc-and-external-secrets-operator/"&gt;Pulumi ESC and External Secrets Operator: The Perfect Solution for Today&amp;rsquo;s Cloud-Native Secret Management&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id="using-pulumi-esc-with-secrets-store-csi-driver"&gt;Using Pulumi ESC with Secrets Store CSI Driver&lt;/h4&gt;
&lt;p&gt;The Secret Store CSI Driver mounts secrets, certificates, and keys from external stores into Kubernetes pods as volumes.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Automated Secrets Injection&lt;/strong&gt;: Secrets Store CSI Driver enables Pulumi ESC to automatically inject secrets into Kubernetes pods as mounted volumes or environment variables. This reduces the manual overhead of managing secrets directly in Kubernetes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Secure and Dynamic Secret Access&lt;/strong&gt;: By leveraging Pulumi ESC, Kubernetes applications can securely fetch secrets from external providers, ensuring dynamic access without exposing credentials in pod specifications.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Streamlined Operations&lt;/strong&gt;: This integration simplifies the process of synchronizing secrets from Pulumi ESC with Kubernetes-native constructs. The automation reduces errors and boosts efficiency.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Learn how to &lt;a href="https://www.pulumi.com/blog/master-kubernetes-secrets-with-pulumi-esc-secrets-store-csi-driver/"&gt;Master Kubernetes Secrets with Pulumi ESC + Secrets Store CSI Driver&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="the-future-of-secrets-management-with-pulumi-esc"&gt;The Future of Secrets Management with Pulumi ESC&lt;/h2&gt;
&lt;p&gt;Pulumi ESC is more than just a secrets management tool — it&amp;rsquo;s the foundation of secure, scalable, and agile cloud operations. For cloud engineers grappling with multi-cloud complexity, Kubernetes deployments, and compliance concerns, it provides a streamlined, automated approach that enhances efficiency and security.&lt;/p&gt;
&lt;p&gt;With rising cyber threats and stricter data regulations, adopting tools like Pulumi ESC is no longer optional. It&amp;rsquo;s a competitive advantage for cloud engineers and organizations aiming to lead in today&amp;rsquo;s cloud-native world.&lt;/p&gt;
&lt;h2 id="next-steps-to-secure-your-secrets"&gt;Next Steps to Secure Your Secrets&lt;/h2&gt;
&lt;p&gt;Secrets management doesn&amp;rsquo;t have to be a headache! With &lt;strong&gt;Pulumi ESC&lt;/strong&gt;, you can safeguard your infrastructure, ensure compliance, and eliminate manual errors—all while enhancing security and agility.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/docs/esc/get-started/begin/"&gt;Get started with Pulumi ESC today&lt;/a&gt; and experience the future of secrets management. Take control of your cloud environment—securely and effortlessly.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://app.pulumi.com/signup"&gt;Sign up for Pulumi ➡️&lt;/a&gt;&lt;/p&gt;</description><author>Sara Huddleston</author><category>security</category><category>esc</category><category>external-secrets-operator</category><category>kubernetes</category><category>secrets-management</category><category>csi</category><category>secrets</category></item><item><title>How Secrets Sprawl is Slowing You Down—And What to Do About It.</title><link>https://www.pulumi.com/blog/how-secrets-sprawl-is-slowing-you-down/</link><pubDate>Mon, 28 Oct 2024 12:40:10 +0200</pubDate><guid>https://www.pulumi.com/blog/how-secrets-sprawl-is-slowing-you-down/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/how-secrets-sprawl-is-slowing-you-down/index.png" /&gt;
&lt;p&gt;Only a few things are certain in the lives of developers and DevOps engineers: taxes, yearly performance reviews, and secret sprawl. While the first two are inevitable, the last one is something that can be managed.&lt;/p&gt;
&lt;p&gt;As we keep adding new cloud resources and releasing new applications, the number of secrets we need to manage keeps growing: passwords, API keys, certificates, and more. And as if this isn&amp;rsquo;t enough, we need to manage secrets across different systems and environments with different teams that need to access them; we end up with duplicates.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s have a look at a typical environment and see what teams use: Everything container-related may use Docker secrets or Kubernetes secrets. There is also a high chance that they might use cloud-specific secrets managers like Azure Key Vault, AWS Secrets Manager, or Google Secret Manager. In addition to these, there is a high chance that they might use HashiCorp Vault or some enterprise-grade secrets manager like CyberArk.&lt;/p&gt;
&lt;p&gt;There are still a lot of organizations that store their secrets (like the API key for a cloud service) in environment variables to configure their applications on virtual machines, containers, or serverless functions. And as if that weren’t risky enough, some developers still hardcode sensitive information in their application code. Or use plain unencrypted text files such as .env files and share them inside the team. To be fair, this is not something that is done on purpose, and most teams realize the risks of these practices. But the problem is that they have not found a better way to manage their secrets that won&amp;rsquo;t slow them down and impact their productivity.&lt;/p&gt;
&lt;p&gt;As the IT infrastructure grows, it becomes increasingly challenging for organizations to secure, organize, and distribute their secrets. This is where secrets sprawl comes into play. Secrets sprawl is the uncontrolled and unmanaged distribution of secrets across different systems and environments.&lt;/p&gt;
&lt;p&gt;Modern architectures are adding to the problem of secret sprawl as modern applications are more distributed and consist of smaller building blocks with a growing number of different technologies.&lt;/p&gt;
&lt;p&gt;While teams are ensuring that each of their applications has everything it needs to run, it&amp;rsquo;s also easy for them to lose track of the secrets they are using. Everything can be fine until they need to rotate a secret or revoke a compromised one. Then they need to go through all the systems and environments to find and update the secret. Tracking down all the places where a secret is used can be a time-consuming and error-prone process with a high risk of missing some places.&lt;/p&gt;
&lt;p&gt;So what are some of the pain points of secret sprawl, and how can we overcome them to regain our productivity?&lt;/p&gt;
&lt;h3 id="pain-points-of-secrets-sprawl"&gt;Pain Points of Secrets Sprawl&lt;/h3&gt;
&lt;p&gt;With secrets sprawled all across our teams (development and operations) and infrastructure, we face several points:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;It is challenging to keep track of all the secrets and where they are used. When we need, for example, to find a specific secret, we need to go through different secret managers, code, and, in the worst case, the local files of one of the developers.&lt;/p&gt;
&lt;p&gt;Do we need to rotate a secret? Now we need to go through all the systems and environments to find and update every duplicated secret.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Security risk is another pain point to mention. When a secret is spread throughout the organization, it&amp;rsquo;s hard to manage access control and enforce specific access policies.&lt;/p&gt;
&lt;p&gt;Security best practices also recommend that secrets should be rotated regularly. But with secrets sprawled all over the place, it makes it a lot of work to rotate them. Time we could spend on more important tasks like developing new features.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Secrets sprawl makes it extremely challenging to distribute secrets. Having a secret, for example, in a cloud provider&amp;rsquo;s secret manager is cool and great, but what if we need to use it in a Kubernetes cluster? What is the process for that?&lt;/p&gt;
&lt;p&gt;Also, having secrets in multiple places means there are different owners for them. These secrets are now some kind of gatekeeping by the team that owns them. This makes it hard for other teams to access them when they need them. And even if they get access, they will then be mostly shared in plain text as the other team does not have access to the secret manager itself.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As we can see, secret sprawl is a real problem that can slow down our teams and impact our productivity. But it also affects how fast an organization can scale its development and operations teams.&lt;/p&gt;
&lt;p&gt;With an &amp;ldquo;organic&amp;rdquo; way of managing secrets and no real transparency, it&amp;rsquo;s hard to keep up with the pace of the business, and secret sprawl becomes a major bottleneck. Additionally, that growth means a whole bunch of new secrets that need to be managed.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Rinse and repeat.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;But behold, there is a solution to this problem. And it&amp;rsquo;s called centralized secrets management.&lt;/p&gt;
&lt;h3 id="centralized-secrets-management-against-secrets-sprawl"&gt;Centralized Secrets Management against Secrets Sprawl&lt;/h3&gt;
&lt;p&gt;The cure for secrets sprawl is centralized secrets management. When you centralize your secrets in one place, you know where they are and who has access to them.&lt;/p&gt;
&lt;p&gt;This makes it easier to manage access control and enforce specific access policies. It also makes it easier to rotate secrets as you only need to do it in one place.&lt;/p&gt;
&lt;p&gt;Have a look at an example scaling of an organization or team:&lt;/p&gt;
&lt;p&gt;When the company is small, the team decides to use Kubernetes to deploy their applications, and they store their secrets in Kubernetes secrets. This first step is already a centralization of secrets as it tightens access to the secrets and makes it easier to audit them. Maintaining an encrypted secrets store and centralizing the secrets in one place is a good start and ensures the organization is following a consistent threat protection policy.&lt;/p&gt;
&lt;p&gt;As the company grows, one DevOps engineer is responsible for multiple Kubernetes clusters. In these cases, individual users can&amp;rsquo;t enforce their own application-wide policies, meaning secrets are better managed and controlled.&lt;/p&gt;
&lt;p&gt;But what if the company grows even more and the team decides to use multiple cloud providers? There are many reasons for this, like costs, different service offerings, and better disaster recovery when using multiple cloud providers.&lt;/p&gt;
&lt;p&gt;Sticking to the built-in secrets managers of the cloud providers is not a good idea as it will lead to secrets sprawl.&lt;/p&gt;
&lt;div class="note note-tip"&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-lightbulb-fill"/&gt;&lt;/svg&gt;
&lt;div class="line"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="content"&gt;
&lt;p&gt;&lt;strong&gt;You might also like:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.pulumi.com/blog/master-kubernetes-secrets-with-pulumi-esc-secrets-store-csi-driver/"&gt;
Master Kubernetes Secrets with Pulumi ESC &amp;#43; Secrets Store CSI Driver
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.pulumi.com/blog/pulumi-esc-aws-parameter-store-support/"&gt;
Announcing AWS Systems Manager - Parameter Store Support for Pulumi ESC
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.pulumi.com/blog/esc-imports-discoverability/"&gt;
Pulumi ESC: Discovering Environment Imports
&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="why-pulumi-esc-is-the-right-choice-for-centralized-multi-cloud-secrets-management"&gt;Why Pulumi ESC is the right choice for centralized multi-cloud secrets management&lt;/h3&gt;
&lt;p&gt;Pulumi ESC is the right choice for centralized multi-cloud capable secrets management as it reduces secrets sprawl by centralizing secrets storage with a lot of integrations for a wide range of platforms.&lt;/p&gt;
&lt;p&gt;Pulumi ESC delivers a seamless integration so you can still use your existing secrets managers like Azure Key Vault, AWS Secrets Manager, Google Secret Manager, or HashiCorp Vault. Secrets are automatically synced to Pulumi ESC, saving developers a lot of time so they can focus on their main tasks like developing and building new products and features.&lt;/p&gt;
&lt;p&gt;Pulumi ESC is a completely managed service that again saves time and resources for the organization as they don&amp;rsquo;t need to worry about the infrastructure, maintenance, and support of their self-hosted secrets manager.&lt;/p&gt;
&lt;h3 id="wrapping-up"&gt;Wrapping Up&lt;/h3&gt;
&lt;p&gt;Every organization faces the risk of secrets sprawl as they grow and add more cloud resources and applications, which they may not even be aware of.&lt;/p&gt;
&lt;p&gt;Multi-cloud scenarios make it even more challenging to manage secrets across different systems and environments.&lt;/p&gt;
&lt;p&gt;As teams have to juggle between delivering and building new products and features, managing secrets in a secure and efficient way becomes a major bottleneck on productivity and a major security risk. A ticking time bomb that can explode at any time.&lt;/p&gt;
&lt;p&gt;Secrets managers can help you reduce secrets sprawl by centralizing secrets storage and providing a seamless way to use, change, and distribute secrets across different systems and environments. Independent of the size of your organization, a startup or a large enterprise, it&amp;rsquo;s never too late to start managing your secrets in a secure and efficient way.&lt;/p&gt;
&lt;p&gt;Pulumi ESC is on the way to becoming the best choice to solve the problem of secrets sprawl. Making both developers and security teams happy by providing a secure and efficient way to manage secrets across different systems and environments.&lt;/p&gt;
&lt;p&gt;Start using Pulumi ESC and ESO today by creating an account on the Pulumi Cloud Console and begin managing your secrets in a secure and efficient way.&lt;/p&gt;
&lt;p&gt;&lt;a class="btn btn-secondary" href="https://app.pulumi.com/signup" target="_blank"&gt;Create an Account&lt;/a&gt;&lt;/p&gt;</description><author>Engin Diri</author><category>esc</category><category>secrets-management</category><category>secrets-sprawl</category><category>pulumi</category></item><item><title>Pulumi ESC and External Secrets Operator: The Perfect Solution for Today's Cloud-Native Secret Management</title><link>https://www.pulumi.com/blog/cloud-native-secret-management-with-pulumi-esc-and-external-secrets-operator/</link><pubDate>Fri, 04 Oct 2024 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/cloud-native-secret-management-with-pulumi-esc-and-external-secrets-operator/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/cloud-native-secret-management-with-pulumi-esc-and-external-secrets-operator/index.png" /&gt;
&lt;p&gt;Managing secrets in a cloud-native environment can be challenging, but it is crucial for ensuring the security and integrity of any application or infrastructure. We encounter a lot of different types of secrets, from API keys, database passwords, and certificates to tokens and passwords. These secrets need to be stored securely and accessed by different services in a secure way without exposing any sensitive information to unauthorized users.&lt;/p&gt;
&lt;p&gt;Here is where &lt;a href="https://www.pulumi.com/product/secrets-management/"&gt;Pulumi ESC&lt;/a&gt; and External Secrets Operator come into play &lt;a href="https://www.pulumi.com/docs/esc/integrations/kubernetes/external-secrets-operator/"&gt;by providing a secure and efficient solution&lt;/a&gt; for cloud-native secret management.&lt;/p&gt;
&lt;h2 id="pulumi-esc-environments-secrets-and-configuration"&gt;Pulumi ESC (Environments, Secrets, and Configuration)&lt;/h2&gt;
&lt;p&gt;Pulumi ESC is our new secrets management &amp;amp; orchestration service for environments, secrets, and configurations. It can be used as part of your Pulumi IaC (Infrastructure as Code) projects using &lt;code&gt;pulumiConfig&lt;/code&gt; to expose the stored values to your Pulumi stacks.&lt;/p&gt;
&lt;p&gt;But it can also be used as a standalone service to manage secrets and configurations. Pulumi ESC provides support for applications through its dedicated SDKs built for different programming languages. It can also be managed from the command line with the &lt;code&gt;pulumi env&lt;/code&gt; commands in the Pulumi CLI, which can inject secrets and configuration as a context for your CLI tools (e.g. &lt;code&gt;terraform&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;For more information on Pulumi ESC, you can check out the official &lt;a href="https://www.pulumi.com/docs/esc/"&gt;documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="external-secrets-operator-eso"&gt;External Secrets Operator (ESO)&lt;/h2&gt;
&lt;p&gt;The Open Source project &lt;a href="https://external-secrets.io/latest/"&gt;External Secrets Operator&lt;/a&gt; (ESO) is a Kubernetes operator that helps manage secrets in a highly secure and scalable way. ESO synchronizes secrets stored in external secret management systems like Pulumi ESC, HashiCorp Vault, AWS Secrets Manager, Azure Key Vault, and more into Kubernetes secrets. This approach allows us to control secret sprawl and centralize the management of secrets in a single place while providing a secure and controlled way to access them.&lt;/p&gt;
&lt;h2 id="why-kubernetes-secrets-are-not-enough"&gt;Why Kubernetes secrets are not enough?&lt;/h2&gt;
&lt;p&gt;Kubernetes secrets are a great way to store sensitive information in a Kubernetes cluster. Kubernetes secrets are created and stored as a Kubernetes resource object and then used by pods or other resources inside the cluster.&lt;/p&gt;
&lt;p&gt;Here is an example of a Kubernetes secret manifest file:&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;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&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;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;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="nt"&gt;metadata&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;mysecret&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;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Opaque&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;data&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;username&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;YWRtaW4=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# admin&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;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;YWRtaW4=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# admin&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;or using &lt;code&gt;kubectl&lt;/code&gt;:&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;kubectl create secret generic mysecret --from-literal&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;username&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;admin --from-literal&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;password&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;admin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://kubernetes.io/docs/concepts/configuration/secret/"&gt;Kubernetes secrets&lt;/a&gt; have several limitations. Here are the top ones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;They are stored by default in &lt;code&gt;etcd&lt;/code&gt; in base64 encoded format, which is not secure.&lt;/li&gt;
&lt;li&gt;They are created either manually by using &lt;code&gt;kubectl&lt;/code&gt; commands or by using a manifest file, making them hard to manage at scale.&lt;/li&gt;
&lt;li&gt;Hard to manage and synchronize secrets across different environments and clusters.&lt;/li&gt;
&lt;li&gt;There is no default way to rotate secrets automatically.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ESO shines by tackling all the challenges listed and providing a way to manage secrets in a more secure and efficient manner. Benefits include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Mitigate security risks as secrets are stored in a secure external secret management system like Pulumi ESC, which provides more robust security features like encryption, access control, and auditing.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Eliminate manual management of secrets by synchronizing them from external secret management systems into the Kubernetes cluster, reducing the need for manual intervention and minimizing the risk of human error.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ESO provides a unified interface, making it easy to manage secrets across clusters and multi-cloud environments.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ESO integrates with external secret management systems which ensure that access to secrets is tracked and an audit trail is maintained. This is crucial for security compliance and adhering to regulatory standards.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Automate secrets rotation when the external secret management system has support it.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="external-secrets-operator-architecture"&gt;External Secrets Operator architecture&lt;/h2&gt;
&lt;p&gt;The central part of the &lt;a href="https://external-secrets.io/latest/introduction/overview/"&gt;ESO architecture&lt;/a&gt; is the extension of the Kubernetes API with a new &lt;a href="https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/"&gt;Custom Resource Definition (CRD)&lt;/a&gt;, which defines where the secrets are stored and how they are synchronized into Kubernetes secrets. The ESO controller then retrieves the secrets from the external secret management system and creates or updates the Kubernetes secrets. Every time a secret is updated in the external secret management system, the ESO controller will synchronize the secret in the Kubernetes cluster and update the secret accordingly.&lt;/p&gt;
&lt;p&gt;&lt;img src="arch1.png" alt="ESO Architecture"&gt;&lt;/p&gt;
&lt;h3 id="core-resources-of-eso"&gt;Core resources of ESO&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;(Cluster)SecretStore&lt;/code&gt;: Defines the external secret management system where the secrets are stored. It contains the necessary information to connect to the external secret management system, such as the endpoint, authentication credentials, and other configuration options. The &lt;code&gt;SecretStore&lt;/code&gt; is namespaced while the &lt;code&gt;ClusterSecretStore&lt;/code&gt; is cluster wide, which allows you cross-namespaced access to the secrets.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;(Cluster)ExternalSecret&lt;/code&gt;: Defines the secret that needs to be synchronized into the Kubernetes cluster. It contains the reference to the &lt;code&gt;SecretStore&lt;/code&gt; and the secret key and how the data should be transformed and saved as a Kubernetes secret.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;PushSecret&lt;/code&gt;: With the PushSecret resource, you can push secrets from the Kubernetes cluster to the external secret management system. The Pulumi ESC provider for ESO supports this feature, which allows you to push secrets from the cluster into Pulumi ESC. This feature is useful when you create secrets through other means and want to synchronize them into Pulumi ESC to manage them centrally.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="how-to-use-pulumi-esc-and-eso-together"&gt;How to Use Pulumi ESC and ESO Together&lt;/h2&gt;
&lt;p&gt;To demonstrate how to use Pulumi ESC and ESO together, we will store some secrets and configuration values in Pulumi ESC, then synchronize them into a Kubernetes cluster using ESO.&lt;/p&gt;
&lt;p&gt;To follow along, you&amp;rsquo;ll need the following prerequisites:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A Kubernetes cluster (I will be using a local &lt;a href="https://kind.sigs.k8s.io/"&gt;KinD&lt;/a&gt; cluster, but you can use any
Kubernetes cluster)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/iac/download-install/"&gt;Pulumi CLI&lt;/a&gt; installed. You can use the &lt;code&gt;pulumi env&lt;/code&gt; commands to manage secrets and configurations.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kubectl&lt;/code&gt; &lt;a href="https://kubernetes.io/docs/tasks/tools/"&gt;CLI installed&lt;/a&gt; for some debugging&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="step-1-install-eso-and-link-to-pulumi-esc"&gt;Step 1: Install ESO and Link to Pulumi ESC&lt;/h3&gt;
&lt;p&gt;We will use Pulumi with the &lt;code&gt;pulumi-kubernetes&lt;/code&gt; provider to deploy ESO into the Kubernetes cluster. The power of Pulumi ESC integration comes in two ways: First, to supply the Pulumi access token to ESO via Pulumi IaC, allowing the new ESO instance to access Pulumi ESC later. Second, to provide configuration and secrets from Pulumi ESC, via ESO, to the &lt;code&gt;PodInfo&lt;/code&gt; application within the Kubernetes cluster.&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 new kubernetes-typescript --name eso-pulumi-esc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You should see the following output:&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;This &lt;span class="nb"&gt;command&lt;/span&gt; will walk you through creating a new Pulumi project.
&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;Enter a value or leave blank to accept the &lt;span class="o"&gt;(&lt;/span&gt;default&lt;span class="o"&gt;)&lt;/span&gt;, and press &amp;lt;ENTER&amp;gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Press ^C at any &lt;span class="nb"&gt;time&lt;/span&gt; to quit.
&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;Project description &lt;span class="o"&gt;(&lt;/span&gt;A minimal Kubernetes TypeScript Pulumi program&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Created project &lt;span class="s1"&gt;&amp;#39;eso-pulumi-esc&amp;#39;&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;Please enter your desired stack name.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;To create a stack in an organization, use the format &amp;lt;org-name&amp;gt;/&amp;lt;stack-name&amp;gt; &lt;span class="o"&gt;(&lt;/span&gt;e.g. &lt;span class="sb"&gt;`&lt;/span&gt;acmecorp/dev&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Stack name &lt;span class="o"&gt;(&lt;/span&gt;dev&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Created stack &lt;span class="s1"&gt;&amp;#39;dev&amp;#39;&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;The package manager to use &lt;span class="k"&gt;for&lt;/span&gt; installing dependencies npm
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Installing dependencies...
&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;added &lt;span class="m"&gt;310&lt;/span&gt; packages, and audited &lt;span class="m"&gt;311&lt;/span&gt; packages in 12s
&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="m"&gt;44&lt;/span&gt; packages are looking &lt;span class="k"&gt;for&lt;/span&gt; funding
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; run &lt;span class="sb"&gt;`&lt;/span&gt;npm fund&lt;span class="sb"&gt;`&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; details
&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;found &lt;span class="m"&gt;0&lt;/span&gt; vulnerabilities
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Finished installing dependencies
&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;Your new project is ready to go! ✨
&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;To perform an initial deployment, run &lt;span class="sb"&gt;`&lt;/span&gt;pulumi up&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Head to Pulumi Cloud Console and create a new Pulumi ESC project with the name &lt;code&gt;eso-esc-demo&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src="env1.png" alt="Pulumi ESC Environment"&gt;&lt;/p&gt;
&lt;p&gt;And the environment &lt;code&gt;eso-esc-dev&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src="env2.png" alt="Pulumi ESC Environment"&gt;&lt;/p&gt;
&lt;p&gt;In the editor add the following yaml into the &lt;code&gt;Environment definition&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="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;pulumiConfig&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;pulumi-pat&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::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;&amp;lt;your-pulumi-pat&amp;gt;&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;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;Don&amp;rsquo;t know how to create a PAT? Check out the official Pulumi &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/access-management/access-tokens/"&gt;documentation&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you prefer to use the Pulumi CLI, you can create the environment by running:&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 init &amp;lt;your-org&amp;gt;/eso-esc-demo/eso-esc-dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And set the configuration by running the &lt;code&gt;env edit&lt;/code&gt; command and copy the above YAML into the editor:&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 edit &amp;lt;your-org&amp;gt;/eso-esc-demo/eso-esc-dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now, we need to link the Pulumi ESC project to the Pulumi IaC project. To do this, we need to add the following to your &lt;code&gt;Pulumi.dev.yaml&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="nt"&gt;environment&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="l"&gt;eso-esc-demo/eso-esc-dev&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;Now that all the wiring is done, we can deploy the ESO instance into the Kubernetes cluster. Open the &lt;code&gt;index.ts&lt;/code&gt; file and add the following code:&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;k8s&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 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;pulumi&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;@pulumi/pulumi&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;config&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;pulumi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Config&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="c1"&gt;// Create a Kubernetes namespace
&lt;/span&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;ns&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;k8s&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;Namespace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;external-secrets&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;name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;external-secrets&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Deploy a Helm release into the namespace
&lt;/span&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;externalSecrets&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;k8s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;helm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Release&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;external-secrets&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;chart&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;external-secrets&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;version&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;0.10.4&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Specify the version of the chart
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;namespace&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ns&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;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;repositoryOpts&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;repo&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://charts.external-secrets.io&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Deploy a secret into the namespace
&lt;/span&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;mySecret&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;k8s&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;Secret&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;my-secret&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="kr"&gt;namespace&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ns&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;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;pulumi-access-token&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="nx"&gt;stringData&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;PULUMI_ACCESS_TOKEN&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;pulumi-pat&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="kr"&gt;type&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Opaque&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Export the namespace name
&lt;/span&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;namespaceName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ns&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;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;// Export the Helm release name
&lt;/span&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;helmReleaseName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;externalSecrets&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;Deploy the stack by running:&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 up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And you should see that the secret was created in the Kubernetes cluster and the ESO instance was deployed successfully.&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;kubectl get secret -n external-secrets pulumi-access-token -o &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;{.data.PULUMI_ACCESS_TOKEN}&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; base64 -d
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="step-2-create-an-external-secret"&gt;Step 2: Create an External Secret&lt;/h3&gt;
&lt;p&gt;Now, we will create a secret in the Pulumi ESC project and synchronize it into the Kubernetes cluster by creating an ESO reference to the external secret.&lt;/p&gt;
&lt;p&gt;Create a new ESC environment called &lt;code&gt;esp-esc-app&lt;/code&gt; in the &lt;code&gt;eso-esc-demo&lt;/code&gt; ESC project.&lt;/p&gt;
&lt;p&gt;&lt;img src="env3.png" alt="Pulumi ESC Environment"&gt;&lt;/p&gt;
&lt;p&gt;Add the following YAML into the &lt;code&gt;Environment definition&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="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;app&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;hello&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;world&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;hello-secret&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::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;world&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;If you prefer to use the Pulumi CLI, you can create the environment by running:&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 init &amp;lt;your-org&amp;gt;/eso-esc-demo/esp-esc-app
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And set the configuration by running the &lt;code&gt;env edit&lt;/code&gt; command and copy the above YAML into the editor:&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 edit &amp;lt;your-org&amp;gt;/eso-esc-demo/esp-esc-app
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Either way, you should see following environment configuration in the Pulumi Cloud Console:&lt;/p&gt;
&lt;p&gt;&lt;img src="esc.png" alt="Pulumi ESC Environment"&gt;&lt;/p&gt;
&lt;p&gt;We can now create &lt;code&gt;ClusterExternalSecret&lt;/code&gt; in the &lt;code&gt;index.ts&lt;/code&gt; and reference the ESC secret.&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;k8s&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 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;pulumi&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;@pulumi/pulumi&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="c1"&gt;// cut for brevity
&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;crd&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;k8s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;apiextensions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CustomResource&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;cluster-secret-store&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;apiVersion&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;external-secrets.io/v1beta1&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;kind&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ClusterSecretStore&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;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;name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;secret-store&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="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;provider&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;pulumi&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;organization&lt;/span&gt;: &lt;span class="kt"&gt;pulumi.getOrganization&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;project&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;eso-esc-demo&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;environment&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;esp-esc-app&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;accessToken&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;secretRef&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="kt"&gt;mySecret.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="nx"&gt;key&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;PULUMI_ACCESS_TOKEN&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="kr"&gt;namespace&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;mySecret&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="kr"&gt;namespace&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="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We can check that the secret was successfully synchronized by running:&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;kubectl get clustersecretstore secret-store -o &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;{.status.conditions[?(@.type==&amp;#34;Ready&amp;#34;)].status}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="step-3-deploy-an-application-and-reference-the-secret"&gt;Step 3: Deploy an Application and Reference the Secret&lt;/h3&gt;
&lt;p&gt;Now, we can deploy an application that references the secret from the Kubernetes cluster. I am going to deploy the app called &lt;code&gt;PodInfo&lt;/code&gt;, which is an application that exposes the pod information as an API. Add the following code to the &lt;code&gt;index.ts&lt;/code&gt;:&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;k8s&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 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;pulumi&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;@pulumi/pulumi&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="c1"&gt;// cut for brevity
&lt;/span&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;podInfo&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;k8s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;helm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Release&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;podinfo&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;chart&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;podinfo&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;version&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;6.7.0&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="kr"&gt;namespace&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;podinfo&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;createNamespace&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;repositoryOpts&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;repo&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://stefanprodan.github.io/podinfo&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="nx"&gt;values&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;extraEnvs&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;FROM_ESC_VIA_ESO&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;valueFrom&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;secretKeyRef&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;esc-secret-store&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;key&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;hello-secret&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="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;FROM_ESC_VIA_ESO_2&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;valueFrom&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;secretKeyRef&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;esc-secret-store&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;key&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;hello&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="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;const&lt;/span&gt; &lt;span class="nx"&gt;externalSecretPodInfo&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;k8s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;apiextensions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CustomResource&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;external-secret-podinfo&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;apiVersion&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;external-secrets.io/v1beta1&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;kind&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ExternalSecret&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;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;name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;esc-secret-store&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="kr"&gt;namespace&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;podInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;namespace&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;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;dataFrom&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;extract&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;conversionStrategy&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Default&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;key&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;app&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;refreshInterval&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;1h&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;secretStoreRef&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;kind&lt;/span&gt;: &lt;span class="kt"&gt;clusterSecretStore.kind&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;clusterSecretStore.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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will deploy the &lt;code&gt;PodInfo&lt;/code&gt; application and create an &lt;code&gt;ExternalSecret&lt;/code&gt; resource that references the secret from the Pulumi ESC project. We mount the secret into the pod as an environment variable by using the &lt;code&gt;extraEnvs&lt;/code&gt; field in the Helm chart.&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;In a real-world application, you might use alternate ways to reference the secret, like mounting it as a volume or using &lt;code&gt;fromEnv&lt;/code&gt; field in the Helm chart. It depends on your application and how you want to consume the secret.&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;After deploying the stack, you should see that the &lt;code&gt;PodInfo&lt;/code&gt; application is running. To access the application, we can &lt;code&gt;port-forward&lt;/code&gt; the service by running:&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;kubectl port-forward svc/podinfo 9898:9898 -n podinfo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Our &lt;code&gt;PodInfo&lt;/code&gt; demo application provides a large selection of different &lt;a href="https://github.com/stefanprodan/podinfo"&gt;endpoints&lt;/a&gt; to interact with. We are interested in the &lt;code&gt;/env&lt;/code&gt; endpoint to check if the secret was successfully mounted into the pod. Let&amp;rsquo;s try that:&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;curl -s localhost:9898/env &lt;span class="p"&gt;|&lt;/span&gt; grep FROM
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;FROM_ESC_VIA_ESO=world&amp;#34;&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;FROM_ESC_VIA_ESO_2=world&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And here we see secret values from the ESC project, proxied by ESO, and passed to the PodInfo application as environment variables. That means the secret was successfully mounted into the pod and the application is running as expected.&lt;/p&gt;
&lt;h3 id="step-4-clean-up"&gt;Step 4: Clean Up&lt;/h3&gt;
&lt;p&gt;After you are done with the demo, you can clean up the resources by running:&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 destroy
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;The combination of Pulumi ESC and External Secrets Operator provides a secure and efficient way to manage secrets in a cloud-native environment, improving security, efficiency, and compliance when consuming secrets in your Kubernetes cluster. By using Pulumi ESC, you can manage secrets and configurations in a centralized way, and with ESO, you now have a streamlined process to synchronize secrets into your Kubernetes cluster.&lt;/p&gt;
&lt;p&gt;Start using Pulumi ESC and ESO today by creating an account on the Pulumi Cloud Console and begin managing your secrets in a secure and efficient way.&lt;/p&gt;
&lt;p&gt;&lt;a class="btn btn-secondary" href="https://app.pulumi.com/signup" target="_blank"&gt;Create an Account&lt;/a&gt;&lt;/p&gt;</description><author>Engin Diri</author><category>pulumi</category><category>esc</category><category>external-secrets-operator</category><category>kubernetes</category><category>cloud-native</category><category>security</category><category>secrets-management</category></item></channel></rss>