<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel><title>Pulumi Blog: Insights</title><link>https://www.pulumi.com/blog/tag/insights/</link><description>Pulumi blog posts: Insights.</description><language>en-us</language><pubDate>Wed, 15 Jul 2026 00:00:00 +0000</pubDate><item><title>Connect Your Cloud Accounts to Pulumi in Minutes</title><link>https://www.pulumi.com/blog/connect-your-cloud-accounts-to-pulumi-in-minutes/</link><pubDate>Wed, 15 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/connect-your-cloud-accounts-to-pulumi-in-minutes/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/connect-your-cloud-accounts-to-pulumi-in-minutes/index.png" /&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/docs/insights/"&gt;Pulumi Insights&lt;/a&gt; gives you visibility and governance across your entire cloud footprint, but that visibility is only as complete as the set of accounts you&amp;rsquo;ve connected. Until now, connecting an account meant repeating a manual setup for each one: OIDC configuration, hand-written &lt;a href="https://www.pulumi.com/docs/esc/"&gt;Pulumi ESC&lt;/a&gt; environments, and per-account scan and policy setup. For an organization with dozens or hundreds of AWS accounts, Azure subscriptions, or Google Cloud projects, that per-account friction was the biggest obstacle to getting a complete picture. Today, the new &lt;strong&gt;Connect cloud accounts&lt;/strong&gt; wizard removes it: discover every account in your cloud organization, select the ones you want, and onboard them all in a single guided flow.&lt;/p&gt;
&lt;h2 id="from-hours-of-setup-to-a-single-flow"&gt;From hours of setup to a single flow&lt;/h2&gt;
&lt;p&gt;The time savings are real: connecting a batch of accounts across AWS, Azure, and Google Cloud takes about three minutes end to end. Setting up those same accounts with the manual per-account workflow would take hours to days.&lt;/p&gt;
&lt;p&gt;The wizard handles the entire onboarding lifecycle for AWS, Microsoft Azure, and Google Cloud:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bulk discovery&lt;/strong&gt;: Authenticate once with your cloud organization and the wizard lists every account, subscription, or project you can access. Accounts that are already connected are recognized and skipped.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatic OIDC setup&lt;/strong&gt;: The recommended flows configure each account with short-lived credentials based on OpenID Connect (OIDC) and workload identity federation. No long-lived cloud secrets are stored in Pulumi Cloud.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ESC environments, created for you&lt;/strong&gt;: The wizard generates &lt;a href="https://www.pulumi.com/docs/esc/"&gt;Pulumi ESC&lt;/a&gt; environments that follow the best practices from the manual OIDC guides — environments that previously had to be authored one by one.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scans and policies from day one&lt;/strong&gt;: By default, scheduled discovery scans and a &lt;a href="https://www.pulumi.com/docs/insights/policy/policy-packs/pre-built-packs/"&gt;pre-built policy pack&lt;/a&gt; are applied to every account as part of setup: the Pulumi Best Practices pack on the Team and Enterprise editions, or a compliance pack (CIS, or NIST 800-53 for AWS and Google Cloud) on Business Critical.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="how-it-works"&gt;How it works&lt;/h2&gt;
&lt;p&gt;The wizard walks you through five steps: choose a provider, authenticate, select accounts, configure discovery and policy, and review the results. You can open it from &lt;strong&gt;Management&lt;/strong&gt; &amp;gt; &lt;strong&gt;Accounts&lt;/strong&gt; in the Pulumi Cloud console, or from the &lt;strong&gt;Get to know Pulumi&lt;/strong&gt; card on the home dashboard.&lt;/p&gt;
&lt;p&gt;Authentication uses each provider&amp;rsquo;s native federation mechanism: IAM Identity Center (SSO) for AWS, Microsoft Entra ID workload identity federation for Azure, and Workload Identity Federation for Google Cloud. After you sign in, the wizard discovers the accounts in your organization and pre-selects everything that isn&amp;rsquo;t already connected. You can search, select all, or toggle individual accounts.&lt;/p&gt;
&lt;p&gt;&lt;img src="account-picker.png" alt="The account picker showing discovered AWS accounts with checkboxes, a search box, and a select all option"&gt;&lt;/p&gt;
&lt;h3 id="choose-the-right-access-level-for-your-security-posture"&gt;Choose the right access level for your security posture&lt;/h3&gt;
&lt;p&gt;Not every team wants to grant write access on day one. The wizard offers two access levels, and you can set them per account:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Build &amp;amp; Manage (read and write)&lt;/strong&gt;: Enables the full platform: &lt;a href="https://www.pulumi.com/product/neo/"&gt;Pulumi Neo&lt;/a&gt;, infrastructure as code, deployments, and policies that remediate issues automatically (Business Critical).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Discovery &amp;amp; Policy (read-only)&lt;/strong&gt;: Limited to discovery scanning and inventory. Pulumi can&amp;rsquo;t modify your infrastructure.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If your security review requires it, start everything read-only and raise access for specific accounts later.&lt;/p&gt;
&lt;p&gt;&lt;img src="access-level.png" alt="The accounts step showing the selected accounts summary, the Build and Manage access level card, and per account access controls"&gt;&lt;/p&gt;
&lt;h3 id="everything-set-up-nothing-hidden"&gt;Everything set up, nothing hidden&lt;/h3&gt;
&lt;p&gt;When setup completes, the summary shows exactly what was created: the ESC environments grouped by access level, the state of discovery scanning, and the policy pack applied. If any account fails to connect, the summary lists it with the specific error so you can fix the cause and re-run the wizard. Accounts that connected successfully are skipped on retry.&lt;/p&gt;
&lt;p&gt;&lt;img src="summary.png" alt="The summary step showing setup complete with discovery running, the policy pack applied, and the list of created ESC environments"&gt;&lt;/p&gt;
&lt;p&gt;For security reviewers, the docs include a full accounting of &lt;a href="https://www.pulumi.com/docs/insights/discovery/connect-cloud-accounts/#what-the-wizard-creates"&gt;what the wizard creates&lt;/a&gt; in your cloud provider and in Pulumi Cloud: the IAM roles, app registrations, and service accounts on the cloud side, and the ESC environments and Insights accounts on the Pulumi side.&lt;/p&gt;
&lt;h2 id="get-started"&gt;Get started&lt;/h2&gt;
&lt;p&gt;The Connect cloud accounts wizard is available now for all Pulumi Cloud organizations. To connect your first accounts:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Navigate to &lt;a href="https://app.pulumi.com/"&gt;&lt;strong&gt;Management&lt;/strong&gt; &amp;gt; &lt;strong&gt;Accounts&lt;/strong&gt;&lt;/a&gt; in the Pulumi Cloud console and select &lt;strong&gt;Connect cloud accounts&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Follow the guided flow for AWS, Azure, or Google Cloud.&lt;/li&gt;
&lt;li&gt;Explore your &lt;a href="https://www.pulumi.com/docs/insights/discovery/search/"&gt;discovered resources&lt;/a&gt; and &lt;a href="https://www.pulumi.com/docs/insights/policy/policy-findings/"&gt;policy findings&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To learn more:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/insights/discovery/connect-cloud-accounts/"&gt;Connect cloud accounts documentation&lt;/a&gt; — prerequisites, each wizard step in detail, and troubleshooting&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/insights/"&gt;Insights &amp;amp; Governance overview&lt;/a&gt; — full documentation for discovery and policy capabilities&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/esc/"&gt;Pulumi ESC&lt;/a&gt; — how the generated environments manage cloud credentials with OIDC&lt;/li&gt;
&lt;/ul&gt;</description><author>Levi Blackstone</author><category>insights</category><category>esc</category><category>pulumi-cloud</category></item><item><title>Scan AWS GovCloud and more partitions with Pulumi Insights</title><link>https://www.pulumi.com/blog/scan-aws-govcloud-china-with-pulumi-insights/</link><pubDate>Tue, 14 Apr 2026 09:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/scan-aws-govcloud-china-with-pulumi-insights/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/scan-aws-govcloud-china-with-pulumi-insights/index.png" /&gt;
&lt;p&gt;Pulumi Insights account scanning now supports every AWS partition. If your workloads run in GovCloud, China, the European Sovereign Cloud, or one of the ISO intelligence-community clouds, you can get the same resource discovery, cross-account search, and AI-assisted insights that commercial accounts already have.&lt;/p&gt;
&lt;h2 id="supported-partitions"&gt;Supported partitions&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;AWS Standard (Commercial)&lt;/li&gt;
&lt;li&gt;AWS GovCloud (US)&lt;/li&gt;
&lt;li&gt;AWS ISO (US)&lt;/li&gt;
&lt;li&gt;AWS ISOB (US)&lt;/li&gt;
&lt;li&gt;AWS ISOF (US)&lt;/li&gt;
&lt;li&gt;AWS ISOE (Europe)&lt;/li&gt;
&lt;li&gt;AWS European Sovereign Cloud&lt;/li&gt;
&lt;li&gt;AWS China&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You can also exclude specific regions from discovery — useful when regions are disabled by SCPs or fall outside an audit&amp;rsquo;s scope.&lt;/p&gt;
&lt;p&gt;&lt;img src="aws-partition-picker.png" alt="Choosing an AWS partition when creating an Insights account"&gt;&lt;/p&gt;
&lt;h2 id="set-it-up"&gt;Set it up&lt;/h2&gt;
&lt;p&gt;In the Pulumi Cloud console:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Accounts → Create account&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;AWS&lt;/strong&gt; as the provider.&lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;Add your configuration&lt;/strong&gt;, pick the target partition.&lt;/li&gt;
&lt;li&gt;Supply credentials via a Pulumi ESC environment. The OIDC trust policy uses the partition-appropriate ARN prefix (&lt;code&gt;arn:aws-us-gov:&lt;/code&gt;, &lt;code&gt;arn:aws-cn:&lt;/code&gt;, etc.).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For IAM and ESC setup, see the &lt;a href="https://www.pulumi.com/docs/insights/discovery/accounts/"&gt;Insights accounts docs&lt;/a&gt;. Log in to &lt;a href="https://app.pulumi.com/"&gt;Pulumi Cloud&lt;/a&gt; to get started.&lt;/p&gt;</description><author>Alejandro Cotroneo</author><category>insights</category><category>aws</category><category>features</category><category>cloud-engineering</category></item><item><title>From Kubernetes Gatekeeper to Full-Stack Governance with OPA</title><link>https://www.pulumi.com/blog/kubernetes-gatekeeper-full-stack-governance-opa/</link><pubDate>Thu, 19 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/kubernetes-gatekeeper-full-stack-governance-opa/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/kubernetes-gatekeeper-full-stack-governance-opa/index.png" /&gt;
&lt;p&gt;Pulumi&amp;rsquo;s &lt;a href="https://www.openpolicyagent.org/"&gt;OPA (Open Policy Agent)&lt;/a&gt; support is now stable. The &lt;a href="https://github.com/pulumi/pulumi-policy-opa/releases/tag/v1.1.0"&gt;v1.1.0 release&lt;/a&gt; of &lt;code&gt;pulumi-policy-opa&lt;/code&gt; makes OPA/Rego a first-class policy language for Pulumi with full feature parity alongside the native TypeScript and Python policy SDKs. Write Rego policies that validate any resource Pulumi manages, across AWS, Azure, GCP, Kubernetes, and the rest of the provider ecosystem. If you already have &lt;a href="https://open-policy-agent.github.io/gatekeeper/"&gt;Kubernetes Gatekeeper&lt;/a&gt; constraint templates, a new compatibility mode lets you drop those &lt;code&gt;.rego&lt;/code&gt; files directly into a Pulumi policy pack and enforce them against your Kubernetes resources without modification.&lt;/p&gt;
&lt;h2 id="whats-in-the-stable-release"&gt;What&amp;rsquo;s in the stable release&lt;/h2&gt;
&lt;p&gt;OPA/Rego is now fully supported as a policy language for &lt;a href="https://www.pulumi.com/docs/insights/policy/"&gt;Pulumi Insights&lt;/a&gt;, with the same capabilities as the TypeScript and Python SDKs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Resource and stack-level policies&lt;/strong&gt;: Validate individual resources with &lt;code&gt;deny&lt;/code&gt; and &lt;code&gt;warn&lt;/code&gt; rules, or evaluate your entire stack at once with &lt;code&gt;stack_deny&lt;/code&gt; and &lt;code&gt;stack_warn&lt;/code&gt; for cross-resource checks like relationship validation and resource count limits.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enforcement levels&lt;/strong&gt;: Control how violations are handled. &lt;code&gt;mandatory&lt;/code&gt; blocks deployments, &lt;code&gt;advisory&lt;/code&gt; surfaces warnings, and &lt;code&gt;disabled&lt;/code&gt; turns rules off without removing them. Enforcement levels can be overridden per policy without modifying Rego source.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Policy configuration&lt;/strong&gt;: Pass custom parameters to policies via configuration files, with optional JSON schema validation. Configuration values are accessible in Rego as &lt;code&gt;data.config.&amp;lt;policy_name&amp;gt;.&amp;lt;key&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OPA metadata annotations&lt;/strong&gt;: Use standard OPA &lt;code&gt;# METADATA&lt;/code&gt; comments to provide titles, descriptions, and messages for your policies. These populate the policy metadata displayed in Pulumi Cloud.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preventative and audit evaluation&lt;/strong&gt;: OPA policies work with both &lt;a href="https://www.pulumi.com/docs/insights/policy/"&gt;preventative enforcement&lt;/a&gt; during &lt;code&gt;pulumi up&lt;/code&gt; and &lt;a href="https://www.pulumi.com/blog/policy-audit-scans-for-stacks/"&gt;audit policy scans&lt;/a&gt; for continuous compliance monitoring.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can choose whichever language best fits your team. Organizations already using OPA across their toolchain can standardize on Rego for Pulumi policies, while teams preferring TypeScript or Python can continue to use those. All three languages work side by side in the same &lt;a href="https://www.pulumi.com/docs/insights/policy/policy-groups/"&gt;policy groups&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="kubernetes-gatekeeper-compatibility"&gt;Kubernetes Gatekeeper compatibility&lt;/h2&gt;
&lt;p&gt;The headline feature of this release is native support for &lt;a href="https://open-policy-agent.github.io/gatekeeper/"&gt;Kubernetes Gatekeeper&lt;/a&gt; constraint template rules. If you&amp;rsquo;re running Gatekeeper as an admission controller in your clusters, you likely have a library of &lt;code&gt;.rego&lt;/code&gt; policies that enforce security and operational standards at admission time. With v1.1.0, those same rules can now run as Pulumi policies, catching violations during &lt;code&gt;pulumi preview&lt;/code&gt; before resources ever reach the cluster.&lt;/p&gt;
&lt;p&gt;To enable Gatekeeper compatibility, set &lt;code&gt;inputFormat: kubernetes-admission&lt;/code&gt; in your &lt;code&gt;PulumiPolicy.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;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Kubernetes Gatekeeper Policy Pack&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;runtime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;opa&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;inputFormat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kubernetes-admission&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;With this setting, Pulumi automatically wraps Kubernetes resources in the Gatekeeper &lt;a href="https://open-policy-agent.github.io/gatekeeper/website/docs/howto"&gt;AdmissionReview&lt;/a&gt; structure (&lt;code&gt;input.review.object&lt;/code&gt;, &lt;code&gt;input.review.kind&lt;/code&gt;, etc.), so your existing rules work without modification. Non-Kubernetes resources are silently skipped.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s an example that reuses standard Gatekeeper-style rules, requiring an &lt;code&gt;app&lt;/code&gt; label and prohibiting the &lt;code&gt;latest&lt;/code&gt; image tag:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rego" data-lang="rego"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;gatekeeper&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rego&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&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="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# METADATA&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="c"&gt;# title: Require App Label&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="c"&gt;# description: All Kubernetes resources must have an &amp;#34;app&amp;#34; label.&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="n"&gt;violation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;contains&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;msg&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &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="kd"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;review&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;metadata&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;labels&lt;/span&gt;&lt;span class="p"&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 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="nx"&gt;msg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;%s &amp;#39;%s&amp;#39; is missing required label: app&amp;#34;&lt;/span&gt;&lt;span class="o"&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="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;review&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;review&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&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="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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# METADATA&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="c"&gt;# title: Disallow Latest Tag&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="c"&gt;# description: Container images must not use the &amp;#34;latest&amp;#34; tag.&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="n"&gt;deny&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;contains&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &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="nx"&gt;container&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;review&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;spec&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;template&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;spec&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;_&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="nf"&gt;endswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;:latest&amp;#34;&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="nx"&gt;msg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;container &amp;#39;%s&amp;#39; uses the &amp;#39;latest&amp;#39; tag -- pin to a specific version&amp;#34;&lt;/span&gt;&lt;span class="o"&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="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&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="p"&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;p&gt;These rules are identical to what you&amp;rsquo;d write for Gatekeeper. Both rule head formats are supported and can coexist: the &lt;code&gt;violation[{&amp;quot;msg&amp;quot;: msg}]&lt;/code&gt; map format and the &lt;code&gt;deny[msg]&lt;/code&gt; string format. Per-policy configuration via &lt;code&gt;input.parameters&lt;/code&gt; also works as expected. You can take a &lt;code&gt;.rego&lt;/code&gt; file from your Gatekeeper constraint templates, drop it into a Pulumi policy pack, and publish it to Pulumi Cloud to enforce automatically across your stacks.&lt;/p&gt;
&lt;p&gt;This shifts policy enforcement left. Instead of waiting for the Kubernetes API server to reject a resource at admission time, you catch the violation during &lt;code&gt;pulumi preview&lt;/code&gt;, before anything is deployed.&lt;/p&gt;
&lt;h2 id="walkthrough-reusing-policies-from-the-gatekeeper-library"&gt;Walkthrough: Reusing policies from the gatekeeper-library&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://github.com/open-policy-agent/gatekeeper-library"&gt;OPA Gatekeeper Library&lt;/a&gt; is a community-maintained collection of constraint templates covering common Kubernetes guardrails like pod security, image provenance, and resource limits. You can use these policies directly with Pulumi. Here&amp;rsquo;s an end-to-end example using the &lt;a href="https://github.com/open-policy-agent/gatekeeper-library/tree/master/library/general/allowedrepos"&gt;&lt;code&gt;allowedrepos&lt;/code&gt;&lt;/a&gt; policy to restrict which container image registries your deployments can use.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a new Kubernetes OPA policy pack:&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 policy new kubernetes-opa
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Copy the Rego source from &lt;a href="https://github.com/open-policy-agent/gatekeeper-library/blob/master/library/general/allowedrepos/template.yaml"&gt;gatekeeper-library&lt;/a&gt; into your policy pack as &lt;code&gt;allowedrepos.rego&lt;/code&gt;. No modifications are needed:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rego" data-lang="rego"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;package&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;k8sallowedrepos&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;violation&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;msg&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt; &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="nx"&gt;container&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;review&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;spec&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;_&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="kd"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;strings&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;any_prefix_match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parameters&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;repos&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="nx"&gt;msg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;container &amp;lt;%v&amp;gt; has an invalid image repo &amp;lt;%v&amp;gt;, allowed repos are %v&amp;#34;&lt;/span&gt;&lt;span class="o"&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="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parameters&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;repos&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="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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;violation&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;msg&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt; &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="nx"&gt;container&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;review&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;spec&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;initContainers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;_&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="kd"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;strings&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;any_prefix_match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parameters&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;repos&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="nx"&gt;msg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;initContainer &amp;lt;%v&amp;gt; has an invalid image repo &amp;lt;%v&amp;gt;, allowed repos are %v&amp;#34;&lt;/span&gt;&lt;span class="o"&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="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parameters&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;repos&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="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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;violation&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;msg&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt; &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="nx"&gt;container&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;review&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;spec&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ephemeralContainers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;_&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="kd"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;strings&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;any_prefix_match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parameters&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;repos&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="nx"&gt;msg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ephemeralContainer &amp;lt;%v&amp;gt; has an invalid image repo &amp;lt;%v&amp;gt;, allowed repos are %v&amp;#34;&lt;/span&gt;&lt;span class="o"&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="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parameters&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;repos&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="p"&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;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that your &lt;code&gt;PulumiPolicy.yaml&lt;/code&gt; has Gatekeeper compatibility enabled:&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;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Kubernetes Gatekeeper Policy Pack&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;runtime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;opa&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;inputFormat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;kubernetes-admission&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure the allowed registries. Create a &lt;code&gt;policy-config.json&lt;/code&gt; file to pass the &lt;code&gt;repos&lt;/code&gt; parameter:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&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="nt"&gt;&amp;#34;k8sallowedrepos&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="nt"&gt;&amp;#34;repos&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;gcr.io/my-company/&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;docker.io/library/&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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Test the policy locally against a stack:&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 preview --policy-pack . --policy-pack-config policy-config.json
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Any Kubernetes deployment using an image outside the allowed registries will produce a violation at preview time, before it reaches the cluster.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Publish the pack and add it to a &lt;a href="https://www.pulumi.com/docs/insights/policy/policy-groups/"&gt;policy group&lt;/a&gt; to enforce it across your organization:&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 policy publish
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The same approach works for any policy in the gatekeeper-library: &lt;a href="https://github.com/open-policy-agent/gatekeeper-library/tree/master/library/general/containerlimits"&gt;&lt;code&gt;containerlimits&lt;/code&gt;&lt;/a&gt;, &lt;a href="https://github.com/open-policy-agent/gatekeeper-library/tree/master/library/general/requiredlabels"&gt;&lt;code&gt;requiredlabels&lt;/code&gt;&lt;/a&gt;, &lt;a href="https://github.com/open-policy-agent/gatekeeper-library/tree/master/library/general/disallowedtags"&gt;&lt;code&gt;disallowedtags&lt;/code&gt;&lt;/a&gt;, and others. Copy the Rego, configure parameters, and publish.&lt;/p&gt;
&lt;h2 id="part-of-the-pulumi-insights-governance-story"&gt;Part of the Pulumi Insights governance story&lt;/h2&gt;
&lt;p&gt;OPA policy support is part of the broader &lt;a href="https://www.pulumi.com/docs/insights/"&gt;Pulumi Insights&lt;/a&gt; governance platform. Insights gives you visibility and compliance across your entire cloud footprint, and OPA policies plug directly into that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Audit policy scans&lt;/strong&gt; continuously evaluate OPA policies against your &lt;a href="https://www.pulumi.com/blog/policy-audit-scans-for-stacks/"&gt;Pulumi stacks&lt;/a&gt; and discovered cloud resources, providing a compliance baseline without redeploying anything.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Self-hosted execution&lt;/strong&gt; lets you &lt;a href="https://www.pulumi.com/blog/self-hosted-insights/"&gt;run policy evaluations on your own infrastructure&lt;/a&gt; using customer-managed workflow runners, keeping credentials and data within your network.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pre-built compliance packs&lt;/strong&gt; for CIS, NIST, PCI DSS, and other frameworks are available alongside your custom OPA policies in the same &lt;a href="https://www.pulumi.com/docs/insights/policy/policy-groups/"&gt;policy groups&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Whether you&amp;rsquo;re enforcing policy at deployment time, scanning existing infrastructure for drift, or running continuous compliance checks, OPA policies are a native participant.&lt;/p&gt;
&lt;p&gt;&lt;img src="policy-findings.png" alt="Policy Findings dashboard in Pulumi Cloud showing compliance scores and per-stack policy evaluation results"&gt;&lt;/p&gt;
&lt;h2 id="frequently-asked-questions"&gt;Frequently asked questions&lt;/h2&gt;
&lt;h3 id="do-i-need-to-modify-my-existing-gatekeeper-rego-files"&gt;Do I need to modify my existing Gatekeeper &lt;code&gt;.rego&lt;/code&gt; files?&lt;/h3&gt;
&lt;p&gt;No. Set &lt;code&gt;inputFormat: kubernetes-admission&lt;/code&gt; in your &lt;code&gt;PulumiPolicy.yaml&lt;/code&gt; and your existing Gatekeeper constraint template rules work as-is. Pulumi handles the AdmissionReview wrapping automatically.&lt;/p&gt;
&lt;h3 id="what-happens-with-non-kubernetes-resources"&gt;What happens with non-Kubernetes resources?&lt;/h3&gt;
&lt;p&gt;When using &lt;code&gt;inputFormat: kubernetes-admission&lt;/code&gt;, non-Kubernetes resources are silently skipped during evaluation. Your Gatekeeper rules only run against Kubernetes resources.&lt;/p&gt;
&lt;h3 id="do-i-need-opa-installed-locally"&gt;Do I need OPA installed locally?&lt;/h3&gt;
&lt;p&gt;No. The &lt;code&gt;pulumi-policy-opa&lt;/code&gt; analyzer plugin embeds the OPA evaluation engine and is installed automatically by the Pulumi CLI (v3.227.0+). The standalone OPA CLI is only needed if you want to run &lt;code&gt;opa test&lt;/code&gt; against your policies independently.&lt;/p&gt;
&lt;h3 id="when-should-i-use-opa-vs-typescript-or-python-for-policies"&gt;When should I use OPA vs. TypeScript or Python for policies?&lt;/h3&gt;
&lt;p&gt;If your team already writes Rego for other tools like Gatekeeper, writing Pulumi policies in Rego keeps your policy language consistent. If your team is more comfortable with general-purpose languages or needs auto-remediation, use the TypeScript or Python SDKs.&lt;/p&gt;
&lt;p&gt;Gatekeeper constraint templates can be reused directly via the &lt;code&gt;kubernetes-admission&lt;/code&gt; input format, but other OPA integrations use different input structures, so those policies would need to be adapted to Pulumi&amp;rsquo;s resource model. All three languages work together in the same policy groups.&lt;/p&gt;
&lt;h2 id="get-started"&gt;Get started&lt;/h2&gt;
&lt;p&gt;Templates are available for &lt;code&gt;kubernetes-opa&lt;/code&gt;, &lt;code&gt;aws-opa&lt;/code&gt;, &lt;code&gt;azure-opa&lt;/code&gt;, and &lt;code&gt;gcp-opa&lt;/code&gt; via &lt;code&gt;pulumi policy new&lt;/code&gt;. For more details, see the &lt;a href="https://www.pulumi.com/docs/insights/policy/policy-packs/authoring/"&gt;policy authoring guide&lt;/a&gt; and the &lt;a href="https://www.pulumi.com/docs/insights/policy/"&gt;Policy as Code overview&lt;/a&gt;.&lt;/p&gt;
&lt;a
href="https://www.pulumi.com/docs/insights/policy/"
class="btn btn-primary"
&gt;
Get started with OPA policies
&lt;/a&gt;
&lt;a href="https://github.com/pulumi/pulumi-policy-opa" target="_blank" rel="noopener noreferrer" class="github-card"&gt;
&lt;img
src="https://opengraph.githubassets.com/1/pulumi/pulumi-policy-opa"
alt="GitHub repository: pulumi/pulumi-policy-opa"
class="github-card-image"
loading="lazy"
/&gt;
&lt;div class="github-card-content"&gt;
&lt;div class="github-card-domain"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" class="ph-icon github-card-icon" fill="currentColor" aria-hidden="true" focusable="false"&gt;&lt;use href="https://www.pulumi.com/icons/sprite.4a9ac1016b9d8a688a5e7e867f96bdf80115a0739af8c688ba04791e15f64461.svg#b-github"/&gt;&lt;/svg&gt;
github.com/pulumi/pulumi-policy-opa
&lt;/div&gt;
&lt;/div&gt;
&lt;/a&gt;</description><author>Levi Blackstone</author><category>policy-as-code</category><category>features</category><category>opa</category><category>kubernetes</category><category>insights</category></item><item><title>Run Pulumi Insights on Your Own Infrastructure</title><link>https://www.pulumi.com/blog/self-hosted-insights/</link><pubDate>Mon, 02 Mar 2026 00:06:00 -0700</pubDate><guid>https://www.pulumi.com/blog/self-hosted-insights/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/self-hosted-insights/index.png" /&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/docs/insights/"&gt;Pulumi Insights&lt;/a&gt; gives you visibility and governance across your entire cloud footprint: &lt;strong&gt;discovery scans&lt;/strong&gt; catalog every resource in your cloud accounts, and &lt;strong&gt;policy evaluations&lt;/strong&gt; continuously enforce compliance against those resources. Until now, Insights workflows ran exclusively on Pulumi-hosted infrastructure. That works well for many teams, but enterprises with strict data residency requirements, private network constraints, or regulatory obligations need to run this work in their own environments. Today, Pulumi Insights supports &lt;a href="https://www.pulumi.com/docs/deployments/deployments/customer-managed-agents/"&gt;customer-managed workflow runners&lt;/a&gt; for both SaaS Pulumi Cloud and &lt;a href="https://www.pulumi.com/docs/administration/self-hosting/"&gt;self-hosted Pulumi Cloud&lt;/a&gt; installations.&lt;/p&gt;
&lt;h2 id="insights-at-a-glance"&gt;Insights at a glance&lt;/h2&gt;
&lt;p&gt;Insights provides two complementary capabilities that together form a governance lifecycle for your cloud infrastructure.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Discovery&lt;/strong&gt; scans cloud accounts across &lt;a href="https://aws.amazon.com/"&gt;AWS&lt;/a&gt;, &lt;a href="https://azure.microsoft.com/"&gt;Azure&lt;/a&gt;, &lt;a href="https://cloud.google.com/"&gt;GCP&lt;/a&gt;, and more to catalog every resource regardless of how it was provisioned: Pulumi, &lt;a href="https://www.terraform.io/"&gt;Terraform&lt;/a&gt;, &lt;a href="https://aws.amazon.com/cloudformation/"&gt;CloudFormation&lt;/a&gt;, or manual creation. Once cataloged, you can search, filter, group, and &lt;a href="https://www.pulumi.com/docs/insights/discovery/data-export/"&gt;export&lt;/a&gt; your resource data. You can also &lt;a href="https://www.pulumi.com/docs/insights/discovery/visual-import/"&gt;import&lt;/a&gt; unmanaged resources into Pulumi to bring them under IaC management.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Policy&lt;/strong&gt; enforces compliance with policy-as-code written in &lt;a href="https://www.typescriptlang.org/"&gt;TypeScript&lt;/a&gt; or &lt;a href="https://www.python.org/"&gt;Python&lt;/a&gt;. Pulumi ships &lt;a href="https://www.pulumi.com/docs/insights/policy/policy-packs/pre-built-packs/"&gt;pre-built compliance packs&lt;/a&gt; for CIS, NIST, PCI DSS, HITRUST, and other frameworks so you can start evaluating without writing any code. &lt;a href="https://www.pulumi.com/docs/insights/policy/policy-groups/#audit-policy-groups"&gt;Audit policy groups&lt;/a&gt; continuously evaluate all discovered resources and IaC stacks, while preventative policies block non-compliant deployments before they reach production.&lt;/p&gt;
&lt;p&gt;This enables you to map out your cloud estate, evaluate compliance, and then remediate any issues uncovered by policy.&lt;/p&gt;
&lt;h2 id="why-self-hosted"&gt;Why self-hosted?&lt;/h2&gt;
&lt;p&gt;Running Insights on your own infrastructure with &lt;a href="https://www.pulumi.com/docs/deployments/deployments/customer-managed-agents/"&gt;customer-managed workflow runners&lt;/a&gt; gives you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Data residency&lt;/strong&gt;: Scan execution and policy evaluation run entirely within your private network.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Private infrastructure access&lt;/strong&gt;: Scan resources in VPCs and environments that are not accessible from the public internet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compliance&lt;/strong&gt;: Cloud provider credentials can stay internal to your network, meeting regulatory requirements for credential handling.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flexible hosting&lt;/strong&gt;: Run workflow runners on any environment that meets your needs, including Linux, macOS, &lt;a href="https://www.docker.com/"&gt;Docker&lt;/a&gt;, and &lt;a href="https://kubernetes.io/"&gt;Kubernetes&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="how-it-works"&gt;How it works&lt;/h2&gt;
&lt;p&gt;Customer-managed workflow runners are lightweight agents that poll Pulumi Cloud for pending work, execute it locally, and report results back. You can configure runners to handle specific workflow types: discovery scans, policy evaluations, deployments, or all three.&lt;/p&gt;
&lt;p&gt;This works identically whether you use SaaS Pulumi Cloud or a self-hosted installation. The runner communicates with the Pulumi Cloud API over HTTPS, so no inbound connectivity is required, making it well suited to run in restricted network environments.&lt;/p&gt;
&lt;p&gt;Under the hood, this is powered by a distributed work scheduling system that routes activities to the right runner pool, handles lease-based execution, and recovers automatically from failures. For a deep dive on the architecture, see &lt;a href="https://www.pulumi.com/blog/how-we-built-a-distributed-work-scheduling-system-for-pulumi-cloud/"&gt;How We Built a Distributed Work Scheduling System for Pulumi Cloud&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If your team already uses customer-managed workflow runners for &lt;a href="https://www.pulumi.com/docs/deployments/"&gt;Pulumi Deployments&lt;/a&gt;, your existing runner pools can handle Insights workflows with no additional infrastructure.&lt;/p&gt;
&lt;h2 id="get-started"&gt;Get started&lt;/h2&gt;
&lt;p&gt;Self-hosted Insights is available on the Business Critical edition of Pulumi Cloud. To learn more or get set up:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/insights/self-hosted/"&gt;Self-hosted Insights documentation&lt;/a&gt; — configuration and setup for discovery scans and audit policy evaluations on your own infrastructure&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/deployments/deployments/customer-managed-agents/"&gt;Customer-managed workflow runners&lt;/a&gt; — runner installation, configuration reference, and pool management&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/insights/"&gt;Insights &amp;amp; Governance overview&lt;/a&gt; — full documentation for discovery and policy capabilities&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/contact/?form=sales"&gt;Contact sales&lt;/a&gt; to enable self-hosted Insights for your organization&lt;/li&gt;
&lt;/ul&gt;</description><author>Levi Blackstone</author><category>insights</category><category>features</category><category>pulumi-cloud</category><category>policy-as-code</category></item><item><title>How We Built a Distributed Work Scheduling System for Pulumi Cloud</title><link>https://www.pulumi.com/blog/how-we-built-a-distributed-work-scheduling-system-for-pulumi-cloud/</link><pubDate>Thu, 26 Feb 2026 00:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/how-we-built-a-distributed-work-scheduling-system-for-pulumi-cloud/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/how-we-built-a-distributed-work-scheduling-system-for-pulumi-cloud/index.png" /&gt;
&lt;p&gt;Pulumi Cloud orchestrates a growing number of workflow types: &lt;a href="https://www.pulumi.com/docs/deployments/"&gt;Deployments&lt;/a&gt;, &lt;a href="https://www.pulumi.com/docs/insights/"&gt;Insights&lt;/a&gt; discovery scans, and &lt;a href="https://www.pulumi.com/docs/insights/policy/"&gt;policy evaluations&lt;/a&gt;. Some of that work runs on Pulumi&amp;rsquo;s infrastructure, and some of it runs on yours via &lt;a href="https://www.pulumi.com/docs/deployments/deployments/customer-managed-agents/"&gt;customer-managed workflow runners&lt;/a&gt;. We needed a scheduling system that could handle all of these workflow types reliably across both environments. In this post, we&amp;rsquo;ll take a look at the system we built.&lt;/p&gt;
&lt;h2 id="where-we-started"&gt;Where we started&lt;/h2&gt;
&lt;p&gt;For our first workflow integration, Deployments, scheduling wasn&amp;rsquo;t too complicated. A deployment was queued, a worker picked it up, and it ran. The queue was purpose-built for deployments, and it worked well for that single use case. Over time, we added more sophisticated logic to handle retries, ordering, rate limiting, observability, and more.&lt;/p&gt;
&lt;p&gt;With the launch of Insights, the number of workflow types grew. Now Pulumi Cloud manages discovery scans to catalog cloud resources and runs audit policy evaluations to continuously verify compliance. While these workflows share similarities, each type needed its own scheduling, retry logic, and failure handling.&lt;/p&gt;
&lt;p&gt;Later we added the option for customers to run workflows on their own infrastructure using &lt;a href="https://www.pulumi.com/docs/deployments/deployments/customer-managed-agents/"&gt;customer-managed workflow runners&lt;/a&gt;. As the complexity of these requirements grew, we knew that our initial approach for Deployments wasn&amp;rsquo;t going to scale. We needed a single system that could schedule any type of work, route it to the right place, and handle the messy reality of distributed execution: crashes, network failures, rate limits, and retries.&lt;/p&gt;
&lt;p&gt;We call this the &lt;strong&gt;background activity system&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="why-not-use-an-off-the-shelf-queue"&gt;Why not use an off-the-shelf queue?&lt;/h2&gt;
&lt;p&gt;Why build this instead of using Amazon SQS, RabbitMQ, or one of the many existing queue libraries? We considered these options but chose to build our own for a few reasons.&lt;/p&gt;
&lt;p&gt;Pulumi Cloud supports &lt;a href="https://www.pulumi.com/docs/administration/self-hosting/"&gt;self-hosted installations&lt;/a&gt;, including air-gapped environments. We intentionally minimize external dependencies so that self-hosted customers don&amp;rsquo;t have to stand up additional infrastructure. A system built on an external queue works fine for our hosted service, but it means self-hosted customers would need to provide a compatible backend. By building on top of the database we already require, we avoid adding another system to maintain.&lt;/p&gt;
&lt;p&gt;More importantly, queueing is only part of the problem. What we actually need is &lt;em&gt;scheduling with durability&lt;/em&gt;. This means ensuring that remote workers don&amp;rsquo;t lose activities on restart, priority so that urgent work gets compute resources first, constraints like &amp;ldquo;only so many scans per org at a time,&amp;rdquo; structured logging for observability, and checkpointing so that long-running operations can resume after a failure.&lt;/p&gt;
&lt;p&gt;These features can be layered onto a generic queue library but can require more code than implementing them directly. For example, priority queues are often implemented with multiple ranked queues, but this breaks single-activity-at-a-time constraints. A second queue wouldn&amp;rsquo;t see a job already running in the first one. There&amp;rsquo;s no way for producers in a distributed system to coordinate across the queues without support in the queuing system itself.&lt;/p&gt;
&lt;p&gt;Capacity management is another area where generic queues fall short. Distributed systems need to respond dynamically to slowdowns, network interruptions, and rate limits from downstream services. These are common low-level details that every workflow type needs, and building them into the scheduling layer means individual handlers don&amp;rsquo;t have to solve them independently.&lt;/p&gt;
&lt;p&gt;We also need structured logging that works everywhere, including on customer-managed runners behind firewalls where centralized logging services aren&amp;rsquo;t accessible.&lt;/p&gt;
&lt;p&gt;Building this ourselves gave us a system that works with existing infrastructure and handles these requirements natively.&lt;/p&gt;
&lt;h2 id="design-constraints"&gt;Design constraints&lt;/h2&gt;
&lt;p&gt;With that context, here are some of the constraints that shaped the design:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pull-only agents.&lt;/strong&gt; Customer-managed workflow runners live behind NATs, corporate proxies, and air-gapped networks. They can&amp;rsquo;t accept inbound connections, so all communication has to be agent-initiated.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mixed execution environments.&lt;/strong&gt; The same system needs to work for Pulumi-hosted workers (with direct access to internal systems) and customer-managed runners (communicating entirely over REST). We didn&amp;rsquo;t want to maintain two separate code paths.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Different workflow types.&lt;/strong&gt; Deployments, Insights scans, and audit policy evaluations have different payloads and execution semantics, but they all need the same scheduling guarantees: exactly-once execution, automatic retries, failure recovery, and observability.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatic fault tolerance.&lt;/strong&gt; Agents crash, networks drop, and machines get recycled by autoscalers. The system needs to detect these failures and recover without needing a person to step in.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Extensibility.&lt;/strong&gt; We knew we&amp;rsquo;d keep adding workflow types. Adding a new one should mean writing a handler and registering it, not building new infrastructure.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="the-background-activity"&gt;The background activity&lt;/h2&gt;
&lt;p&gt;At the center of the system is the &lt;strong&gt;background activity&lt;/strong&gt;, a persistent, typed work unit. Each activity includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;type discriminator&lt;/strong&gt; that identifies what kind of work it represents (e.g., &amp;ldquo;insights-discovery&amp;rdquo; or &amp;ldquo;policy-evaluation&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;payload&lt;/strong&gt; specific to that type, containing whatever data the handler needs&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;routing context&lt;/strong&gt; that determines which runner pool should execute it&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scheduling metadata&lt;/strong&gt; like priority, activation time, and retry configuration&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;status&lt;/strong&gt; tracking where the activity is in its lifecycle&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The type discriminator makes this system polymorphic. The scheduling engine doesn&amp;rsquo;t need to know what&amp;rsquo;s inside the payload. It moves activities through their lifecycle and delegates the actual work to a type-specific handler.&lt;/p&gt;
&lt;h3 id="the-state-machine"&gt;The state machine&lt;/h3&gt;
&lt;p&gt;Every activity follows the same lifecycle regardless of type:&lt;/p&gt;
&lt;pre class="mermaid"&gt;
---
config:
flowchart:
curve: linear
---
graph LR
Start(( )) --&amp;gt;|Created| Ready
Ready --&amp;gt;|Leased| Pending
Pending --&amp;gt;|Started| Executing
Executing --&amp;gt;|Success| Completed
Completed --&amp;gt; End(( ))
Executing --&amp;gt;|Error| Failed
Failed --&amp;gt; End
Executing --&amp;gt;|Canceled| Canceled
Canceled --&amp;gt; End
Executing --&amp;gt;|Dependencies| Waiting
Waiting --&amp;gt;|Unblocked| Ready
Pending --&amp;gt;|Lease expired| Restarting
Executing --&amp;gt;|Lease expired| Restarting
Restarting --&amp;gt;|Re-lease| Ready
style Start fill:#000,stroke:#000,color:#000
style End fill:#000,stroke:#000,color:#000
&lt;/pre&gt;
&lt;p&gt;The states fall into two groups:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Running states&lt;/strong&gt; (work is in flight or can be resumed):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ready&lt;/strong&gt;: queued and eligible to be claimed by a worker&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pending&lt;/strong&gt;: claimed by a worker, execution about to start&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Executing&lt;/strong&gt;: actively running on a worker&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Waiting&lt;/strong&gt;: parked, blocked on one or more dependency activities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Restarting&lt;/strong&gt;: recovered after a worker failure, ready to be re-claimed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Terminal states&lt;/strong&gt; (work is done):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Completed&lt;/strong&gt;, &lt;strong&gt;Failed&lt;/strong&gt;, &lt;strong&gt;Canceled&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;New workflow types get these features automatically: scheduling, retries, dependency management, and observability.&lt;/p&gt;
&lt;h2 id="leases-distributed-execution-without-coordination"&gt;Leases: distributed execution without coordination&lt;/h2&gt;
&lt;p&gt;A central challenge of any distributed work queue is preventing double-execution. If two agents try to execute the same activity simultaneously, you get duplicate work and data corruption. A central coordinator can solve this, but it becomes a single point of failure.&lt;/p&gt;
&lt;p&gt;We use lease-based optimistic concurrency instead. This is a well-known pattern, adapted here for long-running, stateful workflows.&lt;/p&gt;
&lt;h3 id="how-it-works"&gt;How it works&lt;/h3&gt;
&lt;p&gt;When an agent is ready for new work, it asks the service to &lt;strong&gt;lease&lt;/strong&gt; an activity. The service atomically selects the highest-priority ready activity, assigns a lease token with an expiration time, and transitions the activity to &lt;code&gt;Pending&lt;/code&gt;. No other agent can claim the same activity.&lt;/p&gt;
&lt;pre class="mermaid"&gt;
sequenceDiagram
participant Agent
participant Service
Agent-&amp;gt;&amp;gt;Service: Poll for work
Note right of Service: Select highest-priority&amp;lt;br/&amp;gt;Ready activity
Note right of Service: Atomically set lease&amp;lt;br/&amp;gt;token + expiration
Service-&amp;gt;&amp;gt;Agent: Lease (token, expiration)
Agent-&amp;gt;&amp;gt;Service: Begin execution
Note right of Service: Transition to Executing
Note over Agent: Work in progress...
Agent-&amp;gt;&amp;gt;Service: Renew lease
Service-&amp;gt;&amp;gt;Agent: New expiration
Note over Agent: Work continues...
Agent-&amp;gt;&amp;gt;Service: Complete (token, result)
Note right of Service: Transition to Completed&amp;lt;br/&amp;gt;Archive activity
Service-&amp;gt;&amp;gt;Agent: Acknowledged
&lt;/pre&gt;
&lt;p&gt;While executing, the agent periodically &lt;strong&gt;renews&lt;/strong&gt; its lease to signal that it&amp;rsquo;s still working. If the agent crashes, loses network connectivity, or is terminated, it stops renewing. Once the lease expires, the service transitions the activity to &lt;code&gt;Restarting&lt;/code&gt;, making it available for another agent to claim.&lt;/p&gt;
&lt;pre class="mermaid"&gt;
sequenceDiagram
participant A as Agent A
participant S as Service
participant B as Agent B
A-&amp;gt;&amp;gt;S: Lease activity
S-&amp;gt;&amp;gt;A: Token + expiration
Note over A: Executing...
A--xS: Agent A crashes
Note right of S: Lease expires
Note right of S: Transition → Restarting
B-&amp;gt;&amp;gt;S: Poll for work
Note right of S: Lease to Agent B&amp;lt;br/&amp;gt;Transition → Pending
S-&amp;gt;&amp;gt;B: Token + expiration
Note over B: Agent B continues execution
&lt;/pre&gt;
&lt;p&gt;The service doesn&amp;rsquo;t need to explicitly coordinate between workers because leases are acquired using atomic database operations. The lease expiration is the failure detector; if a lease expires, then the work needs to be rescheduled.&lt;/p&gt;
&lt;h2 id="routing-work-to-the-right-runner-pool"&gt;Routing work to the right runner pool&lt;/h2&gt;
&lt;p&gt;Pulumi Cloud supports multiple &lt;a href="https://www.pulumi.com/docs/deployments/deployments/customer-managed-agents/"&gt;workflow runner pools&lt;/a&gt;. An organization might have one pool for production in &lt;code&gt;us-east-1&lt;/code&gt;, another for staging in &lt;code&gt;eu-west-1&lt;/code&gt;, and use Pulumi-hosted runners for development. Work needs to reach the right pool.&lt;/p&gt;
&lt;p&gt;Each activity carries a &lt;strong&gt;routing context&lt;/strong&gt; that identifies which runner pool should execute it. When a runner polls for work, it filters by its own pool identifier so that it only sees activities meant for it.&lt;/p&gt;
&lt;p&gt;We use prefix matching for this filtering. A runner matches activities whose context starts with its pool&amp;rsquo;s identifier. This means the service can use hierarchical contexts (e.g., &lt;code&gt;pool-abc/insights/scan-123&lt;/code&gt;) and runners will still match on the pool prefix. Cleanup is also straightforward; when a runner pool is deleted, all activities with that context prefix are bulk-canceled.&lt;/p&gt;
&lt;p&gt;This routing mechanism works the same way regardless of workflow type, and adding a new workflow type doesn&amp;rsquo;t require changes to the routing layer.&lt;/p&gt;
&lt;h2 id="dependencies-and-multi-step-workflows"&gt;Dependencies and multi-step workflows&lt;/h2&gt;
&lt;p&gt;Some workflows are naturally multi-step. An Insights discovery scan might discover resources that then need policy evaluation. Rather than building a separate orchestration engine, we built dependency management into the activity system.&lt;/p&gt;
&lt;p&gt;An activity can declare a &lt;strong&gt;dependency set&lt;/strong&gt;: a list of other activities that must complete before it can run. A dependent activity enters the &lt;code&gt;Waiting&lt;/code&gt; state when created. As its dependencies complete, the system checks whether all prerequisites are satisfied. When the last one finishes, the waiting activity transitions to &lt;code&gt;Ready&lt;/code&gt; and enters the scheduling queue.&lt;/p&gt;
&lt;pre class="mermaid"&gt;
graph TD
A[&amp;#34;Insights Discovery&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;Executing&amp;lt;/b&amp;gt;&amp;#34;] --&amp;gt;|depends on| B[&amp;#34;Policy Evaluation&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;Waiting&amp;lt;/b&amp;gt;&amp;#34;]
A --&amp;gt;|completes| C[&amp;#34;Insights Discovery&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;Completed&amp;lt;/b&amp;gt;&amp;#34;]
C --&amp;gt;|triggers| D[&amp;#34;Policy Evaluation&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;Ready&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;(auto-scheduled)&amp;#34;]
&lt;/pre&gt;
&lt;p&gt;This gives us a lightweight &lt;a href="https://en.wikipedia.org/wiki/Directed_acyclic_graph"&gt;DAG&lt;/a&gt; of work without requiring a separate workflow engine. Dependent activities get the same guarantees as any other activity: lease-based execution, automatic recovery, and observability.&lt;/p&gt;
&lt;h2 id="two-execution-modes-one-interface"&gt;Two execution modes, one interface&lt;/h2&gt;
&lt;p&gt;This is where the design really pays off for customer-managed runners. The system supports two execution modes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Direct mode&lt;/strong&gt; runs in-process alongside the Pulumi Cloud service. Workers have low-latency access to internal systems and can process activities with minimal overhead. This is what Pulumi-hosted runners use.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Remote mode&lt;/strong&gt; communicates over REST APIs. The runner polls for activities, leases them, executes work locally, and reports results back over HTTP. This is what customer-managed runners use. No database access, no internal network access, no inbound connectivity required.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both modes share the same handler interface so that a workflow handler doesn&amp;rsquo;t need to know where it&amp;rsquo;s running. Whether it&amp;rsquo;s running on Pulumi&amp;rsquo;s hosted infrastructure or on a customer&amp;rsquo;s Kubernetes cluster, the handler simply processes the payload and reports a result.&lt;/p&gt;
&lt;h2 id="putting-it-all-together"&gt;Putting it all together&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s walk through a concrete example. A user wants to run an Insights discovery scan on an AWS account using a customer-managed workflow runner.&lt;/p&gt;
&lt;pre class="mermaid"&gt;
sequenceDiagram
participant User
participant PC as Pulumi Cloud
participant Runner as Workflow Runner&amp;lt;br/&amp;gt;(Customer Infrastructure)
User-&amp;gt;&amp;gt;PC: 1. Configure Insights scan&amp;lt;br/&amp;gt;for runner pool
Note right of PC: 2. Create background activity&amp;lt;br/&amp;gt;type: insights-discovery&amp;lt;br/&amp;gt;context: runner-pool-xyz&amp;lt;br/&amp;gt;status: Ready
Runner-&amp;gt;&amp;gt;PC: 3. Poll for work (filtered by pool)
PC-&amp;gt;&amp;gt;Runner: 4. Lease activity (token + expiration)
Runner-&amp;gt;&amp;gt;PC: 5. Initialize workflow
PC-&amp;gt;&amp;gt;Runner: Return cloud credentials + job token
Note over Runner: 6. Execute scan locally&amp;lt;br/&amp;gt;(talks directly to cloud APIs —&amp;lt;br/&amp;gt;credentials are used only on&amp;lt;br/&amp;gt;the runner)
Runner-&amp;gt;&amp;gt;PC: 7. Renew lease
Note right of PC: Extend expiration
Runner-&amp;gt;&amp;gt;PC: 8. Report completion
Note right of PC: 9. Mark completed&amp;lt;br/&amp;gt;Archive activity
Note right of PC: 10. Unblock dependent activities&amp;lt;br/&amp;gt;(e.g., policy evaluation)
&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;A user configures an AWS account for Insights scanning in Pulumi Cloud and assigns it to a workflow runner pool.&lt;/li&gt;
&lt;li&gt;Pulumi Cloud creates a background activity with the type set to insights discovery, the routing context set to the runner pool, and the payload containing the account configuration.&lt;/li&gt;
&lt;li&gt;A customer-managed workflow runner polling that pool detects new work.&lt;/li&gt;
&lt;li&gt;The runner leases the activity, acquiring an exclusive lock via the lease token.&lt;/li&gt;
&lt;li&gt;The runner initializes the workflow, receiving any required cloud provider credentials (e.g., resolved from &lt;a href="https://www.pulumi.com/docs/esc/"&gt;Pulumi ESC (Environments, Secrets, and Configuration)&lt;/a&gt;) and a job token from Pulumi Cloud.&lt;/li&gt;
&lt;li&gt;The runner executes the scan locally on the customer&amp;rsquo;s infrastructure, talking directly to the cloud provider APIs.&lt;/li&gt;
&lt;li&gt;During execution, the runner periodically renews its lease to signal liveness.&lt;/li&gt;
&lt;li&gt;The scan completes, and the runner reports the result back to Pulumi Cloud.&lt;/li&gt;
&lt;li&gt;The service marks the activity as completed and archives it.&lt;/li&gt;
&lt;li&gt;If a dependent policy evaluation activity was waiting on this scan, it automatically transitions to &lt;code&gt;Ready&lt;/code&gt; and enters the scheduling queue, where another runner in the pool can pick it up.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This flow works the same way whether the runner is hosted by Pulumi or by the customer. The only difference is whether the execution mode is direct or remote.&lt;/p&gt;
&lt;h2 id="retries-and-scheduling"&gt;Retries and scheduling&lt;/h2&gt;
&lt;p&gt;Failures are expected in distributed systems. The background activity system handles them at several levels:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Lease expiration&lt;/strong&gt; covers hard failures like agent crashes, network partitions, and machine terminations. If a lease expires, the activity moves to &lt;code&gt;Restarting&lt;/code&gt;, and is available for another agent to pick up.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Handler-controlled retries&lt;/strong&gt; cover soft failures like transient API errors and rate limits. A handler can request a reschedule with a delay, putting the activity back in &lt;code&gt;Ready&lt;/code&gt; with a future activation time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatic retries&lt;/strong&gt; provide a configurable retry budget per activity. Each activity can specify how many times it should be retried and the delay between attempts, preventing runaway retry loops.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Priority scheduling&lt;/strong&gt; ensures urgent work gets processed first. Higher-priority activities are leased before lower-priority ones, even if the lower-priority activity has been waiting longer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lease renewal during slowdowns&lt;/strong&gt; keeps the activity alive without blocking other work, even if a downstream service is slow. The agent continues renewing its lease while it waits, and the scheduler remains free to assign other activities to other agents.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="observability"&gt;Observability&lt;/h2&gt;
&lt;p&gt;Every activity generates a structured log of its execution, including timestamps, severity levels, and code context. Logs are stored with the activity record and are accessible via an API and admin tooling.&lt;/p&gt;
&lt;p&gt;This is especially useful for customer-managed runners, where the service can&amp;rsquo;t directly observe the execution environment. The structured log gives operators visibility into the execution context, even when the runner is behind a firewall. Handlers can also use these logs as a progress journal, encoding checkpoints that allow a restarted activity to pick up where it left off rather than starting from scratch.&lt;/p&gt;
&lt;p&gt;Retention policies are configurable per organization and per workflow type. Completed activities can be retained for auditing or purged to manage storage, and failed activities are typically retained longer for debugging.&lt;/p&gt;
&lt;h2 id="what-we-learned"&gt;What we learned&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;A generic system pays off quickly.&lt;/strong&gt; Our initial instinct was to build targeted solutions for each workflow type. Investing in a generic activity system required more upfront design work, but now adding a new workflow type requires a fraction of the effort it would take otherwise. New workflows ship with full scheduling, retry, and observability support from day one.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Leases handle many failure modes.&lt;/strong&gt; We evaluated several approaches for distributed work coordination, including message queues with explicit acknowledgment and coordinator-based assignment. The lease model works well because all failure modes are handled through timeouts. If an agent is running as expected, it renews. If it isn&amp;rsquo;t, the lease expires.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Keeping the execution paths symmetric requires discipline.&lt;/strong&gt; Making the hosted and self-hosted paths share the same handler interface was a deliberate choice. It would be easy to add shortcuts for the hosted path that bypass the remote API, but resisting that temptation means that features work for both cases automatically.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The hard part isn&amp;rsquo;t running the work.&lt;/strong&gt; Running a scan or a deployment is straightforward once you have the right credentials. The real complexity is in everything around the execution: scheduling, routing, leasing, retrying, resolving dependencies, and cleaning up. These operational concerns aren&amp;rsquo;t visible to users, but they are essential to providing a reliable experience.&lt;/p&gt;
&lt;h2 id="wrapping-it-up"&gt;Wrapping it up&lt;/h2&gt;
&lt;p&gt;Today this system powers deployments, Insights discovery scans, and policy evaluations across both Pulumi Cloud and customer-managed infrastructure. The architecture is general enough that every new workflow type we add inherits the full scheduling, routing, retry, and observability stack without additional plumbing.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re interested in running workflows on your own infrastructure, check out &lt;a href="https://www.pulumi.com/docs/deployments/deployments/customer-managed-agents/"&gt;customer-managed workflow runners&lt;/a&gt;. To see how Insights can help you understand and manage your cloud infrastructure, &lt;a href="https://www.pulumi.com/docs/insights/"&gt;get started with Pulumi Insights&lt;/a&gt;.&lt;/p&gt;</description><author>Levi Blackstone</author><author>Davide Massarenti</author><category>pulumi-cloud</category><category>features</category><category>engineering</category><category>insights</category></item><item><title>Unified Resources in Pulumi Cloud</title><link>https://www.pulumi.com/blog/unified-resources-release/</link><pubDate>Mon, 08 Sep 2025 09:00:00 -0800</pubDate><guid>https://www.pulumi.com/blog/unified-resources-release/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/unified-resources-release/index.png" /&gt;
&lt;p&gt;We&amp;rsquo;re excited to announce unified resources in Pulumi Cloud. This powerful new feature automatically consolidates resources from multiple sources into single, comprehensive views. When the same AWS S3 bucket, Azure VM, or Google Cloud database appears in both your IaC stacks and Pulumi Insights, you&amp;rsquo;ll now see one unified entry instead of duplicates cluttering your search results.&lt;/p&gt;
&lt;h2 id="why-we-built-this"&gt;Why We Built This&lt;/h2&gt;
&lt;p&gt;Cloud resources naturally exist across multiple contexts in modern organizations. The same S3 bucket might be imported into a Pulumi stack, discovered by Pulumi Insights, and referenced in multiple projects. Previously, this created fragmented views with duplicate search results that made it difficult to understand your true infrastructure footprint.&lt;/p&gt;
&lt;p&gt;Teams told us they needed a way to see the complete picture of each resource without manually correlating information across different sources. They wanted accurate resource counts, clear visibility into management states, and faster access to all relevant information when troubleshooting issues.&lt;/p&gt;
&lt;p&gt;Unified resources solve these challenges by automatically detecting when the same cloud resource appears across multiple sources and consolidating them intelligently.&lt;/p&gt;
&lt;h2 id="how-it-works"&gt;How It Works&lt;/h2&gt;
&lt;p&gt;When you search for resources in Pulumi Cloud, our system now automatically identifies duplicates across all sources including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Resources managed by Pulumi IaC&lt;/li&gt;
&lt;li&gt;Resources imported into Pulumi stacks&lt;/li&gt;
&lt;li&gt;Resources discovered through Pulumi Insights including resources managed outside of Pulumi IaC&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Resources with multiple sources are marked with a distinctive &lt;img src="https://www.pulumi.com/docs/insights/assets/spoke.svg" alt="spoke icon" style="display: inline; width: 16px; height: 16px; vertical-align: middle;"&gt; icon in search results. This visual indicator lets you immediately identify which resources have rich, multi-source information available.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/unified-resources-release/unified-resource-search.png" alt="Unified Resource search"&gt;&lt;/p&gt;
&lt;p&gt;The consolidation happens automatically. Your existing workflows continue unchanged, but now with cleaner, more actionable results.&lt;/p&gt;
&lt;h2 id="the-new-unified-resource-details-page"&gt;The New Unified Resource Details Page&lt;/h2&gt;
&lt;p&gt;The centerpiece of this release is the completely redesigned resource details page. Previously, clicking on a resource from different sources led to separate, disconnected views. Now, every resource has a single, unified details page that brings together all available information.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/unified-resources-release/unified-resource-details.png" alt="Unified resource details page overview"&gt;&lt;/p&gt;
&lt;h3 id="complete-source-visibility"&gt;Complete Source Visibility&lt;/h3&gt;
&lt;p&gt;The new details page shows every source where a resource appears:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pulumi stacks&lt;/strong&gt;: See which stacks manage or import this resource&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Insights accounts&lt;/strong&gt;: View all cloud accounts where the resource was discovered&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Source metadata&lt;/strong&gt;: Access provider details, last update times, and source-specific details&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="comprehensive-property-views"&gt;Comprehensive Property Views&lt;/h3&gt;
&lt;p&gt;Compare resource properties across all sources to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Detect configuration changes between IaC definitions and actual cloud state&lt;/li&gt;
&lt;li&gt;View complete metadata from both IaC and cloud discovery&lt;/li&gt;
&lt;li&gt;Track property changes over time&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/unified-resources-release/unified-resource-properties.png" alt="Unified Resource properties"&gt;&lt;/p&gt;
&lt;h2 id="key-benefits-for-your-team"&gt;Key Benefits for Your Team&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Accurate Infrastructure Inventory&lt;/strong&gt;
Get an accurate view of your resources without manual deduplication. Understand exactly what&amp;rsquo;s running in your cloud accounts and how resources are distributed across regions and projects.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Enhanced Compliance Visibility&lt;/strong&gt;
Instantly identify which resources are managed by IaC versus those created outside your governance processes. Track your progress in bringing unmanaged resources under control.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Faster Incident Response&lt;/strong&gt;
When investigating issues, find all relevant information about a resource in one place. No more switching between multiple views or manually correlating data from different sources.&lt;/p&gt;
&lt;h2 id="learn-more"&gt;Learn More&lt;/h2&gt;
&lt;p&gt;Unified resources are available now for all Pulumi Cloud users. Ready to see unified resources in action? Check out these resources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/insights/search/"&gt;Resource search documentation&lt;/a&gt; for search tips and filtering options&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/pulumi-cloud/reference/resource-search/"&gt;API reference&lt;/a&gt; for programmatic access&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/insights/"&gt;Pulumi Insights overview&lt;/a&gt; for the complete platform capabilities&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We&amp;rsquo;d love to hear your feedback as you explore unified resources. Share your thoughts in the &lt;a href="https://slack.pulumi.com/"&gt;Pulumi Community Slack&lt;/a&gt; or connect with your customer success team.&lt;/p&gt;
&lt;p&gt;Start exploring your unified resource inventory today in &lt;a href="https://app.pulumi.com/signin"&gt;Pulumi Cloud&lt;/a&gt;.&lt;/p&gt;</description><author>Pulumi Insights Team</author><category>insights</category><category>resources</category><category>features</category><category>pulumi-cloud</category></item><item><title>Introducing Google Cloud to Insights Account Discovery</title><link>https://www.pulumi.com/blog/google-cloud-resource-discovery/</link><pubDate>Thu, 24 Jul 2025 12:38:18 -0500</pubDate><guid>https://www.pulumi.com/blog/google-cloud-resource-discovery/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/google-cloud-resource-discovery/index.png" /&gt;
&lt;p&gt;We&amp;rsquo;re excited to introduce Google Cloud support to &lt;a href="https://www.pulumi.com/docs/insights/get-started/"&gt;Insights Account Discovery&lt;/a&gt;. This new capability expands Pulumi’s resource discovery to help you uncover infrastructure in Google Cloud, regardless of how those resources are managed. With full visibility into all of your cloud resources, you can monitor, search, and manage your environments more effectively.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/google-cloud-resource-discovery/provider-selection.png" alt="Provider Selection"&gt;&lt;/p&gt;
&lt;h2 id="scan-an-entire-google-cloud-project-in-minutes"&gt;Scan an Entire Google Cloud Project in Minutes&lt;/h2&gt;
&lt;p&gt;With &lt;a href="https://www.pulumi.com/blog/insights-cloud-account-discovery/"&gt;Pulumi Insights&lt;/a&gt;, gaining visibility into your Google Cloud environment is fast and frictionless. Once configured, Pulumi scans your selected project and uncovers resource data across services like Compute Engine, Cloud Storage, IAM, networking, and more. There’s no need to install agents or write custom scripts—just link your account and let Pulumi do the rest.&lt;/p&gt;
&lt;p&gt;Within minutes, you’ll have a comprehensive view of your cloud infrastructure, including resources not managed by infrastructure-as-code. From there, you can explore your project, search for specific configurations, and start identifying security gaps, cost inefficiencies, and compliance risks.&lt;/p&gt;
&lt;h2 id="visibility-beyond-infrastructure-as-code"&gt;Visibility Beyond Infrastructure as Code&lt;/h2&gt;
&lt;p&gt;While infrastructure as code provides control and repeatability, the reality of most cloud environments includes resources created manually or by third-party automation. &lt;a href="https://www.pulumi.com/docs/insights/get-started/"&gt;Pulumi Insights&lt;/a&gt; bridges that gap by discovering all of your resources—regardless of how they were created.&lt;/p&gt;
&lt;p&gt;With this unified view, you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Identify drift from your intended infrastructure state&lt;/li&gt;
&lt;li&gt;Spot resources that may introduce security or cost risks&lt;/li&gt;
&lt;li&gt;Enforce compliance across all resources using &lt;a href="https://www.pulumi.com/blog/enforcing-policy-as-code-on-discovered-resources-with-pulumi/"&gt;Pulumi Crossguard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Bring unmanaged resources under Pulumi IaC using &lt;a href="https://www.pulumi.com/blog/visual-import/"&gt;Pulumi Interactive Import&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This makes &lt;a href="https://www.pulumi.com/docs/insights/get-started/"&gt;Pulumi Insights&lt;/a&gt; an essential tool not just for monitoring, but also for cloud governance, compliance, and modernization.&lt;/p&gt;
&lt;h2 id="getting-started"&gt;Getting Started&lt;/h2&gt;
&lt;p&gt;Get started today by &lt;a href="https://www.pulumi.com/docs/insights/accounts/#google-cloud"&gt;creating a Google Cloud Insights Account&lt;/a&gt; and start uncovering your hidden resources.&lt;/p&gt;</description><author>Pulumi Insights Team</author><category>insights</category><category>google-cloud</category><category>resources</category></item><item><title>Go from Cloud to Code in Minutes with Visual Import</title><link>https://www.pulumi.com/blog/visual-import/</link><pubDate>Thu, 08 May 2025 14:41:53 -0500</pubDate><guid>https://www.pulumi.com/blog/visual-import/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/visual-import/index.png" /&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;Note: This post discusses Pulumi Copilot, which Pulumi Neo has replaced. &lt;a href="https://www.pulumi.com/docs/ai/"&gt;Learn about Neo →&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Pulumi is excited to announce the release of &lt;strong&gt;Visual Import&lt;/strong&gt;, a new feature that transforms the way platform teams onboard existing cloud infrastructure into Pulumi. With Visual Import, you can discover unmanaged cloud resources across your organization, organize them into logical units, and instantly generate high-quality Pulumi code—with AI enhancements built in.&lt;/p&gt;
&lt;p&gt;Visual Import is now available for all Team, Enterprise and Business Critical customers with &lt;a href="https://www.pulumi.com/docs/insights/"&gt;Pulumi Insights&lt;/a&gt; enabled.&lt;/p&gt;
&lt;h2 id="modern-infrastructure-codified-faster"&gt;Modern Infrastructure, Codified Faster&lt;/h2&gt;
&lt;p&gt;One of the biggest challenges platform teams face when adopting infrastructure as code is migrating existing cloud deployments. Legacy scripts, manual configurations, and scattered resource ownership all slow down progress. Visual Import solves this by making the journey from cloud to code seamless and intuitive.&lt;/p&gt;
&lt;p&gt;Instead of manually digging through consoles and writing boilerplate code by hand, Visual Import enables teams to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Discover&lt;/strong&gt; all cloud resources—across any number of accounts—via &lt;a href="https://www.pulumi.com/docs/insights/"&gt;Pulumi Insights&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Select&lt;/strong&gt; and group resources into meaningful stacks, services, or projects.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Generate&lt;/strong&gt; production-ready Pulumi code in your language of choice.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhance&lt;/strong&gt; that code using Pulumi Copilot, which refines formatting, naming, references, and documentation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integrate&lt;/strong&gt; with your development workflows by downloading, editing, and importing Pulumi code into your existing repositories.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Whether you&amp;rsquo;re modernizing infrastructure, unifying multi-account environments, or enabling developers to adopt infrastructure as code more easily, Visual Import gives you a fast, repeatable onramp to scalable, consistent cloud management.&lt;/p&gt;
&lt;h2 id="how-it-works"&gt;How It Works&lt;/h2&gt;
&lt;p&gt;Visual Import is a guided three-step workflow within the Pulumi Cloud Console:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Select Resources: Use powerful filters and grouping tools to find the resources you want to codify. Whether you&amp;rsquo;re capturing a full service or just a few related components, Visual Import gives you visibility and precision.&lt;/li&gt;
&lt;li&gt;Review References: Automatically discover and select dependent resources—ensuring your code captures the right context and connectivity between infrastructure elements.&lt;/li&gt;
&lt;li&gt;Generate Code: Choose your preferred language and preview or download fully-formed Pulumi code. You can refine it manually or invoke Pulumi Copilot to improve naming, structure, and comments.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="visual-import.png" alt="Visual Import Code Generation"&gt;&lt;/p&gt;
&lt;p&gt;Throughout the workflow, you maintain full control. Select what you need, tweak it as required, and integrate on your terms. You can find full documentation and usage details in the &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/import/"&gt;Visual Import docs&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="key-benefits"&gt;Key Benefits&lt;/h2&gt;
&lt;h3 id="accelerated-migration"&gt;Accelerated Migration&lt;/h3&gt;
&lt;p&gt;Visual Import dramatically shortens the time it takes to transition existing cloud infrastructure into a managed, version-controlled state. What previously required weeks of manual discovery, scripting, and trial-and-error can now be accomplished in a matter of hours.&lt;/p&gt;
&lt;p&gt;Whether you&amp;rsquo;re consolidating legacy environments, auditing infrastructure before a cloud cost review, or preparing for a compliance milestone, Visual Import automates much of the busywork—so your team can focus on what matters.&lt;/p&gt;
&lt;h3 id="increased-developer-productivity"&gt;Increased Developer Productivity&lt;/h3&gt;
&lt;p&gt;Manually transitioning existing infrastructure to code often pulls developers away from their primary focus—building and improving services. By automating code generation and applying intelligent AI enhancements, Visual Import lets teams spend less time writing boilerplate code and fighting resource drift, and more time shipping meaningful changes.&lt;/p&gt;
&lt;p&gt;Pulumi Copilot adds a layer of polish that typically requires hands-on review and iteration, saving your team valuable time while helping new contributors write clear, consistent infrastructure code from the start.&lt;/p&gt;
&lt;h3 id="consistent-reliable-infrastructure"&gt;Consistent, Reliable Infrastructure&lt;/h3&gt;
&lt;p&gt;Unifying your cloud environments under a single IaC framework brings consistency, accountability, and repeatability to operations. Pulumi&amp;rsquo;s typed IaC model makes configurations explicit and auditable, while policies and CI/CD integrations enforce best practices from the start.&lt;/p&gt;
&lt;p&gt;By codifying your infrastructure, you reduce the risk of configuration drift, simplify onboarding, and ensure reproducibility across staging and production.&lt;/p&gt;
&lt;h3 id="from-insights-to-iacseamlessly"&gt;From Insights to IaC—Seamlessly&lt;/h3&gt;
&lt;p&gt;Visual Import builds on Pulumi Insights, providing a natural path from discovery to codification. If you&amp;rsquo;re already using Insights to monitor and visualize your infrastructure, you can now convert those resources into managed, versioned code in just a few clicks.&lt;/p&gt;
&lt;p&gt;And with built-in support for dependency analysis and cross-account visibility, you can finally treat your entire infrastructure portfolio as a single, coherent system—even if it wasn&amp;rsquo;t built that way.&lt;/p&gt;
&lt;h3 id="leverage-the-full-power-of-pulumi-cloud"&gt;Leverage the Full Power of Pulumi Cloud&lt;/h3&gt;
&lt;p&gt;Once resources are in code, you can take full advantage of Pulumi Cloud&amp;rsquo;s full suite of features: define and enforce policies with CrossGuard, gain visibility into your entire infrastructure through &lt;a href="https://www.pulumi.com/docs/insights/"&gt;Pulumi Insights&lt;/a&gt;, manage state with &lt;a href="https://www.pulumi.com/docs/esc/get-started/"&gt;ESC&amp;rsquo;s secrets management&lt;/a&gt;, and automate workflows through &lt;a href="https://www.pulumi.com/docs/pulumi-cloud/deployments"&gt;Pulumi Deployments&lt;/a&gt;. Together, these features turn your infrastructure into a governed, observable, and continuously deployable system built for modern cloud operations.&lt;/p&gt;
&lt;h2 id="try-it-today"&gt;Try It Today&lt;/h2&gt;
&lt;p&gt;Visual Import is now available in the Pulumi Cloud Console for Team, Enterprise and Business Critical users. If you&amp;rsquo;re ready to modernize your infrastructure and empower your teams with a fast path to Infrastructure as Code, there&amp;rsquo;s no better place to start.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://app.pulumi.com/signin"&gt;Log in to Pulumi Cloud&lt;/a&gt; and select &lt;strong&gt;IaC / Import&lt;/strong&gt; to get started.&lt;/p&gt;</description><author>Pulumi Insights Team</author><category>infrastructure-as-code</category><category>import</category><category>insights</category><category>features</category></item><item><title>Announcing Public Preview of Insights Account Discovery</title><link>https://www.pulumi.com/blog/insights-cloud-account-discovery/</link><pubDate>Mon, 02 Dec 2024 09:10:00 +0000</pubDate><guid>https://www.pulumi.com/blog/insights-cloud-account-discovery/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/insights-cloud-account-discovery/index.png" /&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;Note: This post discusses Pulumi Copilot, which Pulumi Neo has replaced. &lt;a href="https://www.pulumi.com/docs/ai/"&gt;Learn about Neo →&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Enterprise cloud infrastructures are complex environments that are evolved over time and made up of thousands of different kinds of resources. Enabling customers to wrap their arms around this complexity and get a complete understanding of the scope and structure is the goal of the Pulumi Insights 2.0 product.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/fa7s5_oYnaM?rel=0?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;We are excited to announce the public preview of Insights Account Discovery that makes it easy for you to gain visibility of your entire infrastructure regardless of how it is managed. Insights provides the tools to find, group and drill into your resources as needed to make sense of all aspects of your cloud infrastructure. In addition Copilot AI gives you the ability to get answers about your infrastructure that can be challenging to get in other ways, dramatically simplifying the work needed to move your infrastructure forward.&lt;/p&gt;
&lt;h3 id="account-management"&gt;Account Management&lt;/h3&gt;
&lt;p&gt;To get started, Insights Account Discovery provides a simple UI approach to setting up all of your infrastructure accounts to be scanned and read into the Insights supergraph. Once discovered, all of your infrastructure resources can then be seen in the Resource Explorer and accessed by Pulumi Copilot and Resource Search, providing you the tools needed to deliver on your strategic infrastructure goals.&lt;/p&gt;
&lt;p&gt;Account Discovery starts with the new Accounts page to provide a list of all accounts created along with the current status of the latest account scans. The Accounts page is the single place to go to manage all aspects of the Insights Account Discovery process.&lt;/p&gt;
&lt;div class="my-4"&gt;
&lt;video class="flex outline-none rounded-lg w-full" title="Accounts"
autoplay muted playsinline
loop &gt;
&lt;source src="accounts.mp4" /&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;h3 id="account-creation"&gt;Account Creation&lt;/h3&gt;
&lt;p&gt;From this page you can create new Accounts to provide the configuration and credentials needed for Insights to regularly scan and manage your infrastructure. Once you create a new top level Account, Insights will automatically create child accounts, based on the underlying platform model, for each group you enabled. These child accounts enable you to control the discovery behavior for each group separately. For example, AWS enables you to divide you infrastructure into regions and Insights will create separate child accounts for each region you specify.&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;Account Discovery leverages Pulumi ESC to enter and manage the credentials needed for the Discovery process to find and read all of the infrastructure resources. By relying on ESC, Insights aligns with enterprise best practices for creating and handling application secrets.&lt;/div&gt;
&lt;/div&gt;
&lt;div class="my-4"&gt;
&lt;video class="flex outline-none rounded-lg w-full" title="Create Account"
autoplay muted playsinline
loop &gt;
&lt;source src="create-account.mp4" /&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;h3 id="understanding-your-infrastructure"&gt;Understanding Your Infrastructure&lt;/h3&gt;
&lt;p&gt;Once each of your Accounts have started scanning, your resources will be displayed in the Insights Resources Explorer along with all Infrastructure as Code resources that you have imported. The Resources Explorer and Resources Search enables you to ask questions and factor your resources into logical groupings that significantly improves the process for managing your infrastructure and getting answers to key questions needed for your projects. For example, you can ask the AI Resource Search to &amp;lsquo;Find all public IP addresses&amp;rsquo; and any other question you might have about your infrastructure.&lt;/p&gt;
&lt;div class="my-4"&gt;
&lt;video class="flex outline-none rounded-lg w-full" title="Discovered Resources"
autoplay muted playsinline
loop &gt;
&lt;source src="resources.mp4" /&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;h3 id="more-to-come"&gt;More to Come&lt;/h3&gt;
&lt;p&gt;We are excited about the potential of Pulumi Insights and are working hard to bring additional capabilities to continue to simplify the experience of managing today&amp;rsquo;s complex cloud environments. Watch for additional features like Pulumi Crossguard Policy support for Discovered resources, along with additional platform support, and more, coming soon.&lt;/p&gt;
&lt;p&gt;Insights Account Discovery is free while in public preview, with per-resource pricing for Team, Enterprise and Business Critical tiers coming in Q1 2025.&lt;/p&gt;
&lt;h3 id="conclusion"&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;The addition of Account Discovery significantly expands the scope of Pulumi Insights. You can now leverage the capabilities of Insights 2.0, not just for your Pulumi IaC managed resources, but for all resources in your infrastructure regardless of how they are managed. With Pulumi Copilot and Resource Search, you are able to gain insights and ask questions about your infrastructure that would otherwise be challenging to answer, saving time and providing the critical information needed.&lt;/p&gt;
&lt;p&gt;For additional information about Pulumi Insights please refer to: &lt;a href="https://www.pulumi.com/product/pulumi-insights/"&gt;Pulumi Insights&lt;/a&gt;&lt;/p&gt;</description><author>Craig Symonds</author><category>insights</category><category>resources</category></item><item><title>Introducing the new Resources view</title><link>https://www.pulumi.com/blog/insights-resources-v2/</link><pubDate>Wed, 02 Oct 2024 14:35:35 -0700</pubDate><guid>https://www.pulumi.com/blog/insights-resources-v2/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/insights-resources-v2/index.png" /&gt;
&lt;p&gt;Pulumi Insights gives you the tools to stay informed about your cloud infrastructure. Our Resource explorer provides advanced search and filtering too &lt;a href="https://www.pulumi.com/blog/resource-search"&gt;find what you need&lt;/a&gt;. Today, we are excited to release an update that adds new ways to factor your resource data, and share those views with other users in your organization!&lt;/p&gt;
&lt;h3 id="factoring-the-data"&gt;Factoring the Data&lt;/h3&gt;
&lt;p&gt;Being able find and group your resources using different fields and properties is the key to gaining the insights needed to understand the status of your infrastructure and determine any future projects needed. The new Resources view provides several updated tools for doing this factoring.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Groups&lt;/strong&gt; - Resources can be grouped into logical categories, including nested groups. Group resources by properties like stack, modified time, or category to explore your infrastructure from different angles. Relevant aggregations are included for each grouping to help you understand the information at a glance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Filters&lt;/strong&gt; - Columns provide type-specific filters to narrow your search. Filters work in conjunction with the free-form search bar, giving you the control to build focused views for different aspects of your infrastructure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sorting&lt;/strong&gt; - Each column supports sorting, and multi-sort support allows multiple columns to be included in the ordering.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="my-4"&gt;
&lt;video class="flex outline-none rounded-lg w-full" title="Grouping, Filtering, Sorting"
autoplay muted playsinline
loop &gt;
&lt;source src="grouping-sorting-filtering.mp4" /&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;h3 id="customizing-columns"&gt;Customizing Columns&lt;/h3&gt;
&lt;p&gt;The updated Resources page enables you to customize the view of your resources by enabling you to control the columns of the table. With the table actions menu you can add and remove columns as well as auto size each of the columns in the table to fit the current content. Like previous versions of the Resources page, this menu also enables you to export the Resources as a CSV file for integration into external tools.&lt;/p&gt;
&lt;div class="my-4"&gt;
&lt;video class="flex outline-none rounded-lg w-full" title="Column Selection"
autoplay muted playsinline
loop &gt;
&lt;source src="column-selection.mp4" /&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;h3 id="pinning-favorite-views"&gt;Pinning Favorite Views&lt;/h3&gt;
&lt;p&gt;Once you have configured the resources view to provide the insights needed, you can now save that view as a pinned view under the Resource tab in the left navigation panel. These pinned views enable the Resources page to act as a dashboard to the most important views and insights into your infrastructure. The views are also defined in the url for the page which means you can freely copy the url and send it to a colleague, or add the URL to a work tracking system to provide context in the task definition.&lt;/p&gt;
&lt;div class="my-4"&gt;
&lt;video class="flex outline-none rounded-lg w-full" title="Favorites"
autoplay muted playsinline
loop &gt;
&lt;source src="favorites.mp4" /&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;p&gt;Overall, the new Resources page provides the tools needed to enable you to gain additional insights and track and manage those insights to ensure your infrastructure is delivering on the goals you have set.&lt;/p&gt;</description><author>Craig Symonds</author><category>insights</category><category>resources</category></item><item><title>Pulumi - Automate, Secure, and Manage Everything You Run in the Cloud</title><link>https://www.pulumi.com/blog/pulumi-up-2024/</link><pubDate>Wed, 18 Sep 2024 09:00:00 +0000</pubDate><guid>https://www.pulumi.com/blog/pulumi-up-2024/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/pulumi-up-2024/index.png" /&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;Note: This post discusses Pulumi Copilot, which Pulumi Neo has replaced. &lt;a href="https://www.pulumi.com/docs/ai/"&gt;Learn about Neo →&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;At our fourth annual PulumiUP conference, we unveiled a new vision for Pulumi, going beyond infrastructure as code to a comprehensive product suite. Pulumi’s platform now consists of three core products: Pulumi IaC is open source infrastructure as code in any programming language; Pulumi ESC is centralized secrets management that scales; and Pulumi Insights delivers instant visibility, intelligence, and control over all of your infrastructure. Each product can be adopted independently but is better together. In this post, we will share more about how Pulumi is your trusted partner to automate, secure, and manage everything you run in the cloud.&lt;/p&gt;
&lt;h2 id="pulumi---one-unified-platform-for-all-your-infrastructure-needs"&gt;Pulumi - One Unified Platform For All Your Infrastructure Needs&lt;/h2&gt;
&lt;p&gt;The Pulumi platform solves a broad set of problems that engineering leaders face in the modern cloud era. This spans cloud automation, security, and management, which aligns to our three products: &lt;strong&gt;&lt;a href="https://www.pulumi.com/product/infrastructure-as-code/"&gt;Pulumi IaC&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;a href="https://www.pulumi.com/product/secrets-management/"&gt;Pulumi ESC&lt;/a&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;a href="https://www.pulumi.com/product/pulumi-insights/"&gt;Pulumi Insights&lt;/a&gt;&lt;/strong&gt;. Our unified approach ensures developers, infrastructure experts, and security teams can collaborate closely and ship faster with high confidence.&lt;/p&gt;
&lt;p&gt;In addition to our three products, Pulumi’s platform incorporates three core capabilities that span the entire product suite. &lt;strong&gt;&lt;a href="https://www.pulumi.com/crossguard/"&gt;Pulumi CrossGuard&lt;/a&gt;&lt;/strong&gt; is our policy as code engine which ensures security, compliance, and best practices; &lt;strong&gt;&lt;a href="https://www.pulumi.com/product/pulumi-deployments/"&gt;Pulumi Deployments&lt;/a&gt;&lt;/strong&gt; is our deployment workflow technology that lets us orchestrate infrastructure-oriented tasks; and &lt;strong&gt;&lt;a href="https://www.pulumi.com/product/copilot/"&gt;Pulumi Copilot&lt;/a&gt;&lt;/strong&gt; is our generative AI technology that deeply understands the cloud and infrastructure management and operations.&lt;/p&gt;
&lt;p&gt;You can see this visually depicted here:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/product/pulumi-cloud"&gt;&lt;img src="platform.png" alt="Pulumi Platform"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We’ve now worked with 3,000 customers to help with their cloud journey and have listened to and solved the problems we regularly hear about. That includes Nvidia who is at the forefront of the AI revolution as well as &lt;a href="https://www.pulumi.com/case-studies/bmw"&gt;BMW&lt;/a&gt; who is reimagining their entire engineering mindset in a cloud-first world, both leveraging Pulumi. &lt;a href="https://www.pulumi.com/case-studies/unity"&gt;Unity Games&lt;/a&gt; now ships &lt;strong&gt;5x faster&lt;/strong&gt; from code to cloud, and Tivity Health &lt;strong&gt;saved 71%&lt;/strong&gt; of their cloud spend, automating everything and saving $6.5M annually.&lt;/p&gt;
&lt;p&gt;Now let’s dive into the three products and what we announced at PulumiUP:&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/AepHQaXeNX0?rel=0?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;h2 id="pulumi-iac---infrastructure-as-code-in-any-programming-language"&gt;Pulumi IaC - Infrastructure as Code in Any Programming Language&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/product/infrastructure-as-code"&gt;Pulumi IaC&lt;/a&gt; is our flagship open source technology, and it powers virtually everything we do, even the new products. We have seen accelerated adoption of Pulumi IaC. We’ve had over 100M downloads, are about to crack 21K GitHub stars (&lt;a href="https://github.com/pulumi/pulumi/stargazers"&gt;give us a star&lt;/a&gt; and bump us over!), and have seen 167% the contributions of Terraform this past month and 300% of OpenTofu. Not only is Pulumi the most powerful IaC technology, it is becoming more popular and vibrant too.&lt;/p&gt;
&lt;p&gt;We are always improving Pulumi IaC and today is no different. We launched a number of new and exciting IaC features. That includes using any Terraform provider, beyond the nearly 200 providers that Pulumi already supports. We also shipped a new &lt;a href="https://www.pulumi.com/blog/pulumi-vscode-extension/"&gt;Pulumi VS Code Extension&lt;/a&gt; that enables rich debugging and easier editing of your IaC programs. Pulumi Copilot can now diagnose and fix your IaC errors. And finally, we’ve improved our &lt;a href="https://www.pulumi.com/registry/packages/kubernetes/"&gt;Kubernetes support&lt;/a&gt; with powerful controls over await logic for more robust cloud native deployments. And we&amp;rsquo;re not slowing down anytime soon.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/pulumi/pulumi"&gt;Pulumi is open source&lt;/a&gt;, of course, but works best with Pulumi Cloud, the easiest, most secure, and most reliable way to adopt Pulumi IaC. &lt;a href="https://www.pulumi.com/case-studies/starburst"&gt;Starburst&lt;/a&gt; &lt;strong&gt;saved 100 days&lt;/strong&gt; per year by moving from DIY state management to Pulumi Cloud. By using Pulumi Cloud, you also gain access to the other products in this post. &lt;a href="https://www.pulumi.com/docs/iac/get-started/"&gt;Try IaC now&lt;/a&gt; and choose the option that suits you best.&lt;/p&gt;
&lt;h2 id="pulumi-esc---centralized-secrets-management-and-orchestration-that-scales"&gt;Pulumi ESC - Centralized Secrets Management and Orchestration that Scales&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/product/secrets-management"&gt;Pulumi ESC&lt;/a&gt; is a new approach to secrets and configuration management that is scalable, secure automatically with easy dynamic credentials, and tames sprawl with engineering best practices. ESC is not just a feature of our IaC product &amp;mdash; it can be adopted entirely independently of it for application and infrastructure secrets. We initially launched ESC in preview nearly a year ago, and since then have had hundreds of customers and thousands of users try it out – many at production scale – who have given us amazing feedback. We are excited to announce that &lt;strong&gt;ESC is generally available&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Being generally available is a big deal to us, and means it is ready for robust and secure enterprise-grade workloads. New capabilities available at GA include a new projects system which lets you group your environments into familiar hierarchies. We have added versioning, tagging, and pinning, so that you can institute more robust change management practices. ESC can manage encrypted secrets directly, but we have always supported pulling secrets from other secret stores, like AWS Secrets Manager, Azure KeyVault, Google Secret Manager, and HashiCorp Vault. We have now added 1Password to the list. We now also support secrets sync, which lets you still edit your secrets straight from Pulumi ESC, but have them automatically mirrored back to the backing secrets store. Flexible webhooks now support custom workflows triggered by environment changes. The new Pulumi VS Code Extension helps you edit your environments in code. We’ve launched application SDKs for Node.js, Python, and Go, as well as a Kubernetes Operator to inject secrets into Kubernetes workloads.&lt;/p&gt;
&lt;p&gt;We aim for you to “fall into the pit of success” with security, so that it is built-in and automatic, and ESC is a major enabler of that. &lt;a href="https://www.pulumi.com/docs/esc/get-started"&gt;Try out ESC now&lt;/a&gt;, or &lt;a href="https://www.pulumi.com/blog/pulumi-esc-ga"&gt;read more in the launch post&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="pulumi-insights---visibility-intelligence-and-controls-over-all-infrastructure"&gt;Pulumi Insights - Visibility, Intelligence, and Controls Over All Infrastructure&lt;/h2&gt;
&lt;p&gt;Pulumi Insights already delivers visibility, intelligence, and controls over your infrastructure resources. We began with Insights a year and a half ago as a collection of IaC features. We added resource search with structured and natural language search syntax, to help you find your IaC infrastructure no matter where it is running. We added the ability to export your infrastructure data and slice and dice it from data tools like Snowflake. We also added new dashboards to help visualize your infrastructure at scale.&lt;/p&gt;
&lt;p&gt;The big news with Pulumi Insights 2.0 is that &lt;em&gt;we’re bringing these capabilities to &lt;strong&gt;all of your cloud infrastructure&lt;/strong&gt;&lt;/em&gt;, no matter where it is, and no matter how it was created. You point Pulumi at your cloud accounts for any of nearly 200 supported clouds, and you get an instant asset inventory of everything you have. This is true even for resources created by Terraform, CloudFormation, Azure Resource Manager, cloud CLIs and SDKs, or even by clicking in your cloud console. An improved resource view gives you pivot-table-like capabilities so you can understand everything you have, and new graph visualizations with inferred dependencies help you to make sense of how things relate. Search and Pulumi Copilot work over discovered cloud resources, letting you explore and ask questions interactively. Pulumi Insights leverages Pulumi CrossGuard, our policy as code technology, and can tap into any existing IaC policies to find issues pertaining to security, compliance, cost, and best practices. Pulumi’s compliance-ready policy packs just work. Insights can also leverage CrossGuard’s ability to automate remediations so that Insights not only tells you about your issues, but helps you fix them with the click of a button. Finally, Insights is better together with Pulumi IaC, and enables you to migrate any resources in the cloud to Pulumi IaC – improving the robustness and built-in security of your operations – with a fully interactive import experience.&lt;/p&gt;
&lt;p&gt;This marks the start of an ambitious long-term vision for Pulumi Insights. Some of what was announced is actively shipping while other pieces will ship in the coming weeks. &lt;a href="https://www.pulumi.com/blog/pulumi-insights-2"&gt;Learn more in the launch blog&lt;/a&gt; and, &lt;a href="https://www.pulumi.com/docs/insights/get-started/"&gt;get started with Pulumi Insights 2.0&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="thank-you"&gt;Thank You&lt;/h2&gt;
&lt;p&gt;I am incredibly thankful to our community, 3,000 customers, and the partners and speakers who made PulumiUP 2024 a reality. Your feedback and continued belief in Pulumi has fueled the innovations we’re shipping today and into the future.&lt;/p&gt;
&lt;p&gt;All of the talks are &lt;a href="https://www.pulumi.com/pulumi-up"&gt;streaming live here&lt;/a&gt; and will be up on YouTube afterwards.&lt;/p&gt;
&lt;p&gt;We can’t wait to hear what you think about the new vision for Pulumi’s platform as well as the new IaC, ESC, and Insights capabilities announced at PulumiUP 2024. As always, you can &lt;a href="https://www.pulumi.com/start"&gt;try Pulumi for free here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Happy cloud spelunking.&lt;/p&gt;
&lt;p&gt;-Joe&lt;/p&gt;</description><author>Joe Duffy</author><category>announcements</category><category>infrastructure-as-code</category><category>esc</category><category>insights</category></item><item><title>Introducing Pulumi Insights 2.0</title><link>https://www.pulumi.com/blog/pulumi-insights-2/</link><pubDate>Wed, 18 Sep 2024 08:57:00 +0000</pubDate><guid>https://www.pulumi.com/blog/pulumi-insights-2/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/pulumi-insights-2/index.png" /&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;Note: This post discusses Pulumi Copilot, which Pulumi Neo has replaced. &lt;a href="https://www.pulumi.com/docs/ai/"&gt;Learn about Neo →&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Pulumi Insights 2.0 brings the power of Insights to all of your cloud infrastructure, not just the infrastructure managed by Pulumi IaC. Insights 2.0 also brings an exciting new suite of tools that make it easy to discover your entire infrastructure, assess security and efficiency of it, and bring it under management of IaC for best-in-class infrastructure management practices.&lt;/p&gt;
&lt;p&gt;Today we are outlining our vision for Pulumi Insights 2.0, and the features that are part of Insights 2.0 will be released over the coming weeks and months. &lt;a href="https://www.pulumi.com/docs/insights/get-started/"&gt;Get started with Pulumi Insights 2.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Since the initial launch of Pulumi Insights, customers have used these tools to gain valuable awareness into their IaC platform resources through the flexibility of &lt;a href="https://www.pulumi.com/blog/resource-search/"&gt;Resource Search&lt;/a&gt; and the power of &lt;a href="https://www.pulumi.com/crossguard/"&gt;Pulumi CrossGuard&lt;/a&gt;. Insights 2.0 builds on this previous generation of tools to provide a range of new capabilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bring visibility to your entire infrastructure by enabling you to scan and import all of your resources&lt;/li&gt;
&lt;li&gt;Add rich new visual explorers, structured graphs and dashboards for understanding and managing your entire infrastructure&lt;/li&gt;
&lt;li&gt;Extends Pulumi CrossGuard to provide direct remediation of discovered policy violations inside the Pulumi Cloud&lt;/li&gt;
&lt;li&gt;Integrates Pulumi IaC to make it easy to incrementally bring your infrastructure under management with Pulumi IaC in just a few clicks&lt;/li&gt;
&lt;li&gt;Brings Pulumi Copilot to your entire infrastructure for intelligent insight discovery and analysis&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="resources-20"&gt;Resources 2.0&lt;/h2&gt;
&lt;p&gt;The updated Resources page provides a customizable experience for grouping, filtering, sorting and visualizing your resources to help you manage scope and discover new insights about your infrastructure.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Grouping:&lt;/strong&gt; To group by a particular column, drag and drop the column header to the grouping control in the top left of the grid. You can group by multiple columns and can control the order of the grouping by reordering them in the grouping control. Grouping enables you to factor your resources in different ways to help you understand the scope and uncover issues within your infrastructure.&lt;/p&gt;
&lt;div class="my-4"&gt;
&lt;video class="flex outline-none rounded-lg w-full" title="Grouping"
autoplay muted playsinline
loop &gt;
&lt;source src="grouping.mp4" /&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Filtering:&lt;/strong&gt; Adding filters to each column can be done by selecting the filter icon in the column header. A filter dialog will be displayed based on the type of data present in the column. Adding a column filter will add the specific filter to the Resource Search query enabling you to use the grid as a form of query builder.&lt;/p&gt;
&lt;p&gt;&lt;img src="filtering.png" alt="Filtering"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sorting:&lt;/strong&gt; To sort your resources by a particular column, click once on the column header to sort in ascending order and click a second time to sort in descending order.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Column Selection:&lt;/strong&gt; To add or remove columns from the grid, select the ‘Choose Columns’ menu item from the column menu selector. This presents a pop up to allow you to add, remove or rearrange the order of columns in the grid.&lt;/p&gt;
&lt;p&gt;&lt;img src="choose-columns.png" alt="Choose Columns"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Column Resize:&lt;/strong&gt; You can resize the width of a column by clicking and dragging on the column boundary line on the right side of the column header. To automatically resize the column to the width of the widest cell contents, double click on the boundary line.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Copy Contents:&lt;/strong&gt; You can copy the contents of a cell to the clipboard by right clicking on the cell and selecting Copy. This is particularly useful for resource values you need to use in other contexts like the Name or URN.&lt;/p&gt;
&lt;h2 id="policy-violations"&gt;Policy Violations&lt;/h2&gt;
&lt;p&gt;The Policy Violations page provides a comprehensive view of all policy violations across your organization, helping you maintain visibility and control over your infrastructure. See the &lt;a href="https://www.pulumi.com/blog/centralized-policy-violations/"&gt;Policy Violations&lt;/a&gt; blog post for more information.&lt;/p&gt;
&lt;h2 id="resource-structure-graph"&gt;Resource Structure Graph&lt;/h2&gt;
&lt;p&gt;The new resource structure graph provides a visual representation of the relationships for a selected resource. This provides the additional context needed to understand the structure around the resource and what actions might need to be taken.&lt;/p&gt;
&lt;p&gt;Within this view you can navigate the relationships by clicking on the related resources. When a resource is clicked, the Resource Detail view navigates to the selected resource to give you the details needed to understand that context.&lt;/p&gt;
&lt;p&gt;Policy violations are indicated on the Resource Structure graph to quickly highlight when an insight has been detected and what related nodes are affected.&lt;/p&gt;
&lt;p&gt;&lt;img src="graph.png" alt="Resources Graph"&gt;&lt;/p&gt;
&lt;h2 id="goto-definition"&gt;Goto Definition&lt;/h2&gt;
&lt;p&gt;For any resource that is Pulumi IaC managed, the Resource Details page will contain a link to the file and line of code in your source code provider that defines the given resource.&lt;/p&gt;
&lt;p&gt;&lt;img src="goto-definition-link.png" alt="Goto Definition Link"&gt;&lt;/p&gt;
&lt;p&gt;Selecting this link will take you to the file and line making it easy for you to quickly see and edit the IaC code for the given resource.&lt;/p&gt;
&lt;p&gt;&lt;img src="goto-definition-code.png" alt="Goto Definition Code"&gt;&lt;/p&gt;
&lt;h2 id="user-customizable-dashboard"&gt;User Customizable Dashboard&lt;/h2&gt;
&lt;p&gt;Pulumi Cloud will provide a rich, user customizable dashboard that enables you to define views of any aspect of your infrastructure. This provides a powerful overview of your infrastructure and lets you easily track progress of any project.&lt;/p&gt;
&lt;p&gt;The dashboard supports defining multiple pages so you can create separate dashboards for each application, each department, or any configuration that maps to your configuration.&lt;/p&gt;
&lt;p&gt;Each dashboard page enables you to add, remove, rearrange and create new cards. Each new card can be customized to show the aggregate results of a resource field or property including related policy violation fields. The card can be configured to use a variety of different chart and graph visualizations that best suit the associated data.&lt;/p&gt;
&lt;p&gt;&lt;img src="dashboard.png" alt="Dashboard"&gt;&lt;/p&gt;
&lt;h2 id="infrastructure-account-scanning"&gt;Infrastructure Account Scanning&lt;/h2&gt;
&lt;p&gt;We are excited to introduce Infrastructure Account Scanning (IAS). IAS fundamentally transforms Pulumi Cloud into an Intelligent Cloud Management platform that brings all of the Pulumi Insights capabilities to your entire infrastructure. With IAS, Pulumi can scan your entire infrastructure, even resources that are not IaC managed. This enables you to leverage all of the new tools like, the Resource Explorer with Resource Structure Graphs, Pulumi CrossGruard with Auto Remediation and the Policy Violations Explorer, and the User Customizable Dashboard to manage all of your cloud resources.&lt;/p&gt;
&lt;p&gt;IAS leverages the rich ecosystem of Pulumi Platform Providers to discover and read your resources independently of whether they have been moved to IaC.&lt;/p&gt;
&lt;p&gt;With IAS Account management you can quickly configure how Pulumi Cloud is enabled to discover new or changed resources keeping your customized Resources, Policy Violations and Dashboard views up to date with your physical infrastructure.&lt;/p&gt;
&lt;p&gt;&lt;img src="account-scan.png" alt="Account Scanning"&gt;&lt;/p&gt;
&lt;h2 id="auto-remediation"&gt;Auto Remediation&lt;/h2&gt;
&lt;p&gt;Insights 2.0 provides you the tools needed to understand your infrastructure and uncover issues to ensure you can maintain a secure and efficient cloud platform. In addition to these tools, Pulumi Cloud will also give you the context and tools needed to remediate the issues.&lt;/p&gt;
&lt;p&gt;When a policy violation occurs for a given resource and that policy is an &lt;a href="https://www.pulumi.com/blog/remediation-policies/"&gt;Auto Remediation&lt;/a&gt; policy, a ‘Remediate’ button will be displayed in the Resource Details page. When selected, the Remediate button will run the remediation and show a diff of the infrastructure changes that will be applied in order to remediate targeted insight. If approved, Pulumi Cloud will apply the changes defined by the diff to your infrastructure using the associated Pulumi Providers.&lt;/p&gt;
&lt;p&gt;Any change made through the Remediation flow will be tracked and auditable using the Pulumi Audit tools to give you confidence and tracking of the changes made to your infrastructure. In addition, this Remediation flow will provide a warning if the Resource is IaC managed as this change would cause drift with the underlying IaC code. For IaC managed resources it is recommended that you use the new Goto Definition feature to jump to the IaC code for the resource to apply the necessary remediation in the code.&lt;/p&gt;
&lt;p&gt;&lt;img src="remediation.png" alt="Remediation"&gt;&lt;/p&gt;
&lt;h2 id="cli-resource-query-import"&gt;CLI Resource Query Import&lt;/h2&gt;
&lt;p&gt;Being able to browse your entire infrastructure and discover new opportunities to move your platform forward enables you to understand and build plans to move your infrastructure forward. However, leveraging Pulumi IaC for managing your resources gives you the best in class tools to ensure your infrastructure is delivering on your strategic goals. Insights 2.0 significantly simplifies the process of migrating your resources to IaC management by making it easy to find the resources needed and create resource queries to define those groups.&lt;/p&gt;
&lt;p&gt;The Pulumi cli import command will now support passing a Resource Query as a parameter, simplifying the process of finding, grouping and importing the resources you want. The results of this query will be used to get the resource IDs and types needed to be able to import the resources into your IaC program. The result of the command is the source code needed to construct each of the resources defined by the query.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pulumi import &lt;span class="se"&gt;\-&lt;/span&gt;q ‘.volumeType:Standard’
&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;import * as pulumi from &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;import * as aws_native from &lt;span class="s2"&gt;&amp;#34;@pulumi/aws-native&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;const &lt;span class="nv"&gt;EC2Volumevol0a789ea1874bfac61&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; new aws_native.ec2.Volume&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;EC2Volumevol0a789ea1874bfac61&amp;#34;&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; autoEnableIo: true,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; availabilityZone: &lt;span class="s2"&gt;&amp;#34;us-west-2b&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; encrypted: false,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; multiAttachEnabled: false,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; size: 8,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; snapshotId: &lt;span class="s2"&gt;&amp;#34;snap-0d017523dfd31e801&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; tags: &lt;span class="o"&gt;[]&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; volumeType: &lt;span class="s2"&gt;&amp;#34;standard&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&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; protect: true,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="visual-resource-import"&gt;Visual Resource Import&lt;/h2&gt;
&lt;p&gt;In addition to the powerful command line tools for simplifying the process of importing your resources into Pulumi IaC, Insights 2.0 will provide an integrated UI workflow for finding and importing resources into IaC. The workflow leverages the rich Insights explorer tools for finding and grouping your resources, then enabling you to automatically create a PR with the generated IaC code for the resource group, all with a click of a button.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Insights 2.0 provides you the set of tools needed to understand the chaos of modern enterprise clouds and to bring that chaos under control. The ability to scan your entire infrastructure enables you to leverage the rich visualization, remediation, and IaC migrations tools for all aspects of your infrastructure and gives you the insights needed to enable you to deliver on your strategic objectives.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pulumi.com/docs/insights/get-started/"&gt;Get started with Pulumi Insights 2.0&lt;/a&gt;.&lt;/p&gt;</description><author>Craig Symonds</author><category>insights</category></item><item><title>Introducing Pulumi Copilot: Intelligent Cloud Management</title><link>https://www.pulumi.com/blog/pulumi-copilot/</link><pubDate>Wed, 12 Jun 2024 04:00:00 -0700</pubDate><guid>https://www.pulumi.com/blog/pulumi-copilot/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/pulumi-copilot/index.png" /&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;Note: This post discusses Pulumi Copilot, which Pulumi Neo has replaced. &lt;a href="https://www.pulumi.com/docs/ai/"&gt;Learn about Neo →&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;AI is transforming how users interact with every category of technology today, and cloud infrastructure is no exception. Last year we launched &lt;a href="https://www.pulumi.com/ai/"&gt;Pulumi AI&lt;/a&gt; to combine generative AI with Pulumi’s knowledge of cloud infrastructure, helping users solve complex cloud development problems using Infrastructure-as-Code. Pulumi AI has seen rapid adoption and engagement, with tens of thousands of users leveraging Pulumi AI over the last year.&lt;/p&gt;
&lt;p&gt;Today, we’re excited to introduce &lt;a href="https://www.pulumi.com/product/copilot/"&gt;&lt;strong&gt;Pulumi Copilot&lt;/strong&gt;&lt;/a&gt;, a huge leap forward in applying AI to cloud infrastructure management. Pulumi Copilot is a new conversational chat interface integrated throughout Pulumi Cloud, enabling Pulumi Cloud users to quickly accomplish a variety of cloud infrastructure management tasks by leveraging the power of large language models plus the rich capabilities of Pulumi Cloud.&lt;/p&gt;
&lt;div class="my-4"&gt;
&lt;video class="flex outline-none rounded-lg w-full" title="Pulumi Copilot Demo"
autoplay muted playsinline
loop &gt;
&lt;source src="demo.mp4" /&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;p&gt;Through Pulumi Copilot, you can explore your cloud infrastructure and gain insights across an incredible breadth of use cases, including:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/pulumi-copilot/use-cases.png" alt="List of Pulumi Copilot Use Cases"&gt;&lt;/p&gt;
&lt;h2 id="pulumi-copilot-key-features"&gt;Pulumi Copilot Key Features&lt;/h2&gt;
&lt;h3 id="access-any-data-in-pulumi-cloud"&gt;Access any data in Pulumi Cloud&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The state of every resource you are managing with Pulumi across &lt;em&gt;any&lt;/em&gt; Cloud, &lt;em&gt;any&lt;/em&gt; account, and &lt;em&gt;any&lt;/em&gt; region. With &lt;a href="https://www.pulumi.com/product/pulumi-insights"&gt;Pulumi Insights&amp;rsquo;&lt;/a&gt; Cloud Supergraph support for 160+ cloud providers, this offers an unprecedented breadth of cloud infrastructure data to explore and interrogate with Pulumi Copilot.&lt;/li&gt;
&lt;li&gt;Pulumi stacks, projects, updates, deployments, environments, policies, audit logs and more - enabling historical understanding of what happened when, by who, and why across all of your cloud engineering systems managed by Pulumi.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="pulumi-iac-authoring-and-deployment"&gt;Pulumi IaC Authoring and Deployment&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The same great Pulumi AI features for authoring IaC are now available inside Pulumi Copilot as well, enabling you to quickly solve new IaC problems within Pulumi Cloud, and even deploy code directly from Pulumi Copilot.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="access-cloud-metadata-from-the-clouds-themselves"&gt;Access cloud metadata from the clouds themselves&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Through the use of new skills, Pulumi Copilot can access cloud metadata in real time in AWS, Azure, Kubernetes, and more, allowing it to join Pulumi&amp;rsquo;s IaC world view with information about usage, costs, and more – as well as infrastructure not yet under the management of Pulumi.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pulumi Copilot combines the best generative AI models available in the industry today with Pulumi Copilot “skills” which enable Pulumi Copilot to access the data and actions from within Pulumi Cloud needed to help you with your questions and explorations. Pulumi Copilot also incorporates the context of where the user is in the Pulumi Cloud console to easily answer questions about “this stack”, or “the latest update”, offering an even more natural, conversational and persistent experience across Pulumi Cloud.&lt;/p&gt;
&lt;p&gt;Pulumi Copilot is Enterprise-Ready on day one - it adheres to all the same identity and role based access control (RBAC) rules that exist across Pulumi Cloud, ensuring that users only have access to stacks, environments and resources that they have permissions for within Pulumi Cloud. This means that each organization gets AI generated responses based solely on their own organizational data.&lt;/p&gt;
&lt;p&gt;Pulumi Copilot is available now in public beta, and is free while in beta for all organizations in Pulumi Cloud. Organization administrators can turn on Pulumi Copilot for their organization by going to &lt;strong&gt;Settings &amp;gt; Access Management &amp;gt; Pulumi Copilot&lt;/strong&gt; within the Pulumi Cloud console.&lt;/p&gt;
&lt;p&gt;Try Pulumi Copilot now at &lt;a href="https://app.pulumi.com/signin"&gt;https://app.pulumi.com/&lt;/a&gt;.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/m4kb2k_chyM?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;h2 id="walkthrough-of-pulumi-copilot"&gt;Walkthrough of Pulumi Copilot&lt;/h2&gt;
&lt;p&gt;Let’s jump in and take Pulumi Copilot for a spin!&lt;/p&gt;
&lt;p&gt;We can start off simple - it’s a conversational chat, so we can introduce ourselves. Pulumi Copilot knows who we are from context and we get a light hearted programming related joke.&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="./joke.png" alt="Chat interface window of Pulumi Copilot" width="400" alt="Greeting"/&gt;&lt;/p&gt;
&lt;p&gt;Perhaps we need to gain access to additional infrastructure within Pulumi Cloud and need to contact an admin, we can ask who the admins are.&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="./admins.png" alt="Chat interface window of Pulumi Copilot where the user asks who the admins of the org are" width="400" alt="Admins"/&gt;&lt;/p&gt;
&lt;p&gt;We get a hyperlink at the end, enabling us to jump directly to the members page, where we can see all of the details about the members and admins of the organization. Pulumi Copilot helps to not just get information, but then navigate within the Pulumi Cloud console to continue to explore.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/pulumi-copilot/admins-console.png" alt="Pulumi Cloud screenshot with copilot window open. The dashboard depicts the Admins in the Console"&gt;&lt;/p&gt;
&lt;p&gt;Pulumi Copilot has access to everything that Pulumi Cloud manages, including &lt;a href="https://www.pulumi.com/docs/esc"&gt;Pulumi ESC&lt;/a&gt; environments. We can find all of the environments we have that manage access to GitHub through a natural language query, and then ask a follow up question to get a direct link to where each environment is defined.&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="./environments.png" alt="ESC Environments in Pulumi Copilot window" width="600" /&gt;&lt;/p&gt;
&lt;p&gt;If we do a Pulumi update, and it fails, we often get a complex error message, caused by some combination of a coding problem or a cloud provider configuration problem or a transient failure in cloud providers backing service. We can use Pulumi Copilot to ask why an update failed, and get a plain language explanation, leveraging the AI’s existing knowledge of programming languages and cloud providers, combined with access to all of the update logs from within Pulumi Cloud. Notably, we can ask why “this” update failed, taking advantage of the context of the page we are on within Pulumi Cloud to understand which update we are referring to.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/pulumi-copilot/cloud-update-why-fail.png" alt="Why did this fail? question posed in Pulumi Copilot"&gt;&lt;/p&gt;
&lt;p&gt;Perhaps we received an email from our compliance team telling us there was an issue with the VPC with id &lt;code&gt;vpc-04a116f7075fb7ca5&lt;/code&gt;, but we have no idea where that is. Given we have hundreds of AWS accounts and dozens of regions in each of these accounts, finding this resource isn’t simple. We can just ask Pulumi Copilot, and it immediately tells us what AWS account it is in. We can follow this up with a question about which Pulumi project and stack is managing it, and get a link to go directly to the stack to learn more about how it is configured.&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="./vpc-id.png" alt="Pulumi Copilot window inquiring about AWS account associated with a specific VPC, project, and stack" width="400" alt="What AWS account is this ID in?"/&gt;&lt;/p&gt;
&lt;p&gt;All of the capabilities of Pulumi AI for writing Pulumi IaC code are also available in Pulumi Copilot, so we can ask how to write a program for a new use case. But we can also have Pulumi Copilot incorporate information from an existing stack, leveraging multiple Pulumi Copilot skills to help with this task.&lt;/p&gt;
&lt;div class="my-4"&gt;
&lt;video class="flex outline-none rounded-lg w-full" title="Write and Deploy"
autoplay muted playsinline
loop &gt;
&lt;source src="code.mp4" /&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;p&gt;If we are thinking about removing some infrastructure we may want to know what other infrastructure potentially depends on it. We can get a list of stacks which depend on our stack, with hyperlinks directly to those stacks so we can explore their dependencies and take action to update them.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/pulumi-copilot/stack-references.png" alt="Stack references check in Pulumi Copilot window"&gt;&lt;/p&gt;
&lt;p&gt;If we’re getting started on compliance with a new compliance framework, we can get guidance on areas to focus on for compliance review, ahead of applying more formal compliance tools like &lt;a href="https://www.pulumi.com/docs/using-pulumi/crossguard/compliance-ready-policies/"&gt;Pulumi Crossguard Compliance Ready Policies&lt;/a&gt;.&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="./fedramp.png" alt="Pulumi Copilot question about getting FedRAMP compliant" width="600" /&gt;&lt;/p&gt;
&lt;p&gt;And we can get insights into what infrastructure is exposed to the internet which we may need to look deeper into with a quick question:&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="./insecure-endpoints.png" alt="Pulumi Copilot question asking if any insecure endpoints exist" width="600" /&gt;&lt;/p&gt;
&lt;p&gt;And our questions don’t have to be limited to English. Early Spanish-speaking users have found themselves working with Pulumi Copilot in their native language, getting responses automatically in the same language of their question.&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="./spanish.png" alt="Pulumi Copilot where user asks question in Spanish" width="400" alt="Español"/&gt;&lt;/p&gt;
&lt;p&gt;All of these examples are just scratching the surface of what Pulumi Copilot can already do today. One of the most exciting things about conversational chat interfaces is their wonderfully wide surface area of potential applications - almost any question you might have related to Cloud Infrastructure managed within Pulumi Cloud is something Pulumi Copilot can help with!&lt;/p&gt;
&lt;h2 id="future-of-pulumi-copilot"&gt;Future of Pulumi Copilot&lt;/h2&gt;
&lt;p&gt;All of the examples above are things you can do today, but we’re not stopping there. There’s a lot more coming up, and we wanted to give a sneak peek into some of the directions we’re taking Pulumi Copilot based on early customer feedback.&lt;/p&gt;
&lt;h3 id="taking-action"&gt;Taking Action&lt;/h3&gt;
&lt;p&gt;In the initial Beta, Pulumi Copilot is restricted to get data and answer questions, but cannot take action directly, beyond guiding users to a place within the Pulumi Cloud console to take the action themselves. In the near future, we will be extending Pulumi Copilot with the ability to propose actions and then act on them with user approval.&lt;/p&gt;
&lt;p&gt;Check out &lt;a href="https://github.com/pulumi/pulumi-cloud-requests/issues/414"&gt;pulumi/cloud-requests#414&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h3 id="pulumi-cli-integration"&gt;Pulumi CLI Integration&lt;/h3&gt;
&lt;p&gt;One of the most common requests we have gotten from early Pulumi Copilot users has been for integration into the Pulumi CLI where many users spend much of their time day-to-day. We have started experimenting with CLI integration to help with diagnosing Pulumi update failures, and will be adding this to the CLI in the near future.&lt;/p&gt;
&lt;p&gt;Check out &lt;a href="https://github.com/pulumi/pulumi-cloud-requests/issues/415"&gt;pulumi/cloud-requests#415&lt;/a&gt; for more details.&lt;/p&gt;
&lt;div class="my-4"&gt;
&lt;video class="flex outline-none rounded-lg w-full" title="CLI errors"
autoplay muted playsinline
loop &gt;
&lt;source src="errors.mp4" /&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;h3 id="pulumi-docs-website-integration"&gt;Pulumi Docs Website Integration&lt;/h3&gt;
&lt;p&gt;Pulumi Copilot is initially offered as part of Pulumi Cloud. But we are working to extend Pulumi Copilot across the rest of pulumi.com, including integration with the Pulumi Docs website. A new Pulumi Docs skill will allow Pulumi Copilot to help users learn Pulumi concepts and chat with Copilot about these to go deeper on concepts than what is already provided directly within the Pulumi Docs website.&lt;/p&gt;
&lt;p&gt;Check out &lt;a href="https://github.com/pulumi/pulumi-cloud-requests/issues/417"&gt;pulumi/cloud-requests#417&lt;/a&gt; for more details.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/pulumi-copilot/docs.png" alt="Pulumi Copilot integrated with Pulumi Docs website"&gt;&lt;/p&gt;
&lt;h3 id="cloud-cli-skills"&gt;Cloud CLI Skills&lt;/h3&gt;
&lt;p&gt;While Pulumi Copilot already has access to all the Cloud Infrastructure you are managing with Pulumi Cloud, there are many cases where it is useful to reach out to AWS directly to ask questions, get operational metrics, and take action. We are already working on extending Pulumi Copilot with the ability to run aws and kubectl CLI commands, using short-lived credentials from one of your Pulumi ESC environments. A sneak peek of that in action - showing how the AWS skill, combined with the ability to get details about resources and ESC environments from within Pulumi Cloud can enable collecting operational metrics from AWS and presenting them for analysis.&lt;/p&gt;
&lt;p&gt;Check out &lt;a href="https://github.com/pulumi/pulumi-cloud-requests/issues/416"&gt;pulumi/cloud-requests#416&lt;/a&gt; for more details.&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="./cloudwatch.png" alt="AWS CLI Skill" width="700" /&gt;&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;We’re excited to introduce Pulumi Copilot, the first conversational AI for general multi-cloud infrastructure management. Pulumi Copilot is the next big step toward reimagining cloud infrastructure management via AI-based user experiences. We’re just getting started, with many improvements and new capabilities coming soon on top of the core Pulumi Copilot foundation. Pulumi Copilot is brand new and improving quickly in response to user feedback. If you have questions or suggestions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/pulumi/pulumi-cloud-requests"&gt;Open an issue in GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/contact/"&gt;Reach out to schedule a demo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://slack.pulumi.com/"&gt;Join the Pulumi Community on Slack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/pulumi-cloud/copilot"&gt;Check out the Pulumi Copilot docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pulumi Copilot is available now in public beta, and is free while in beta for all organizations in Pulumi Cloud. Organization administrators can turn on Pulumi Copilot for their organization by going to &lt;strong&gt;Settings &amp;gt; Access Management &amp;gt; Pulumi Copilot&lt;/strong&gt; within the Pulumi Cloud console.&lt;/p&gt;
&lt;p&gt;Get started with Pulumi Copilot in &lt;a href="https://app.pulumi.com/signin"&gt;Pulumi Cloud&lt;/a&gt;.&lt;/p&gt;</description><author>Luke Hoban</author><category>ai</category><category>copilot</category><category>insights</category></item><item><title>Pulumi Insights and AI in the Pulumi CLI</title><link>https://www.pulumi.com/blog/pulumi-insights-ai-cli/</link><pubDate>Wed, 13 Sep 2023 10:00:00 -0800</pubDate><guid>https://www.pulumi.com/blog/pulumi-insights-ai-cli/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/pulumi-insights-ai-cli/index.png" /&gt;
&lt;p&gt;Earlier this year we introduced &lt;a href="https://www.pulumi.com/blog/pulumi-insights/"&gt;Pulumi Insights&lt;/a&gt;, a collection of features that bring intelligence to cloud infrastructure using Pulumi. Two key components of that launch were &lt;a href="https://www.pulumi.com/blog/pulumi-ai/"&gt;Pulumi AI&lt;/a&gt;, a generative AI assistant purpose-built to create cloud infrastructure using natural language, and &lt;a href="https://www.pulumi.com/blog/resource-search/"&gt;Pulumi Resource Search&lt;/a&gt;, multi-cloud search and analytics across every cloud resource and environment in your organization.&lt;/p&gt;
&lt;p&gt;Today, we are excited to bring Pulumi Insights into the &lt;code&gt;pulumi&lt;/code&gt; CLI with the new &lt;code&gt;pulumi org search&lt;/code&gt; and &lt;code&gt;pulumi ai&lt;/code&gt; commands. These commands put AI and resource search at your finger tips right where Pulumi users spend most of their time, in the terminal iterating on their cloud infrastructure.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/oxpT4Lh64xs?rel=0?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;This release is the latest of a long list of improvements and enhancement to Pulumi Insights over the last few months, including &lt;a href="https://www.pulumi.com/blog/ai-assist-improvements/"&gt;AI Assist for resource search&lt;/a&gt;, &lt;a href="https://www.pulumi.com/blog/property-search/"&gt;fine-grained resource property search&lt;/a&gt;, and &lt;a href="https://www.pulumi.com/blog/leveling-up-pulumi-ai-with-the-pulumi-registry/"&gt;registry support in Pulumi AI&lt;/a&gt;. We&amp;rsquo;ve seen incredible adoption and usage of all of these features over the last few months, and they are now easier than ever to access via the &lt;code&gt;pulumi&lt;/code&gt; CLI.&lt;/p&gt;
&lt;h2 id="pulumi-resource-search-in-the-cli"&gt;Pulumi Resource Search in the CLI&lt;/h2&gt;
&lt;p&gt;With the new &lt;code&gt;pulumi org search&lt;/code&gt; command, you can search across all of the infrastructure managed by your organization (or individual account) using the same rich search syntax supported by Pulumi Resource Search in the Pulumi Console.&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 org search -q &lt;span class="s2"&gt;&amp;#34;type:aws:kinesis/stream:Stream modified:&amp;gt;=09/01/2023&amp;#34;&lt;/span&gt; --org my-org
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/pulumi-insights-ai-cli/orgsearch.png" alt="org search"&gt;&lt;/p&gt;
&lt;p&gt;If you don&amp;rsquo;t know the exact search syntax for what you want to ask, you can use AI Assist, which was &lt;a href="https://www.pulumi.com/blog/ai-assist-improvements/"&gt;recently opened up&lt;/a&gt; to all Pulumi organizations. Just use &lt;code&gt;pulumi org search ai&lt;/code&gt; instead!&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 org search ai -q &lt;span class="s2"&gt;&amp;#34;all Kinesis streams modified since September 1st 2023&amp;#34;&lt;/span&gt; --org my-org
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Notice that AI Assist comes up with the same query and runs it to get the same results we saw above.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/pulumi-insights-ai-cli/orgsearchai.png" alt="org search ai"&gt;&lt;/p&gt;
&lt;p&gt;These queries can also include complex logic which relies on looking at properties of resources, such as their tags. For example:&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 org search ai -q &lt;span class="s2"&gt;&amp;#34;All untagged lambda functions with memory &amp;gt; 2 GB&amp;#34;&lt;/span&gt; --org my-org
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;AI Assist determines it should run the query &lt;code&gt;type:&amp;quot;aws:lambda:Function&amp;quot; .memorySize:&amp;gt;2048 -.tags:&lt;/code&gt; and shows the results of that query:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/pulumi-insights-ai-cli/orgsearchaiproperties.png" alt="org search ai"&gt;&lt;/p&gt;
&lt;p&gt;The combination of rich query syntax, AI Assist and property search makes it easy and exciting to interactively find the information you are looking for about resources in your stack.&lt;/p&gt;
&lt;p&gt;And of course, you can jump straight into the console to drill down even further into your data.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/blog/pulumi-insights-ai-cli/consolesearch.png" alt="org search ai"&gt;&lt;/p&gt;
&lt;h2 id="pulumi-ai-in-the-cli"&gt;Pulumi AI in the CLI&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;ve also taken our first step towards integrating Pulumi AI into the CLI. With the &lt;code&gt;pulumi ai web&lt;/code&gt; command, you can type a query in the CLI and have it launch a question into a browser window.&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 ai web &lt;span class="s2"&gt;&amp;#34;deploy metabase on AWS with a managed postgres database&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This opens a browser to a guided Pulumi AI conversation that walks through all the steps required to accomplish this task.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pulumi.com/uploads/content/blog/pulumi-insights-ai-cli/pulumiaiweb.gif" alt="pulumi ai"&gt;&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;With these new CLI commands, Pulumi Insights is available at your fingertips in the &lt;code&gt;pulumi&lt;/code&gt; CLI. These are just the first steps to bring search and AI into the CLI, expect to see much more in the coming months. To learn more about the various Pulumi Insights features discussed here, check out the resources below:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/pulumi-cloud/insights/"&gt;Pulumi Insights&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/ai"&gt;Pulumi AI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pulumi.com/docs/iac/cli/commands/"&gt;Pulumi CLI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><author>Luke Hoban</author><author>Kyle Pitzen</author><category>features</category><category>ai</category><category>insights</category></item></channel></rss>