From 9a167ec1e79210126195a884252e454d64813679 Mon Sep 17 00:00:00 2001 From: Sarah Hughes Date: Thu, 27 Jun 2024 15:59:41 -0700 Subject: [PATCH] separate esc vs infisical into its own PR --- content/docs/esc/vs/_index.md | 21 +++ content/docs/esc/vs/infisical.md | 173 ++++++++++++++++++++++++ layouts/shortcodes/get-started-esc.html | 33 +++++ static/logos/tech/vault-2.png | Bin 0 -> 13210 bytes 4 files changed, 227 insertions(+) create mode 100644 content/docs/esc/vs/_index.md create mode 100644 content/docs/esc/vs/infisical.md create mode 100644 layouts/shortcodes/get-started-esc.html create mode 100644 static/logos/tech/vault-2.png diff --git a/content/docs/esc/vs/_index.md b/content/docs/esc/vs/_index.md new file mode 100644 index 000000000000..bc2220c61cf9 --- /dev/null +++ b/content/docs/esc/vs/_index.md @@ -0,0 +1,21 @@ +--- +title_tag: "Pulumi ESC Compared to Alternatives" +meta_desc: Learn how Pulumi ESC compares with alternative Environments, Secrets, and Configurations solutions. +title: Compare to... +h1: Compare Pulumi ESC to other solutions +meta_image: /images/docs/meta-images/docs-meta.png +menu: + pulumiesc: + weight: 7 + identifier: esc-vs +aliases: +--- + +Pulumi ESC is centralized environments, secrets, and configuration manager for cloud applications and infrastructure. It provides the ability to create environments which are collections of secrets and configuration that can be versioned, branched, and composed inside other collections. ESC supports pulling and centralizing the management of secrets from 1Password, AWS OIDC, AWS Secrets Manager, Azure OIDC, Azure Key Vault, Google Cloud OIDC, Google Cloud Secrets Manager, Pulumi stacks, Vault OIDC, and Vault. + +There are many tools that overlap with Pulumi ESC's capabilities. Many +of these are complementary and can be used together, whereas some are "either or" decisions. + +Here are several useful comparisons that will help you understand Pulumi's place in the cloud tooling ecosystem: + +* [Infisical](/docs/esc/vs/infisical/) diff --git a/content/docs/esc/vs/infisical.md b/content/docs/esc/vs/infisical.md new file mode 100644 index 000000000000..282c452812a5 --- /dev/null +++ b/content/docs/esc/vs/infisical.md @@ -0,0 +1,173 @@ +--- +title_tag: "Pulumi ESC vs Infisical" +meta_desc: Learn about the major differences between Pulumi ESC and Infisical. +title: Pulumi ESC vs Infisical +h1: Pulumi ESC vs Infisical +meta_image: /images/docs/meta-images/docs-meta.png +menu: + pulumiesc: + identifier: infisical + parent: esc-vs + weight: 2 +aliases: +--- + + + +Choosing the right [secrets management](/what-is/what-is-secrets-management/) tool is important, and we want you to have as much information as possible to make the choice that best suits your needs. We’ve created this document to help you understand how Pulumi ESC compares with Infisical. + +## What is Infisical? + +Infisical is a secrets management tool that provides a centralized platform for managing and controlling access to secrets. It supports dynamic secret generation, encryption as a service, and comprehensive access policies. + +## Pulumi ESC vs. Infisical: Similarities {#similarities} + +Like Infisical, Pulumi ESC is a secrets manager for cloud applications and infrastructure. In both ESC and Infisical, secrets can be stored and accessed through a CLI, SDK, or Web editor interface. Granular access controls can be implemented across all secrets. + +## Pulumi ESC vs. Infisical: Key Differences {#differences} + +There are a couple of fundamental differences between Infisical and Pulumi ESC. First, ESC and Infisical differ in that Infisical can only add and manage secrets stored in Infisical. ESC adopts an open ecosystem approach, allowing you to pull secrets stored in most secrets and password managers during runtime and use them anywhere. This allows teams to use the best secrets management solution according their purposes and needs. Second, Infisical lacks the composability and hierarchical nature of ESC, which increases getting started speed and duplication of secrets. Third, ESC takes a software engineering approach to versioning with ability to add tags and import specific collections of secrets and configuration via those tags, similar to Docker. Fourth, ESC takes a more secure limited privilege path to provisioning dynamic short-term credentials as compared to Infisical. + +Here's a detailed comparison of the two: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeaturePulumi ESCInfisical
Architecture
OSS LicenseYes, Apache License 2.0Yes, MIT expat license
Document StoreYesNo
Key-value StoreYesYes
Open EcosystemYes, supports pulling and using secrets from multiple sources including HashiCorp Vault, 1Password, AWS Secrets Manager, etc.No, can only store and manage secrets stored in Infisical
Developer Experience
Editing and AuthoringYes, supports both GUI and powerful Document Editor with autocomplete, docs hover, and error checkingLimited, has GUI editor without YAML support
CLIYes, available as esc CLI or pulumi CLIYes
Client SDKsYesYes
Declarative ProviderYes, support via the Pulumi Service Provider, which allows management (create, update, delete) of collections of secrets and configuration as a resource through infrastructure as code.No
ComposabilityYes, simple set up of hierarchical environments that inherit values from imported environmentsNo, can only reference singular secrets from other environments and references have to be duplicated in multiple environments
VersioningYes, entire environments can be versioned and tagged and imported based on the specific version tags or revision numbersLimited
Immutable History & Point in Time RecoveryYesYes
Values Can Be of Type Secret and PlaintextYesNo, values can only be secrets
Interpolate Values from Other ValuesYes, new dynamic values can be constructed through string interpolationNo
Branching / Personal configsYes, environments can be forked for testing without rewriting entire environments and overriding specific valuesLimited, requires careful copying since secrets need to be downloaded in plaintext locally and then uploaded
Compare Secrets across EnvironmentsNoYes
In-built FunctionsYes, support for functions like toJSON, fromJSON, fromBase64, toString allows data manipulation for any scenarioNo
Security and Compliance
Audit LogsYesYes
Encrypted Secrets StorageYes, TLS is used for encryption in transit and unique encryption keys per environment are employed for encryption at restYes
Access ControlsYesYes
Secure Dynamic Cloud Provider CredentialsYes, uses OIDC flows to generate dynamic credentials. Available for AWS, Azure, and Google Cloud.No, less secure as it requires access keys for highly privileged root accounts
OIDC TrustYes, trust relationships are established with third-party OIDC providersNo
Secure Environment VariablesYes, the esc run CLI command can be used to specify which secrets are available as environment variablesNo, all values are available as environment variables
Plaintext Read Only ModeYes, ESC offers a read mode that allows reading only plaintext values while not being able to decrypt secrets or access dynamic credentialsNo
+ +{{< get-started-esc >}} diff --git a/layouts/shortcodes/get-started-esc.html b/layouts/shortcodes/get-started-esc.html new file mode 100644 index 000000000000..f86fec3bf9f4 --- /dev/null +++ b/layouts/shortcodes/get-started-esc.html @@ -0,0 +1,33 @@ +
+
+
+

Get Started with Pulumi

+

{{ "Use Pulumi ESC to easily centralize and manage environments, secrets, and configurations. Follow our [Get Started guide](/docs/esc/get-started/) for ESC to begin. If you want to use Vault or any other secrets manager with ESC, follow the below guides to import secrets from existing secrets managers into ESC environments." | markdownify }}

+
+
+ +
+
+
+ + AWS + +
+
+ + Azure + +
+
+ + Google Cloud + +
+
+ + Vault + +
+
+
+
\ No newline at end of file diff --git a/static/logos/tech/vault-2.png b/static/logos/tech/vault-2.png new file mode 100644 index 0000000000000000000000000000000000000000..e8eaa97686a4edb27752f1d12d928d454cb474f6 GIT binary patch literal 13210 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 literal 0 HcmV?d00001