# Bootstrap Instance Source: https://infisical.com/docs/api-reference/endpoints/admin/bootstrap-instance POST /api/v1/admin/bootstrap For guidance, check out the docs for [Programmatic Provisioning](/self-hosting/guides/automated-bootstrapping). # Attach Source: https://infisical.com/docs/api-reference/endpoints/alicloud-auth/attach POST /api/v1/auth/alicloud-auth/identities/{identityId} Attach Alibaba Cloud Auth configuration onto machine identity # Login Source: https://infisical.com/docs/api-reference/endpoints/alicloud-auth/login POST /api/v1/auth/alicloud-auth/login Login with Alibaba Cloud Auth for machine identity # Retrieve Source: https://infisical.com/docs/api-reference/endpoints/alicloud-auth/retrieve GET /api/v1/auth/alicloud-auth/identities/{identityId} Retrieve Alibaba Cloud Auth configuration on machine identity # Revoke Source: https://infisical.com/docs/api-reference/endpoints/alicloud-auth/revoke DELETE /api/v1/auth/alicloud-auth/identities/{identityId} Delete Alibaba Cloud Auth configuration on machine identity # Update Source: https://infisical.com/docs/api-reference/endpoints/alicloud-auth/update PATCH /api/v1/auth/alicloud-auth/identities/{identityId} Update Alibaba Cloud Auth configuration on machine identity # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/1password/available GET /api/v1/app-connections/1password/available List the 1Password Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/1password/create POST /api/v1/app-connections/1password Create a 1Password Connection. Check out the configuration docs for [1Password Connections](/integrations/app-connections/1password) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/1password/delete DELETE /api/v1/app-connections/1password/{connectionId} Delete the specified 1Password Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/1password/get-by-id GET /api/v1/app-connections/1password/{connectionId} Get the specified 1Password Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/1password/get-by-name GET /api/v1/app-connections/1password/connection-name/{connectionName} Get the specified 1Password Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/1password/list GET /api/v1/app-connections/1password List the 1Password Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/1password/update PATCH /api/v1/app-connections/1password/{connectionId} Update the specified 1Password Connection. Check out the configuration docs for [1Password Connections](/integrations/app-connections/1password) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/auth0/available GET /api/v1/app-connections/auth0/available List the Auth0 Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/auth0/create POST /api/v1/app-connections/auth0 Create an Auth0 Connection. Check out the configuration docs for [Auth0 Connections](/integrations/app-connections/auth0) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/auth0/delete DELETE /api/v1/app-connections/auth0/{connectionId} Delete the specified Auth0 Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/auth0/get-by-id GET /api/v1/app-connections/auth0/{connectionId} Get the specified Auth0 Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/auth0/get-by-name GET /api/v1/app-connections/auth0/connection-name/{connectionName} Get the specified Auth0 Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/auth0/list GET /api/v1/app-connections/auth0 List the Auth0 Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/auth0/update PATCH /api/v1/app-connections/auth0/{connectionId} Update the specified Auth0 Connection. Check out the configuration docs for [Auth0 Connections](/integrations/app-connections/auth0) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/aws/available GET /api/v1/app-connections/aws/available List the AWS Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/aws/create POST /api/v1/app-connections/aws Create an AWS Connection. Check out the configuration docs for [AWS Connections](/integrations/app-connections/aws) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/aws/delete DELETE /api/v1/app-connections/aws/{connectionId} Delete the specified AWS Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/aws/get-by-id GET /api/v1/app-connections/aws/{connectionId} Get the specified AWS Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/aws/get-by-name GET /api/v1/app-connections/aws/connection-name/{connectionName} Get the specified AWS Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/aws/list GET /api/v1/app-connections/aws List the AWS Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/aws/update PATCH /api/v1/app-connections/aws/{connectionId} Update the specified AWS Connection. Check out the configuration docs for [AWS Connections](/integrations/app-connections/aws) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-adcs/available GET /api/v1/app-connections/azure-adcs/available List the Azure ADCS Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-adcs/create POST /api/v1/app-connections/azure-adcs Create an Azure ADCS Connection. Azure ADCS Connections must be created through the Infisical UI. Check out the configuration docs for [Azure ADCS Connections](/integrations/app-connections/azure-adcs) for a step-by-step guide. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-adcs/delete DELETE /api/v1/app-connections/azure-adcs/{connectionId} Delete the specified Azure ADCS Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-adcs/get-by-id GET /api/v1/app-connections/azure-adcs/{connectionId} Get the specified Azure ADCS Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-adcs/get-by-name GET /api/v1/app-connections/azure-adcs/connection-name/{connectionName} Get the specified Azure ADCS Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-adcs/list GET /api/v1/app-connections/azure-adcs List the Azure ADCS Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-adcs/update PATCH /api/v1/app-connections/azure-adcs/{connectionId} Update the specified Azure ADCS Connection. Azure ADCS Connections must be updated through the Infisical UI. Check out the configuration docs for [Azure ADCS Connections](/integrations/app-connections/azure-adcs) for a step-by-step guide. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-app-configuration/available GET /api/v1/app-connections/azure-app-configuration/available List the Azure App Configuration Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-app-configuration/create POST /api/v1/app-connections/azure-app-configuration Create an Azure App Configuration Connection. Azure App Configuration Connections must be created through the Infisical UI. Check out the configuration docs for [Azure App Configuration Connections](/integrations/app-connections/azure-app-configuration) for a step-by-step guide. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-app-configuration/delete DELETE /api/v1/app-connections/azure-app-configuration/{connectionId} Delete the specified Azure App Configuration Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-app-configuration/get-by-id GET /api/v1/app-connections/azure-app-configuration/{connectionId} Get the specified Azure App Configuration Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-app-configuration/get-by-name GET /api/v1/app-connections/azure-app-configuration/connection-name/{connectionName} Get the specified Azure App Configuration Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-app-configuration/list GET /api/v1/app-connections/azure-app-configuration List the Azure App Configuration Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-app-configuration/update PATCH /api/v1/app-connections/azure-app-configuration/{connectionId} Update the specified Azure App Configuration Connection. Azure App Configuration Connections must be updated through the Infisical UI. Check out the configuration docs for [Azure App Configuration Connections](/integrations/app-connections/azure-app-configuration) for a step-by-step guide. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-client-secret/available GET /api/v1/app-connections/azure-client-secrets/available List the Azure Client Secrets Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-client-secret/create POST /api/v1/app-connections/azure-client-secrets Create an Azure Client Secrets Connection. Azure Client Secret Connections must be created through the Infisical UI. Check out the configuration docs for [Azure Client Secret Connections](/integrations/app-connections/azure-client-secrets) for a step-by-step guide. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-client-secret/delete DELETE /api/v1/app-connections/azure-client-secrets/{connectionId} Delete the specified Azure Client Secrets Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-client-secret/get-by-id GET /api/v1/app-connections/azure-client-secrets/{connectionId} Get the specified Azure Client Secrets Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-client-secret/get-by-name GET /api/v1/app-connections/azure-client-secrets/connection-name/{connectionName} Get the specified Azure Client Secrets Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-client-secret/list GET /api/v1/app-connections/azure-client-secrets List the Azure Client Secrets Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-client-secret/update PATCH /api/v1/app-connections/azure-client-secrets/{connectionId} Update the specified Azure Client Secrets Connection. Azure Client Secret Connections must be updated through the Infisical UI. Check out the configuration docs for [Azure Client Secret Connections](/integrations/app-connections/azure-client-secrets) for a step-by-step guide. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-devops/available GET /api/v1/app-connections/azure-devops/available List the Azure DevOps Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-devops/create POST /api/v1/app-connections/azure-devops Create an Azure DevOps Connection. Azure DevOps Connections must be created through the Infisical UI if you are using OAuth. Check out the configuration docs for [Azure DevOps Connections](/integrations/app-connections/azure-devops) for a step-by-step guide. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-devops/delete DELETE /api/v1/app-connections/azure-devops/{connectionId} Delete the specified Azure DevOps Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-devops/get-by-id GET /api/v1/app-connections/azure-devops/{connectionId} Get the specified Azure DevOps Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-devops/get-by-name GET /api/v1/app-connections/azure-devops/connection-name/{connectionName} Get the specified Azure DevOps Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-devops/list GET /api/v1/app-connections/azure-devops List the Azure DevOps Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-devops/update PATCH /api/v1/app-connections/azure-devops/{connectionId} Update the specified Azure DevOps Connection. Azure DevOps Connections must be updated through the Infisical UI if you are using OAuth. Check out the configuration docs for [Azure DevOps Connections](/integrations/app-connections/azure-devops) for a step-by-step guide. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-key-vault/available GET /api/v1/app-connections/azure-key-vault/available List the Azure Key Vault Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-key-vault/create POST /api/v1/app-connections/azure-key-vault Create an Azure Key Vault Connection. Azure Key Vault Connections must be created through the Infisical UI. Check out the configuration docs for [Azure Key Vault Connections](/integrations/app-connections/azure-key-vault) for a step-by-step guide. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-key-vault/delete DELETE /api/v1/app-connections/azure-key-vault/{connectionId} Delete the specified Azure Key Vault Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-key-vault/get-by-id GET /api/v1/app-connections/azure-key-vault/{connectionId} Get the specified Azure Key Vault Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-key-vault/get-by-name GET /api/v1/app-connections/azure-key-vault/connection-name/{connectionName} Get the specified Azure Key Vault Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-key-vault/list GET /api/v1/app-connections/azure-key-vault List the Azure Key Vault Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/azure-key-vault/update PATCH /api/v1/app-connections/azure-key-vault/{connectionId} Update the specified Azure Key Vault Connection. Azure Key Vault Connections must be updated through the Infisical UI. Check out the configuration docs for [Azure Key Vault Connections](/integrations/app-connections/azure-key-vault) for a step-by-step guide. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/bitbucket/available GET /api/v1/app-connections/bitbucket/available List the Bitbucket Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/bitbucket/create POST /api/v1/app-connections/bitbucket Create a Bitbucket Connection. Check out the configuration docs for [Bitbucket Connections](/integrations/app-connections/bitbucket) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/bitbucket/delete DELETE /api/v1/app-connections/bitbucket/{connectionId} Delete the specified Bitbucket Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/bitbucket/get-by-id GET /api/v1/app-connections/bitbucket/{connectionId} Get the specified Bitbucket Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/bitbucket/get-by-name GET /api/v1/app-connections/bitbucket/connection-name/{connectionName} Get the specified Bitbucket Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/bitbucket/list GET /api/v1/app-connections/bitbucket List the Bitbucket Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/bitbucket/update PATCH /api/v1/app-connections/bitbucket/{connectionId} Update the specified Bitbucket Connection. Check out the configuration docs for [Bitbucket Connections](/integrations/app-connections/bitbucket) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/camunda/available GET /api/v1/app-connections/camunda/available List the Camunda Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/camunda/create POST /api/v1/app-connections/camunda Create a Camunda Connection. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/camunda/delete DELETE /api/v1/app-connections/camunda/{connectionId} Delete the specified Camunda Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/camunda/get-by-id GET /api/v1/app-connections/camunda/{connectionId} Get the specified Camunda Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/camunda/get-by-name GET /api/v1/app-connections/camunda/connection-name/{connectionName} Get the specified Camunda Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/camunda/list GET /api/v1/app-connections/camunda List the Camunda Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/camunda/update PATCH /api/v1/app-connections/camunda/{connectionId} Update the specified Camunda Connection. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/checkly/create POST /api/v1/app-connections/checkly Create a Checkly Connection. Check out the configuration docs for [Checkly Connections](/integrations/app-connections/checkly) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/checkly/delete DELETE /api/v1/app-connections/checkly/{connectionId} Delete the specified Checkly Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/checkly/get-by-id GET /api/v1/app-connections/checkly/{connectionId} Get the specified Checkly Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/checkly/get-by-name GET /api/v1/app-connections/checkly/connection-name/{connectionName} Get the specified Checkly Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/checkly/list GET /api/v1/app-connections/checkly List the Checkly Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/checkly/update PATCH /api/v1/app-connections/checkly/{connectionId} Update the specified Checkly Connection. Check out the configuration docs for [Checkly Connections](/integrations/app-connections/checkly) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/chef/available GET /api/v1/app-connections/chef/available List the Chef Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/chef/create POST /api/v1/app-connections/chef Create a Chef Connection. Check out the configuration docs for [Chef Connections](/integrations/app-connections/chef) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/chef/delete DELETE /api/v1/app-connections/chef/{connectionId} Delete the specified Chef Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/chef/get-by-id GET /api/v1/app-connections/chef/{connectionId} Get the specified Chef Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/chef/get-by-name GET /api/v1/app-connections/chef/connection-name/{connectionName} Get the specified Chef Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/chef/list GET /api/v1/app-connections/chef List the Chef Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/chef/update PATCH /api/v1/app-connections/chef/{connectionId} Update the specified Chef Connection. Check out the configuration docs for [Chef Connections](/integrations/app-connections/chef) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/cloudflare/available GET /api/v1/app-connections/cloudflare/available List the Cloudflare Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/cloudflare/create POST /api/v1/app-connections/cloudflare Create a Cloudflare Connection. Check out the configuration docs for [Cloudflare Connections](/integrations/app-connections/cloudflare) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/cloudflare/delete DELETE /api/v1/app-connections/cloudflare/{connectionId} Delete the specified Cloudflare Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/cloudflare/get-by-id GET /api/v1/app-connections/cloudflare/{connectionId} Get the specified Cloudflare Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/cloudflare/get-by-name GET /api/v1/app-connections/cloudflare/connection-name/{connectionName} Get the specified Cloudflare Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/cloudflare/list GET /api/v1/app-connections/cloudflare List the Cloudflare Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/cloudflare/update PATCH /api/v1/app-connections/cloudflare/{connectionId} Update the specified Cloudflare Connection. Check out the configuration docs for [Cloudflare Connections](/integrations/app-connections/cloudflare) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/databricks/available GET /api/v1/app-connections/databricks/available List the Databricks Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/databricks/create POST /api/v1/app-connections/databricks Create a Databricks Connection. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/databricks/delete DELETE /api/v1/app-connections/databricks/{connectionId} Delete the specified Databricks Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/databricks/get-by-id GET /api/v1/app-connections/databricks/{connectionId} Get the specified Databricks Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/databricks/get-by-name GET /api/v1/app-connections/databricks/connection-name/{connectionName} Get the specified Databricks Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/databricks/list GET /api/v1/app-connections/databricks List the Databricks Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/databricks/update PATCH /api/v1/app-connections/databricks/{connectionId} Update the specified Databricks Connection. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/digital-ocean/available GET /api/v1/app-connections/digital-ocean/available List the DigitalOcean App Platform Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/digital-ocean/create POST /api/v1/app-connections/digital-ocean Create a DigitalOcean App Platform Connection. Check out the configuration docs for [Digital Ocean Connections](/integrations/app-connections/digital-ocean) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/digital-ocean/delete DELETE /api/v1/app-connections/digital-ocean/{connectionId} Delete the specified DigitalOcean App Platform Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/digital-ocean/get-by-id GET /api/v1/app-connections/digital-ocean/{connectionId} Get the specified DigitalOcean App Platform Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/digital-ocean/get-by-name GET /api/v1/app-connections/digital-ocean/connection-name/{connectionName} Get the specified DigitalOcean App Platform Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/digital-ocean/list GET /api/v1/app-connections/digital-ocean List the DigitalOcean App Platform Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/digital-ocean/update PATCH /api/v1/app-connections/digital-ocean/{connectionId} Update the specified DigitalOcean App Platform Connection. Check out the configuration docs for [Digital Ocean Connections](/integrations/app-connections/digital-ocean) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/flyio/available GET /api/v1/app-connections/flyio/available List the Fly.io Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/flyio/create POST /api/v1/app-connections/flyio Create a Fly.io Connection. Check out the configuration docs for [Fly.io Connections](/integrations/app-connections/flyio) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/flyio/delete DELETE /api/v1/app-connections/flyio/{connectionId} Delete the specified Fly.io Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/flyio/get-by-id GET /api/v1/app-connections/flyio/{connectionId} Get the specified Fly.io Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/flyio/get-by-name GET /api/v1/app-connections/flyio/connection-name/{connectionName} Get the specified Fly.io Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/flyio/list GET /api/v1/app-connections/flyio List the Fly.io Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/flyio/update PATCH /api/v1/app-connections/flyio/{connectionId} Update the specified Fly.io Connection. Check out the configuration docs for [Fly.io Connections](/integrations/app-connections/flyio) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/gcp/available GET /api/v1/app-connections/gcp/available List the GCP Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/gcp/create POST /api/v1/app-connections/gcp Create a GCP Connection. Check out the configuration docs for [GCP Connections](/integrations/app-connections/gcp) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/gcp/delete DELETE /api/v1/app-connections/gcp/{connectionId} Delete the specified GCP Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/gcp/get-by-id GET /api/v1/app-connections/gcp/{connectionId} Get the specified GCP Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/gcp/get-by-name GET /api/v1/app-connections/gcp/connection-name/{connectionName} Get the specified GCP Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/gcp/list GET /api/v1/app-connections/gcp List the GCP Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/gcp/update PATCH /api/v1/app-connections/gcp/{connectionId} Update the specified GCP Connection. Check out the configuration docs for [GCP Connections](/integrations/app-connections/gcp) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/github-radar/available GET /api/v1/app-connections/github-radar/available List the GitHub Radar Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/github-radar/create POST /api/v1/app-connections/github-radar Create a GitHub Radar Connection. GitHub Radar Connections must be created through the Infisical UI. Check out the configuration docs for [GitHub Radar Connections](/integrations/app-connections/github-radar) for a step-by-step guide. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/github-radar/delete DELETE /api/v1/app-connections/github-radar/{connectionId} Delete the specified GitHub Radar Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/github-radar/get-by-id GET /api/v1/app-connections/github-radar/{connectionId} Get the specified GitHub Radar Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/github-radar/get-by-name GET /api/v1/app-connections/github-radar/connection-name/{connectionName} Get the specified GitHub Radar Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/github-radar/list GET /api/v1/app-connections/github-radar List the GitHub Radar Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/github-radar/update PATCH /api/v1/app-connections/github-radar/{connectionId} Update the specified GitHub Radar Connection. GitHub Radar Connections must be updated through the Infisical UI. Check out the configuration docs for [GitHub Radar Connections](/integrations/app-connections/github-radar) for a step-by-step guide. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/github/available GET /api/v1/app-connections/github/available List the GitHub Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/github/create POST /api/v1/app-connections/github Create a GitHub Connection. GitHub Connections must be created through the Infisical UI. Check out the configuration docs for [GitHub Connections](/integrations/app-connections/github) for a step-by-step guide. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/github/delete DELETE /api/v1/app-connections/github/{connectionId} Delete the specified GitHub Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/github/get-by-id GET /api/v1/app-connections/github/{connectionId} Get the specified GitHub Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/github/get-by-name GET /api/v1/app-connections/github/connection-name/{connectionName} Get the specified GitHub Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/github/list GET /api/v1/app-connections/github List the GitHub Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/github/update PATCH /api/v1/app-connections/github/{connectionId} Update the specified GitHub Connection. GitHub Connections must be updated through the Infisical UI. Check out the configuration docs for [GitHub Connections](/integrations/app-connections/github) for a step-by-step guide. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/gitlab/available GET /api/v1/app-connections/gitlab/available List the GitLab Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/gitlab/create POST /api/v1/app-connections/gitlab Create a GitLab Connection. Gitlab OAuth Connections must be created through the Infisical UI. Check out the configuration docs for [Gitlab OAuth Connections](/integrations/app-connections/gitlab) for a step-by-step guide. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/gitlab/delete DELETE /api/v1/app-connections/gitlab/{connectionId} Delete the specified GitLab Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/gitlab/get-by-id GET /api/v1/app-connections/gitlab/{connectionId} Get the specified GitLab Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/gitlab/get-by-name GET /api/v1/app-connections/gitlab/connection-name/{connectionName} Get the specified GitLab Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/gitlab/list GET /api/v1/app-connections/gitlab List the GitLab Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/gitlab/update PATCH /api/v1/app-connections/gitlab/{connectionId} Update the specified GitLab Connection. Gitlab OAuth Connections must be updated through the Infisical UI. Check out the configuration docs for [Gitlab OAuth Connections](/integrations/app-connections/gitlab) for a step-by-step guide. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/hashicorp-vault/available GET /api/v1/app-connections/hashicorp-vault/available List the Hashicorp Vault Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/hashicorp-vault/create POST /api/v1/app-connections/hashicorp-vault Create a Hashicorp Vault Connection. Check out the configuration docs for [Hashicorp Vault Connections](/integrations/app-connections/hashicorp-vault) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/hashicorp-vault/delete DELETE /api/v1/app-connections/hashicorp-vault/{connectionId} Delete the specified Hashicorp Vault Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/hashicorp-vault/get-by-id GET /api/v1/app-connections/hashicorp-vault/{connectionId} Get the specified Hashicorp Vault Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/hashicorp-vault/get-by-name GET /api/v1/app-connections/hashicorp-vault/connection-name/{connectionName} Get the specified Hashicorp Vault Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/hashicorp-vault/list GET /api/v1/app-connections/hashicorp-vault List the Hashicorp Vault Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/hashicorp-vault/update PATCH /api/v1/app-connections/hashicorp-vault/{connectionId} Update the specified Hashicorp Vault Connection. Check out the configuration docs for [Hashicorp Vault Connections](/integrations/app-connections/hashicorp-vault) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/heroku/available GET /api/v1/app-connections/heroku/available List the Heroku Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/heroku/create POST /api/v1/app-connections/heroku Create a Heroku Connection. Heroku OAuth Connections must be created through the Infisical UI. Check out the configuration docs for [Heroku OAuth Connections](/integrations/app-connections/heroku) for a step-by-step guide. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/heroku/delete DELETE /api/v1/app-connections/heroku/{connectionId} Delete the specified Heroku Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/heroku/get-by-id GET /api/v1/app-connections/heroku/{connectionId} Get the specified Heroku Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/heroku/get-by-name GET /api/v1/app-connections/heroku/connection-name/{connectionName} Get the specified Heroku Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/heroku/list GET /api/v1/app-connections/heroku List the Heroku Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/heroku/update PATCH /api/v1/app-connections/heroku/{connectionId} Update the specified Heroku Connection. Heroku OAuth Connections must be updated through the Infisical UI. Check out the configuration docs for [Heroku OAuth Connections](/integrations/app-connections/heroku) for a step-by-step guide. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/humanitec/available GET /api/v1/app-connections/humanitec/available List the Humanitec Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/humanitec/create POST /api/v1/app-connections/humanitec Create a Humanitec Connection. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/humanitec/delete DELETE /api/v1/app-connections/humanitec/{connectionId} Delete the specified Humanitec Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/humanitec/get-by-id GET /api/v1/app-connections/humanitec/{connectionId} Get the specified Humanitec Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/humanitec/get-by-name GET /api/v1/app-connections/humanitec/connection-name/{connectionName} Get the specified Humanitec Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/humanitec/list GET /api/v1/app-connections/humanitec List the Humanitec Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/humanitec/update PATCH /api/v1/app-connections/humanitec/{connectionId} Update the specified Humanitec Connection. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/laravel-forge/available GET /api/v1/app-connections/laravel-forge/available List the Laravel Forge Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/laravel-forge/create POST /api/v1/app-connections/laravel-forge Create a Laravel Forge Connection. Check out the configuration docs for [Laravel Forge Connections](/integrations/app-connections/laravel-forge) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/laravel-forge/delete DELETE /api/v1/app-connections/laravel-forge/{connectionId} Delete the specified Laravel Forge Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/laravel-forge/get-by-id GET /api/v1/app-connections/laravel-forge/{connectionId} Get the specified Laravel Forge Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/laravel-forge/get-by-name GET /api/v1/app-connections/laravel-forge/connection-name/{connectionName} Get the specified Laravel Forge Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/laravel-forge/list GET /api/v1/app-connections/laravel-forge List the Laravel Forge Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/laravel-forge/update PATCH /api/v1/app-connections/laravel-forge/{connectionId} Update the specified Laravel Forge Connection. Check out the configuration docs for [Laravel Forge Connections](/integrations/app-connections/laravel-forge) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/ldap/available GET /api/v1/app-connections/ldap/available List the LDAP Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/ldap/create POST /api/v1/app-connections/ldap Create a LDAP Connection. Check out the configuration docs for [LDAP Connections](/integrations/app-connections/ldap) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/ldap/delete DELETE /api/v1/app-connections/ldap/{connectionId} Delete the specified LDAP Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/ldap/get-by-id GET /api/v1/app-connections/ldap/{connectionId} Get the specified LDAP Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/ldap/get-by-name GET /api/v1/app-connections/ldap/connection-name/{connectionName} Get the specified LDAP Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/ldap/list GET /api/v1/app-connections/ldap List the LDAP Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/ldap/update PATCH /api/v1/app-connections/ldap/{connectionId} Update the specified LDAP Connection. Check out the configuration docs for [LDAP Connections](/integrations/app-connections/ldap) to learn how to obtain the required credentials. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/list GET /api/v1/app-connections List all the App Connections for the current organization or project. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/mssql/available GET /api/v1/app-connections/mssql/available List the Microsoft SQL Server Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/mssql/create POST /api/v1/app-connections/mssql Create a Microsoft SQL Server Connection. Check out the configuration docs for [Microsoft SQL Server Connections](/integrations/app-connections/mssql) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/mssql/delete DELETE /api/v1/app-connections/mssql/{connectionId} Delete the specified Microsoft SQL Server Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/mssql/get-by-id GET /api/v1/app-connections/mssql/{connectionId} Get the specified Microsoft SQL Server Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/mssql/get-by-name GET /api/v1/app-connections/mssql/connection-name/{connectionName} Get the specified Microsoft SQL Server Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/mssql/list GET /api/v1/app-connections/mssql List the Microsoft SQL Server Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/mssql/update PATCH /api/v1/app-connections/mssql/{connectionId} Update the specified Microsoft SQL Server Connection. Check out the configuration docs for [Microsoft SQL Server Connections](/integrations/app-connections/mssql) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/mysql/available GET /api/v1/app-connections/mysql/available List the MySQL Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/mysql/create POST /api/v1/app-connections/mysql Create a MySQL Connection. Check out the configuration docs for [MySQL Connections](/integrations/app-connections/mysql) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/mysql/delete DELETE /api/v1/app-connections/mysql/{connectionId} Delete the specified MySQL Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/mysql/get-by-id GET /api/v1/app-connections/mysql/{connectionId} Get the specified MySQL Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/mysql/get-by-name GET /api/v1/app-connections/mysql/connection-name/{connectionName} Get the specified MySQL Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/mysql/list GET /api/v1/app-connections/mysql List the MySQL Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/mysql/update PATCH /api/v1/app-connections/mysql/{connectionId} Update the specified MySQL Connection. Check out the configuration docs for [MySQL Connections](/integrations/app-connections/mysql) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/netlify/available GET /api/v1/app-connections/netlify/available List the Netlify Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/netlify/create POST /api/v1/app-connections/netlify Create a Netlify Connection. Check out the configuration docs for [Netlify Connections](/integrations/app-connections/netlify) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/netlify/delete DELETE /api/v1/app-connections/netlify/{connectionId} Delete the specified Netlify Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/netlify/get-by-id GET /api/v1/app-connections/netlify/{connectionId} Get the specified Netlify Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/netlify/get-by-name GET /api/v1/app-connections/netlify/connection-name/{connectionName} Get the specified Netlify Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/netlify/list GET /api/v1/app-connections/netlify List the Netlify Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/netlify/update PATCH /api/v1/app-connections/netlify/{connectionId} Update the specified Netlify Connection. Check out the configuration docs for [Netlify Connections](/integrations/app-connections/netlify) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/northflank/available GET /api/v1/app-connections/northflank/available List the Northflank Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/northflank/create POST /api/v1/app-connections/northflank Create a Northflank Connection. Check out the configuration docs for [Northflank Connections](/integrations/app-connections/northflank) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/northflank/delete DELETE /api/v1/app-connections/northflank/{connectionId} Delete the specified Northflank Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/northflank/get-by-id GET /api/v1/app-connections/northflank/{connectionId} Get the specified Northflank Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/northflank/get-by-name GET /api/v1/app-connections/northflank/connection-name/{connectionName} Get the specified Northflank Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/northflank/list GET /api/v1/app-connections/northflank List the Northflank Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/northflank/update PATCH /api/v1/app-connections/northflank/{connectionId} Update the specified Northflank Connection. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/oci/available GET /api/v1/app-connections/oci/available List the OCI Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/oci/create POST /api/v1/app-connections/oci Create an OCI Connection. Check out the configuration docs for [OCI Connections](/integrations/app-connections/oci) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/oci/delete DELETE /api/v1/app-connections/oci/{connectionId} Delete the specified OCI Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/oci/get-by-id GET /api/v1/app-connections/oci/{connectionId} Get the specified OCI Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/oci/get-by-name GET /api/v1/app-connections/oci/connection-name/{connectionName} Get the specified OCI Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/oci/list GET /api/v1/app-connections/oci List the OCI Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/oci/update PATCH /api/v1/app-connections/oci/{connectionId} Update the specified OCI Connection. Check out the configuration docs for [OCI Connections](/integrations/app-connections/oci) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/okta/available GET /api/v1/app-connections/okta/available List the Okta Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/okta/create POST /api/v1/app-connections/okta Create an Okta Connection. Check out the configuration docs for [Okta Connections](/integrations/app-connections/okta) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/okta/delete DELETE /api/v1/app-connections/okta/{connectionId} Delete the specified Okta Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/okta/get-by-id GET /api/v1/app-connections/okta/{connectionId} Get the specified Okta Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/okta/get-by-name GET /api/v1/app-connections/okta/connection-name/{connectionName} Get the specified Okta Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/okta/list GET /api/v1/app-connections/okta List the Okta Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/okta/update PATCH /api/v1/app-connections/okta/{connectionId} Update the specified Okta Connection. Check out the configuration docs for [Okta Connections](/integrations/app-connections/okta) to learn how to obtain the required credentials. # Options Source: https://infisical.com/docs/api-reference/endpoints/app-connections/options GET /api/v1/app-connections/options List the available App Connection Options. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/oracledb/available GET /api/v1/app-connections/oracledb/available List the OracleDB Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/oracledb/create POST /api/v1/app-connections/oracledb Create an OracleDB Connection. Check out the configuration docs for [OracleDB Connections](/integrations/app-connections/oracledb) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/oracledb/delete DELETE /api/v1/app-connections/oracledb/{connectionId} Delete the specified OracleDB Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/oracledb/get-by-id GET /api/v1/app-connections/oracledb/{connectionId} Get the specified OracleDB Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/oracledb/get-by-name GET /api/v1/app-connections/oracledb/connection-name/{connectionName} Get the specified OracleDB Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/oracledb/list GET /api/v1/app-connections/oracledb List the OracleDB Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/oracledb/update PATCH /api/v1/app-connections/oracledb/{connectionId} Update the specified OracleDB Connection. Check out the configuration docs for [OracleDB Connections](/integrations/app-connections/oracledb) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/postgres/available GET /api/v1/app-connections/postgres/available List the PostgreSQL Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/postgres/create POST /api/v1/app-connections/postgres Create a PostgreSQL Connection. Check out the configuration docs for [PostgreSQL Connections](/integrations/app-connections/postgres) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/postgres/delete DELETE /api/v1/app-connections/postgres/{connectionId} Delete the specified PostgreSQL Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/postgres/get-by-id GET /api/v1/app-connections/postgres/{connectionId} Get the specified PostgreSQL Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/postgres/get-by-name GET /api/v1/app-connections/postgres/connection-name/{connectionName} Get the specified PostgreSQL Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/postgres/list GET /api/v1/app-connections/postgres List the PostgreSQL Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/postgres/update PATCH /api/v1/app-connections/postgres/{connectionId} Update the specified PostgreSQL Connection. Check out the configuration docs for [PostgreSQL Connections](/integrations/app-connections/postgres) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/railway/available GET /api/v1/app-connections/railway/available List the Railway Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/railway/create POST /api/v1/app-connections/railway Create a Railway Connection. Check out the configuration docs for [Railway Connections](/integrations/app-connections/railway) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/railway/delete DELETE /api/v1/app-connections/railway/{connectionId} Delete the specified Railway Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/railway/get-by-id GET /api/v1/app-connections/railway/{connectionId} Get the specified Railway Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/railway/get-by-name GET /api/v1/app-connections/railway/connection-name/{connectionName} Get the specified Railway Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/railway/list GET /api/v1/app-connections/railway List the Railway Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/railway/update PATCH /api/v1/app-connections/railway/{connectionId} Update the specified Railway Connection. Check out the configuration docs for [Railway Connections](/integrations/app-connections/railway) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/redis/available GET /api/v1/app-connections/redis/available List the Redis Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/redis/create POST /api/v1/app-connections/redis Create a Redis Connection. Check out the configuration docs for [Redis Connections](/integrations/app-connections/redis) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/redis/delete DELETE /api/v1/app-connections/redis/{connectionId} Delete the specified Redis Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/redis/get-by-id GET /api/v1/app-connections/redis/{connectionId} Get the specified Redis Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/redis/get-by-name GET /api/v1/app-connections/redis/connection-name/{connectionName} Get the specified Redis Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/redis/list GET /api/v1/app-connections/redis List the Redis Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/redis/update PATCH /api/v1/app-connections/redis/{connectionId} Update the specified Redis Connection. Check out the configuration docs for [Redis Connections](/integrations/app-connections/redis) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/render/available GET /api/v1/app-connections/render/available List the Render Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/render/create POST /api/v1/app-connections/render Create a Render Connection. Check out the configuration docs for [Render Connections](/integrations/app-connections/render) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/render/delete DELETE /api/v1/app-connections/render/{connectionId} Delete the specified Render Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/render/get-by-id GET /api/v1/app-connections/render/{connectionId} Get the specified Render Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/render/get-by-name GET /api/v1/app-connections/render/connection-name/{connectionName} Get the specified Render Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/render/list GET /api/v1/app-connections/render List the Render Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/render/update PATCH /api/v1/app-connections/render/{connectionId} Update the specified Render Connection. Check out the configuration docs for [Render Connections](/integrations/app-connections/render) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/supabase/available GET /api/v1/app-connections/supabase/available List the Supabase Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/supabase/create POST /api/v1/app-connections/supabase Create a Supabase Connection. Check out the configuration docs for [Supabase Connections](/integrations/app-connections/supabase) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/supabase/delete DELETE /api/v1/app-connections/supabase/{connectionId} Delete the specified Supabase Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/supabase/get-by-id GET /api/v1/app-connections/supabase/{connectionId} Get the specified Supabase Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/supabase/get-by-name GET /api/v1/app-connections/supabase/connection-name/{connectionName} Get the specified Supabase Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/supabase/list GET /api/v1/app-connections/supabase List the Supabase Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/supabase/update PATCH /api/v1/app-connections/supabase/{connectionId} Update the specified Supabase Connection. Check out the configuration docs for [Supabase Connections](/integrations/app-connections/supabase) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/teamcity/available GET /api/v1/app-connections/teamcity/available List the TeamCity Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/teamcity/create POST /api/v1/app-connections/teamcity Create a TeamCity Connection. Check out the configuration docs for [TeamCity Connections](/integrations/app-connections/teamcity) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/teamcity/delete DELETE /api/v1/app-connections/teamcity/{connectionId} Delete the specified TeamCity Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/teamcity/get-by-id GET /api/v1/app-connections/teamcity/{connectionId} Get the specified TeamCity Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/teamcity/get-by-name GET /api/v1/app-connections/teamcity/connection-name/{connectionName} Get the specified TeamCity Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/teamcity/list GET /api/v1/app-connections/teamcity List the TeamCity Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/teamcity/update PATCH /api/v1/app-connections/teamcity/{connectionId} Update the specified TeamCity Connection. Check out the configuration docs for [TeamCity Connections](/integrations/app-connections/teamcity) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/terraform-cloud/available GET /api/v1/app-connections/terraform-cloud/available List the Terraform Cloud Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/terraform-cloud/create POST /api/v1/app-connections/terraform-cloud Create a Terraform Cloud Connection. Check out the configuration docs for [Terraform Cloud Connections](/integrations/app-connections/terraform-cloud) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/terraform-cloud/delete DELETE /api/v1/app-connections/terraform-cloud/{connectionId} Delete the specified Terraform Cloud Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/terraform-cloud/get-by-id GET /api/v1/app-connections/terraform-cloud/{connectionId} Get the specified Terraform Cloud Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/terraform-cloud/get-by-name GET /api/v1/app-connections/terraform-cloud/connection-name/{connectionName} Get the specified Terraform Cloud Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/terraform-cloud/list GET /api/v1/app-connections/terraform-cloud List the Terraform Cloud Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/terraform-cloud/update PATCH /api/v1/app-connections/terraform-cloud/{connectionId} Update the specified Terraform Cloud Connection. Check out the configuration docs for [Terraform Cloud Connections](/integrations/app-connections/terraform-cloud) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/vercel/available GET /api/v1/app-connections/vercel/available List the Vercel Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/vercel/create POST /api/v1/app-connections/vercel Create a Vercel Connection. Check out the configuration docs for [Vercel Connections](/integrations/app-connections/vercel) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/vercel/delete DELETE /api/v1/app-connections/vercel/{connectionId} Delete the specified Vercel Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/vercel/get-by-id GET /api/v1/app-connections/vercel/{connectionId} Get the specified Vercel Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/vercel/get-by-name GET /api/v1/app-connections/vercel/connection-name/{connectionName} Get the specified Vercel Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/vercel/list GET /api/v1/app-connections/vercel List the Vercel Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/vercel/update PATCH /api/v1/app-connections/vercel/{connectionId} Update the specified Vercel Connection. Check out the configuration docs for [Vercel Connections](/integrations/app-connections/vercel) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/windmill/available GET /api/v1/app-connections/windmill/available List the Windmill Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/windmill/create POST /api/v1/app-connections/windmill Create a Windmill Connection. Check out the configuration docs for [Windmill Connections](/integrations/app-connections/windmill) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/windmill/delete DELETE /api/v1/app-connections/windmill/{connectionId} Delete the specified Windmill Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/windmill/get-by-id GET /api/v1/app-connections/windmill/{connectionId} Get the specified Windmill Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/windmill/get-by-name GET /api/v1/app-connections/windmill/connection-name/{connectionName} Get the specified Windmill Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/windmill/list GET /api/v1/app-connections/windmill List the Windmill Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/windmill/update PATCH /api/v1/app-connections/windmill/{connectionId} Update the specified Windmill Connection. Check out the configuration docs for [Windmill Connections](/integrations/app-connections/windmill) to learn how to obtain the required credentials. # Available Source: https://infisical.com/docs/api-reference/endpoints/app-connections/zabbix/available GET /api/v1/app-connections/zabbix/available List the Zabbix Connections the current user has permission to establish connections within this project. # Create Source: https://infisical.com/docs/api-reference/endpoints/app-connections/zabbix/create POST /api/v1/app-connections/zabbix Create a Zabbix Connection. Check out the configuration docs for [Zabbix Connections](/integrations/app-connections/zabbix) to learn how to obtain the required credentials. # Delete Source: https://infisical.com/docs/api-reference/endpoints/app-connections/zabbix/delete DELETE /api/v1/app-connections/zabbix/{connectionId} Delete the specified Zabbix Connection. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/app-connections/zabbix/get-by-id GET /api/v1/app-connections/zabbix/{connectionId} Get the specified Zabbix Connection by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/app-connections/zabbix/get-by-name GET /api/v1/app-connections/zabbix/connection-name/{connectionName} Get the specified Zabbix Connection by name. # List Source: https://infisical.com/docs/api-reference/endpoints/app-connections/zabbix/list GET /api/v1/app-connections/zabbix List the Zabbix Connections for the current organization or project. # Update Source: https://infisical.com/docs/api-reference/endpoints/app-connections/zabbix/update PATCH /api/v1/app-connections/zabbix/{connectionId} Update the specified Zabbix Connection. Check out the configuration docs for [Zabbix Connections](/integrations/app-connections/zabbix) to learn how to obtain the required credentials. # Export Source: https://infisical.com/docs/api-reference/endpoints/audit-logs/export-audit-log GET /api/v1/organization/audit-logs Get all audit logs for an organization # Attach Source: https://infisical.com/docs/api-reference/endpoints/aws-auth/attach POST /api/v1/auth/aws-auth/identities/{identityId} Attach AWS Auth configuration onto machine identity # Login Source: https://infisical.com/docs/api-reference/endpoints/aws-auth/login POST /api/v1/auth/aws-auth/login Login with AWS Auth for machine identity # Retrieve Source: https://infisical.com/docs/api-reference/endpoints/aws-auth/retrieve GET /api/v1/auth/aws-auth/identities/{identityId} Retrieve AWS Auth configuration on machine identity # Revoke Source: https://infisical.com/docs/api-reference/endpoints/aws-auth/revoke DELETE /api/v1/auth/aws-auth/identities/{identityId} Delete AWS Auth configuration on machine identity # Update Source: https://infisical.com/docs/api-reference/endpoints/aws-auth/update PATCH /api/v1/auth/aws-auth/identities/{identityId} Update AWS Auth configuration on machine identity # Attach Source: https://infisical.com/docs/api-reference/endpoints/azure-auth/attach POST /api/v1/auth/azure-auth/identities/{identityId} Attach Azure Auth configuration onto machine identity # Login Source: https://infisical.com/docs/api-reference/endpoints/azure-auth/login POST /api/v1/auth/azure-auth/login Login with Azure Auth for machine identity # Retrieve Source: https://infisical.com/docs/api-reference/endpoints/azure-auth/retrieve GET /api/v1/auth/azure-auth/identities/{identityId} Retrieve Azure Auth configuration on machine identity # Revoke Source: https://infisical.com/docs/api-reference/endpoints/azure-auth/revoke DELETE /api/v1/auth/azure-auth/identities/{identityId} Delete Azure Auth configuration on machine identity # Update Source: https://infisical.com/docs/api-reference/endpoints/azure-auth/update PATCH /api/v1/auth/azure-auth/identities/{identityId} Update Azure Auth configuration on machine identity # Create Source: https://infisical.com/docs/api-reference/endpoints/certificate-authorities/acme/create POST /api/v1/cert-manager/ca/acme # Delete Source: https://infisical.com/docs/api-reference/endpoints/certificate-authorities/acme/delete DELETE /api/v1/cert-manager/ca/acme/{id} # List Source: https://infisical.com/docs/api-reference/endpoints/certificate-authorities/acme/list GET /api/v1/cert-manager/ca/acme # Read Source: https://infisical.com/docs/api-reference/endpoints/certificate-authorities/acme/read GET /api/v1/cert-manager/ca/acme/{id} # Update Source: https://infisical.com/docs/api-reference/endpoints/certificate-authorities/acme/update PATCH /api/v1/cert-manager/ca/acme/{id} # Retrieve certificate / chain Source: https://infisical.com/docs/api-reference/endpoints/certificate-authorities/internal/cert GET /api/v1/cert-manager/ca/internal/{caId}/certificate Get current CA cert and cert chain of a CA # Create Source: https://infisical.com/docs/api-reference/endpoints/certificate-authorities/internal/create POST /api/v1/cert-manager/ca/internal # List CRLs Source: https://infisical.com/docs/api-reference/endpoints/certificate-authorities/internal/crl GET /api/v1/cert-manager/ca/internal/{caId}/crls Get list of CRLs of the CA # Get CSR Source: https://infisical.com/docs/api-reference/endpoints/certificate-authorities/internal/csr GET /api/v1/cert-manager/ca/internal/{caId}/csr Get CA CSR # Delete Source: https://infisical.com/docs/api-reference/endpoints/certificate-authorities/internal/delete DELETE /api/v1/cert-manager/ca/internal/{id} # Import certificate Source: https://infisical.com/docs/api-reference/endpoints/certificate-authorities/internal/import-cert POST /api/v1/cert-manager/ca/internal/{caId}/import-certificate Import certificate and chain to CA # List Source: https://infisical.com/docs/api-reference/endpoints/certificate-authorities/internal/list GET /api/v1/cert-manager/ca/internal # List CA certificates Source: https://infisical.com/docs/api-reference/endpoints/certificate-authorities/internal/list-ca-certs GET /api/v1/cert-manager/ca/internal/{caId}/ca-certificates Get list of past and current CA certificates for a CA # Read Source: https://infisical.com/docs/api-reference/endpoints/certificate-authorities/internal/read GET /api/v1/cert-manager/ca/internal/{id} # Renew Source: https://infisical.com/docs/api-reference/endpoints/certificate-authorities/internal/renew POST /api/v1/cert-manager/ca/internal/{caId}/renew Perform CA certificate renewal # Sign intermediate certificate Source: https://infisical.com/docs/api-reference/endpoints/certificate-authorities/internal/sign-intermediate POST /api/v1/cert-manager/ca/internal/{caId}/sign-intermediate Create intermediate CA certificate from parent CA # Update Source: https://infisical.com/docs/api-reference/endpoints/certificate-authorities/internal/update PATCH /api/v1/cert-manager/ca/internal/{id} # Create Source: https://infisical.com/docs/api-reference/endpoints/certificate-profiles/create POST /api/v1/cert-manager/certificate-profiles # Delete Source: https://infisical.com/docs/api-reference/endpoints/certificate-profiles/delete DELETE /api/v1/cert-manager/certificate-profiles/{id} # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/certificate-profiles/get-by-id GET /api/v1/cert-manager/certificate-profiles/{id} # Get by Slug Source: https://infisical.com/docs/api-reference/endpoints/certificate-profiles/get-by-slug GET /api/v1/cert-manager/certificate-profiles/slug/{slug} # Get Latest Active Certificate Bundle Source: https://infisical.com/docs/api-reference/endpoints/certificate-profiles/get-latest-active-bundle GET /api/v1/cert-manager/certificate-profiles/{id}/certificates/latest-active-bundle Get latest active certificate bundle for a profile # List Source: https://infisical.com/docs/api-reference/endpoints/certificate-profiles/list GET /api/v1/cert-manager/certificate-profiles # List Certificates Source: https://infisical.com/docs/api-reference/endpoints/certificate-profiles/list-certificates GET /api/v1/cert-manager/certificate-profiles/{id}/certificates # Update Source: https://infisical.com/docs/api-reference/endpoints/certificate-profiles/update PATCH /api/v1/cert-manager/certificate-profiles/{id} # Create Source: https://infisical.com/docs/api-reference/endpoints/certificate-templates/create POST /api/v1/cert-manager/certificate-templates # Delete Source: https://infisical.com/docs/api-reference/endpoints/certificate-templates/delete DELETE /api/v1/cert-manager/certificate-templates/{id} # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/certificate-templates/get-by-id GET /api/v1/cert-manager/certificate-templates/{id} # List Source: https://infisical.com/docs/api-reference/endpoints/certificate-templates/list GET /api/v1/cert-manager/certificate-templates # Update Source: https://infisical.com/docs/api-reference/endpoints/certificate-templates/update PATCH /api/v1/cert-manager/certificate-templates/{id} # Get Certificate Bundle Source: https://infisical.com/docs/api-reference/endpoints/certificates/bundle GET /api/v1/cert-manager/certificates/{id}/bundle Get certificate bundle including the certificate, chain, and private key. You must have the certificate `read-private-key` permission in order to call this endpoint. # Get Certificate Body / Chain Source: https://infisical.com/docs/api-reference/endpoints/certificates/cert-body GET /api/v1/cert-manager/certificates/{id}/certificate Get certificate body of certificate # Delete Source: https://infisical.com/docs/api-reference/endpoints/certificates/delete DELETE /api/v1/cert-manager/certificates/{id} Delete certificate # List Source: https://infisical.com/docs/api-reference/endpoints/certificates/list GET /api/v2/workspace/{slug}/certificates # Get Certificate Private Key Source: https://infisical.com/docs/api-reference/endpoints/certificates/private-key GET /api/v1/cert-manager/certificates/{id}/private-key Get certificate private key # Retrieve Source: https://infisical.com/docs/api-reference/endpoints/certificates/read GET /api/v1/cert-manager/certificates/{id} Get certificate # Renew Certificate Source: https://infisical.com/docs/api-reference/endpoints/certificates/renew POST /api/v1/cert-manager/certificates/{id}/renew # Revoke Source: https://infisical.com/docs/api-reference/endpoints/certificates/revoke POST /api/v1/cert-manager/certificates/{id}/revoke Revoke # Update Certificate Config Source: https://infisical.com/docs/api-reference/endpoints/certificates/update-config PATCH /api/v1/cert-manager/certificates/{id}/config # Create Source: https://infisical.com/docs/api-reference/endpoints/deprecated/environments/create POST /api/v1/workspace/{workspaceId}/environments Create environment # Delete Source: https://infisical.com/docs/api-reference/endpoints/deprecated/environments/delete DELETE /api/v1/workspace/{workspaceId}/environments/{id} Delete environment # Update Source: https://infisical.com/docs/api-reference/endpoints/deprecated/environments/update PATCH /api/v1/workspace/{workspaceId}/environments/{id} Update environment # Create Source: https://infisical.com/docs/api-reference/endpoints/deprecated/folders/create POST /api/v1/folders Create folders # Delete Source: https://infisical.com/docs/api-reference/endpoints/deprecated/folders/delete DELETE /api/v1/folders/{folderIdOrName} Delete a folder # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/deprecated/folders/get-by-id GET /api/v1/folders/{id} Get folder by id # List Source: https://infisical.com/docs/api-reference/endpoints/deprecated/folders/list GET /api/v1/folders Get folders # Update Source: https://infisical.com/docs/api-reference/endpoints/deprecated/folders/update PATCH /api/v1/folders/{folderId} Update folder # Get Projects Source: https://infisical.com/docs/api-reference/endpoints/deprecated/organizations/projects GET /api/v2/organizations/{organizationId}/workspaces Return projects in organization that user is apart of # Create Project Membership Source: https://infisical.com/docs/api-reference/endpoints/deprecated/project-groups/create POST /api/v2/workspace/{projectId}/groups/{groupIdOrName} Add group to project # Delete Project Membership Source: https://infisical.com/docs/api-reference/endpoints/deprecated/project-groups/delete DELETE /api/v2/workspace/{projectId}/groups/{groupId} Remove group from project # Get Project Membership Source: https://infisical.com/docs/api-reference/endpoints/deprecated/project-groups/get-by-id GET /api/v2/workspace/{projectId}/groups/{groupId} Return project group # List Project Memberships Source: https://infisical.com/docs/api-reference/endpoints/deprecated/project-groups/list GET /api/v2/workspace/{projectId}/groups Return list of groups in project # Update Project Membership Source: https://infisical.com/docs/api-reference/endpoints/deprecated/project-groups/update PATCH /api/v2/workspace/{projectId}/groups/{groupId} Update group in project # Create Identity Membership Source: https://infisical.com/docs/api-reference/endpoints/deprecated/project-identities-v2/add-identity-membership POST /api/v1/projects/{projectId}/identity-memberships/{identityId} Create project identity membership # Delete Identity Membership Source: https://infisical.com/docs/api-reference/endpoints/deprecated/project-identities-v2/delete-identity-membership DELETE /api/v1/projects/{projectId}/identity-memberships/{identityId} Delete project identity memberships # Get Identity by ID Source: https://infisical.com/docs/api-reference/endpoints/deprecated/project-identities-v2/get-by-id GET /api/v1/projects/{projectId}/identity-memberships/{identityId} Return project identity membership # List Identity Memberships Source: https://infisical.com/docs/api-reference/endpoints/deprecated/project-identities-v2/list-identity-memberships GET /api/v1/projects/{projectId}/identity-memberships Return project identity memberships # Update Identity Membership Source: https://infisical.com/docs/api-reference/endpoints/deprecated/project-identities-v2/update-identity-membership PATCH /api/v1/projects/{projectId}/identity-memberships/{identityId} Update project identity memberships # Create Source: https://infisical.com/docs/api-reference/endpoints/deprecated/project-roles/create POST /api/v2/workspace/{projectId}/roles Create a project role You can read more about the permissions field in the [permissions documentation](/internals/permissions). # Delete Source: https://infisical.com/docs/api-reference/endpoints/deprecated/project-roles/delete DELETE /api/v2/workspace/{projectId}/roles/{roleId} Delete a project role # Get By Slug Source: https://infisical.com/docs/api-reference/endpoints/deprecated/project-roles/get-by-slug GET /api/v2/workspace/{projectId}/roles/slug/{roleSlug} # List Source: https://infisical.com/docs/api-reference/endpoints/deprecated/project-roles/list GET /api/v2/workspace/{projectId}/roles List project role # Update Source: https://infisical.com/docs/api-reference/endpoints/deprecated/project-roles/update PATCH /api/v2/workspace/{projectId}/roles/{roleId} Update a project role # Get By Username Source: https://infisical.com/docs/api-reference/endpoints/deprecated/project-users/get-by-username POST /api/v1/workspace/{workspaceId}/memberships/details Return project user memberships # Invite Member Source: https://infisical.com/docs/api-reference/endpoints/deprecated/project-users/invite-member-to-project POST /api/v2/workspace/{projectId}/memberships Invite members to project # Get User Memberships Source: https://infisical.com/docs/api-reference/endpoints/deprecated/project-users/memberships GET /api/v1/workspace/{workspaceId}/memberships Return project user memberships # Remove Member Source: https://infisical.com/docs/api-reference/endpoints/deprecated/project-users/remove-member-from-project DELETE /api/v2/workspace/{projectId}/memberships Remove members from project # Update User Membership Source: https://infisical.com/docs/api-reference/endpoints/deprecated/project-users/update-membership PATCH /api/v1/workspace/{workspaceId}/memberships/{membershipId} Update project user membership # Create Project Source: https://infisical.com/docs/api-reference/endpoints/deprecated/projects/create-project POST /api/v2/workspace Create a new project # Delete Project Source: https://infisical.com/docs/api-reference/endpoints/deprecated/projects/delete-project DELETE /api/v1/workspace/{workspaceId} Delete project This operation is irreversible. All data associated with the project will be deleted. Please use with caution. # Get Project Source: https://infisical.com/docs/api-reference/endpoints/deprecated/projects/get-project GET /api/v1/workspace/{workspaceId} Get project # Get Project By Slug Source: https://infisical.com/docs/api-reference/endpoints/deprecated/projects/get-project-by-slug GET /api/v2/workspace/{slug} Get project details by slug # Get Snapshots Source: https://infisical.com/docs/api-reference/endpoints/deprecated/projects/secret-snapshots GET /api/v1/workspace/{workspaceId}/secret-snapshots Return project secret snapshots ids # Update Project Source: https://infisical.com/docs/api-reference/endpoints/deprecated/projects/update-project PATCH /api/v1/workspace/{workspaceId} Update project # Create Source: https://infisical.com/docs/api-reference/endpoints/deprecated/secret-imports/create POST /api/v1/secret-imports Create secret imports # Delete Source: https://infisical.com/docs/api-reference/endpoints/deprecated/secret-imports/delete DELETE /api/v1/secret-imports/{secretImportId} Delete secret imports # List Source: https://infisical.com/docs/api-reference/endpoints/deprecated/secret-imports/list GET /api/v1/secret-imports Get secret imports # Update Source: https://infisical.com/docs/api-reference/endpoints/deprecated/secret-imports/update PATCH /api/v1/secret-imports/{secretImportId} Update secret imports # Create Source: https://infisical.com/docs/api-reference/endpoints/deprecated/secret-tags/create POST /api/v1/workspace/{projectId}/tags # Delete Source: https://infisical.com/docs/api-reference/endpoints/deprecated/secret-tags/delete DELETE /api/v1/workspace/{projectId}/tags/{tagId} # Get By ID Source: https://infisical.com/docs/api-reference/endpoints/deprecated/secret-tags/get-by-id GET /api/v1/workspace/{projectId}/tags/{tagId} # Get By Slug Source: https://infisical.com/docs/api-reference/endpoints/deprecated/secret-tags/get-by-slug GET /api/v1/workspace/{projectId}/tags/slug/{tagSlug} # List Source: https://infisical.com/docs/api-reference/endpoints/deprecated/secret-tags/list GET /api/v1/workspace/{projectId}/tags # Update Source: https://infisical.com/docs/api-reference/endpoints/deprecated/secret-tags/update PATCH /api/v1/workspace/{projectId}/tags/{tagId} # Attach tags Source: https://infisical.com/docs/api-reference/endpoints/deprecated/secrets/attach-tags POST /api/v3/secrets/tags/{secretName} Attach tags to a secret # Create Source: https://infisical.com/docs/api-reference/endpoints/deprecated/secrets/create POST /api/v3/secrets/raw/{secretName} Create secret # Bulk Create Source: https://infisical.com/docs/api-reference/endpoints/deprecated/secrets/create-many POST /api/v3/secrets/batch/raw Create many secrets # Delete Source: https://infisical.com/docs/api-reference/endpoints/deprecated/secrets/delete DELETE /api/v3/secrets/raw/{secretName} Delete secret # Bulk Delete Source: https://infisical.com/docs/api-reference/endpoints/deprecated/secrets/delete-many DELETE /api/v3/secrets/batch/raw Delete many secrets # Detach tags Source: https://infisical.com/docs/api-reference/endpoints/deprecated/secrets/detach-tags DELETE /api/v3/secrets/tags/{secretName} Detach tags from a secret # List Source: https://infisical.com/docs/api-reference/endpoints/deprecated/secrets/list GET /api/v3/secrets/raw List secrets # Retrieve Source: https://infisical.com/docs/api-reference/endpoints/deprecated/secrets/read GET /api/v3/secrets/raw/{secretName} Get a secret by name # Update Source: https://infisical.com/docs/api-reference/endpoints/deprecated/secrets/update PATCH /api/v3/secrets/raw/{secretName} Update secret # Bulk Update Source: https://infisical.com/docs/api-reference/endpoints/deprecated/secrets/update-many PATCH /api/v3/secrets/batch/raw Update many secrets # Create Source: https://infisical.com/docs/api-reference/endpoints/dynamic-secrets/create POST /api/v1/dynamic-secrets # Create Lease Source: https://infisical.com/docs/api-reference/endpoints/dynamic-secrets/create-lease POST /api/v1/dynamic-secrets/leases # Delete Source: https://infisical.com/docs/api-reference/endpoints/dynamic-secrets/delete DELETE /api/v1/dynamic-secrets/{name} # Delete Lease Source: https://infisical.com/docs/api-reference/endpoints/dynamic-secrets/delete-lease DELETE /api/v1/dynamic-secrets/leases/{leaseId} # Get Source: https://infisical.com/docs/api-reference/endpoints/dynamic-secrets/get GET /api/v1/dynamic-secrets/{name} # Get Lease Source: https://infisical.com/docs/api-reference/endpoints/dynamic-secrets/get-lease GET /api/v1/dynamic-secrets/leases/{leaseId} # Create Kubernetes Lease Source: https://infisical.com/docs/api-reference/endpoints/dynamic-secrets/kubernetes/create-lease POST /api/v1/dynamic-secrets/leases/kubernetes # List Source: https://infisical.com/docs/api-reference/endpoints/dynamic-secrets/list GET /api/v1/dynamic-secrets # List Leases Source: https://infisical.com/docs/api-reference/endpoints/dynamic-secrets/list-leases GET /api/v1/dynamic-secrets/{name}/leases # Renew Lease Source: https://infisical.com/docs/api-reference/endpoints/dynamic-secrets/renew-lease POST /api/v1/dynamic-secrets/leases/{leaseId}/renew # Update Source: https://infisical.com/docs/api-reference/endpoints/dynamic-secrets/update PATCH /api/v1/dynamic-secrets/{name} # Create Source: https://infisical.com/docs/api-reference/endpoints/environments/create POST /api/v1/projects/{projectId}/environments Create environment # Delete Source: https://infisical.com/docs/api-reference/endpoints/environments/delete DELETE /api/v1/projects/{projectId}/environments/{id} Delete environment # Update Source: https://infisical.com/docs/api-reference/endpoints/environments/update PATCH /api/v1/projects/{projectId}/environments/{id} Update environment # Project Events Source: https://infisical.com/docs/api-reference/endpoints/events/project-events POST /api/v1/events/subscribe/project-events Subscribe to project events # Create Source: https://infisical.com/docs/api-reference/endpoints/folders/create POST /api/v2/folders Create folders # Delete Source: https://infisical.com/docs/api-reference/endpoints/folders/delete DELETE /api/v2/folders/{folderIdOrName} Delete a folder # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/folders/get-by-id GET /api/v2/folders/{id} Get folder by id # List Source: https://infisical.com/docs/api-reference/endpoints/folders/list GET /api/v2/folders Get folders # Update Source: https://infisical.com/docs/api-reference/endpoints/folders/update PATCH /api/v2/folders/{folderId} Update folder # Attach Source: https://infisical.com/docs/api-reference/endpoints/gcp-auth/attach POST /api/v1/auth/gcp-auth/identities/{identityId} Attach GCP Auth configuration onto machine identity # Login Source: https://infisical.com/docs/api-reference/endpoints/gcp-auth/login POST /api/v1/auth/gcp-auth/login Login with GCP Auth for machine identity # Retrieve Source: https://infisical.com/docs/api-reference/endpoints/gcp-auth/retrieve GET /api/v1/auth/gcp-auth/identities/{identityId} Retrieve GCP Auth configuration on machine identity # Revoke Source: https://infisical.com/docs/api-reference/endpoints/gcp-auth/revoke DELETE /api/v1/auth/gcp-auth/identities/{identityId} Delete GCP Auth configuration on machine identity # Update Source: https://infisical.com/docs/api-reference/endpoints/gcp-auth/update PATCH /api/v1/auth/gcp-auth/identities/{identityId} Update GCP Auth configuration on machine identity # Add Group User Source: https://infisical.com/docs/api-reference/endpoints/groups/add-group-user POST /api/v1/groups/{id}/users/{username} # Create Source: https://infisical.com/docs/api-reference/endpoints/groups/create POST /api/v1/groups # Delete Source: https://infisical.com/docs/api-reference/endpoints/groups/delete DELETE /api/v1/groups/{id} # Get Groups in Organization Source: https://infisical.com/docs/api-reference/endpoints/groups/get GET /api/v1/groups # Get By ID Source: https://infisical.com/docs/api-reference/endpoints/groups/get-by-id GET /api/v1/groups/{id} # List Group Users Source: https://infisical.com/docs/api-reference/endpoints/groups/list-group-users GET /api/v1/groups/{id}/users # Remove Group User Source: https://infisical.com/docs/api-reference/endpoints/groups/remove-group-user DELETE /api/v1/groups/{id}/users/{username} # Update Source: https://infisical.com/docs/api-reference/endpoints/groups/update PATCH /api/v1/groups/{id} # Create Source: https://infisical.com/docs/api-reference/endpoints/identities/create POST /api/v1/identities Create machine identity # Delete Source: https://infisical.com/docs/api-reference/endpoints/identities/delete DELETE /api/v1/identities/{identityId} Delete machine identity # Get By ID Source: https://infisical.com/docs/api-reference/endpoints/identities/get-by-id GET /api/v1/identities/{identityId} Get a machine identity by id # List Source: https://infisical.com/docs/api-reference/endpoints/identities/list GET /api/v1/identities List machine identities # Search Source: https://infisical.com/docs/api-reference/endpoints/identities/search POST /api/v1/identities/search Search machine identities # Update Source: https://infisical.com/docs/api-reference/endpoints/identities/update PATCH /api/v1/identities/{identityId} Update machine identity # Create Permanent Source: https://infisical.com/docs/api-reference/endpoints/identity-specific-privilege/v1/create-permanent POST /api/v1/additional-privilege/identity/permanent Create a permanent or a non expiry specific privilege for identity. # Create Temporary Source: https://infisical.com/docs/api-reference/endpoints/identity-specific-privilege/v1/create-temporary POST /api/v1/additional-privilege/identity/temporary Create a temporary or a expiring specific privilege for identity. # Delete Source: https://infisical.com/docs/api-reference/endpoints/identity-specific-privilege/v1/delete DELETE /api/v1/additional-privilege/identity Delete a specific privilege of an identity. # Find By Slug Source: https://infisical.com/docs/api-reference/endpoints/identity-specific-privilege/v1/find-by-slug GET /api/v1/additional-privilege/identity/{privilegeSlug} Retrieve details of a specific privilege by privilege slug. # List Source: https://infisical.com/docs/api-reference/endpoints/identity-specific-privilege/v1/list GET /api/v1/additional-privilege/identity List of a specific privilege of an identity in a project. # Update Source: https://infisical.com/docs/api-reference/endpoints/identity-specific-privilege/v1/update PATCH /api/v1/additional-privilege/identity Update a specific privilege of an identity. # Create Source: https://infisical.com/docs/api-reference/endpoints/identity-specific-privilege/v2/create POST /api/v2/identity-project-additional-privilege Add an additional privilege for identity. # Delete Source: https://infisical.com/docs/api-reference/endpoints/identity-specific-privilege/v2/delete DELETE /api/v2/identity-project-additional-privilege/{id} Delete the specified identity privilege. # Find By ID Source: https://infisical.com/docs/api-reference/endpoints/identity-specific-privilege/v2/find-by-id GET /api/v2/identity-project-additional-privilege/{id} Retrieve details of a specific privilege by id. # Find By Slug Source: https://infisical.com/docs/api-reference/endpoints/identity-specific-privilege/v2/find-by-slug GET /api/v2/identity-project-additional-privilege/slug/{privilegeSlug} Retrieve details of a specific privilege by slug. # List Source: https://infisical.com/docs/api-reference/endpoints/identity-specific-privilege/v2/list GET /api/v2/identity-project-additional-privilege List privileges for the specified identity by project. # Update Source: https://infisical.com/docs/api-reference/endpoints/identity-specific-privilege/v2/update PATCH /api/v2/identity-project-additional-privilege/{id} Update a specific identity privilege. # Attach Source: https://infisical.com/docs/api-reference/endpoints/jwt-auth/attach POST /api/v1/auth/jwt-auth/identities/{identityId} Attach JWT Auth configuration onto machine identity # Login Source: https://infisical.com/docs/api-reference/endpoints/jwt-auth/login POST /api/v1/auth/jwt-auth/login Login with JWT Auth for machine identity # Retrieve Source: https://infisical.com/docs/api-reference/endpoints/jwt-auth/retrieve GET /api/v1/auth/jwt-auth/identities/{identityId} Retrieve JWT Auth configuration on machine identity # Revoke Source: https://infisical.com/docs/api-reference/endpoints/jwt-auth/revoke DELETE /api/v1/auth/jwt-auth/identities/{identityId} Delete JWT Auth configuration on machine identity # Update Source: https://infisical.com/docs/api-reference/endpoints/jwt-auth/update PATCH /api/v1/auth/jwt-auth/identities/{identityId} Update JWT Auth configuration on machine identity # Decrypt Data Source: https://infisical.com/docs/api-reference/endpoints/kms/encryption/decrypt POST /api/v1/kms/keys/{keyId}/decrypt Decrypt data with KMS key # Encrypt Data Source: https://infisical.com/docs/api-reference/endpoints/kms/encryption/encrypt POST /api/v1/kms/keys/{keyId}/encrypt Encrypt data with KMS key # Create Key Source: https://infisical.com/docs/api-reference/endpoints/kms/keys/create POST /api/v1/kms/keys Create KMS key # Delete Key Source: https://infisical.com/docs/api-reference/endpoints/kms/keys/delete DELETE /api/v1/kms/keys/{keyId} Delete KMS key # Get Key by ID Source: https://infisical.com/docs/api-reference/endpoints/kms/keys/get-by-id Get /api/v1/kms/keys/{keyId} Get KMS key by ID # Get Key by Name Source: https://infisical.com/docs/api-reference/endpoints/kms/keys/get-by-name Get /api/v1/kms/keys/key-name/{keyName} Get KMS key by name # List Keys Source: https://infisical.com/docs/api-reference/endpoints/kms/keys/list Get /api/v1/kms/keys List KMS keys # Update Key Source: https://infisical.com/docs/api-reference/endpoints/kms/keys/update PATCH /api/v1/kms/keys/{keyId} Update KMS key # Retrieve Public Key Source: https://infisical.com/docs/api-reference/endpoints/kms/signing/public-key GET /api/v1/kms/keys/{keyId}/public-key Get the public key for a KMS key that is used for signing and verifying data. This endpoint is only available for asymmetric keys. # Sign Data Source: https://infisical.com/docs/api-reference/endpoints/kms/signing/sign POST /api/v1/kms/keys/{keyId}/sign Sign data with a KMS key. # List Signing Algorithms Source: https://infisical.com/docs/api-reference/endpoints/kms/signing/signing-algorithms GET /api/v1/kms/keys/{keyId}/signing-algorithms List all available signing algorithms for a KMS key # Verify Signature Source: https://infisical.com/docs/api-reference/endpoints/kms/signing/verify POST /api/v1/kms/keys/{keyId}/verify Verify data signatures with a KMS key. # Attach Source: https://infisical.com/docs/api-reference/endpoints/kubernetes-auth/attach POST /api/v1/auth/kubernetes-auth/identities/{identityId} Attach Kubernetes Auth configuration onto machine identity # Login Source: https://infisical.com/docs/api-reference/endpoints/kubernetes-auth/login POST /api/v1/auth/kubernetes-auth/login Login with Kubernetes Auth for machine identity # Retrieve Source: https://infisical.com/docs/api-reference/endpoints/kubernetes-auth/retrieve GET /api/v1/auth/kubernetes-auth/identities/{identityId} Retrieve Kubernetes Auth configuration on machine identity # Revoke Source: https://infisical.com/docs/api-reference/endpoints/kubernetes-auth/revoke DELETE /api/v1/auth/kubernetes-auth/identities/{identityId} Delete Kubernetes Auth configuration on machine identity # Update Source: https://infisical.com/docs/api-reference/endpoints/kubernetes-auth/update PATCH /api/v1/auth/kubernetes-auth/identities/{identityId} Update Kubernetes Auth configuration on machine identity # Attach Source: https://infisical.com/docs/api-reference/endpoints/ldap-auth/attach POST /api/v1/auth/ldap-auth/identities/{identityId} Attach LDAP Auth configuration onto machine identity # Login Source: https://infisical.com/docs/api-reference/endpoints/ldap-auth/login POST /api/v1/auth/ldap-auth/login Login with LDAP Auth for machine identity # Retrieve Source: https://infisical.com/docs/api-reference/endpoints/ldap-auth/retrieve GET /api/v1/auth/ldap-auth/identities/{identityId} Retrieve LDAP Auth configuration on machine identity # Revoke Source: https://infisical.com/docs/api-reference/endpoints/ldap-auth/revoke DELETE /api/v1/auth/ldap-auth/identities/{identityId} Delete LDAP Auth configuration on machine identity # Update Source: https://infisical.com/docs/api-reference/endpoints/ldap-auth/update PATCH /api/v1/auth/ldap-auth/identities/{identityId} Update LDAP Auth configuration on machine identity # Attach Source: https://infisical.com/docs/api-reference/endpoints/oci-auth/attach POST /api/v1/auth/oci-auth/identities/{identityId} Attach OCI Auth configuration onto machine identity # Login Source: https://infisical.com/docs/api-reference/endpoints/oci-auth/login POST /api/v1/auth/oci-auth/login Login with OCI Auth for machine identity # Retrieve Source: https://infisical.com/docs/api-reference/endpoints/oci-auth/retrieve GET /api/v1/auth/oci-auth/identities/{identityId} Retrieve OCI Auth configuration on machine identity # Revoke Source: https://infisical.com/docs/api-reference/endpoints/oci-auth/revoke DELETE /api/v1/auth/oci-auth/identities/{identityId} Delete OCI Auth configuration on machine identity # Update Source: https://infisical.com/docs/api-reference/endpoints/oci-auth/update PATCH /api/v1/auth/oci-auth/identities/{identityId} Update OCI Auth configuration on machine identity # Attach Source: https://infisical.com/docs/api-reference/endpoints/oidc-auth/attach POST /api/v1/auth/oidc-auth/identities/{identityId} Attach OIDC Auth configuration onto machine identity # Login Source: https://infisical.com/docs/api-reference/endpoints/oidc-auth/login POST /api/v1/auth/oidc-auth/login Login with OIDC Auth for machine identity # Retrieve Source: https://infisical.com/docs/api-reference/endpoints/oidc-auth/retrieve GET /api/v1/auth/oidc-auth/identities/{identityId} Retrieve OIDC Auth configuration on machine identity # Revoke Source: https://infisical.com/docs/api-reference/endpoints/oidc-auth/revoke DELETE /api/v1/auth/oidc-auth/identities/{identityId} Delete OIDC Auth configuration on machine identity # Update Source: https://infisical.com/docs/api-reference/endpoints/oidc-auth/update PATCH /api/v1/auth/oidc-auth/identities/{identityId} Update OIDC Auth configuration on machine identity # Bulk Delete User Memberships Source: https://infisical.com/docs/api-reference/endpoints/organizations/bulk-delete-memberships DELETE /api/v2/organizations/{organizationId}/memberships Bulk delete organization user memberships # Delete User Membership Source: https://infisical.com/docs/api-reference/endpoints/organizations/delete-membership DELETE /api/v2/organizations/{organizationId}/memberships/{membershipId} Delete organization user memberships # Create LDAP SSO Config Source: https://infisical.com/docs/api-reference/endpoints/organizations/ldap-sso/create-ldap-config POST /api/v1/ldap/config Create LDAP config # Get LDAP SSO Config Source: https://infisical.com/docs/api-reference/endpoints/organizations/ldap-sso/get-ldap-config GET /api/v1/ldap/config Get LDAP config # Update LDAP SSO Config Source: https://infisical.com/docs/api-reference/endpoints/organizations/ldap-sso/update-ldap-config PATCH /api/v1/ldap/config Update LDAP config # List Identity Memberships Source: https://infisical.com/docs/api-reference/endpoints/organizations/list-identity-memberships GET /api/v2/organizations/{orgId}/identity-memberships Return organization identity memberships # Get User Memberships Source: https://infisical.com/docs/api-reference/endpoints/organizations/memberships GET /api/v2/organizations/{organizationId}/memberships Return organization user memberships # Create OIDC Config Source: https://infisical.com/docs/api-reference/endpoints/organizations/oidc-sso/create-oidc-config POST /api/v1/sso/oidc/config Create OIDC config # Get OIDC Config Source: https://infisical.com/docs/api-reference/endpoints/organizations/oidc-sso/get-oidc-config GET /api/v1/sso/oidc/config Get OIDC config # Update OIDC Config Source: https://infisical.com/docs/api-reference/endpoints/organizations/oidc-sso/update-oidc-config PATCH /api/v1/sso/oidc/config Update OIDC config # Create SAML SSO Config Source: https://infisical.com/docs/api-reference/endpoints/organizations/saml-sso/create-saml-config POST /api/v1/sso/config Create SAML config # Get SAML SSO Config Source: https://infisical.com/docs/api-reference/endpoints/organizations/saml-sso/get-saml-config GET /api/v1/sso/config Get SAML config # Update SAML SSO Config Source: https://infisical.com/docs/api-reference/endpoints/organizations/saml-sso/update-saml-config PATCH /api/v1/sso/config Update SAML config # Update User Membership Source: https://infisical.com/docs/api-reference/endpoints/organizations/update-membership PATCH /api/v2/organizations/{organizationId}/memberships/{membershipId} Update organization user memberships # Create Source: https://infisical.com/docs/api-reference/endpoints/pki-alerts/create POST /api/v1/cert-manager/alerts Create a new PKI alert # Delete Source: https://infisical.com/docs/api-reference/endpoints/pki-alerts/delete DELETE /api/v1/cert-manager/alerts/{alertId} Delete a PKI alert # Retrieve Source: https://infisical.com/docs/api-reference/endpoints/pki-alerts/read GET /api/v1/cert-manager/alerts/{alertId} Get a PKI alert by ID # Update Source: https://infisical.com/docs/api-reference/endpoints/pki-alerts/update PATCH /api/v1/cert-manager/alerts/{alertId} Update a PKI alert # Add Certificates to Sync Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/add-certificates POST /api/v1/cert-manager/syncs/{pkiSyncId}/certificates Add certificates to a PKI Sync. # Create AWS Certificate Manager PKI Sync Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/aws-certificate-manager/create POST /api/v1/cert-manager/syncs/aws-certificate-manager Create a AWS Certificate Manager PKI Sync for the specified project. # Delete AWS Certificate Manager PKI Sync Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/aws-certificate-manager/delete DELETE /api/v1/cert-manager/syncs/aws-certificate-manager/{pkiSyncId} Delete the specified AWS Certificate Manager PKI Sync. # Get AWS Certificate Manager PKI Sync by ID Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/aws-certificate-manager/get-by-id GET /api/v1/cert-manager/syncs/aws-certificate-manager/{pkiSyncId} Get the specified AWS Certificate Manager PKI Sync by ID. # List AWS Certificate Manager PKI Syncs Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/aws-certificate-manager/list GET /api/v1/cert-manager/syncs/aws-certificate-manager List the AWS Certificate Manager PKI Syncs for the specified project. # Remove Certificates from AWS Certificate Manager Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/aws-certificate-manager/remove-certificates POST /api/v1/cert-manager/syncs/aws-certificate-manager/{pkiSyncId}/remove-certificates Remove certificates from the specified AWS Certificate Manager PKI Sync destination. # Sync Certificates to AWS Certificate Manager Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/aws-certificate-manager/sync-certificates POST /api/v1/cert-manager/syncs/aws-certificate-manager/{pkiSyncId}/sync Trigger a sync for the specified AWS Certificate Manager PKI Sync. # Update AWS Certificate Manager PKI Sync Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/aws-certificate-manager/update PATCH /api/v1/cert-manager/syncs/aws-certificate-manager/{pkiSyncId} Update the specified AWS Certificate Manager PKI Sync. # Create AWS Secrets Manager PKI Sync Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/aws-secrets-manager/create POST /api/v1/cert-manager/syncs/aws-secrets-manager Create a AWS Secrets Manager PKI Sync for the specified project. # Delete AWS Secrets Manager PKI Sync Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/aws-secrets-manager/delete DELETE /api/v1/cert-manager/syncs/aws-secrets-manager/{pkiSyncId} Delete the specified AWS Secrets Manager PKI Sync. # Get AWS Secrets Manager PKI Sync by ID Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/aws-secrets-manager/get-by-id GET /api/v1/cert-manager/syncs/aws-secrets-manager/{pkiSyncId} Get the specified AWS Secrets Manager PKI Sync by ID. # List AWS Secrets Manager PKI Syncs Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/aws-secrets-manager/list GET /api/v1/cert-manager/syncs/aws-secrets-manager List the AWS Secrets Manager PKI Syncs for the specified project. # Remove Certificates from AWS Secrets Manager Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/aws-secrets-manager/remove-certificates POST /api/v1/cert-manager/syncs/aws-secrets-manager/{pkiSyncId}/remove-certificates Remove certificates from the specified AWS Secrets Manager PKI Sync destination. # Sync Certificates to AWS Secrets Manager Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/aws-secrets-manager/sync-certificates POST /api/v1/cert-manager/syncs/aws-secrets-manager/{pkiSyncId}/sync Trigger a sync for the specified AWS Secrets Manager PKI Sync. # Update AWS Secrets Manager PKI Sync Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/aws-secrets-manager/update PATCH /api/v1/cert-manager/syncs/aws-secrets-manager/{pkiSyncId} Update the specified AWS Secrets Manager PKI Sync. # Create Azure Key Vault PKI Sync Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/azure-key-vault/create POST /api/v1/cert-manager/syncs/azure-key-vault Create a Azure Key Vault PKI Sync for the specified project. # Delete Azure Key Vault PKI Sync Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/azure-key-vault/delete DELETE /api/v1/cert-manager/syncs/azure-key-vault/{pkiSyncId} Delete the specified Azure Key Vault PKI Sync. # Get Azure Key Vault PKI Sync by ID Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/azure-key-vault/get-by-id GET /api/v1/cert-manager/syncs/azure-key-vault/{pkiSyncId} Get the specified Azure Key Vault PKI Sync by ID. # List Azure Key Vault PKI Syncs Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/azure-key-vault/list GET /api/v1/cert-manager/syncs/azure-key-vault List the Azure Key Vault PKI Syncs for the specified project. # Remove Certificates from Azure Key Vault Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/azure-key-vault/remove-certificates POST /api/v1/cert-manager/syncs/azure-key-vault/{pkiSyncId}/remove-certificates Remove certificates from the specified Azure Key Vault PKI Sync destination. # Sync Certificates to Azure Key Vault Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/azure-key-vault/sync-certificates POST /api/v1/cert-manager/syncs/azure-key-vault/{pkiSyncId}/sync Trigger a sync for the specified Azure Key Vault PKI Sync. # Update Azure Key Vault PKI Sync Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/azure-key-vault/update PATCH /api/v1/cert-manager/syncs/azure-key-vault/{pkiSyncId} Update the specified Azure Key Vault PKI Sync. # Create Chef PKI Sync Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/chef/create POST /api/v1/cert-manager/syncs/chef Create a Chef PKI Sync for the specified project. # Delete Chef PKI Sync Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/chef/delete DELETE /api/v1/cert-manager/syncs/chef/{pkiSyncId} Delete the specified Chef PKI Sync. # Get Chef PKI Sync by ID Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/chef/get-by-id GET /api/v1/cert-manager/syncs/chef/{pkiSyncId} Get the specified Chef PKI Sync by ID. # List Chef PKI Syncs Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/chef/list GET /api/v1/cert-manager/syncs/chef List the Chef PKI Syncs for the specified project. # Remove Certificates from Chef Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/chef/remove-certificates POST /api/v1/cert-manager/syncs/chef/{pkiSyncId}/remove-certificates Remove certificates from the specified Chef PKI Sync destination. # Sync Certificates to Chef Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/chef/sync-certificates POST /api/v1/cert-manager/syncs/chef/{pkiSyncId}/sync Trigger a sync for the specified Chef PKI Sync. # Update Chef PKI Sync Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/chef/update PATCH /api/v1/cert-manager/syncs/chef/{pkiSyncId} Update the specified Chef PKI Sync. # Get PKI Sync by ID Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/get-by-id GET /api/v1/cert-manager/syncs/{pkiSyncId} Get a PKI Sync by ID. # List PKI Syncs Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/list GET /api/v1/cert-manager/syncs List all the PKI Syncs for the specified project. # List Sync Certificates Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/list-certificates GET /api/v1/cert-manager/syncs/{pkiSyncId}/certificates List all certificates associated with a PKI Sync. # List PKI Sync Options Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/options GET /api/v1/cert-manager/syncs/options List the available PKI Sync Options. # Remove Certificates from Sync Source: https://infisical.com/docs/api-reference/endpoints/pki/syncs/remove-certificates DELETE /api/v1/cert-manager/syncs/{pkiSyncId}/certificates Remove certificates from a PKI Sync. # Create Project Membership Source: https://infisical.com/docs/api-reference/endpoints/project-groups/create POST /api/v1/projects/{projectId}/groups/{groupIdOrName} Add group to project # Delete Project Membership Source: https://infisical.com/docs/api-reference/endpoints/project-groups/delete DELETE /api/v1/projects/{projectId}/groups/{groupId} Remove group from project # Get Project Membership Source: https://infisical.com/docs/api-reference/endpoints/project-groups/get-by-id GET /api/v1/projects/{projectId}/groups/{groupId} Return project group # List Project Memberships Source: https://infisical.com/docs/api-reference/endpoints/project-groups/list GET /api/v1/projects/{projectId}/groups Return list of groups in project # Update Project Membership Source: https://infisical.com/docs/api-reference/endpoints/project-groups/update PATCH /api/v1/projects/{projectId}/groups/{groupId} Update group in project # Create Identity Membership Source: https://infisical.com/docs/api-reference/endpoints/project-identities-membership/add-identity-membership POST /api/v1/projects/{projectId}/memberships/identities/{identityId} Create project identity membership # Delete Identity Membership Source: https://infisical.com/docs/api-reference/endpoints/project-identities-membership/delete-identity-membership DELETE /api/v1/projects/{projectId}/memberships/identities/{identityId} Delete project identity memberships # Get Identity by ID Source: https://infisical.com/docs/api-reference/endpoints/project-identities-membership/get-by-id GET /api/v1/projects/{projectId}/memberships/identities/{identityId} Get project identity membership by identity ID # List Identity Memberships Source: https://infisical.com/docs/api-reference/endpoints/project-identities-membership/list-identity-memberships GET /api/v1/projects/{projectId}/memberships/identities List project identity memberships # Update Identity Membership Source: https://infisical.com/docs/api-reference/endpoints/project-identities-membership/update-identity-membership PATCH /api/v1/projects/{projectId}/memberships/identities/{identityId} Update project identity memberships # Create Identity Source: https://infisical.com/docs/api-reference/endpoints/project-identities/add-identity POST /api/v1/projects/{projectId}/identities Create an identity in a project # Delete Identity Source: https://infisical.com/docs/api-reference/endpoints/project-identities/delete-identity DELETE /api/v1/projects/{projectId}/identities/{identityId} Delete an identity from a project # Get Identity by ID Source: https://infisical.com/docs/api-reference/endpoints/project-identities/get-by-id GET /api/v1/projects/{projectId}/identities/{identityId} Get an identity by ID in a project # List Identities Source: https://infisical.com/docs/api-reference/endpoints/project-identities/list-identity GET /api/v1/projects/{projectId}/identities List identities in a project # Update Identity Source: https://infisical.com/docs/api-reference/endpoints/project-identities/update-identity PATCH /api/v1/projects/{projectId}/identities/{identityId} Update an identity in a project # Create Source: https://infisical.com/docs/api-reference/endpoints/project-roles/create POST /api/v1/projects/{projectId}/roles Create a project role You can read more about the permissions field in the [permissions documentation](/internals/permissions). # Delete Source: https://infisical.com/docs/api-reference/endpoints/project-roles/delete DELETE /api/v1/projects/{projectId}/roles/{roleId} Delete a project role # Get By Slug Source: https://infisical.com/docs/api-reference/endpoints/project-roles/get-by-slug GET /api/v1/projects/{projectId}/roles/slug/{roleSlug} # List Source: https://infisical.com/docs/api-reference/endpoints/project-roles/list GET /api/v1/projects/{projectId}/roles List project role # Update Source: https://infisical.com/docs/api-reference/endpoints/project-roles/update PATCH /api/v1/projects/{projectId}/roles/{roleId} Update a project role # Create Source: https://infisical.com/docs/api-reference/endpoints/project-templates/create POST /api/v1/project-templates Create a project template. You can read more about the role's permissions field in the [permissions documentation](/internals/permissions). # Delete Source: https://infisical.com/docs/api-reference/endpoints/project-templates/delete DELETE /api/v1/project-templates/{templateId} Delete a project template. # Get By ID Source: https://infisical.com/docs/api-reference/endpoints/project-templates/get-by-id GET /api/v1/project-templates/{templateId} Get a project template by ID. # List Source: https://infisical.com/docs/api-reference/endpoints/project-templates/list GET /api/v1/project-templates List project templates for the current organization. # Update Source: https://infisical.com/docs/api-reference/endpoints/project-templates/update PATCH /api/v1/project-templates/{templateId} Update a project template. You can read more about the role's permissions field in the [permissions documentation](/internals/permissions). # Get By Username Source: https://infisical.com/docs/api-reference/endpoints/project-users/get-by-username POST /api/v1/projects/{projectId}/memberships/details Return project user memberships # Invite Member Source: https://infisical.com/docs/api-reference/endpoints/project-users/invite-member-to-project POST /api/v1/projects/{projectId}/memberships Invite members to project # Get User Memberships Source: https://infisical.com/docs/api-reference/endpoints/project-users/memberships GET /api/v1/projects/{projectId}/memberships Return project user memberships # Remove Member Source: https://infisical.com/docs/api-reference/endpoints/project-users/remove-member-from-project DELETE /api/v1/projects/{projectId}/memberships Remove members from project # Update User Membership Source: https://infisical.com/docs/api-reference/endpoints/project-users/update-membership PATCH /api/v1/projects/{projectId}/memberships/{membershipId} Update project user membership # Create Project Source: https://infisical.com/docs/api-reference/endpoints/projects/create-project POST /api/v1/projects Create a new project # Delete Project Source: https://infisical.com/docs/api-reference/endpoints/projects/delete-project DELETE /api/v1/projects/{projectId} Delete project This operation is irreversible. All data associated with the project will be deleted. Please use with caution. # Get Project Source: https://infisical.com/docs/api-reference/endpoints/projects/get-project GET /api/v1/projects/{projectId} Get project # Get Project By Slug Source: https://infisical.com/docs/api-reference/endpoints/projects/get-project-by-slug GET /api/v1/projects/slug/{slug} Get project details by slug # List Projects Source: https://infisical.com/docs/api-reference/endpoints/projects/list-projects GET /api/v1/projects List projects # Get Snapshots Source: https://infisical.com/docs/api-reference/endpoints/projects/secret-snapshots GET /api/v1/projects/{projectId}/secret-snapshots Return project secret snapshots ids # Update Project Source: https://infisical.com/docs/api-reference/endpoints/projects/update-project PATCH /api/v1/projects/{projectId} Update project # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-imports/create POST /api/v2/secret-imports Create secret imports # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-imports/delete DELETE /api/v2/secret-imports/{secretImportId} Delete secret imports # List Source: https://infisical.com/docs/api-reference/endpoints/secret-imports/list GET /api/v2/secret-imports Get secret imports # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-imports/update PATCH /api/v2/secret-imports/{secretImportId} Update secret imports # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/auth0-client-secret/create POST /api/v2/secret-rotations/auth0-client-secret Create an Auth0 Client Secret Rotation for the specified project. Check out the configuration docs for [Auth0 Client Secret Rotations](/documentation/platform/secret-rotation/auth0-client-secret) to learn how to obtain the required parameters. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/auth0-client-secret/delete DELETE /api/v2/secret-rotations/auth0-client-secret/{rotationId} Delete the specified Auth0 Client Secret Rotation. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/auth0-client-secret/get-by-id GET /api/v2/secret-rotations/auth0-client-secret/{rotationId} Get the specified Auth0 Client Secret Rotation by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/auth0-client-secret/get-by-name GET /api/v2/secret-rotations/auth0-client-secret/rotation-name/{rotationName} Get the specified Auth0 Client Secret Rotation by name, secret path, environment and project ID. # Get Credentials by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/auth0-client-secret/get-generated-credentials-by-id GET /api/v2/secret-rotations/auth0-client-secret/{rotationId}/generated-credentials Get the generated credentials for the specified Auth0 Client Secret Rotation. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/auth0-client-secret/list GET /api/v2/secret-rotations/auth0-client-secret List the Auth0 Client Secret Rotations for the specified project. # Rotate Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/auth0-client-secret/rotate-secrets POST /api/v2/secret-rotations/auth0-client-secret/{rotationId}/rotate-secrets Rotate the generated credentials for the specified Auth0 Client Secret Rotation. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/auth0-client-secret/update PATCH /api/v2/secret-rotations/auth0-client-secret/{rotationId} Update the specified Auth0 Client Secret Rotation. Check out the configuration docs for [Auth0 Client Secret Rotations](/documentation/platform/secret-rotation/auth0-client-secret) to learn how to obtain the required parameters. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/aws-iam-user-secret/create POST /api/v2/secret-rotations/aws-iam-user-secret Create an AWS IAM User Secret Rotation for the specified project. Check out the configuration docs for [AWS IAM User Secret Rotations](/documentation/platform/secret-rotation/aws-iam-user-secret) to learn how to obtain the required parameters. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/aws-iam-user-secret/delete DELETE /api/v2/secret-rotations/aws-iam-user-secret/{rotationId} Delete the specified AWS IAM User Secret Rotation. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/aws-iam-user-secret/get-by-id GET /api/v2/secret-rotations/aws-iam-user-secret/{rotationId} Get the specified AWS IAM User Secret Rotation by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/aws-iam-user-secret/get-by-name GET /api/v2/secret-rotations/aws-iam-user-secret/rotation-name/{rotationName} Get the specified AWS IAM User Secret Rotation by name, secret path, environment and project ID. # Get Credentials by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/aws-iam-user-secret/get-generated-credentials-by-id GET /api/v2/secret-rotations/aws-iam-user-secret/{rotationId}/generated-credentials Get the generated credentials for the specified AWS IAM User Secret Rotation. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/aws-iam-user-secret/list GET /api/v2/secret-rotations/aws-iam-user-secret List the AWS IAM User Secret Rotations for the specified project. # Rotate Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/aws-iam-user-secret/rotate-secrets POST /api/v2/secret-rotations/aws-iam-user-secret/{rotationId}/rotate-secrets Rotate the generated credentials for the specified AWS IAM User Secret Rotation. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/aws-iam-user-secret/update PATCH /api/v2/secret-rotations/aws-iam-user-secret/{rotationId} Update the specified AWS IAM User Secret Rotation. Check out the configuration docs for [AWS IAM User Secret Rotations](/documentation/platform/secret-rotation/aws-iam-user-secret) to learn how to obtain the required parameters. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/azure-client-secret/create POST /api/v2/secret-rotations/azure-client-secret Create an Azure Client Secret Rotation for the specified project. Check out the configuration docs for [Azure Client Secret Rotations](/documentation/platform/secret-rotation/azure-client-secret) to learn how to obtain the required parameters. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/azure-client-secret/delete DELETE /api/v2/secret-rotations/azure-client-secret/{rotationId} Delete the specified Azure Client Secret Rotation. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/azure-client-secret/get-by-id GET /api/v2/secret-rotations/azure-client-secret/{rotationId} Get the specified Azure Client Secret Rotation by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/azure-client-secret/get-by-name GET /api/v2/secret-rotations/azure-client-secret/rotation-name/{rotationName} Get the specified Azure Client Secret Rotation by name, secret path, environment and project ID. # Get Credentials by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/azure-client-secret/get-generated-credentials-by-id GET /api/v2/secret-rotations/azure-client-secret/{rotationId}/generated-credentials Get the generated credentials for the specified Azure Client Secret Rotation. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/azure-client-secret/list GET /api/v2/secret-rotations/azure-client-secret List the Azure Client Secret Rotations for the specified project. # Rotate Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/azure-client-secret/rotate-secrets POST /api/v2/secret-rotations/azure-client-secret/{rotationId}/rotate-secrets Rotate the generated credentials for the specified Azure Client Secret Rotation. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/azure-client-secret/update PATCH /api/v2/secret-rotations/azure-client-secret/{rotationId} Update the specified Azure Client Secret Rotation. Check out the configuration docs for [Azure Client Secret Rotations](/documentation/platform/secret-rotation/azure-client-secret) to learn how to obtain the required parameters. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/ldap-password/create POST /api/v2/secret-rotations/ldap-password Create a LDAP Password Rotation for the specified project. Check out the configuration docs for [LDAP Password Rotations](/documentation/platform/secret-rotation/ldap-password) to learn how to obtain the required parameters. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/ldap-password/delete DELETE /api/v2/secret-rotations/ldap-password/{rotationId} Delete the specified LDAP Password Rotation. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/ldap-password/get-by-id GET /api/v2/secret-rotations/ldap-password/{rotationId} Get the specified LDAP Password Rotation by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/ldap-password/get-by-name GET /api/v2/secret-rotations/ldap-password/rotation-name/{rotationName} Get the specified LDAP Password Rotation by name, secret path, environment and project ID. # Get Credentials by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/ldap-password/get-generated-credentials-by-id GET /api/v2/secret-rotations/ldap-password/{rotationId}/generated-credentials Get the generated credentials for the specified LDAP Password Rotation. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/ldap-password/list GET /api/v2/secret-rotations/ldap-password List the LDAP Password Rotations for the specified project. # Rotate Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/ldap-password/rotate-secrets POST /api/v2/secret-rotations/ldap-password/{rotationId}/rotate-secrets Rotate the generated credentials for the specified LDAP Password Rotation. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/ldap-password/update PATCH /api/v2/secret-rotations/ldap-password/{rotationId} Update the specified LDAP Password Rotation. Check out the configuration docs for [LDAP Rotations](/documentation/platform/secret-rotation/ldap-password) to learn how to obtain the required parameters. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/list GET /api/v2/secret-rotations List all the Secret Rotations for the specified project. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/mssql-credentials/create POST /api/v2/secret-rotations/mssql-credentials Create a Microsoft SQL Server Credentials Rotation for the specified project. Check out the configuration docs for [Microsoft SQL Server Credentials Rotations](/documentation/platform/secret-rotation/mssql-credentials) to learn how to obtain the required parameters. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/mssql-credentials/delete DELETE /api/v2/secret-rotations/mssql-credentials/{rotationId} Delete the specified Microsoft SQL Server Credentials Rotation. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/mssql-credentials/get-by-id GET /api/v2/secret-rotations/mssql-credentials/{rotationId} Get the specified Microsoft SQL Server Credentials Rotation by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/mssql-credentials/get-by-name GET /api/v2/secret-rotations/mssql-credentials/rotation-name/{rotationName} Get the specified Microsoft SQL Server Credentials Rotation by name, secret path, environment and project ID. # Get Credentials by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/mssql-credentials/get-generated-credentials-by-id GET /api/v2/secret-rotations/mssql-credentials/{rotationId}/generated-credentials Get the generated credentials for the specified Microsoft SQL Server Credentials Rotation. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/mssql-credentials/list GET /api/v2/secret-rotations/mssql-credentials List the Microsoft SQL Server Credentials Rotations for the specified project. # Rotate Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/mssql-credentials/rotate-secrets POST /api/v2/secret-rotations/mssql-credentials/{rotationId}/rotate-secrets Rotate the generated credentials for the specified Microsoft SQL Server Credentials Rotation. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/mssql-credentials/update PATCH /api/v2/secret-rotations/mssql-credentials/{rotationId} Update the specified Microsoft SQL Server Credentials Rotation. Check out the configuration docs for [Microsoft SQL Server Credentials Rotations](/documentation/platform/secret-rotation/mssql-credentials) to learn how to obtain the required parameters. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/mysql-credentials/create POST /api/v2/secret-rotations/mysql-credentials Create a MySQL Credentials Rotation for the specified project. Check out the configuration docs for [MySQL Credentials Rotations](/documentation/platform/secret-rotation/mysql-credentials) to learn how to obtain the required parameters. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/mysql-credentials/delete DELETE /api/v2/secret-rotations/mysql-credentials/{rotationId} Delete the specified MySQL Credentials Rotation. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/mysql-credentials/get-by-id GET /api/v2/secret-rotations/mysql-credentials/{rotationId} Get the specified MySQL Credentials Rotation by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/mysql-credentials/get-by-name GET /api/v2/secret-rotations/mysql-credentials/rotation-name/{rotationName} Get the specified MySQL Credentials Rotation by name, secret path, environment and project ID. # Get Credentials by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/mysql-credentials/get-generated-credentials-by-id GET /api/v2/secret-rotations/mysql-credentials/{rotationId}/generated-credentials Get the generated credentials for the specified MySQL Credentials Rotation. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/mysql-credentials/list GET /api/v2/secret-rotations/mysql-credentials List the MySQL Credentials Rotations for the specified project. # Rotate Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/mysql-credentials/rotate-secrets POST /api/v2/secret-rotations/mysql-credentials/{rotationId}/rotate-secrets Rotate the generated credentials for the specified MySQL Credentials Rotation. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/mysql-credentials/update PATCH /api/v2/secret-rotations/mysql-credentials/{rotationId} Update the specified MySQL Credentials Rotation. Check out the configuration docs for [MySQL Credentials Rotations](/documentation/platform/secret-rotation/mysql-credentials) to learn how to obtain the required parameters. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/okta-client-secret/create POST /api/v2/secret-rotations/okta-client-secret Create an Okta Client Secret Rotation for the specified project. Check out the configuration docs for [Okta Client Secret Rotations](/documentation/platform/secret-rotation/okta-client-secret) to learn how to obtain the required parameters. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/okta-client-secret/delete DELETE /api/v2/secret-rotations/okta-client-secret/{rotationId} Delete the specified Okta Client Secret Rotation. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/okta-client-secret/get-by-id GET /api/v2/secret-rotations/okta-client-secret/{rotationId} Get the specified Okta Client Secret Rotation by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/okta-client-secret/get-by-name GET /api/v2/secret-rotations/okta-client-secret/rotation-name/{rotationName} Get the specified Okta Client Secret Rotation by name, secret path, environment and project ID. # Get Credentials by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/okta-client-secret/get-generated-credentials-by-id GET /api/v2/secret-rotations/okta-client-secret/{rotationId}/generated-credentials Get the generated credentials for the specified Okta Client Secret Rotation. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/okta-client-secret/list GET /api/v2/secret-rotations/okta-client-secret List the Okta Client Secret Rotations for the specified project. # Rotate Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/okta-client-secret/rotate-secrets POST /api/v2/secret-rotations/okta-client-secret/{rotationId}/rotate-secrets Rotate the generated credentials for the specified Okta Client Secret Rotation. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/okta-client-secret/update PATCH /api/v2/secret-rotations/okta-client-secret/{rotationId} Update the specified Okta Client Secret Rotation. Check out the configuration docs for [Okta Client Secret Rotations](/documentation/platform/secret-rotation/okta-client-secret) to learn how to obtain the required parameters. # Options Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/options GET /api/v2/secret-rotations/options List the available Secret Rotation Options. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/oracledb-credentials/create POST /api/v2/secret-rotations/oracledb-credentials Create an OracleDB Credentials Rotation for the specified project. Check out the configuration docs for [OracleDB Credentials Rotations](/documentation/platform/secret-rotation/oracledb-credentials) to learn how to obtain the required parameters. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/oracledb-credentials/delete DELETE /api/v2/secret-rotations/oracledb-credentials/{rotationId} Delete the specified OracleDB Credentials Rotation. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/oracledb-credentials/get-by-id GET /api/v2/secret-rotations/oracledb-credentials/{rotationId} Get the specified OracleDB Credentials Rotation by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/oracledb-credentials/get-by-name GET /api/v2/secret-rotations/oracledb-credentials/rotation-name/{rotationName} Get the specified OracleDB Credentials Rotation by name, secret path, environment and project ID. # Get Credentials by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/oracledb-credentials/get-generated-credentials-by-id GET /api/v2/secret-rotations/oracledb-credentials/{rotationId}/generated-credentials Get the generated credentials for the specified OracleDB Credentials Rotation. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/oracledb-credentials/list GET /api/v2/secret-rotations/oracledb-credentials List the OracleDB Credentials Rotations for the specified project. # Rotate Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/oracledb-credentials/rotate-secrets POST /api/v2/secret-rotations/oracledb-credentials/{rotationId}/rotate-secrets Rotate the generated credentials for the specified OracleDB Credentials Rotation. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/oracledb-credentials/update PATCH /api/v2/secret-rotations/oracledb-credentials/{rotationId} Update the specified OracleDB Credentials Rotation. Check out the configuration docs for [OracleDB Credentials Rotations](/documentation/platform/secret-rotation/oracledb-credentials) to learn how to obtain the required parameters. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/postgres-credentials/create POST /api/v2/secret-rotations/postgres-credentials Create a PostgreSQL Credentials Rotation for the specified project. Check out the configuration docs for [PostgreSQL Credentials Rotations](/documentation/platform/secret-rotation/postgres-credentials) to learn how to obtain the required parameters. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/postgres-credentials/delete DELETE /api/v2/secret-rotations/postgres-credentials/{rotationId} Delete the specified PostgreSQL Credentials Rotation. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/postgres-credentials/get-by-id GET /api/v2/secret-rotations/postgres-credentials/{rotationId} Get the specified PostgreSQL Credentials Rotation by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/postgres-credentials/get-by-name GET /api/v2/secret-rotations/postgres-credentials/rotation-name/{rotationName} Get the specified PostgreSQL Credentials Rotation by name, secret path, environment and project ID. # Get Credentials by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/postgres-credentials/get-generated-credentials-by-id GET /api/v2/secret-rotations/postgres-credentials/{rotationId}/generated-credentials Get the generated credentials for the specified PostgreSQL Credentials Rotation. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/postgres-credentials/list GET /api/v2/secret-rotations/postgres-credentials List the PostgreSQL Credentials Rotations for the specified project. # Rotate Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/postgres-credentials/rotate-secrets POST /api/v2/secret-rotations/postgres-credentials/{rotationId}/rotate-secrets Rotate the generated credentials for the specified PostgreSQL Credentials Rotation. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/postgres-credentials/update PATCH /api/v2/secret-rotations/postgres-credentials/{rotationId} Update the specified PostgreSQL Credentials Rotation. Check out the configuration docs for [PostgreSQL Credentials Rotations](/documentation/platform/secret-rotation/postgres-credentials) to learn how to obtain the required parameters. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/redis-credentials/create POST /api/v2/secret-rotations/redis-credentials Create a Redis Credentials Rotation for the specified project. Check out the configuration docs for [Redis Credentials Rotations](/documentation/platform/secret-rotation/redis-credentials) to learn how to obtain the required parameters. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/redis-credentials/delete DELETE /api/v2/secret-rotations/redis-credentials/{rotationId} Delete the specified Redis Credentials Rotation. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/redis-credentials/get-by-id GET /api/v2/secret-rotations/redis-credentials/{rotationId} Get the specified Redis Credentials Rotation by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/redis-credentials/get-by-name GET /api/v2/secret-rotations/redis-credentials/rotation-name/{rotationName} Get the specified Redis Credentials Rotation by name, secret path, environment and project ID. # Get Credentials by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/redis-credentials/get-generated-credentials-by-id GET /api/v2/secret-rotations/redis-credentials/{rotationId}/generated-credentials Get the generated credentials for the specified Redis Credentials Rotation. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/redis-credentials/list GET /api/v2/secret-rotations/redis-credentials List the Redis Credentials Rotations for the specified project. # Rotate Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/redis-credentials/rotate-secrets POST /api/v2/secret-rotations/redis-credentials/{rotationId}/rotate-secrets Rotate the generated credentials for the specified Redis Credentials Rotation. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-rotations/redis-credentials/update PATCH /api/v2/secret-rotations/redis-credentials/{rotationId} Update the specified Redis Credentials Rotation. Check out the configuration docs for [Redis Credentials Rotations](/documentation/platform/secret-rotation/redis-credentials) to learn how to obtain the required parameters. # Get by Project ID Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/config/get-by-project-id GET /api/v2/secret-scanning/configs Get the Secret Scanning Config for the specified project. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/config/update PATCH /api/v2/secret-scanning/configs Update the specified Secret Scanning Configuration. Check out the [Configuration Docs](/documentation/platform/secret-scanning/overview#configuration) for an in-depth guide on custom configurations. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/bitbucket/create POST /api/v2/secret-scanning/data-sources/bitbucket Create a Bitbucket Data Source for the specified project. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/bitbucket/delete DELETE /api/v2/secret-scanning/data-sources/bitbucket/{dataSourceId} Delete the specified Bitbucket Data Source. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/bitbucket/get-by-id GET /api/v2/secret-scanning/data-sources/bitbucket/{dataSourceId} Get the specified Bitbucket Data Source by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/bitbucket/get-by-name GET /api/v2/secret-scanning/data-sources/bitbucket/data-source-name/{dataSourceName} Get the specified Bitbucket Data Source by name and project ID. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/bitbucket/list GET /api/v2/secret-scanning/data-sources/bitbucket List the Bitbucket Data Sources for the specified project. # List Resources Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/bitbucket/list-resources GET /api/v2/secret-scanning/data-sources/bitbucket/{dataSourceId}/resources Get the resources associated with the specified Bitbucket Data Source by ID. # List Scans Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/bitbucket/list-scans GET /api/v2/secret-scanning/data-sources/bitbucket/{dataSourceId}/scans Get the scans associated with the specified Bitbucket Data Source by ID. # Scan Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/bitbucket/scan POST /api/v2/secret-scanning/data-sources/bitbucket/{dataSourceId}/scan Trigger a scan for the specified Bitbucket Data Source. # Scan Resource Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/bitbucket/scan-resource POST /api/v2/secret-scanning/data-sources/bitbucket/{dataSourceId}/resources/{resourceId}/scan Trigger a scan for the specified Bitbucket Data Source resource. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/bitbucket/update PATCH /api/v2/secret-scanning/data-sources/bitbucket/{dataSourceId} Update the specified Bitbucket Data Source. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/github/create POST /api/v2/secret-scanning/data-sources/github Create a GitHub Data Source for the specified project. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/github/delete DELETE /api/v2/secret-scanning/data-sources/github/{dataSourceId} Delete the specified GitHub Data Source. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/github/get-by-id GET /api/v2/secret-scanning/data-sources/github/{dataSourceId} Get the specified GitHub Data Source by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/github/get-by-name GET /api/v2/secret-scanning/data-sources/github/data-source-name/{dataSourceName} Get the specified GitHub Data Source by name and project ID. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/github/list GET /api/v2/secret-scanning/data-sources/github List the GitHub Data Sources for the specified project. # List Resources Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/github/list-resources GET /api/v2/secret-scanning/data-sources/github/{dataSourceId}/resources Get the resources associated with the specified GitHub Data Source by ID. # List Scans Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/github/list-scans GET /api/v2/secret-scanning/data-sources/github/{dataSourceId}/scans Get the scans associated with the specified GitHub Data Source by ID. # Scan Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/github/scan POST /api/v2/secret-scanning/data-sources/github/{dataSourceId}/scan Trigger a scan for the specified GitHub Data Source. # Scan Resource Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/github/scan-resource POST /api/v2/secret-scanning/data-sources/github/{dataSourceId}/resources/{resourceId}/scan Trigger a scan for the specified GitHub Data Source resource. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/github/update PATCH /api/v2/secret-scanning/data-sources/github/{dataSourceId} Update the specified GitHub Data Source. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/gitlab/create POST /api/v2/secret-scanning/data-sources/gitlab Create a GitLab Data Source for the specified project. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/gitlab/delete DELETE /api/v2/secret-scanning/data-sources/gitlab/{dataSourceId} Delete the specified GitLab Data Source. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/gitlab/get-by-id GET /api/v2/secret-scanning/data-sources/gitlab/{dataSourceId} Get the specified GitLab Data Source by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/gitlab/get-by-name GET /api/v2/secret-scanning/data-sources/gitlab/data-source-name/{dataSourceName} Get the specified GitLab Data Source by name and project ID. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/gitlab/list GET /api/v2/secret-scanning/data-sources/gitlab List the GitLab Data Sources for the specified project. # List Resources Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/gitlab/list-resources GET /api/v2/secret-scanning/data-sources/gitlab/{dataSourceId}/resources Get the resources associated with the specified GitLab Data Source by ID. # List Scans Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/gitlab/list-scans GET /api/v2/secret-scanning/data-sources/gitlab/{dataSourceId}/scans Get the scans associated with the specified GitLab Data Source by ID. # Scan Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/gitlab/scan POST /api/v2/secret-scanning/data-sources/gitlab/{dataSourceId}/scan Trigger a scan for the specified GitLab Data Source. # Scan Resource Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/gitlab/scan-resource POST /api/v2/secret-scanning/data-sources/gitlab/{dataSourceId}/resources/{resourceId}/scan Trigger a scan for the specified GitLab Data Source resource. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/gitlab/update PATCH /api/v2/secret-scanning/data-sources/gitlab/{dataSourceId} Update the specified GitLab Data Source. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/list GET /api/v2/secret-scanning/data-sources List all the Secret Scanning Data Sources for the specified project. # Options Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/data-sources/options GET /api/v2/secret-scanning/data-sources/options List the available Secret Scanning Data Source Options. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/findings/list GET /api/v2/secret-scanning/findings List all the Secret Scanning Findings for the specified project. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-scanning/findings/update PATCH /api/v2/secret-scanning/findings/{findingId} Update the specified Secret Scanning Finding. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/1password/create POST /api/v1/secret-syncs/1password Create a 1Password Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/1password/delete DELETE /api/v1/secret-syncs/1password/{syncId} Delete the specified 1Password Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/1password/get-by-id GET /api/v1/secret-syncs/1password/{syncId} Get the specified 1Password Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/1password/get-by-name GET /api/v1/secret-syncs/1password/sync-name/{syncName} Get the specified 1Password Sync by name and project ID. # Import Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/1password/import-secrets POST /api/v1/secret-syncs/1password/{syncId}/import-secrets Import secrets from the specified 1Password Sync destination. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/1password/list GET /api/v1/secret-syncs/1password List the 1Password Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/1password/remove-secrets POST /api/v1/secret-syncs/1password/{syncId}/remove-secrets Remove previously synced secrets from the specified 1Password Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/1password/sync-secrets POST /api/v1/secret-syncs/1password/{syncId}/sync-secrets Trigger a sync for the specified 1Password Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/1password/update PATCH /api/v1/secret-syncs/1password/{syncId} Update the specified 1Password Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/aws-parameter-store/create POST /api/v1/secret-syncs/aws-parameter-store Create an AWS Parameter Store Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/aws-parameter-store/delete DELETE /api/v1/secret-syncs/aws-parameter-store/{syncId} Delete the specified AWS Parameter Store Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/aws-parameter-store/get-by-id GET /api/v1/secret-syncs/aws-parameter-store/{syncId} Get the specified AWS Parameter Store Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/aws-parameter-store/get-by-name GET /api/v1/secret-syncs/aws-parameter-store/sync-name/{syncName} Get the specified AWS Parameter Store Sync by name and project ID. # Import Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/aws-parameter-store/import-secrets POST /api/v1/secret-syncs/aws-parameter-store/{syncId}/import-secrets Import secrets from the specified AWS Parameter Store Sync destination. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/aws-parameter-store/list GET /api/v1/secret-syncs/aws-parameter-store List the AWS Parameter Store Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/aws-parameter-store/remove-secrets POST /api/v1/secret-syncs/aws-parameter-store/{syncId}/remove-secrets Remove previously synced secrets from the specified AWS Parameter Store Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/aws-parameter-store/sync-secrets POST /api/v1/secret-syncs/aws-parameter-store/{syncId}/sync-secrets Trigger a sync for the specified AWS Parameter Store Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/aws-parameter-store/update PATCH /api/v1/secret-syncs/aws-parameter-store/{syncId} Update the specified AWS Parameter Store Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/aws-secrets-manager/create POST /api/v1/secret-syncs/aws-secrets-manager Create an AWS Secrets Manager Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/aws-secrets-manager/delete DELETE /api/v1/secret-syncs/aws-secrets-manager/{syncId} Delete the specified AWS Secrets Manager Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/aws-secrets-manager/get-by-id GET /api/v1/secret-syncs/aws-secrets-manager/{syncId} Get the specified AWS Secrets Manager Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/aws-secrets-manager/get-by-name GET /api/v1/secret-syncs/aws-secrets-manager/sync-name/{syncName} Get the specified AWS Secrets Manager Sync by name and project ID. # Import Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/aws-secrets-manager/import-secrets POST /api/v1/secret-syncs/aws-secrets-manager/{syncId}/import-secrets Import secrets from the specified AWS Secrets Manager Sync destination. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/aws-secrets-manager/list GET /api/v1/secret-syncs/aws-secrets-manager List the AWS Secrets Manager Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/aws-secrets-manager/remove-secrets POST /api/v1/secret-syncs/aws-secrets-manager/{syncId}/remove-secrets Remove previously synced secrets from the specified AWS Secrets Manager Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/aws-secrets-manager/sync-secrets POST /api/v1/secret-syncs/aws-secrets-manager/{syncId}/sync-secrets Trigger a sync for the specified AWS Secrets Manager Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/aws-secrets-manager/update PATCH /api/v1/secret-syncs/aws-secrets-manager/{syncId} Update the specified AWS Secrets Manager Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-app-configuration/create POST /api/v1/secret-syncs/azure-app-configuration Create an Azure App Configuration Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-app-configuration/delete DELETE /api/v1/secret-syncs/azure-app-configuration/{syncId} Delete the specified Azure App Configuration Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-app-configuration/get-by-id GET /api/v1/secret-syncs/azure-app-configuration/{syncId} Get the specified Azure App Configuration Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-app-configuration/get-by-name GET /api/v1/secret-syncs/azure-app-configuration/sync-name/{syncName} Get the specified Azure App Configuration Sync by name and project ID. # Import Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-app-configuration/import-secrets POST /api/v1/secret-syncs/azure-app-configuration/{syncId}/import-secrets Import secrets from the specified Azure App Configuration Sync destination. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-app-configuration/list GET /api/v1/secret-syncs/azure-app-configuration List the Azure App Configuration Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-app-configuration/remove-secrets POST /api/v1/secret-syncs/azure-app-configuration/{syncId}/remove-secrets Remove previously synced secrets from the specified Azure App Configuration Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-app-configuration/sync-secrets POST /api/v1/secret-syncs/azure-app-configuration/{syncId}/sync-secrets Trigger a sync for the specified Azure App Configuration Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-app-configuration/update PATCH /api/v1/secret-syncs/azure-app-configuration/{syncId} Update the specified Azure App Configuration Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-devops/create POST /api/v1/secret-syncs/azure-devops Create an Azure DevOps Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-devops/delete DELETE /api/v1/secret-syncs/azure-devops/{syncId} Delete the specified Azure DevOps Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-devops/get-by-id GET /api/v1/secret-syncs/azure-devops/{syncId} Get the specified Azure DevOps Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-devops/get-by-name GET /api/v1/secret-syncs/azure-devops/sync-name/{syncName} Get the specified Azure DevOps Sync by name and project ID. # Import Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-devops/import-secrets POST /api/v1/secret-syncs/azure-devops/{syncId}/import-secrets Import secrets from the specified Azure DevOps Sync destination. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-devops/list GET /api/v1/secret-syncs/azure-devops List the Azure DevOps Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-devops/remove-secrets POST /api/v1/secret-syncs/azure-devops/{syncId}/remove-secrets Remove previously synced secrets from the specified Azure DevOps Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-devops/sync-secrets POST /api/v1/secret-syncs/azure-devops/{syncId}/sync-secrets Trigger a sync for the specified Azure DevOps Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-devops/update PATCH /api/v1/secret-syncs/azure-devops/{syncId} Update the specified Azure DevOps Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-key-vault/create POST /api/v1/secret-syncs/azure-key-vault Create an Azure Key Vault Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-key-vault/delete DELETE /api/v1/secret-syncs/azure-key-vault/{syncId} Delete the specified Azure Key Vault Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-key-vault/get-by-id GET /api/v1/secret-syncs/azure-key-vault/{syncId} Get the specified Azure Key Vault Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-key-vault/get-by-name GET /api/v1/secret-syncs/azure-key-vault/sync-name/{syncName} Get the specified Azure Key Vault Sync by name and project ID. # Import Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-key-vault/import-secrets POST /api/v1/secret-syncs/azure-key-vault/{syncId}/import-secrets Import secrets from the specified Azure Key Vault Sync destination. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-key-vault/list GET /api/v1/secret-syncs/azure-key-vault List the Azure Key Vault Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-key-vault/remove-secrets POST /api/v1/secret-syncs/azure-key-vault/{syncId}/remove-secrets Remove previously synced secrets from the specified Azure Key Vault Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-key-vault/sync-secrets POST /api/v1/secret-syncs/azure-key-vault/{syncId}/sync-secrets Trigger a sync for the specified Azure Key Vault Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/azure-key-vault/update PATCH /api/v1/secret-syncs/azure-key-vault/{syncId} Update the specified Azure Key Vault Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/bitbucket/create POST /api/v1/secret-syncs/bitbucket Create a Bitbucket Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/bitbucket/delete DELETE /api/v1/secret-syncs/bitbucket/{syncId} Delete the specified Bitbucket Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/bitbucket/get-by-id GET /api/v1/secret-syncs/bitbucket/{syncId} Get the specified Bitbucket Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/bitbucket/get-by-name GET /api/v1/secret-syncs/bitbucket/sync-name/{syncName} Get the specified Bitbucket Sync by name and project ID. # Import Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/bitbucket/import-secrets POST /api/v1/secret-syncs/bitbucket/{syncId}/import-secrets Import secrets from the specified Bitbucket Sync destination. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/bitbucket/list GET /api/v1/secret-syncs/bitbucket List the Bitbucket Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/bitbucket/remove-secrets POST /api/v1/secret-syncs/bitbucket/{syncId}/remove-secrets Remove previously synced secrets from the specified Bitbucket Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/bitbucket/sync-secrets POST /api/v1/secret-syncs/bitbucket/{syncId}/sync-secrets Trigger a sync for the specified Bitbucket Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/bitbucket/update PATCH /api/v1/secret-syncs/bitbucket/{syncId} Update the specified Bitbucket Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/camunda/create POST /api/v1/secret-syncs/camunda Create a Camunda Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/camunda/delete DELETE /api/v1/secret-syncs/camunda/{syncId} Delete the specified Camunda Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/camunda/get-by-id GET /api/v1/secret-syncs/camunda/{syncId} Get the specified Camunda Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/camunda/get-by-name GET /api/v1/secret-syncs/camunda/sync-name/{syncName} Get the specified Camunda Sync by name and project ID. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/camunda/list GET /api/v1/secret-syncs/camunda List the Camunda Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/camunda/remove-secrets POST /api/v1/secret-syncs/camunda/{syncId}/remove-secrets Remove previously synced secrets from the specified Camunda Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/camunda/sync-secrets POST /api/v1/secret-syncs/camunda/{syncId}/sync-secrets Trigger a sync for the specified Camunda Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/camunda/update PATCH /api/v1/secret-syncs/camunda/{syncId} Update the specified Camunda Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/checkly/create POST /api/v1/secret-syncs/checkly Create a Checkly Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/checkly/delete DELETE /api/v1/secret-syncs/checkly/{syncId} Delete the specified Checkly Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/checkly/get-by-id GET /api/v1/secret-syncs/checkly/{syncId} Get the specified Checkly Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/checkly/get-by-name GET /api/v1/secret-syncs/checkly/sync-name/{syncName} Get the specified Checkly Sync by name and project ID. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/checkly/list GET /api/v1/secret-syncs/checkly List the Checkly Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/checkly/remove-secrets POST /api/v1/secret-syncs/checkly/{syncId}/remove-secrets Remove previously synced secrets from the specified Checkly Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/checkly/sync-secrets POST /api/v1/secret-syncs/checkly/{syncId}/sync-secrets Trigger a sync for the specified Checkly Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/checkly/update PATCH /api/v1/secret-syncs/checkly/{syncId} Update the specified Checkly Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/chef/create POST /api/v1/secret-syncs/chef Create a Chef Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/chef/delete DELETE /api/v1/secret-syncs/chef/{syncId} Delete the specified Chef Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/chef/get-by-id GET /api/v1/secret-syncs/chef/{syncId} Get the specified Chef Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/chef/get-by-name GET /api/v1/secret-syncs/chef/sync-name/{syncName} Get the specified Chef Sync by name and project ID. # Import Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/chef/import-secrets POST /api/v1/secret-syncs/chef/{syncId}/import-secrets Import secrets from the specified Chef Sync destination. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/chef/list GET /api/v1/secret-syncs/chef List the Chef Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/chef/remove-secrets POST /api/v1/secret-syncs/chef/{syncId}/remove-secrets Remove previously synced secrets from the specified Chef Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/chef/sync-secrets POST /api/v1/secret-syncs/chef/{syncId}/sync-secrets Trigger a sync for the specified Chef Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/chef/update PATCH /api/v1/secret-syncs/chef/{syncId} Update the specified Chef Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/cloudflare-pages/create POST /api/v1/secret-syncs/cloudflare-pages Create a Cloudflare Pages Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/cloudflare-pages/delete DELETE /api/v1/secret-syncs/cloudflare-pages/{syncId} Delete the specified Cloudflare Pages Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/cloudflare-pages/get-by-id GET /api/v1/secret-syncs/cloudflare-pages/{syncId} Get the specified Cloudflare Pages Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/cloudflare-pages/get-by-name GET /api/v1/secret-syncs/cloudflare-pages/sync-name/{syncName} Get the specified Cloudflare Pages Sync by name and project ID. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/cloudflare-pages/list GET /api/v1/secret-syncs/cloudflare-pages List the Cloudflare Pages Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/cloudflare-pages/remove-secrets POST /api/v1/secret-syncs/cloudflare-pages/{syncId}/remove-secrets Remove previously synced secrets from the specified Cloudflare Pages Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/cloudflare-pages/sync-secrets POST /api/v1/secret-syncs/cloudflare-pages/{syncId}/sync-secrets Trigger a sync for the specified Cloudflare Pages Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/cloudflare-pages/update PATCH /api/v1/secret-syncs/cloudflare-pages/{syncId} Update the specified Cloudflare Pages Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/create POST /api/v1/secret-syncs/cloudflare-workers Create a Cloudflare Workers Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/delete DELETE /api/v1/secret-syncs/cloudflare-workers/{syncId} Delete the specified Cloudflare Workers Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/get-by-id GET /api/v1/secret-syncs/cloudflare-workers/{syncId} Get the specified Cloudflare Workers Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/get-by-name GET /api/v1/secret-syncs/cloudflare-workers/sync-name/{syncName} Get the specified Cloudflare Workers Sync by name and project ID. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/list GET /api/v1/secret-syncs/cloudflare-workers List the Cloudflare Workers Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/remove-secrets POST /api/v1/secret-syncs/cloudflare-workers/{syncId}/remove-secrets Remove previously synced secrets from the specified Cloudflare Workers Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/sync-secrets POST /api/v1/secret-syncs/cloudflare-workers/{syncId}/sync-secrets Trigger a sync for the specified Cloudflare Workers Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/update PATCH /api/v1/secret-syncs/cloudflare-workers/{syncId} Update the specified Cloudflare Workers Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/databricks/create POST /api/v1/secret-syncs/databricks Create a Databricks Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/databricks/delete DELETE /api/v1/secret-syncs/databricks/{syncId} Delete the specified Databricks Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/databricks/get-by-id GET /api/v1/secret-syncs/databricks/{syncId} Get the specified Databricks Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/databricks/get-by-name GET /api/v1/secret-syncs/databricks/sync-name/{syncName} Get the specified Databricks Sync by name and project ID. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/databricks/list GET /api/v1/secret-syncs/databricks List the Databricks Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/databricks/remove-secrets POST /api/v1/secret-syncs/databricks/{syncId}/remove-secrets Remove previously synced secrets from the specified Databricks Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/databricks/sync-secrets POST /api/v1/secret-syncs/databricks/{syncId}/sync-secrets Trigger a sync for the specified Databricks Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/databricks/update PATCH /api/v1/secret-syncs/databricks/{syncId} Update the specified Databricks Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/digital-ocean-app-platform/create POST /api/v1/secret-syncs/digital-ocean-app-platform Create a Digital Ocean App Platform Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/digital-ocean-app-platform/delete DELETE /api/v1/secret-syncs/digital-ocean-app-platform/{syncId} Delete the specified Digital Ocean App Platform Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/digital-ocean-app-platform/get-by-id GET /api/v1/secret-syncs/digital-ocean-app-platform/{syncId} Get the specified Digital Ocean App Platform Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/digital-ocean-app-platform/get-by-name GET /api/v1/secret-syncs/digital-ocean-app-platform/sync-name/{syncName} Get the specified Digital Ocean App Platform Sync by name and project ID. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/digital-ocean-app-platform/list GET /api/v1/secret-syncs/digital-ocean-app-platform List the Digital Ocean App Platform Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/digital-ocean-app-platform/remove-secrets POST /api/v1/secret-syncs/digital-ocean-app-platform/{syncId}/remove-secrets Remove previously synced secrets from the specified Digital Ocean App Platform Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/digital-ocean-app-platform/sync-secrets POST /api/v1/secret-syncs/digital-ocean-app-platform/{syncId}/sync-secrets Trigger a sync for the specified Digital Ocean App Platform Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/digital-ocean-app-platform/update PATCH /api/v1/secret-syncs/digital-ocean-app-platform/{syncId} Update the specified Digital Ocean App Platform Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/flyio/create POST /api/v1/secret-syncs/flyio Create a Fly.io Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/flyio/delete DELETE /api/v1/secret-syncs/flyio/{syncId} Delete the specified Fly.io Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/flyio/get-by-id GET /api/v1/secret-syncs/flyio/{syncId} Get the specified Fly.io Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/flyio/get-by-name GET /api/v1/secret-syncs/flyio/sync-name/{syncName} Get the specified Fly.io Sync by name and project ID. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/flyio/list GET /api/v1/secret-syncs/flyio List the Fly.io Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/flyio/remove-secrets POST /api/v1/secret-syncs/flyio/{syncId}/remove-secrets Remove previously synced secrets from the specified Fly.io Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/flyio/sync-secrets POST /api/v1/secret-syncs/flyio/{syncId}/sync-secrets Trigger a sync for the specified Fly.io Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/flyio/update PATCH /api/v1/secret-syncs/flyio/{syncId} Update the specified Fly.io Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/gcp-secret-manager/create POST /api/v1/secret-syncs/gcp-secret-manager Create a GCP Secret Manager Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/gcp-secret-manager/delete DELETE /api/v1/secret-syncs/gcp-secret-manager/{syncId} Delete the specified GCP Secret Manager Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/gcp-secret-manager/get-by-id GET /api/v1/secret-syncs/gcp-secret-manager/{syncId} Get the specified GCP Secret Manager Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/gcp-secret-manager/get-by-name GET /api/v1/secret-syncs/gcp-secret-manager/sync-name/{syncName} Get the specified GCP Secret Manager Sync by name and project ID. # Import Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/gcp-secret-manager/import-secrets POST /api/v1/secret-syncs/gcp-secret-manager/{syncId}/import-secrets Import secrets from the specified GCP Secret Manager Sync destination. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/gcp-secret-manager/list GET /api/v1/secret-syncs/gcp-secret-manager List the GCP Secret Manager Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/gcp-secret-manager/remove-secrets POST /api/v1/secret-syncs/gcp-secret-manager/{syncId}/remove-secrets Remove previously synced secrets from the specified GCP Secret Manager Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/gcp-secret-manager/sync-secrets POST /api/v1/secret-syncs/gcp-secret-manager/{syncId}/sync-secrets Trigger a sync for the specified GCP Secret Manager Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/gcp-secret-manager/update PATCH /api/v1/secret-syncs/gcp-secret-manager/{syncId} Update the specified GCP Secret Manager Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/github/create POST /api/v1/secret-syncs/github Create a GitHub Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/github/delete DELETE /api/v1/secret-syncs/github/{syncId} Delete the specified GitHub Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/github/get-by-id GET /api/v1/secret-syncs/github/{syncId} Get the specified GitHub Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/github/get-by-name GET /api/v1/secret-syncs/github/sync-name/{syncName} Get the specified GitHub Sync by name and project ID. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/github/list GET /api/v1/secret-syncs/github List the GitHub Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/github/remove-secrets POST /api/v1/secret-syncs/github/{syncId}/remove-secrets Remove previously synced secrets from the specified GitHub Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/github/sync-secrets POST /api/v1/secret-syncs/github/{syncId}/sync-secrets Trigger a sync for the specified GitHub Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/github/update PATCH /api/v1/secret-syncs/github/{syncId} Update the specified GitHub Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/gitlab/create POST /api/v1/secret-syncs/gitlab Create a GitLab Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/gitlab/delete DELETE /api/v1/secret-syncs/gitlab/{syncId} Delete the specified GitLab Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/gitlab/get-by-id GET /api/v1/secret-syncs/gitlab/{syncId} Get the specified GitLab Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/gitlab/get-by-name GET /api/v1/secret-syncs/gitlab/sync-name/{syncName} Get the specified GitLab Sync by name and project ID. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/gitlab/list GET /api/v1/secret-syncs/gitlab List the GitLab Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/gitlab/remove-secrets POST /api/v1/secret-syncs/gitlab/{syncId}/remove-secrets Remove previously synced secrets from the specified GitLab Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/gitlab/sync-secrets POST /api/v1/secret-syncs/gitlab/{syncId}/sync-secrets Trigger a sync for the specified GitLab Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/gitlab/update PATCH /api/v1/secret-syncs/gitlab/{syncId} Update the specified GitLab Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/hashicorp-vault/create POST /api/v1/secret-syncs/hashicorp-vault Create a Hashicorp Vault Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/hashicorp-vault/delete DELETE /api/v1/secret-syncs/hashicorp-vault/{syncId} Delete the specified Hashicorp Vault Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/hashicorp-vault/get-by-id GET /api/v1/secret-syncs/hashicorp-vault/{syncId} Get the specified Hashicorp Vault Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/hashicorp-vault/get-by-name GET /api/v1/secret-syncs/hashicorp-vault/sync-name/{syncName} Get the specified Hashicorp Vault Sync by name and project ID. # Import Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/hashicorp-vault/import-secrets POST /api/v1/secret-syncs/hashicorp-vault/{syncId}/import-secrets Import secrets from the specified Hashicorp Vault Sync destination. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/hashicorp-vault/list GET /api/v1/secret-syncs/hashicorp-vault List the Hashicorp Vault Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/hashicorp-vault/remove-secrets POST /api/v1/secret-syncs/hashicorp-vault/{syncId}/remove-secrets Remove previously synced secrets from the specified Hashicorp Vault Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/hashicorp-vault/sync-secrets POST /api/v1/secret-syncs/hashicorp-vault/{syncId}/sync-secrets Trigger a sync for the specified Hashicorp Vault Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/hashicorp-vault/update PATCH /api/v1/secret-syncs/hashicorp-vault/{syncId} Update the specified Hashicorp Vault Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/heroku/create POST /api/v1/secret-syncs/heroku Create a Heroku Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/heroku/delete DELETE /api/v1/secret-syncs/heroku/{syncId} Delete the specified Heroku Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/heroku/get-by-id GET /api/v1/secret-syncs/heroku/{syncId} Get the specified Heroku Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/heroku/get-by-name GET /api/v1/secret-syncs/heroku/sync-name/{syncName} Get the specified Heroku Sync by name and project ID. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/heroku/list GET /api/v1/secret-syncs/heroku List the Heroku Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/heroku/remove-secrets POST /api/v1/secret-syncs/heroku/{syncId}/remove-secrets Remove previously synced secrets from the specified Heroku Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/heroku/sync-secrets POST /api/v1/secret-syncs/heroku/{syncId}/sync-secrets Trigger a sync for the specified Heroku Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/heroku/update PATCH /api/v1/secret-syncs/heroku/{syncId} Update the specified Heroku Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/humanitec/create POST /api/v1/secret-syncs/humanitec Create a Humanitec Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/humanitec/delete DELETE /api/v1/secret-syncs/humanitec/{syncId} Delete the specified Humanitec Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/humanitec/get-by-id GET /api/v1/secret-syncs/humanitec/{syncId} Get the specified Humanitec Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/humanitec/get-by-name GET /api/v1/secret-syncs/humanitec/sync-name/{syncName} Get the specified Humanitec Sync by name and project ID. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/humanitec/list GET /api/v1/secret-syncs/humanitec List the Humanitec Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/humanitec/remove-secrets POST /api/v1/secret-syncs/humanitec/{syncId}/remove-secrets Remove previously synced secrets from the specified Humanitec Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/humanitec/sync-secrets POST /api/v1/secret-syncs/humanitec/{syncId}/sync-secrets Trigger a sync for the specified Humanitec Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/humanitec/update PATCH /api/v1/secret-syncs/humanitec/{syncId} Update the specified Humanitec Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/laravel-forge/create POST /api/v1/secret-syncs/laravel-forge Create a Laravel Forge Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/laravel-forge/delete DELETE /api/v1/secret-syncs/laravel-forge/{syncId} Delete the specified Laravel Forge Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/laravel-forge/get-by-id GET /api/v1/secret-syncs/laravel-forge/{syncId} Get the specified Laravel Forge Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/laravel-forge/get-by-name GET /api/v1/secret-syncs/laravel-forge/sync-name/{syncName} Get the specified Laravel Forge Sync by name and project ID. # Import Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/laravel-forge/import-secrets POST /api/v1/secret-syncs/laravel-forge/{syncId}/import-secrets Import secrets from the specified Laravel Forge Sync destination. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/laravel-forge/list GET /api/v1/secret-syncs/laravel-forge List the Laravel Forge Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/laravel-forge/remove-secrets POST /api/v1/secret-syncs/laravel-forge/{syncId}/remove-secrets Remove previously synced secrets from the specified Laravel Forge Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/laravel-forge/sync-secrets POST /api/v1/secret-syncs/laravel-forge/{syncId}/sync-secrets Trigger a sync for the specified Laravel Forge Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/laravel-forge/update PATCH /api/v1/secret-syncs/laravel-forge/{syncId} Update the specified Laravel Forge Sync. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/list GET /api/v1/secret-syncs List all the Secret Syncs for the specified project. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/netlify/create POST /api/v1/secret-syncs/netlify Create a Netlify Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/netlify/delete DELETE /api/v1/secret-syncs/netlify/{syncId} Delete the specified Netlify Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/netlify/get-by-id GET /api/v1/secret-syncs/netlify/{syncId} Get the specified Netlify Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/netlify/get-by-name GET /api/v1/secret-syncs/netlify/sync-name/{syncName} Get the specified Netlify Sync by name and project ID. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/netlify/list GET /api/v1/secret-syncs/netlify List the Netlify Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/netlify/remove-secrets POST /api/v1/secret-syncs/netlify/{syncId}/remove-secrets Remove previously synced secrets from the specified Netlify Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/netlify/sync-secrets POST /api/v1/secret-syncs/netlify/{syncId}/sync-secrets Trigger a sync for the specified Netlify Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/netlify/update PATCH /api/v1/secret-syncs/netlify/{syncId} Update the specified Netlify Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/northflank/create POST /api/v1/secret-syncs/northflank Create a Northflank Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/northflank/delete DELETE /api/v1/secret-syncs/northflank/{syncId} Delete the specified Northflank Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/northflank/get-by-id GET /api/v1/secret-syncs/northflank/{syncId} Get the specified Northflank Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/northflank/get-by-name GET /api/v1/secret-syncs/northflank/sync-name/{syncName} Get the specified Northflank Sync by name and project ID. # Import Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/northflank/import-secrets POST /api/v1/secret-syncs/northflank/{syncId}/import-secrets Import secrets from the specified Northflank Sync destination. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/northflank/list GET /api/v1/secret-syncs/northflank List the Northflank Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/northflank/remove-secrets POST /api/v1/secret-syncs/northflank/{syncId}/remove-secrets Remove previously synced secrets from the specified Northflank Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/northflank/sync-secrets POST /api/v1/secret-syncs/northflank/{syncId}/sync-secrets Trigger a sync for the specified Northflank Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/northflank/update PATCH /api/v1/secret-syncs/northflank/{syncId} Update the specified Northflank Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/oci-vault/create POST /api/v1/secret-syncs/oci-vault Create an OCI Vault Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/oci-vault/delete DELETE /api/v1/secret-syncs/oci-vault/{syncId} Delete the specified OCI Vault Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/oci-vault/get-by-id GET /api/v1/secret-syncs/oci-vault/{syncId} Get the specified OCI Vault Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/oci-vault/get-by-name GET /api/v1/secret-syncs/oci-vault/sync-name/{syncName} Get the specified OCI Vault Sync by name and project ID. # Import Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/oci-vault/import-secrets POST /api/v1/secret-syncs/oci-vault/{syncId}/import-secrets Import secrets from the specified OCI Vault Sync destination. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/oci-vault/list GET /api/v1/secret-syncs/oci-vault List the OCI Vault Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/oci-vault/remove-secrets POST /api/v1/secret-syncs/oci-vault/{syncId}/remove-secrets Remove previously synced secrets from the specified OCI Vault Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/oci-vault/sync-secrets POST /api/v1/secret-syncs/oci-vault/{syncId}/sync-secrets Trigger a sync for the specified OCI Vault Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/oci-vault/update PATCH /api/v1/secret-syncs/oci-vault/{syncId} Update the specified OCI Vault Sync. # Options Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/options GET /api/v1/secret-syncs/options List the available Secret Sync Options. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/railway/create POST /api/v1/secret-syncs/railway Create a Railway Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/railway/delete DELETE /api/v1/secret-syncs/railway/{syncId} Delete the specified Railway Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/railway/get-by-id GET /api/v1/secret-syncs/railway/{syncId} Get the specified Railway Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/railway/get-by-name GET /api/v1/secret-syncs/railway/sync-name/{syncName} Get the specified Railway Sync by name and project ID. # Import Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/railway/import-secrets POST /api/v1/secret-syncs/railway/{syncId}/import-secrets Import secrets from the specified Railway Sync destination. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/railway/list GET /api/v1/secret-syncs/railway List the Railway Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/railway/remove-secrets POST /api/v1/secret-syncs/railway/{syncId}/remove-secrets Remove previously synced secrets from the specified Railway Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/railway/sync-secrets POST /api/v1/secret-syncs/railway/{syncId}/sync-secrets Trigger a sync for the specified Railway Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/railway/update PATCH /api/v1/secret-syncs/railway/{syncId} Update the specified Railway Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/render/create POST /api/v1/secret-syncs/render Create a Render Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/render/delete DELETE /api/v1/secret-syncs/render/{syncId} Delete the specified Render Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/render/get-by-id GET /api/v1/secret-syncs/render/{syncId} Get the specified Render Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/render/get-by-name GET /api/v1/secret-syncs/render/sync-name/{syncName} Get the specified Render Sync by name and project ID. # Import Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/render/import-secrets POST /api/v1/secret-syncs/render/{syncId}/import-secrets Import secrets from the specified Render Sync destination. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/render/list GET /api/v1/secret-syncs/render List the Render Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/render/remove-secrets POST /api/v1/secret-syncs/render/{syncId}/remove-secrets Remove previously synced secrets from the specified Render Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/render/sync-secrets POST /api/v1/secret-syncs/render/{syncId}/sync-secrets Trigger a sync for the specified Render Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/render/update PATCH /api/v1/secret-syncs/render/{syncId} Update the specified Render Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/supabase/create POST /api/v1/secret-syncs/supabase Create a Supabase Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/supabase/delete DELETE /api/v1/secret-syncs/supabase/{syncId} Delete the specified Supabase Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/supabase/get-by-id GET /api/v1/secret-syncs/supabase/{syncId} Get the specified Supabase Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/supabase/get-by-name GET /api/v1/secret-syncs/supabase/sync-name/{syncName} Get the specified Supabase Sync by name and project ID. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/supabase/list GET /api/v1/secret-syncs/supabase List the Supabase Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/supabase/remove-secrets POST /api/v1/secret-syncs/supabase/{syncId}/remove-secrets Remove previously synced secrets from the specified Supabase Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/supabase/sync-secrets POST /api/v1/secret-syncs/supabase/{syncId}/sync-secrets Trigger a sync for the specified Supabase Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/supabase/update PATCH /api/v1/secret-syncs/supabase/{syncId} Update the specified Supabase Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/teamcity/create POST /api/v1/secret-syncs/teamcity Create a TeamCity Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/teamcity/delete DELETE /api/v1/secret-syncs/teamcity/{syncId} Delete the specified TeamCity Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/teamcity/get-by-id GET /api/v1/secret-syncs/teamcity/{syncId} Get the specified TeamCity Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/teamcity/get-by-name GET /api/v1/secret-syncs/teamcity/sync-name/{syncName} Get the specified TeamCity Sync by name and project ID. # Import Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/teamcity/import-secrets POST /api/v1/secret-syncs/teamcity/{syncId}/import-secrets Import secrets from the specified TeamCity Sync destination. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/teamcity/list GET /api/v1/secret-syncs/teamcity List the TeamCity Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/teamcity/remove-secrets POST /api/v1/secret-syncs/teamcity/{syncId}/remove-secrets Remove previously synced secrets from the specified TeamCity Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/teamcity/sync-secrets POST /api/v1/secret-syncs/teamcity/{syncId}/sync-secrets Trigger a sync for the specified TeamCity Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/teamcity/update PATCH /api/v1/secret-syncs/teamcity/{syncId} Update the specified TeamCity Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/terraform-cloud/create POST /api/v1/secret-syncs/terraform-cloud Create a Terraform Cloud Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/terraform-cloud/delete DELETE /api/v1/secret-syncs/terraform-cloud/{syncId} Delete the specified Terraform Cloud Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/terraform-cloud/get-by-id GET /api/v1/secret-syncs/terraform-cloud/{syncId} Get the specified Terraform Cloud Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/terraform-cloud/get-by-name GET /api/v1/secret-syncs/terraform-cloud/sync-name/{syncName} Get the specified Terraform Cloud Sync by name and project ID. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/terraform-cloud/list GET /api/v1/secret-syncs/terraform-cloud List the Terraform Cloud Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/terraform-cloud/remove-secrets POST /api/v1/secret-syncs/terraform-cloud/{syncId}/remove-secrets Remove previously synced secrets from the specified Terraform Cloud Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/terraform-cloud/sync-secrets POST /api/v1/secret-syncs/terraform-cloud/{syncId}/sync-secrets Trigger a sync for the specified Terraform Cloud Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/terraform-cloud/update PATCH /api/v1/secret-syncs/terraform-cloud/{syncId} Update the specified Terraform Cloud Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/vercel/create POST /api/v1/secret-syncs/vercel Create a Vercel Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/vercel/delete DELETE /api/v1/secret-syncs/vercel/{syncId} Delete the specified Vercel Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/vercel/get-by-id GET /api/v1/secret-syncs/vercel/{syncId} Get the specified Vercel Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/vercel/get-by-name GET /api/v1/secret-syncs/vercel/sync-name/{syncName} Get the specified Vercel Sync by name and project ID. # Import Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/vercel/import-secrets POST /api/v1/secret-syncs/vercel/{syncId}/import-secrets Import secrets from the specified Vercel Sync destination. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/vercel/list GET /api/v1/secret-syncs/vercel List the Vercel Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/vercel/remove-secrets POST /api/v1/secret-syncs/vercel/{syncId}/remove-secrets Remove previously synced secrets from the specified Vercel Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/vercel/sync-secrets POST /api/v1/secret-syncs/vercel/{syncId}/sync-secrets Trigger a sync for the specified Vercel Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/vercel/update PATCH /api/v1/secret-syncs/vercel/{syncId} Update the specified Vercel Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/windmill/create POST /api/v1/secret-syncs/windmill Create a Windmill Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/windmill/delete DELETE /api/v1/secret-syncs/windmill/{syncId} Delete the specified Windmill Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/windmill/get-by-id GET /api/v1/secret-syncs/windmill/{syncId} Get the specified Windmill Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/windmill/get-by-name GET /api/v1/secret-syncs/windmill/sync-name/{syncName} Get the specified Windmill Sync by name and project ID. # Import Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/windmill/import-secrets POST /api/v1/secret-syncs/windmill/{syncId}/import-secrets Import secrets from the specified Windmill Sync destination. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/windmill/list GET /api/v1/secret-syncs/windmill List the Windmill Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/windmill/remove-secrets POST /api/v1/secret-syncs/windmill/{syncId}/remove-secrets Remove previously synced secrets from the specified Windmill Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/windmill/sync-secrets POST /api/v1/secret-syncs/windmill/{syncId}/sync-secrets Trigger a sync for the specified Windmill Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/windmill/update PATCH /api/v1/secret-syncs/windmill/{syncId} Update the specified Windmill Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/zabbix/create POST /api/v1/secret-syncs/zabbix Create a Zabbix Sync for the specified project environment. # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/zabbix/delete DELETE /api/v1/secret-syncs/zabbix/{syncId} Delete the specified Zabbix Sync. # Get by ID Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/zabbix/get-by-id GET /api/v1/secret-syncs/zabbix/{syncId} Get the specified Zabbix Sync by ID. # Get by Name Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/zabbix/get-by-name GET /api/v1/secret-syncs/zabbix/sync-name/{syncName} Get the specified Zabbix Sync by name and project ID. # Import Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/zabbix/import-secrets POST /api/v1/secret-syncs/zabbix/{syncId}/import-secrets Import secrets from the specified Zabbix Sync destination. # List Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/zabbix/list GET /api/v1/secret-syncs/zabbix List the Zabbix Syncs for the specified project. # Remove Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/zabbix/remove-secrets POST /api/v1/secret-syncs/zabbix/{syncId}/remove-secrets Remove previously synced secrets from the specified Zabbix Sync destination. # Sync Secrets Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/zabbix/sync-secrets POST /api/v1/secret-syncs/zabbix/{syncId}/sync-secrets Trigger a sync for the specified Zabbix Sync. # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-syncs/zabbix/update PATCH /api/v1/secret-syncs/zabbix/{syncId} Update the specified Zabbix Sync. # Create Source: https://infisical.com/docs/api-reference/endpoints/secret-tags/create POST /api/v1/projects/{projectId}/tags # Delete Source: https://infisical.com/docs/api-reference/endpoints/secret-tags/delete DELETE /api/v1/projects/{projectId}/tags/{tagId} # Get By ID Source: https://infisical.com/docs/api-reference/endpoints/secret-tags/get-by-id GET /api/v1/projects/{projectId}/tags/{tagId} # Get By Slug Source: https://infisical.com/docs/api-reference/endpoints/secret-tags/get-by-slug GET /api/v1/projects/{projectId}/tags/slug/{tagSlug} # List Source: https://infisical.com/docs/api-reference/endpoints/secret-tags/list GET /api/v1/projects/{projectId}/tags # Update Source: https://infisical.com/docs/api-reference/endpoints/secret-tags/update PATCH /api/v1/projects/{projectId}/tags/{tagId} # Create Source: https://infisical.com/docs/api-reference/endpoints/secrets/create POST /api/v4/secrets/{secretName} Create secret # Bulk Create Source: https://infisical.com/docs/api-reference/endpoints/secrets/create-many POST /api/v4/secrets/batch Create many secrets # Delete Source: https://infisical.com/docs/api-reference/endpoints/secrets/delete DELETE /api/v4/secrets/{secretName} Delete secret # Bulk Delete Source: https://infisical.com/docs/api-reference/endpoints/secrets/delete-many DELETE /api/v4/secrets/batch Delete many secrets # List Source: https://infisical.com/docs/api-reference/endpoints/secrets/list GET /api/v4/secrets List secrets # Retrieve Source: https://infisical.com/docs/api-reference/endpoints/secrets/read GET /api/v4/secrets/{secretName} Get a secret by name # Update Source: https://infisical.com/docs/api-reference/endpoints/secrets/update PATCH /api/v4/secrets/{secretName} Update secret # Bulk Update Source: https://infisical.com/docs/api-reference/endpoints/secrets/update-many PATCH /api/v4/secrets/batch Update many secrets # Get Source: https://infisical.com/docs/api-reference/endpoints/service-tokens/get GET /api/v2/service-token Return Infisical Token data This endpoint is deprecated and will be removed in the future. We recommend switching to using [Machine Identities](/documentation/platform/identities/machine-identities). # Create Source: https://infisical.com/docs/api-reference/endpoints/ssh/ca/create POST /api/v1/ssh/ca Create SSH CA # Delete Source: https://infisical.com/docs/api-reference/endpoints/ssh/ca/delete DELETE /api/v1/ssh/ca/{sshCaId} Delete SSH CA # List Source: https://infisical.com/docs/api-reference/endpoints/ssh/ca/list GET /api/v2/workspace/{projectId}/ssh-cas # List templates Source: https://infisical.com/docs/api-reference/endpoints/ssh/ca/list-certificate-templates GET /api/v1/ssh/ca/{sshCaId}/certificate-templates Get list of certificate templates for the SSH CA # Retrieve public key Source: https://infisical.com/docs/api-reference/endpoints/ssh/ca/public-key GET /api/v1/ssh/ca/{sshCaId}/public-key Get public key of SSH CA # Retrieve Source: https://infisical.com/docs/api-reference/endpoints/ssh/ca/read GET /api/v1/ssh/ca/{sshCaId} Get SSH CA # Update Source: https://infisical.com/docs/api-reference/endpoints/ssh/ca/update PATCH /api/v1/ssh/ca/{sshCaId} Update SSH CA # Create Source: https://infisical.com/docs/api-reference/endpoints/ssh/certificate-templates/create POST /api/v1/ssh/certificate-templates # Delete Source: https://infisical.com/docs/api-reference/endpoints/ssh/certificate-templates/delete DELETE /api/v1/ssh/certificate-templates/{certificateTemplateId} # List Source: https://infisical.com/docs/api-reference/endpoints/ssh/certificate-templates/list GET /api/v2/workspace/{projectId}/ssh-certificate-templates # Retrieve Source: https://infisical.com/docs/api-reference/endpoints/ssh/certificate-templates/read GET /api/v1/ssh/certificate-templates/{certificateTemplateId} # Update Source: https://infisical.com/docs/api-reference/endpoints/ssh/certificate-templates/update PATCH /api/v1/ssh/certificate-templates/{certificateTemplateId} # Issue SSH Credentials Source: https://infisical.com/docs/api-reference/endpoints/ssh/certificates/issue-credentials POST /api/v1/ssh/certificates/issue Issue SSH credentials (certificate + key) # Sign SSH Public Key Source: https://infisical.com/docs/api-reference/endpoints/ssh/certificates/sign-key POST /api/v1/ssh/certificates/sign Sign SSH public key # Add Host Source: https://infisical.com/docs/api-reference/endpoints/ssh/groups/add-host POST /api/v1/ssh/host-groups/{sshHostGroupId}/hosts/{hostId} Add an SSH Host to a Host Group # Create Source: https://infisical.com/docs/api-reference/endpoints/ssh/groups/create POST /api/v1/ssh/host-groups Create SSH Host Group # Delete Source: https://infisical.com/docs/api-reference/endpoints/ssh/groups/delete DELETE /api/v1/ssh/host-groups/{sshHostGroupId} Delete SSH Host Group # List Source: https://infisical.com/docs/api-reference/endpoints/ssh/groups/list GET /api/v2/workspace/{projectId}/ssh-host-groups # List Hosts Source: https://infisical.com/docs/api-reference/endpoints/ssh/groups/list-hosts GET /api/v1/ssh/host-groups/{sshHostGroupId}/hosts Get SSH Hosts in a Host Group # Retrieve Source: https://infisical.com/docs/api-reference/endpoints/ssh/groups/read GET /api/v1/ssh/host-groups/{sshHostGroupId} Get SSH Host Group # Remove Host Source: https://infisical.com/docs/api-reference/endpoints/ssh/groups/remove-host DELETE /api/v1/ssh/host-groups/{sshHostGroupId}/hosts/{hostId} Remove an SSH Host from a Host Group # Update Source: https://infisical.com/docs/api-reference/endpoints/ssh/groups/update PATCH /api/v1/ssh/host-groups/{sshHostGroupId} Update SSH Host Group # Create Source: https://infisical.com/docs/api-reference/endpoints/ssh/hosts/create POST /api/v1/ssh/hosts Register SSH Host # Delete Source: https://infisical.com/docs/api-reference/endpoints/ssh/hosts/delete DELETE /api/v1/ssh/hosts/{sshHostId} Delete SSH Host # Issue Host Certificate Source: https://infisical.com/docs/api-reference/endpoints/ssh/hosts/issue-host-cert POST /api/v1/ssh/hosts/{sshHostId}/issue-host-cert Issue SSH certificate for host # Issue User Certificate Source: https://infisical.com/docs/api-reference/endpoints/ssh/hosts/issue-user-cert POST /api/v1/ssh/hosts/{sshHostId}/issue-user-cert Issue SSH certificate for user # List Source: https://infisical.com/docs/api-reference/endpoints/ssh/hosts/list GET /api/v2/workspace/{projectId}/ssh-hosts # List My Hosts Source: https://infisical.com/docs/api-reference/endpoints/ssh/hosts/list-my GET /api/v1/ssh/hosts # Retrieve Source: https://infisical.com/docs/api-reference/endpoints/ssh/hosts/read GET /api/v1/ssh/hosts/{sshHostId} # Read Host CA Public Key Source: https://infisical.com/docs/api-reference/endpoints/ssh/hosts/read-host-ca-pk GET /api/v1/ssh/hosts/{sshHostId}/host-ca-public-key Get public key of the host SSH CA linked to the host # Read User CA Public Key Source: https://infisical.com/docs/api-reference/endpoints/ssh/hosts/read-user-ca-pk GET /api/v1/ssh/hosts/{sshHostId}/user-ca-public-key Get public key of the user SSH CA linked to the host # Update Source: https://infisical.com/docs/api-reference/endpoints/ssh/hosts/update PATCH /api/v1/ssh/hosts/{sshHostId} Update SSH Host # Attach Source: https://infisical.com/docs/api-reference/endpoints/tls-cert-auth/attach POST /api/v1/auth/tls-cert-auth/identities/{identityId} Attach TLS Certificate Auth configuration onto machine identity # Login Source: https://infisical.com/docs/api-reference/endpoints/tls-cert-auth/login POST /api/v1/auth/tls-cert-auth/login Login with TLS Certificate Auth for machine identity Infisical US/EU and dedicated instances are deployed with AWS ALB. TLS Certificate Auth must flow through our ALB mTLS pass-through in order to authenticate. When you are authenticating with TLS Certificate Auth, you must use the port `8443` instead of the default `443`. Example: `https://app.infisical.com:8443/api/v1/auth/tls-cert-auth/login` # Retrieve Source: https://infisical.com/docs/api-reference/endpoints/tls-cert-auth/retrieve GET /api/v1/auth/tls-cert-auth/identities/{identityId} Retrieve TLS Certificate Auth configuration on machine identity # Revoke Source: https://infisical.com/docs/api-reference/endpoints/tls-cert-auth/revoke DELETE /api/v1/auth/tls-cert-auth/identities/{identityId} Delete TLS Certificate Auth configuration on machine identity # Update Source: https://infisical.com/docs/api-reference/endpoints/tls-cert-auth/update PATCH /api/v1/auth/tls-cert-auth/identities/{identityId} Update TLS Certificate Auth configuration on machine identity # Attach Source: https://infisical.com/docs/api-reference/endpoints/token-auth/attach POST /api/v1/auth/token-auth/identities/{identityId} Attach Token Auth configuration onto machine identity # Create Token Source: https://infisical.com/docs/api-reference/endpoints/token-auth/create-token POST /api/v1/auth/token-auth/identities/{identityId}/tokens Create token for machine identity with Token Auth # Get Tokens Source: https://infisical.com/docs/api-reference/endpoints/token-auth/get-tokens GET /api/v1/auth/token-auth/identities/{identityId}/tokens Get tokens for machine identity with Token Auth # Retrieve Source: https://infisical.com/docs/api-reference/endpoints/token-auth/retrieve GET /api/v1/auth/token-auth/identities/{identityId} Retrieve Token Auth configuration on machine identity # Revoke Source: https://infisical.com/docs/api-reference/endpoints/token-auth/revoke DELETE /api/v1/auth/token-auth/identities/{identityId} Delete Token Auth configuration on machine identity # Revoke Token Source: https://infisical.com/docs/api-reference/endpoints/token-auth/revoke-token POST /api/v1/auth/token-auth/tokens/{tokenId}/revoke Revoke token for machine identity with Token Auth # Update Source: https://infisical.com/docs/api-reference/endpoints/token-auth/update PATCH /api/v1/auth/token-auth/identities/{identityId} Update Token Auth configuration on machine identity # Update Token Source: https://infisical.com/docs/api-reference/endpoints/token-auth/update-token PATCH /api/v1/auth/token-auth/tokens/{tokenId} Update token for machine identity with Token Auth # Attach Source: https://infisical.com/docs/api-reference/endpoints/universal-auth/attach POST /api/v1/auth/universal-auth/identities/{identityId} Attach Universal Auth configuration onto machine identity # Create Client Secret Source: https://infisical.com/docs/api-reference/endpoints/universal-auth/create-client-secret POST /api/v1/auth/universal-auth/identities/{identityId}/client-secrets Create Universal Auth Client Secret for machine identity # Get Client Secret By ID Source: https://infisical.com/docs/api-reference/endpoints/universal-auth/get-client-secret-by-id GET /api/v1/auth/universal-auth/identities/{identityId}/client-secrets/{clientSecretId} Get Universal Auth Client Secret for machine identity # List Client Secrets Source: https://infisical.com/docs/api-reference/endpoints/universal-auth/list-client-secrets GET /api/v1/auth/universal-auth/identities/{identityId}/client-secrets List Universal Auth Client Secrets for machine identity # Login Source: https://infisical.com/docs/api-reference/endpoints/universal-auth/login POST /api/v1/auth/universal-auth/login Login with Universal Auth for machine identity # Renew Access Token Source: https://infisical.com/docs/api-reference/endpoints/universal-auth/renew-access-token POST /api/v1/auth/token/renew Renew machine identity access token # Retrieve Source: https://infisical.com/docs/api-reference/endpoints/universal-auth/retrieve GET /api/v1/auth/universal-auth/identities/{identityId} Retrieve Universal Auth configuration on machine identity # Revoke Source: https://infisical.com/docs/api-reference/endpoints/universal-auth/revoke DELETE /api/v1/auth/universal-auth/identities/{identityId} Delete Universal Auth configuration on machine identity # Revoke Access Token Source: https://infisical.com/docs/api-reference/endpoints/universal-auth/revoke-access-token POST /api/v1/auth/token/revoke Revoke machine identity access token # Revoke Client Secret Source: https://infisical.com/docs/api-reference/endpoints/universal-auth/revoke-client-secret POST /api/v1/auth/universal-auth/identities/{identityId}/client-secrets/{clientSecretId}/revoke Revoke Universal Auth Client Secrets for machine identity # Update Source: https://infisical.com/docs/api-reference/endpoints/universal-auth/update PATCH /api/v1/auth/universal-auth/identities/{identityId} Update Universal Auth configuration on machine identity # Authentication Source: https://infisical.com/docs/api-reference/overview/authentication Learn how to authenticate with the Infisical Public API. You can authenticate with the Infisical API using [Identities](/documentation/platform/identities/machine-identities) paired with authentication modes such as [Universal Auth](/documentation/platform/identities/universal-auth). To interact with the Infisical API, you will need to obtain an access token. Follow the step by [step guide](/documentation/platform/identities/universal-auth) to get an access token via Universal Auth. **FAQ** There are a few reasons for why this might happen: * You have insufficient organization permissions to create, read, update, delete identities. * The identity you are trying to read, update, or delete is more privileged than yourself. * The role you are trying to create an identity for or update an identity to is more privileged than yours. There are a few reasons for why this might happen: * The client secret or access token has expired. * The identity is insufficiently permissioned to interact with the resources you wish to access. * You are attempting to access a `/raw` secrets endpoint that requires your project to disable E2EE. * The client secret/access token is being used from an untrusted IP. # API Reference Source: https://infisical.com/docs/api-reference/overview/introduction Infisical's Public (REST) API provides users an alternative way to programmatically access and manage secrets via HTTPS requests. This can be useful for automating tasks, such as rotating credentials, or for integrating secret management into a larger system. With the Public API, you can create, read, update, and delete secrets, as well as manage access control, query audit logs, and more. ## API Versioning The API is versioned on a per-resource basis. A resource's version is only incremented for breaking changes, so different endpoints may have different version numbers (e.g., `/api/v4/secrets` vs. `/api/v1/secret-syncs`). As a best practice, always use the latest available version for each endpoint to ensure access to the most recent features and improvements. # Changelog Source: https://infisical.com/docs/changelog/overview The changelog below reflects new product developments and updates on a monthly basis. ## July 2025 * Improved speed performance of audit log filtering. * Revamped password reset flow pages. * Added support for [Bitbucket for Secret Scanning](https://infisical.com/docs/documentation/platform/secret-scanning/bitbucket). * Released Secret Sync for [Zabbix](https://infisical.com/docs/integrations/secret-syncs/zabbix). ## June 2025 * Released Secret Sync for [1Password](https://infisical.com/docs/integrations/secret-syncs/1password), [Heroku](https://infisical.com/docs/integrations/secret-syncs/heroku), [Fly.io](https://infisical.com/docs/integrations/secret-syncs/flyio), and [Render](https://infisical.com/docs/integrations/secret-syncs/render). * Added support for [Kubernetes dynamic secrets](https://infisical.com/docs/documentation/platform/dynamic-secrets/kubernetes) to generate service account tokens * Released Secret Rotation for [MySQL](https://infisical.com/docs/documentation/platform/secret-rotation/mysql-credentials) and [OracleDB](https://infisical.com/docs/documentation/platform/secret-rotation/oracledb-credentials) as well as Dynamic Secrets for [Vertica](https://infisical.com/docs/documentation/platform/dynamic-secrets/vertica) and [GitHub App Tokens](https://infisical.com/docs/documentation/platform/dynamic-secrets/github). * Added support for Azure Auth in ESO. * [Kubernetes auth](https://infisical.com/docs/documentation/platform/identities/kubernetes-auth) now supports gateway as a token reviewer. * Revamped [Infisical CLI](https://infisical.com/docs/cli/commands/login) to auto-open login link. * Rolled out [Infisical Packer integration](https://infisical.com/docs/integrations/frameworks/packer). * Released [AliCloud Authentication method](https://infisical.com/docs/documentation/platform/identities/alicloud-auth). * Added support for [multi-step approval workflows](https://infisical.com/docs/documentation/platform/pr-workflows). * Revamped UI for Access Controls, Access Tree, Policies, and Approval Workflows. * Released [TLS Certificate Authentication method](https://infisical.com/docs/documentation/platform/identities/tls-cert-auth). * Added ability to copy session tokens in the Infisical Dashboard. * Expanded resource support for [Infisical Terraform Provider](https://registry.terraform.io/providers/Infisical/infisical/latest/docs). ## May 2025 * Added support for [Microsoft Teams integration](https://infisical.com/docs/documentation/platform/workflow-integrations/microsoft-teams-integration). * Released [Infisical Gateway](https://infisical.com/docs/documentation/platform/gateways/overview) for accessing private network resources from Infisical. * Added support for [Host Groups](https://infisical.com/docs/documentation/platform/ssh/host-groups) in Infisical SSH. * Updated the designs of all emails send by Infisical. * Added secret rotation support for [Azure Client](https://infisical.com/docs/documentation/platform/secret-rotation/azure-client-secret). * Released secret sync for [HashiCorp Vault](https://infisical.com/docs/integrations/secret-syncs/hashicorp-vault). * Made significant improvements to [Infisical Secret Scanning](https://infisical.com/docs/documentation/platform/secret-scanning/overview). * Released [Infisical ACME Client](https://infisical.com/docs/documentation/platform/pki/acme-ca#certificates-with-acme-ca). * [Access requests](https://infisical.com/docs/documentation/platform/access-controls/access-requests) now support "break-glass" policies. * Updated [Point-in-time Recovery](https://infisical.com/docs/documentation/platform/pit-recovery) UI/UX. * Redesigned [Approval Workflows and Change Requests](https://infisical.com/docs/documentation/platform/pr-workflows) user interface. ## April 2025 * Released ability to [request access to projects](https://infisical.com/docs/documentation/platform/access-controls/project-access-requests#project-access-requests). * Updated UI for Audit Logs and Log Filtering. * Launched [Infisical SSH V2](https://infisical.com/docs/documentation/platform/ssh/overview). * Developer [Infisical MCP](https://github.com/Infisical/infisical-mcp-server). * Added support for [Spotify Backstage Infisical plugin](https://infisical.com/docs/integrations/external/backstage). * Added secret syncs for Terraform Cloud, Vercel, Windmill, TeamCity, and Camunda. * Released [Auth0 Client Secret Rotation](https://infisical.com/docs/documentation/platform/secret-rotation/auth0-client-secret). * Launched [Infisical C++ SDK](https://github.com/Infisical/infisical-cpp-sdk). * Service tokens will now get expiry notifications. * Added Infisical [Linux binary](https://infisical.com/docs/self-hosting/reference-architectures/linux-deployment-ha#linux-ha). * Released ability to perform user impersonation. * Added support for [LDAP password rotation](https://infisical.com/docs/documentation/platform/secret-rotation/ldap-password). ## March 2025 * Released [Infisical Gateway](https://infisical.com/docs/documentation/platform/gateways/overview) for secure access to private resources without needing direct inbound connections to private networks. * Enhanced [Terraform](https://registry.terraform.io/providers/Infisical/infisical/latest/docs) capabilities with token authentication, ability to import existing Infisical secrets as resources, and support for project templates. * Self-hosted improvements: Usage and billing visibility for enabled features, ability to delete users, and support for multiple super admins. * UI and UX updates: Improved secret import interface on the overview page, password reset without backup PDF. * CLI enhancements: Various improvements including multiline secret support and ability to pass headers. * Kubernetes operator updates: Auto-reloading for DaemonSets and StatefulSets (previously only Deployments), added support for ConfigMaps. * Implemented powerful [Access Control](https://infisical.com/docs/documentation/platform/access-controls/overview#access-controls) updates including "**Grant Privileges**" feature for designating specific users for policy management, **Access Tree** visualization for simulating permissions, and ability to restrict scope of secret sharing within organizations. * Released new **Secret Requests** feature under Secret Share, added support for reminders with webhook triggers and implementing password policies for dynamic secrets. * Enhanced secret version history to show who made changes. * New integrations and syncs: **Crossplane** provider, **Humanitec** secret sync, **Airflow** system integration * Performed significant performance optimizations including a 50% reduction in database usage and optimized client secret handling for universal auth. * Enhanced security features with ability to add custom instance banners (useful for regulated industries), short-lived tokens for Kubernetes auth, and OIDC claim passing from machine identity login to permissions. * [Golang SDK](https://infisical.com/docs/sdks/languages/go#infisical-go-sdk): New API added for enhanced functionality * Added capability to programmatically configure an Infisical instance from start to finish without UI interaction. ## February 2025 * Released [KMIP integration](https://infisical.com/docs/documentation/platform/kms/kmip) with PKI structure, auth model integration with machine identities, complete set of client operations, and client certificate authentication flow. * Added new [AWS App Connection](https://infisical.com/docs/integrations/app-connections/aws) and [Secret Sync](https://infisical.com/docs/integrations/secret-syncs/aws-secrets-manager) functionality for enhanced AWS integration. * Released new [Azure Key Vault App Connection](https://infisical.com/docs/integrations/app-connections/azure-key-vault) and [Secret Sync](https://infisical.com/docs/integrations/secret-syncs/azure-key-vault), plus Terraform provider support. * Introduced more comprehensive logging with detailed records for secret sharing and metadata in audit logs. * Introduced new [permission types](https://infisical.com/docs/internals/permissions/project-permissions#subject-secrets): "View Value" vs "Describe Value" for more granular access control over secrets. * Updated encryption logic with unified approach for all platform data, ensuring consistency across the system. * Added support for [OIDC group mapping](https://infisical.com/docs/documentation/platform/sso/general-oidc) to automatically map groups to Infisical for role-based access control. * Added [Terraform Cloud support for OIDC](https://infisical.com/docs/documentation/platform/identities/oidc-auth/terraform-cloud#terraform-cloud). ## January 2025 * Released new integration architecture with decoupled authentication, replacing native integrations with [App Connections](https://infisical.com/docs/integrations/app-connections/overview) and [Secret Syncs](https://infisical.com/docs/integrations/secret-syncs/overview). Initial support for AWS Parameter Store, GitHub, and GCP Secret Manager with improved API and Terraform integration capabilities. * Added support for OIDC group mapping in [Keycloak](https://infisical.com/docs/documentation/platform/sso/keycloak-oidc/overview), enabling automatic mapping of Keycloak groups to Infisical for role-based access control. * Enhanced [Kubernetes operator](https://infisical.com/docs/integrations/platforms/kubernetes/overview#kubernetes-operator) with namespaced group support, bi-directional secret sync (push to Infisical), [dynamic secrets](https://infisical.com/docs/documentation/platform/dynamic-secrets/overview#dynamic-secrets) capabilities, and support for multiple operator instances. * Restructured navigation with dedicated sections for Secrets Management, [Certificate Management (PKI)](https://infisical.com/docs/documentation/platform/pki/overview), [Key Management (KMS)](https://infisical.com/docs/documentation/platform/kms/overview#key-management-service-kms), and [SSH Key Management](https://infisical.com/docs/documentation/platform/ssh). * Added [ephemeral Terraform resource](https://registry.terraform.io/providers/Infisical/infisical/latest/docs) support and improved secret sync architecture. * Released [.NET provider](https://github.com/Infisical/infisical-dotnet-configuration) with first-party Azure authentication support and Azure CLI integration. * Implemented secret Access Visibility allowing users to view all entities with access to specific secrets in the secret side panel. * Added secret filtering by metadata and SSH assigned certificates (Version 1). ## December 2024 * Added [GCP KMS](https://infisical.com/docs/documentation/platform/kms/overview) integration support. * Added support for [K8s CSI integration](https://infisical.com/docs/integrations/platforms/kubernetes-csi) and ability to point K8s operator to specific secret versions. * Fixed [Java SDK](https://github.com/Infisical/java-sdk) compatibility issues with Alpine Linux. * Fixed SCIM group role assignment issues. * Added Group View Page for improved team management. * Added instance URL to email verification for Infisical accounts. * Added ability to copy full path of nested folders. * Added custom templating support for K8s operator, allowing flexible secret key mapping and additional fields. * Optimized secrets versions table performance. ## November 2024 * Improved EnvKey migration functionality with support for Blocks, Inheritance, and Branches. * Added [Hardware Security Module (HSM) Encryption](https://infisical.com/docs/documentation/platform/kms/hsm-integration) support. * Updated permissions handling in [Infisical Terraform Provider](https://registry.terraform.io/providers/Infisical/infisical/latest/docs) to use lists instead of sets. * Enhanced [SCIM](https://infisical.com/docs/documentation/platform/scim/overview) implementation to remove SAML dependency. * Enhanced [OIDC Authentication](https://infisical.com/docs/documentation/platform/identities/oidc-auth/general) implementation and added Default Org Slug support. * Added support for multiple authentication methods per identity. * Added AWS Parameter Store integration sync improvements. * Added new screen and API for managing additional privileges. * Added Dynamic Secrets support for SQL Server. ## October 2024 * Significantly improved performance of audit log operations in UI. * Released [Databricks integration](https://infisical.com/docs/integrations/cloud/databricks). * Added ability to enforce 2FA organization-wide. * Added multiple resource to the [Infisical Terraform Provider](https://registry.terraform.io/providers/Infisical/infisical/latest/docs), including AWS and GCP integrations. * Released [Infisical KMS](https://infisical.com/docs/documentation/platform/kms/overview). * Added support for [LDAP dynamic secrets](https://infisical.com/docs/documentation/platform/ldap/overview). * Enabled changing auth methods for machine identities in the UI. * Launched [Infisical EU Cloud](https://eu.infisical.com). ## September 2024 * Improved paginations for identities and secrets. * Significant improvements to the [Infisical Terraform Provider](https://registry.terraform.io/providers/Infisical/infisical/latest/docs). * Created [Slack Integration](https://infisical.com/docs/documentation/platform/workflow-integrations/slack-integration#slack-integration) for Access Requests and Approval Workflows. * Added Dynamic Secrets for [Elaticsearch](https://infisical.com/docs/documentation/platform/dynamic-secrets/elastic-search) and [MongoDB](https://infisical.com/docs/documentation/platform/dynamic-secrets/mongo-db). * More authentication methods are now supported by Infisical SDKs and Agent. * Integrations now have dedicated audit logs and an overview screen. * Added support for secret referencing in the Terraform Provider. * Released support for [older versions of .NET](https://www.nuget.org/packages/Infisical.Sdk#supportedframeworks-body-tab) via SDK. * Released Infisical PKI Issuer which works alongside `cert-manager` to manage certificates in Kubernetes. ## August 2024 * Added [Azure DevOps integration](https://infisical.com/docs/integrations/cloud/azure-devops). * Released ability to hot-reload variables in CLI ([--watch flag](https://infisical.com/docs/cli/commands/run#infisical-run:watch)). * Added Dynamic Secrets for [Redis](https://infisical.com/docs/documentation/platform/dynamic-secrets/redis). * Added [Alerting](https://infisical.com/docs/documentation/platform/pki/alerting) for Certificate Management. * You can now specify roles and project memberships when adding new users. * Approval workflows now have email notifications. * Access requests are now integrated with User Groups. * Released ability to use IAM Roles for AWS Integrations. ## July 2024 * Released the official [Ruby SDK](https://infisical.com/docs/sdks/languages/ruby). * Increased the speed and efficiency of secret operations. * Released AWS KMS wrapping (bring your own key). * Users can now log in to CLI via SSO in non-browser environments. * Released [Slack Webhooks](https://infisical.com/docs/documentation/platform/webhooks). * Added [Dynamic Secrets with MS SQL](https://infisical.com/docs/documentation/platform/dynamic-secrets/mssql). * Redesigned and simplified the Machine Identities page. * Added the ability to move secrets/folders to another location. * Added [OIDC](https://infisical.com/docs/documentation/platform/identities/oidc-auth/general) support to CLI, Go SDK, and more. * Released [Linux installer for Infisical](https://infisical.com/docs/self-hosting/deployment-options/native/standalone-binary). ## June 2024 * Released [Infisical PKI](https://infisical.com/docs/documentation/platform/pki/overview). * Released the official [Go SDK](https://infisical.com/docs/sdks/languages/go). * Released [OIDC Authentication method](https://infisical.com/docs/documentation/platform/identities/oidc-auth/general). * Allowed users to configure log retention periods on self-hosted instances. * Added [tags](https://registry.terraform.io/providers/Infisical/infisical/latest/docs/resources/secret_tag) to terraform provider. * Released [public secret sharing](https://share.infisical.com). * Built a [native integration with Rundeck](https://infisical.com/docs/integrations/cicd/rundeck). * Added list view for projects in the dashboard. * Fixed offline coding mode in CLI. * Users are now able to leave a particular project themselves. ## May 2024 * Released [AWS](https://infisical.com/docs/documentation/platform/identities/aws-auth), [GCP](https://infisical.com/docs/documentation/platform/identities/gcp-auth), [Azure](https://infisical.com/docs/documentation/platform/identities/azure-auth), and [Kubernetes](https://infisical.com/docs/documentation/platform/identities/kubernetes-auth) Native Auth Methods. * Added [Secret Sharing](https://infisical.com/docs/documentation/platform/secret-sharing) functionality for sharing sensitive data through encrypted links – within and outside of an organization. * Updated [Secret Referencing](https://infisical.com/docs/documentation/platform/secret-reference) to be supported in all Infisical clients. Infisical UI is now able to provide automatic reference suggestions when typing. * Released new [Infisical Jenkins Plugin](https://infisical.com/docs/integrations/cicd/jenkins). * Added statuses and manual sync option to integrations in the Dashboard UI. * Released universal [Audit Log Streaming](https://infisical.com/docs/documentation/platform/audit-log-streams). * Added [Dynamic Secret template for AWS IAM](https://infisical.com/docs/documentation/platform/dynamic-secrets/aws-iam). * Added support for syncing tags and custom KMS keys to [AWS Secrets Manager](https://infisical.com/docs/integrations/cloud/aws-secret-manager) and [Parameter Store](https://infisical.com/docs/integrations/cloud/aws-parameter-store) Integrations. * Officially released Infisical on [AWS Marketplace](https://infisical.com/blog/infisical-launches-on-aws-marketplace). ## April 2024 * Added [Access Requests](https://infisical.com/docs/documentation/platform/access-controls/access-requests) as part of self-serve secrets management workflows. * Added [Temporary Access Provisioning](https://infisical.com/docs/documentation/platform/access-controls/temporary-access) for roles and additional privileges. ## March 2024 * Released support for [Dynamic Secrets](https://infisical.com/docs/documentation/platform/dynamic-secrets/overview). * Released the concept of [Additional Privileges](https://infisical.com/docs/documentation/platform/access-controls/additional-privileges) on top of user/machine roles. ## Feb 2024 * Added org-scoped authentication enforcement for SAML * Added support for [SCIM](https://infisical.com/docs/documentation/platform/scim/overview) along with instructions for setting it up with [Okta](https://infisical.com/docs/documentation/platform/scim/okta), [Azure](https://infisical.com/docs/documentation/platform/scim/azure), and [JumpCloud](https://infisical.com/docs/documentation/platform/scim/jumpcloud). * Pushed out project update for non-E2EE w/ new endpoints like for project creation and member invitation. * Added API Integration testing for new backend. * Added capability to create projects in Terraform. * Added slug-based capabilities to both organizations and projects to gradually make the API more developer-friendly moving forward. * Fixed + improved various analytics/telemetry-related items. * Fixed various issues associated with the Python SDK: build during installation on Mac OS, Rust dependency. * Updated self-hosting documentation to reflect [new backend](https://infisical.com/docs/self-hosting/overview). * Released [Postgres-based Infisical helm chart](https://cloudsmith.io/~infisical/repos/helm-charts/packages/detail/helm/infisical-standalone/). * Added checks to ensure that breaking API changes don't get released. * Automated API reference documentation to be inline with latest releases of Infisical. ## Jan 2024 * Completed Postgres migration initiative with restructed Fastify-based backend. * Reduced size of Infisical Node.js SDK by ≈90%. * Added secret fallback support to all SDK's. * Added Machine Identity support to [Terraform Provider](https://registry.terraform.io/providers/Infisical/infisical/latest/docs). * Released [.NET SDK](https://infisical.com/docs/sdks/languages/csharp). * Added symmetric encryption support to all SDK's. * Fixed secret reminders bug, where reminders were not being updated correctly. ## Dec 2023 * Released [(machine) identities](https://infisical.com/docs/documentation/platform/identities/overview) and [universal auth](https://infisical.com/docs/documentation/platform/identities/universal-auth) features. * Created new cross-language SDKs for [Python](https://infisical.com/docs/sdks/languages/python), [Node](https://infisical.com/docs/sdks/languages/node), and [Java](https://infisical.com/docs/sdks/languages/java). * Released first version of the [Infisical Agent](https://infisical.com/docs/infisical-agent/overview) * Added ability to [manage folders via CLI](https://infisical.com/docs/cli/commands/secrets). ## Nov 2023 * Replaced internal [Winston](https://github.com/winstonjs/winston) with [Pino](https://github.com/pinojs/pino) logging library with external logging to AWS CloudWatch * Added admin panel to self-hosting experience. * Released [secret rotation](https://infisical.com/docs/documentation/platform/secret-rotation/overview) feature with preliminary support for rotating [SendGrid](https://infisical.com/docs/documentation/platform/secret-rotation/sendgrid), [PostgreSQL/CockroachDB](https://infisical.com/docs/documentation/platform/secret-rotation/postgres-credentials), and [MySQL/MariaDB](https://infisical.com/docs/documentation/platform/secret-rotation/mysql) credentials. * Released secret reminders feature. ## Oct 2023 * Added support for [GitLab SSO](https://infisical.com/docs/documentation/platform/sso/gitlab). * Became SOC 2 (Type II) certified. * Reduced required JWT configuration from 5-6 secrets to 1 secret for self-hosting Infisical. * Compacted Infisical into 1 Docker image. * Added native [Hasura Cloud integration](https://infisical.com/docs/integrations/cloud/hasura-cloud). * Updated resource deletion logic for user, organization, and project deletion. ## Sep 2023 * Released [secret approvals](https://infisical.com/docs/documentation/platform/pr-workflows) feature. * Released an update to access controls; every user role now clearly defines and enforces a certain set of conditions across Infisical. * Updated UI/UX for integrations. * Added a native integration with [Qovery](https://infisical.com/docs/integrations/cloud/qovery). * Added service token generation capability for the CLI. ## Aug 2023 * Release Audit Logs V2. * Add support for [GitHub SSO](https://infisical.com/docs/documentation/platform/sso/github). * Enable users to opt in for multiple authentication methods. * Improved password requirements including check against [Have I Been Pwnd Password API](https://haveibeenpwned.com/Passwords). * Added native [GCP Secret Manager integration](https://infisical.com/docs/integrations/cloud/gcp-secret-manager) ## July 2023 * Released [secret referencing and importing](https://infisical.com/docs/documentation/platform/secret-reference) across folders and environments. * Redesigned the project/organization experience. * Updated the secrets overview page; users are now able to edit secrets directly from it. * Added native [Laravel Forge integration](https://infisical.com/docs/integrations/cloud/laravel-forge). * Added native [Codefresh integration](https://infisical.com/docs/integrations/cicd/codefresh). * Added native [Bitbucket integration](https://infisical.com/docs/integrations/cicd/bitbucket). * Added native [DigitalOcean App Platform integration](https://infisical.com/docs/integrations/cloud/digital-ocean-app-platform). * Added native [Cloud66 integration](https://infisical.com/docs/integrations/cloud/cloud-66). * Added native [Terraform Cloud integration](https://infisical.com/docs/integrations/cloud/terraform-cloud). * Added native [Northflank integration](https://infisical.com/docs/integrations/cloud/northflank). * Added native [Windmill integration](https://infisical.com/docs/integrations/cloud/windmill). * Added support for [Google SSO](https://infisical.com/docs/documentation/platform/sso/google) * Added support for [Okta](https://infisical.com/docs/documentation/platform/sso/okta), [Azure AD](https://infisical.com/docs/documentation/platform/sso/azure), and [JumpCloud](https://infisical.com/docs/documentation/platform/sso/jumpcloud) [SAML](https://infisical.com/docs/documentation/platform/saml) authentication. * Released [folders / path-based secret storage](https://infisical.com/docs/documentation/platform/folder). * Released [webhooks](https://infisical.com/docs/documentation/platform/webhooks). ## June 2023 * Released the [Terraform Provider](https://registry.terraform.io/providers/Infisical/infisical/latest/docs). * Updated the usage and billing page. Added the free trial for the professional tier. * Added native integrations with [Checkly](https://infisical.com/docs/integrations/cloud/checkly), [Hashicorp Vault](https://infisical.com/docs/integrations/cloud/hashicorp-vault), and [Cloudflare Pages](https://infisical.com/docs/integrations/cloud/cloudflare-pages). * Completed a penetration test with a `very good` result. * Added support for multi-line secrets. ## May 2023 * Released secret scanning capability for the CLI. * Released customer / license service to manage customer billing information, cloud plans, and self-hosted enterprise licenses; all instances of Infisicals now fetch/relay information from this service. * Completed penetration test. * Released new landing page. * Started SOC 2 (Type II) compliance certification preparation. * Released new deployment options for Fly.io, Digital Ocean and Render. ## April 2023 * Upgraded secret-handling to include blind-indexing (can be thought of as a fingerprint). * Added Node SDK support for working with individual secrets. * Released preliminary Python SDK. * Released service accounts, a client type capable of accessing multiple projects. * Added native Supabase integration. * Added native Railway integration. * Improved dashboard speed / performance. * Released the Secrets Overview page for users to view and identify missing environment secrets within one dashboard. * Updated documentation to include quickstarts and guides; also updated `README.md`. ## March 2023 * Added support for global configs to the Kubernetes operator. * Added support for self-hosted deployments to operate without any attached email service / SMTP configuration. * Added native Azure Key Vault integration. * Released one-click AWS EC2 deployment method. * Released preliminary Node SDK. ## Feb 2023 * Upgraded private key encryption/decryption mechanism to use Argon2id and 256-bit protected keys. * Added preliminary email-based 2FA capability. * Added suspicious login alerting if user logs in via new device or IP address. * Added documentation for PM2 integration. * Added secret backups support for the CLI; it now fetches and caches secrets locally to be used in the event of future failed fetch. * Added support for comparing secret values across environments on each secret. * Added native AWS Parameter Store integration. * Added native AWS Secrets Manager integration. * Added native GitLab integration. * Added native CircleCI integration. * Added native Travis CI integration. * Added secret tagging capability for enhanced organizational structure/grouping. * Released new dashboard design allowing more actions to be performed within the dashboard itself. * Added capability to generate `.env.example` file. ## Jan 2023 * Added preliminary audit logging capability covering CRUD secret operations. * Added secret overriding capability for team members to have their own branch of a secret. * Added secret versioning capability. * Added secret snapshot and point-in-time recovery capabilities to track and roll back the full state of a project. * Added native Vercel integration. * Added native Netlify integration. * Added native GitHub Actions integration. * Added custom environment names. * Added auto-redeployment capability to the Kubernetes operator. * (Service Token 2.0) Shortened the length of service tokens. * Added a public-facing API. * Added preliminary access control capability for users to be provisioned read/write access to environments. * Performed various web UI optimizations. ## Nov 2022 * Infisical is open sourced. * Added Infisical CLI support for Docker and Docker Compose. * Rewrote the Infisical CLI in Golang to be platform-agnostic. * Rewrote the documentation. ## Oct 2022 * Added support for organizations; projects now belong to organizations. * Improved speed / performance of dashboard by 25x. * Added capability to change account password in settings. * Added persistence for logging into the organization and project that users left from in their previous session. * Added password recovery emergency kit with automatic download enforcement upon account creation. * Added capability to copy-to-clipboard capabilities. * Released first native integration between Infisical and Heroku; environment variables can now be sent and kept in sync with Heroku. ## Sep 2022 * Added capability to change user roles in projects. * Added capability to delete projects. * Added Stripe. * Added default environments (development, staging, production) for new users with example key-pairs. * Added loading indicators. * Moved from push/pull mode of secret operation to automatically pulling and injecting secrets into processes upon startup. * Added drag-and-drop capability for adding new .env files. * Improved security measures against common attacks (e.g. XSS, clickjacking, etc.). * Added support for personal secrets (later modified to be secret overrides in Jan 2023). * Improved account password validation and enforce minimum requirements. * Added sorting capability to sort keys by name alphabetically in dashboard. * Added downloading secrets back as `.env` file capability. ## Aug 2022 * Released first version of the Infisical platform with push/pull capability and end-to-end encryption. * Improved security handling of authentication tokens by storing refresh tokens in HttpOnly cookies. * Added hiding key values on client-side. * Added search bar to dashboard to query for keys on client-side. * Added capability to rename a project. * Added user roles for projects. * Added incident contacts. # infisical bootstrap Source: https://infisical.com/docs/cli/commands/bootstrap Automate the initial setup of a new Infisical instance for headless deployment and infrastructure-as-code workflows ```bash theme={"dark"} infisical bootstrap --domain= --email= --password= --organization= ``` ## Description The `infisical bootstrap` command is used when deploying Infisical in automated environments where manual UI setup is not feasible. It's ideal for: * Containerized deployments in Kubernetes or Docker environments * Infrastructure-as-code pipelines with Terraform or similar tools * Continuous deployment workflows * DevOps automation scenarios The command initializes a fresh Infisical instance by creating an admin user, organization, and instance admin machine identity, enabling subsequent programmatic configuration without human intervention. This command creates an instance admin machine identity with the highest level of privileges. The returned token should be treated with the utmost security, similar to a root credential. Unauthorized access to this token could compromise your entire Infisical instance. ## Flags The URL of your Infisical instance. This can be set using the `INFISICAL_API_URL` environment variable. ```bash theme={"dark"} # Example infisical bootstrap --domain=https://your-infisical-instance.com ``` This flag is required. Email address for the admin user account that will be created. This can be set using the `INFISICAL_ADMIN_EMAIL` environment variable. ```bash theme={"dark"} # Example infisical bootstrap --email=admin@example.com ``` This flag is required. Password for the admin user account. This can be set using the `INFISICAL_ADMIN_PASSWORD` environment variable. ```bash theme={"dark"} # Example infisical bootstrap --password=your-secure-password ``` This flag is required. Name of the organization that will be created within the instance. This can be set using the `INFISICAL_ADMIN_ORGANIZATION` environment variable. ```bash theme={"dark"} # Example infisical bootstrap --organization=your-org-name ``` This flag is required. Whether to continue without error if the instance has already been bootstrapped. Useful for idempotent automation scripts. ```bash theme={"dark"} # Example infisical bootstrap --ignore-if-bootstrapped ``` This flag is optional and defaults to `false`. The type of output format for the bootstrap command. Supports `k8-secret` for Kubernetes secret integration. This flag is optional and defaults to "". ```bash theme={"dark"} # Kubernetes secret output infisical bootstrap --output=k8-secret --k8-secret-template='{"data":{"token":"{{.Identity.Credentials.Token}}"}}' --k8-secret-name=infisical-bootstrap --k8-secret-namespace=default ``` When using `k8-secret`, the command will create or update a Kubernetes secret directly in your cluster. Note that this option requires the command to be executed from within a Kubernetes pod with appropriate service account permissions. The template to use for rendering the Kubernetes secret data/stringData section. Required when using `--output=k8-secret`. The template uses Go template syntax and has access to the bootstrap response data. ```bash theme={"dark"} # Example template that stores the token infisical bootstrap --k8-secret-template='{"data":{"token":"{{.Identity.Credentials.Token}}"}}' # Example template with multiple fields infisical bootstrap --k8-secret-template='{"stringData":{"token":"{{.Identity.Credentials.Token}}","org-id":"{{.Organization.ID}}","user-email":"{{.User.Email}}"}}' ``` Available template functions: * `encodeBase64`: Base64 encode a string Available data fields: * `.Identity.Credentials.Token`: The machine identity token * `.Identity.ID`: The identity ID * `.Identity.Name`: The identity name * `.Organization.ID`: The organization ID * `.Organization.Name`: The organization name * `.Organization.Slug`: The organization slug * `.User.Email`: The admin user email * `.User.ID`: The admin user ID * `.User.FirstName`: The admin user first name * `.User.LastName`: The admin user last name This flag is required when using `k8-secret` output. The name of the Kubernetes secret to create or update. Required when using `--output=k8-secret`. ```bash theme={"dark"} # Example infisical bootstrap --k8-secret-name=infisical-bootstrap-credentials ``` This flag is required when using `k8-secret` output. The namespace where the Kubernetes secret should be created or updated. Required when using `--output=k8-secret`. ```bash theme={"dark"} # Example infisical bootstrap --k8-secret-namespace=infisical-system ``` This flag is required when using `k8-secret` output. ## Response ### JSON Output (Default) The command returns a JSON response with details about the created user, organization, and machine identity: ```json theme={"dark"} { "identity": { "credentials": { "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGl0eUlkIjoiZGIyMjQ3OTItZWQxOC00Mjc3LTlkYWUtNTdlNzUyMzE1ODU0IiwiaWRlbnRpdHlBY2Nlc3NUb2tlbklkIjoiZmVkZmZmMGEtYmU3Yy00NjViLWEwZWEtZjM5OTNjMTg4OGRlIiwiYXV0aFRva2VuVHlwZSI6ImlkZW50aXR5QWNjZXNzVG9rZW4iLCJpYXQiOjE3NDIzMjI0ODl9.mqcZZqIFqER1e9ubrQXp8FbzGYi8nqqZwfMvz09g-8Y" }, "id": "db224792-ed18-4277-9dae-57e752315854", "name": "Instance Admin Identity" }, "message": "Successfully bootstrapped instance", "organization": { "id": "b56bece0-42f5-4262-b25e-be7bf5f84957", "name": "dog", "slug": "dog-v-e5l" }, "user": { "email": "admin@example.com", "firstName": "Admin", "id": "a418f355-c8da-453c-bbc8-6c07208eeb3c", "lastName": "User", "superAdmin": true, "username": "admin@example.com" } } ``` ### Kubernetes Secret Output When using `--output=k8-secret`, the command creates or updates a Kubernetes secret in your cluster and logs the operation result. This is particularly useful for automated bootstrapping scenarios such as Kubernetes Jobs, GitOps workflows, or when you need to immediately store the admin credentials for use by other applications in your cluster. ## Kubernetes Integration ### Prerequisites for k8-secret Output When running with `--output=k8-secret`, the command must be executed from within a Kubernetes pod with proper service account permissions. The command automatically: 1. Reads the service account token from `/var/run/secrets/kubernetes.io/serviceaccount/token` 2. Reads the CA certificate from `/var/run/secrets/kubernetes.io/serviceaccount/ca.crt` 3. Gets the Kubernetes API server URL from environment variables (`KUBERNETES_SERVICE_HOST` and `KUBERNETES_SERVICE_PORT_HTTPS`) ### Required RBAC Permissions Your service account needs the following permissions: ```yaml theme={"dark"} apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: infisical-bootstrap rules: - apiGroups: [""] resources: ["secrets"] verbs: ["get", "create", "update"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: infisical-bootstrap subjects: - kind: ServiceAccount name: your-service-account roleRef: kind: Role name: infisical-bootstrap apiGroup: rbac.authorization.k8s.io ``` ## Usage with Automation For automation purposes, you can extract just the machine identity token from the response: ```bash theme={"dark"} infisical bootstrap --domain=https://your-infisical-instance.com --email=admin@example.com --password=your-secure-password --organization=your-org-name | jq ".identity.credentials.token" ``` This extracts only the token, which can be captured in a variable or piped to other commands. ## Example: Capture Token in a Variable ```bash theme={"dark"} TOKEN=$(infisical bootstrap --domain=https://your-infisical-instance.com --email=admin@example.com --password=your-secure-password --organization=your-org-name | jq -r ".identity.credentials.token") # Now use the token for further automation echo "Token has been captured and can be used for authentication" ``` ## Notes * The bootstrap process can only be performed once on a fresh Infisical instance * All core flags (domain, email, password, organization) are required for the bootstrap process to complete successfully * Security controls prevent privilege escalation: instance admin identities cannot be managed by non-instance admin users and identities * The generated admin user account can be used to log in via the UI if needed * When using `k8-secret` output, the command must run within a Kubernetes pod with proper service account permissions * The `--ignore-if-bootstrapped` flag is useful for making bootstrap scripts idempotent # infisical dynamic-secrets Source: https://infisical.com/docs/cli/commands/dynamic-secrets Perform dynamic secret operations directly with the CLI ``` infisical dynamic-secrets ``` ## Description Dynamic secrets are unique secrets generated on demand based on the provided configuration settings. For more details, refer to [dynamics secrets section](/documentation/platform/dynamic-secrets/overview). This command enables you to perform list, lease, renew lease, and revoke lease operations on dynamic secrets within your Infisical project. ### Sub-commands Use this command to print out all of the dynamic secrets in your project. ```bash theme={"dark"} $ infisical dynamic-secrets ``` ### Environment variables Used to fetch dynamic secrets via a [machine identity](/documentation/platform/identities/machine-identities) instead of logged-in credentials. Simply, export this variable in the terminal before running this command. ```bash theme={"dark"} # Example export INFISICAL_TOKEN=$(infisical login --method=universal-auth --client-id= --client-secret= --silent --plain) # --plain flag will output only the token, so it can be fed to an environment variable. --silent will disable any update messages. ``` Used to disable the check for new CLI versions. This can improve the time it takes to run this command. Recommended for production environments. To use, simply export this variable in the terminal before running this command. ```bash theme={"dark"} # Example export INFISICAL_DISABLE_UPDATE_CHECK=true ``` ### Flags The project ID to fetch dynamic secrets from. ```bash theme={"dark"} # Example infisical dynamic-secrets --projectId= ``` The project slug to fetch dynamic secrets from. ```bash theme={"dark"} # Example infisical dynamic-secrets --project-slug= ``` The authenticated token to fetch dynamic secrets from. This is required when using a machine identity to authenticate. ```bash theme={"dark"} # Example infisical dynamic-secrets --token= ``` Used to select the environment name on which actions should be taken. Default value: `dev` Use to select the project folder on which dynamic secrets will be accessed. ```bash theme={"dark"} # Example infisical dynamic-secrets --path="/" --env=dev ``` This command is used to create a new lease for a dynamic secret. ```bash theme={"dark"} $ infisical dynamic-secrets lease create ``` ### Flags Used to select the environment name on which actions should be taken. Default value: `dev` The `--plain` flag will output dynamic secret lease credentials values without formatting, one per line. Default value: `false` ```bash theme={"dark"} # Example infisical dynamic-secrets lease create dynamic-secret-postgres --plain ``` The `--path` flag indicates which project folder dynamic secrets will be injected from. ```bash theme={"dark"} # Example infisical dynamic-secrets lease create --path="/" --env=dev ``` The project ID of the dynamic secrets to lease from. ```bash theme={"dark"} # Example infisical dynamic-secrets lease create --projectId= ``` The project slug of the dynamic secrets to lease from. ```bash theme={"dark"} # Example infisical dynamic-secrets lease create --project-slug= ``` The authenticated token to create dynamic secret leases. This is required when using a machine identity to authenticate. ```bash theme={"dark"} # Example infisical dynamic-secrets lease create --token= ``` The lease lifetime. If not provided, the default TTL of the dynamic secret root credential will be used. ```bash theme={"dark"} # Example infisical dynamic-secrets lease create --ttl= ``` ### Provider-specific flags The following flags are specific to certain providers or integrations: The namespace to create the lease in. Only used for Kubernetes dynamic secrets. ```bash theme={"dark"} # Example infisical dynamic-secrets lease create --kubernetes-namespace= ``` This command is used to list leases for a dynamic secret. ```bash theme={"dark"} $ infisical dynamic-secrets lease list ``` ### Flags Used to select the environment name on which actions should be taken. Default value: `dev` The `--path` flag indicates which project folder dynamic secrets will be injected from. ```bash theme={"dark"} # Example infisical dynamic-secrets lease list --path="/" --env=dev ``` The project ID of the dynamic secrets to list leases from. ```bash theme={"dark"} # Example infisical dynamic-secrets lease list --projectId= ``` The project slug of the dynamic secrets to list leases from. ```bash theme={"dark"} # Example infisical dynamic-secrets lease list --project-slug= ``` The authenticated token to list dynamic secret leases. This is required when using a machine identity to authenticate. ```bash theme={"dark"} # Example infisical dynamic-secrets lease list --token= ``` This command is used to renew a lease before it expires. ```bash theme={"dark"} $ infisical dynamic-secrets lease renew ``` ### Flags Used to select the environment name on which actions should be taken. Default value: `dev` The `--path` flag indicates which project folder dynamic secrets will be renewed from. ```bash theme={"dark"} # Example infisical dynamic-secrets lease renew --path="/" --env=dev ``` The project ID of the dynamic secret to lease from. ```bash theme={"dark"} # Example infisical dynamic-secrets lease renew --projectId= ``` The project slug of the dynamic secret to lease from. ```bash theme={"dark"} # Example infisical dynamic-secrets lease renew --project-slug= ``` The authenticated token to create dynamic secret leases. This is required when using a machine identity to authenticate. ```bash theme={"dark"} # Example infisical dynamic-secrets lease renew --token= ``` The lease lifetime. If not provided, the default TTL of the dynamic secret root credential will be used. ```bash theme={"dark"} # Example infisical dynamic-secrets lease renew --ttl= ``` This command is used to delete a lease. ```bash theme={"dark"} $ infisical dynamic-secrets lease delete ``` ### Flags Used to select the environment name on which actions should be taken. Default value: `dev` The `--path` flag indicates which project folder dynamic secrets will be deleted from. ```bash theme={"dark"} # Example infisical dynamic-secrets lease delete --path="/" --env=dev ``` The project ID of the dynamic secret to delete lease from. ```bash theme={"dark"} # Example infisical dynamic-secrets lease delete --projectId= ``` The project slug of the dynamic secret to delete lease from. ```bash theme={"dark"} # Example infisical dynamic-secrets lease delete --project-slug= ``` The authenticated token to delete dynamic secret leases. This is required when using a machine identity to authenticate. ```bash theme={"dark"} # Example infisical dynamic-secrets lease delete --token= ``` # infisical export Source: https://infisical.com/docs/cli/commands/export Export Infisical secrets from CLI into different file formats ```bash theme={"dark"} infisical export [options] ``` ## Description Export environment variables from the platform into a file format. By default, output is sent to stdout (standard output), but you can use the `--output-file` flag to save directly to a file. ## Subcommands & flags Use this command to export environment variables from the platform into a raw file formats ```bash theme={"dark"} $ infisical export # Export variables to a .env file infisical export > .env infisical export --output-file=./.env # Export variables to a .env file (with export keyword) infisical export --format=dotenv-export > .env infisical export --format=dotenv-export --output-file=./.env # Export variables to a JSON file infisical export --format=json > secrets.json infisical export --format=json --output-file=./secrets.json # Export variables to a YAML file infisical export --format=yaml > secrets.yaml infisical export --format=yaml --output-file=./secrets.yaml # Render secrets using a custom template file infisical export --template= ``` ### Environment variables Used to fetch secrets via a [machine identities](/documentation/platform/identities/machine-identities) apposed to logged in credentials. Simply, export this variable in the terminal before running this command. ```bash theme={"dark"} # Example export INFISICAL_TOKEN=$(infisical login --method=universal-auth --client-id= --client-secret= --silent --plain) # --plain flag will output only the token, so it can be fed to an environment variable. --silent will disable any update messages. ``` Alternatively, you may use service tokens. ```bash theme={"dark"} # Example export INFISICAL_TOKEN= ``` Used to disable the check for new CLI versions. This can improve the time it takes to run this command. Recommended for production environments. To use, simply export this variable in the terminal before running this command. ```bash theme={"dark"} # Example export INFISICAL_DISABLE_UPDATE_CHECK=true ``` ### flags The path to write the output file to. Can be a full file path, directory, or filename. ```bash theme={"dark"} # Export to specific file infisical export --format=json --output-file=./secrets.json # Export to directory (uses default filename based on format) infisical export --format=yaml --output-file=./ ``` **When `--output-file` is specified:** * Secrets are saved directly to the specified file * A success message is displayed showing the file path * For directories: adds default filename `secrets.{format}` (e.g., `secrets.json`, `secrets.yaml`) * For dotenv formats in directories: uses `.env` as the filename **When `--output-file` is NOT specified (default behavior):** * Output is sent to stdout (standard output) * You can use shell redirection like `infisical export > secrets.json` * Maintains backwards compatibility with existing scripts If you're using shell redirection and your token expires, re-authentication will fail because the prompt can't display properly due to the redirection. The `--template` flag specifies the path to the template file used for rendering secrets. When using templates, you can omit the other format flags. ```text my-template-file theme={"dark"} {{$secrets := secret "" "" ""}} {{$length := len $secrets}} {{- "{"}} {{- with $secrets }} {{- range $index, $secret := . }} "{{ $secret.Key }}": "{{ $secret.Value }}"{{if lt $index (minus $length 1)}},{{end}} {{- end }} {{- end }} {{ "}" -}} ``` ```bash theme={"dark"} # Example infisical export --template="/path/to/template/file" ``` Used to set the environment that secrets are pulled from. ```bash theme={"dark"} # Example infisical export --env=prod ``` Note: this flag only accepts environment slug names not the fully qualified name. To view the slug name of an environment, visit the project settings page. default value: `dev` By default the project id is retrieved from the `.infisical.json` located at the root of your local project. This flag allows you to override this behavior by explicitly defining the project to fetch your secrets from. ```bash theme={"dark"} # Example infisical export --projectId=XXXXXXXXXXXXXX ``` Parse shell parameter expansions in your secrets (e.g., `${DOMAIN}`) Default value: `true` By default imported secrets are available, you can disable it by setting this option to false. Default value: `true` Format of the output file. Accepted values: `dotenv`, `dotenv-export`, `csv`, `json` and `yaml` Default value: `dotenv` Prioritizes personal secrets with the same name over shared secrets Default value: `true` The `--path` flag indicates which project folder secrets will be injected from. ```bash theme={"dark"} # Example infisical export --path="/path/to/folder" --env=dev ``` When working with tags, you can use this flag to filter and retrieve only secrets that are associated with a specific tag(s). ```bash theme={"dark"} # Example infisical export --tags=tag1,tag2,tag3 --env=dev ``` Note: you must reference the tag by its slug name not its fully qualified name. Go to project settings to view all tag slugs. By default, all secrets are fetched # infisical gateway Source: https://infisical.com/docs/cli/commands/gateway Run the Infisical gateway or manage its systemd service ```bash theme={"dark"} sudo infisical gateway start --name= --auth-method= ``` ```bash theme={"dark"} sudo infisical gateway systemd install --token= --domain= --name= ``` ## Description The Infisical gateway provides secure access to private resources using modern TCP-based SSH tunnel architecture with enhanced security and flexible deployment options. The gateway system uses SSH reverse tunnels over TCP, eliminating firewall complexity and providing excellent performance for enterprise environments. **Deprecation and Migration Notice:** The legacy `infisical gateway` command (v1) will be removed in a future release. Please migrate to `infisical gateway start` (Gateway v2). If you are moving from Gateway v1 to Gateway v2, this is NOT a drop-in switch. Gateway v2 creates new gateway instances with new gateway IDs. You must update any existing resources that reference gateway IDs (for example: dynamic secret configs, app connections, or other gateway-bound resources) to point to the new Gateway v2 gateway resource. Until you update those references, traffic will continue to target the old v1 gateway. ## Subcommands & flags Run the Infisical gateway component within your the network where your target resources are located. The gateway establishes an SSH reverse tunnel to a relay server and provides secure access to private resources within your network. ```bash theme={"dark"} sudo infisical gateway start --name= --auth-method= ``` By default, the gateway automatically connects to the relay with the lowest latency. To target a specific relay, use the `--target-relay-name=` flag. Once started, the gateway component will: * Automatically connect to a healthy relay with the lowest latency (unless the `--target-relay-name` flag is specified) * Establish outbound SSH reverse tunnel to relay server (no inbound firewall rules needed) * Authenticate using SSH certificates issued by Infisical * Automatically reconnect if the connection is lost * Provide access to private resources within your network ### Authentication The Gateway supports multiple authentication methods. Below are the available authentication methods, with their respective flags. The Universal Auth method is a simple and secure way to authenticate with Infisical. It requires a client ID and a client secret to authenticate with Infisical. Your machine identity client ID. Your machine identity client secret. The authentication method to use. Must be `universal-auth` when using Universal Auth. ```bash theme={"dark"} sudo infisical gateway start --auth-method=universal-auth --client-id= --client-secret= --name= ``` The Native Kubernetes method is used to authenticate with Infisical when running in a Kubernetes environment. It requires a service account token to authenticate with Infisical. Your machine identity ID. Path to the Kubernetes service account token to use. Default: `/var/run/secrets/kubernetes.io/serviceaccount/token`. The authentication method to use. Must be `kubernetes` when using Native Kubernetes. ```bash theme={"dark"} sudo infisical gateway start --auth-method=kubernetes --machine-identity-id= --name= ``` The Native Azure method is used to authenticate with Infisical when running in an Azure environment. Your machine identity ID. The authentication method to use. Must be `azure` when using Native Azure. ```bash theme={"dark"} sudo infisical gateway start --auth-method=azure --machine-identity-id= --name= ``` The Native GCP ID Token method is used to authenticate with Infisical when running in a GCP environment. Your machine identity ID. The authentication method to use. Must be `gcp-id-token` when using Native GCP ID Token. ```bash theme={"dark"} sudo infisical gateway start --auth-method=gcp-id-token --machine-identity-id= --name= ``` The GCP IAM method is used to authenticate with Infisical with a GCP service account key. Your machine identity ID. Path to your GCP service account key file *(Must be in JSON format!)* The authentication method to use. Must be `gcp-iam` when using GCP IAM. ```bash theme={"dark"} sudo infisical gateway start --auth-method=gcp-iam --machine-identity-id= --service-account-key-file-path= --name= ``` The AWS IAM method is used to authenticate with Infisical with an AWS IAM role while running in an AWS environment like EC2, Lambda, etc. Your machine identity ID. The authentication method to use. Must be `aws-iam` when using Native AWS IAM. ```bash theme={"dark"} sudo infisical gateway start --auth-method=aws-iam --machine-identity-id= --name= ``` The OIDC Auth method is used to authenticate with Infisical via identity tokens with OIDC. Your machine identity ID. The OIDC JWT from the identity provider. The authentication method to use. Must be `oidc-auth` when using OIDC Auth. ```bash theme={"dark"} sudo infisical gateway start --auth-method=oidc-auth --machine-identity-id= --jwt= --name= ``` The JWT Auth method is used to authenticate with Infisical via a JWT token. The JWT token to use for authentication. Your machine identity ID. The authentication method to use. Must be `jwt-auth` when using JWT Auth. ```bash theme={"dark"} sudo infisical gateway start --auth-method=jwt-auth --jwt= --machine-identity-id= --name= ``` You can use the `INFISICAL_TOKEN` environment variable to authenticate with Infisical with a raw machine identity access token. The machine identity access token to use for authentication. ```bash theme={"dark"} sudo infisical gateway start --token= --name= ``` ### Other Flags The name of the relay that this gateway should connect to. The relay must be running and registered before starting the gateway. If this flag is omitted, the gateway will automatically connect to a healthy relay with the lowest latency. ```bash theme={"dark"} # Example sudo infisical gateway start --target-relay-name=my-relay --name=my-gateway --token= ``` **Note:** For Infisical Cloud users using instance relays, the relay infrastructure is already running and managed by Infisical. If using organization relays or self-hosted instance relays, you must first start a relay server. For more information on deploying relays, refer to the [Relay Deployment Guide](/documentation/platform/gateways/relay-deployment). The name of the gateway instance. ```bash theme={"dark"} # Example sudo infisical gateway start --name=my-gateway --token= ``` Domain of your self-hosted Infisical instance. ```bash theme={"dark"} # Example sudo infisical gateway start --domain=https://app.your-domain.com --name= ``` Install and enable the gateway as a systemd service. This command must be run with sudo on Linux. ```bash theme={"dark"} sudo infisical gateway systemd install --token= --domain= --name= ``` ### Requirements * Must be run on Linux * Must be run with root/sudo privileges * Requires systemd ### Flags The machine identity access token to authenticate with Infisical. ```bash theme={"dark"} # Example sudo infisical gateway systemd install --token= --name= ``` You may also expose the token to the CLI by setting the environment variable `INFISICAL_TOKEN` before executing the install command. Domain of your self-hosted Infisical instance. ```bash theme={"dark"} # Example sudo infisical gateway systemd install --domain=https://app.your-domain.com --name= ``` The name of the gateway instance. ```bash theme={"dark"} # Example sudo infisical gateway systemd install --name=my-gateway --token= ``` The name of the relay that this gateway should connect to. The relay must be running and registered before starting the gateway. If this flag is omitted, the gateway will automatically connect to a healthy relay with the lowest latency. ```bash theme={"dark"} # Example sudo infisical gateway systemd install --target-relay-name=my-relay --token= --name= ``` **Note:** For Infisical Cloud users using instance relays, the relay infrastructure is already running and managed by Infisical. If using organization relays or self-hosted instance relays, you must first start a relay server. For more information on deploying relays, refer to the [Relay Deployment Guide](/documentation/platform/gateways/relay-deployment). ### Service Details The systemd service is installed with secure defaults: * Service file: `/etc/systemd/system/infisical-gateway.service` * Config file: `/etc/infisical/gateway.conf` * Runs with restricted privileges: * InaccessibleDirectories=/home * PrivateTmp=yes * Resource limits configured for stability * Automatically restarts on failure * Enabled to start on boot * Maintains persistent SSH reverse tunnel connections to the specified relay * Handles certificate rotation and connection recovery automatically After installation, manage the service with standard systemd commands: ```bash theme={"dark"} sudo systemctl start infisical-gateway # Start the service sudo systemctl stop infisical-gateway # Stop the service sudo systemctl status infisical-gateway # Check service status sudo systemctl disable infisical-gateway # Disable auto-start on boot ``` ## Legacy Gateway Commands **This command is deprecated and will be removed in a future release.** Please migrate to `infisical gateway start` for the new TCP-based SSH tunnel architecture. **Migration required:** If you are currently using Gateway v1 (via `infisical gateway`), moving to Gateway v2 is not in-place. Gateway v2 provisions new gateway instances with new gateway IDs. Update any resources that reference a gateway ID (for example: dynamic secret configs, app connections, or other gateway-bound resources) to use the new Gateway v2 gateway ID. Until you update those references, traffic will continue to target the old v1 gateway. Run the legacy Infisical gateway in the foreground. The gateway will connect to the relay service and maintain a persistent connection. ```bash theme={"dark"} infisical gateway --domain= --auth-method= ``` ### Authentication The Infisical CLI supports multiple authentication methods. Below are the available authentication methods, with their respective flags. The Universal Auth method is a simple and secure way to authenticate with Infisical. It requires a client ID and a client secret to authenticate with Infisical. Your machine identity client ID. Your machine identity client secret. The authentication method to use. Must be `universal-auth` when using Universal Auth. ```bash theme={"dark"} infisical gateway --auth-method=universal-auth --client-id= --client-secret= ``` The Native Kubernetes method is used to authenticate with Infisical when running in a Kubernetes environment. It requires a service account token to authenticate with Infisical. Your machine identity ID. Path to the Kubernetes service account token to use. Default: `/var/run/secrets/kubernetes.io/serviceaccount/token`. The authentication method to use. Must be `kubernetes` when using Native Kubernetes. ```bash theme={"dark"} infisical gateway --auth-method=kubernetes --machine-identity-id= ``` The Native Azure method is used to authenticate with Infisical when running in an Azure environment. Your machine identity ID. The authentication method to use. Must be `azure` when using Native Azure. ```bash theme={"dark"} infisical gateway --auth-method=azure --machine-identity-id= ``` The Native GCP ID Token method is used to authenticate with Infisical when running in a GCP environment. Your machine identity ID. The authentication method to use. Must be `gcp-id-token` when using Native GCP ID Token. ```bash theme={"dark"} infisical gateway --auth-method=gcp-id-token --machine-identity-id= ``` The GCP IAM method is used to authenticate with Infisical with a GCP service account key. Your machine identity ID. Path to your GCP service account key file *(Must be in JSON format!)* The authentication method to use. Must be `gcp-iam` when using GCP IAM. ```bash theme={"dark"} infisical gateway --auth-method=gcp-iam --machine-identity-id= --service-account-key-file-path= ``` The AWS IAM method is used to authenticate with Infisical with an AWS IAM role while running in an AWS environment like EC2, Lambda, etc. Your machine identity ID. The authentication method to use. Must be `aws-iam` when using Native AWS IAM. ```bash theme={"dark"} infisical gateway --auth-method=aws-iam --machine-identity-id= ``` The OIDC Auth method is used to authenticate with Infisical via identity tokens with OIDC. Your machine identity ID. The OIDC JWT from the identity provider. The authentication method to use. Must be `oidc-auth` when using OIDC Auth. ```bash theme={"dark"} infisical gateway --auth-method=oidc-auth --machine-identity-id= --jwt= ``` The JWT Auth method is used to authenticate with Infisical via a JWT token. The JWT token to use for authentication. Your machine identity ID. The authentication method to use. Must be `jwt-auth` when using JWT Auth. ```bash theme={"dark"} infisical gateway --auth-method=jwt-auth --jwt= --machine-identity-id= ``` You can use the `INFISICAL_TOKEN` environment variable to authenticate with Infisical with a raw machine identity access token. The machine identity access token to use for authentication. ```bash theme={"dark"} infisical gateway --token= ``` ### Other Flags Domain of your self-hosted Infisical instance. ```bash theme={"dark"} # Example infisical gateway --domain=https://app.your-domain.com ``` **This command is deprecated and will be removed in a future release.** Please migrate to `infisical gateway systemd install` for the new TCP-based SSH tunnel architecture with enhanced security and better performance. **Migration required:** If you previously installed Gateway v1 via `infisical gateway install`, moving to Gateway v2 is not in-place. Gateway v2 provisions new gateway instances with new gateway IDs. Update any resources that reference a gateway ID (for example: dynamic secret configs, app connections, or other gateway-bound resources) to use the new Gateway v2 gateway ID. Until you update those references, traffic will continue to target the old v1 gateway. Install and enable the legacy gateway as a systemd service. This command must be run with sudo on Linux. ```bash theme={"dark"} sudo infisical gateway install --token= --domain= ``` ### Requirements * Must be run on Linux * Must be run with root/sudo privileges * Requires systemd ### Flags The machine identity access token to authenticate with Infisical. ```bash theme={"dark"} # Example sudo infisical gateway install --token= ``` You may also expose the token to the CLI by setting the environment variable `INFISICAL_TOKEN` before executing the install command. Domain of your self-hosted Infisical instance. ```bash theme={"dark"} # Example sudo infisical gateway install --domain=https://app.your-domain.com ``` ### Service Details The systemd service is installed with secure defaults: * Service file: `/etc/systemd/system/infisical-gateway.service` * Config file: `/etc/infisical/gateway.conf` * Runs with restricted privileges: * InaccessibleDirectories=/home * PrivateTmp=yes * Resource limits configured for stability * Automatically restarts on failure * Enabled to start on boot After installation, manage the service with standard systemd commands: ```bash theme={"dark"} sudo systemctl start infisical-gateway # Start the service sudo systemctl stop infisical-gateway # Stop the service sudo systemctl status infisical-gateway # Check service status sudo systemctl disable infisical-gateway # Disable auto-start on boot ``` ## Frequently Asked Questions If the `--target-relay-name` flag is omitted, the gateway automatically selects the optimal relay. It first checks for healthy organization relays and connects to the one with the lowest latency. If no organization relays are available, it then performs the same latency-based selection among the available managed relays. No. The first time the gateway starts, it selects the optimal relay (based on latency) and caches that selection. On subsequent restarts, it will prioritize connecting to the cached relay. If it's unable to connect, it will then re-evaluate and connect to the next most optimal relay available. # infisical init Source: https://infisical.com/docs/cli/commands/init Switch between Infisical projects within CLI ```bash theme={"dark"} infisical init ``` ## Description Link a local project to your Infisical project. Once connected, you can then access the secrets locally from the connected Infisical project. This command creates a `infisical.json` file containing your Project ID. # infisical login Source: https://infisical.com/docs/cli/commands/login Login into Infisical from the CLI ```bash theme={"dark"} infisical login ``` ### Description The CLI uses authentication to verify your identity. You can authenticate using: * **Browser Login** (default): Opens a browser for authentication * **Direct Login**: Provide email and password via flags or environment variables for non-interactive workflows * **Interactive CLI Login**: Use the `--interactive` flag to enter credentials via CLI prompts When authenticated, a token is generated and saved in your system Keyring to allow you to make future interactions with the CLI. To change where the login credentials are stored, visit the [vaults command](./vault). If you have added multiple users, you can switch between the users by using the [user command](./user). **JWT Token Output:** * For **user authentication** with the `--plain --silent` flags: outputs only the JWT access token (useful for scripting) * For **machine identity authentication**: an access token is always printed to the console Use the `--plain` flag to print only the token in plain text and the `--silent` flag to disable update alerts. Both flags are ideal for capturing the token in environment variables or CI/CD pipelines. ### Authentication Methods The Infisical CLI supports two main categories of authentication: User Authentication and Machine Identity Authentication. #### User Authentication User authentication is designed for individual developers and supports multiple login flows. The User authentication method allows you to log in with your email and password. This method supports three different login flows: * **Browser Login** (default): Opens a browser for authentication * **Direct Login**: Provide credentials via flags or environment variables for CI/CD * **Interactive CLI Login**: Enter credentials via CLI prompts using `--interactive` Your email address. Required for direct login along with `--password` and `--organization-id`. Your password. Required for direct login along with `--email` and `--organization-id`. Your organization id. Required for direct login along with `--password` and `--email`. Force interactive CLI login instead of browser-based authentication. Output only the JWT token (useful for scripting and CI/CD). ```bash theme={"dark"} infisical login ``` ```bash theme={"dark"} infisical login --email=user@example.com --password=your-password --organization-id=your-organization-id # Or using environment variables export INFISICAL_EMAIL="user@example.com" export INFISICAL_PASSWORD="your-password" export INFISICAL_ORGANIZATION_ID="your-organization-id" infisical login ``` ```bash theme={"dark"} infisical login --interactive ``` ```bash theme={"dark"} export INFISICAL_TOKEN=$(infisical login --email=user@example.com --password=your-password --organization-id=your-organization-id --plain --silent) ``` #### Machine Identity Authentication Machine identity authentication methods are designed for automated systems, services, and CI/CD pipelines. The Universal Auth method is a simple and secure way to authenticate with Infisical. It requires a client ID and a client secret to authenticate with Infisical. Your machine identity client ID. Your machine identity client secret. To create a universal auth machine identity, follow the step by step guide outlined [here](/documentation/platform/identities/universal-auth). Run the `login` command with the following flags to obtain an access token: ```bash theme={"dark"} infisical login --method=universal-auth --client-id= --client-secret= ``` The Native Kubernetes method is used to authenticate with Infisical when running in a Kubernetes environment. It requires a service account token to authenticate with Infisical. Your machine identity ID. Path to the Kubernetes service account token to use. Default: `/var/run/secrets/kubernetes.io/serviceaccount/token`. To create a Kubernetes machine identity, follow the step by step guide outlined [here](/documentation/platform/identities/kubernetes-auth). Run the `login` command with the following flags to obtain an access token: ```bash theme={"dark"} # --service-account-token-path is optional, and will default to '/var/run/secrets/kubernetes.io/serviceaccount/token' if not provided. infisical login --method=kubernetes --machine-identity-id= --service-account-token-path= ``` The Native Azure method is used to authenticate with Infisical when running in an Azure environment. Your machine identity ID. To create an Azure machine identity, follow the step by step guide outlined [here](/documentation/platform/identities/azure-auth). Run the `login` command with the following flags to obtain an access token: ```bash theme={"dark"} infisical login --method=azure --machine-identity-id= ``` The Native GCP ID Token method is used to authenticate with Infisical when running in a GCP environment. Your machine identity ID. To create a GCP machine identity, follow the step by step guide outlined [here](/documentation/platform/identities/gcp-auth). Run the `login` command with the following flags to obtain an access token: ```bash theme={"dark"} infisical login --method=gcp-id-token --machine-identity-id= ``` The GCP IAM method is used to authenticate with Infisical with a GCP service account key. Your machine identity ID. Path to your GCP service account key file *(Must be in JSON format!)* To create a GCP machine identity, follow the step by step guide outlined [here](/documentation/platform/identities/gcp-auth). Run the `login` command with the following flags to obtain an access token: ```bash theme={"dark"} infisical login --method=gcp-iam --machine-identity-id= --service-account-key-file-path= ``` The AWS IAM method is used to authenticate with Infisical with an AWS IAM role while running in an AWS environment like EC2, Lambda, etc. Your machine identity ID. To create an AWS machine identity, follow the step by step guide outlined [here](/documentation/platform/identities/aws-auth). Run the `login` command with the following flags to obtain an access token: ```bash theme={"dark"} infisical login --method=aws-iam --machine-identity-id= ``` The OIDC Auth method is used to authenticate with Infisical via identity tokens with OIDC. Your machine identity ID. The OIDC JWT from the identity provider. To create an OIDC machine identity, follow the step by step guide outlined [here](/documentation/platform/identities/oidc-auth/general). Run the `login` command with the following flags to obtain an access token: ```bash theme={"dark"} infisical login --method=oidc-auth --machine-identity-id= --jwt= ``` The JWT Auth method is used to authenticate with Infisical via a JWT token. The JWT token to use for authentication. Your machine identity ID. Run the `login` command with the following flags to obtain an access token: ```bash theme={"dark"} infisical login --method=jwt-auth --jwt= --machine-identity-id= ``` ### Flags The login command supports a number of flags that you can use for different authentication methods. Below is a list of all the flags that can be used with the login command. ```bash theme={"dark"} infisical login --method= # Optional, will default to 'user'. ``` #### Valid values for the `method` flag are: * `user`: Login using email and password. (default) * `universal-auth`: Login using a universal auth client ID and client secret. * `kubernetes`: Login using a Kubernetes native auth. * `azure`: Login using an Azure native auth. * `gcp-id-token`: Login using a GCP ID token native auth. * `gcp-iam`: Login using a GCP IAM. * `aws-iam`: Login using an AWS IAM native auth. * `oidc-auth`: Login using OIDC auth. * `jwt-auth`: Login using a plain JWT token. ```bash theme={"dark"} infisical login --client-id= # Optional, required if --method=universal-auth. ``` #### Description The client ID of the universal auth machine identity. This is required if the `--method` flag is set to `universal-auth`. The `client-id` flag can be substituted with the `INFISICAL_UNIVERSAL_AUTH_CLIENT_ID` environment variable. ```bash theme={"dark"} infisical login --client-secret= # Optional, required if --method=universal-auth. ``` #### Description The client secret of the universal auth machine identity. This is required if the `--method` flag is set to `universal-auth`. The `client-secret` flag can be substituted with the `INFISICAL_UNIVERSAL_AUTH_CLIENT_SECRET` environment variable. ```bash theme={"dark"} infisical login --machine-identity-id= # Optional, required if --method=kubernetes, azure, gcp-id-token, gcp-iam, or aws-iam. ``` #### Description The ID of the machine identity. This is required if the `--method` flag is set to `kubernetes`, `azure`, `gcp-id-token`, `gcp-iam`, or `aws-iam`. The `machine-identity-id` flag can be substituted with the `INFISICAL_MACHINE_IDENTITY_ID` environment variable. ```bash theme={"dark"} infisical login --service-account-token-path= # Optional Will default to '/var/run/secrets/kubernetes.io/serviceaccount/token'. ``` #### Description The path to the Kubernetes service account token to use for authentication. This is optional and will default to `/var/run/secrets/kubernetes.io/serviceaccount/token`. The `service-account-token-path` flag can be substituted with the `INFISICAL_KUBERNETES_SERVICE_ACCOUNT_TOKEN_PATH` environment variable. ```bash theme={"dark"} infisical login --service-account-key-file-path= # Optional, but required if --method=gcp-iam. ``` #### Description The path to your GCP service account key file. This is required if the `--method` flag is set to `gcp-iam`. The `service-account-key-path` flag can be substituted with the `INFISICAL_GCP_IAM_SERVICE_ACCOUNT_KEY_FILE_PATH` environment variable. ```bash theme={"dark"} infisical login --email= --password= --organization-id= ``` #### Description User email address. Required if you want to do a non-interactive login when the **--method** flag is set to **user**. Must be used together with the `--password` and `--organization-id` flag. You can omit the **--method=user** if you want as it's the default method. The `email` flag can be substituted with the `INFISICAL_EMAIL` environment variable. ```bash theme={"dark"} infisical login --email= --password= --organization-id= ``` #### Description User password. Required if you want to do a non-interactive login when the **--method** flag is set to **user**. Must be used together with the `--email` and `--organization-id` flag. For security in CI/CD environments, prefer using the `INFISICAL_PASSWORD` environment variable instead of passing the password as a command-line flag. You can omit the **--method=user** if you want as it's the default method. The `password` flag can be substituted with the `INFISICAL_PASSWORD` environment variable. ```bash theme={"dark"} infisical login --email= --password= --organization-id= ``` #### Description User organization id. Required if you want to do a non-interactive login when the **--method** flag is set to **user**. Must be used together with the `--email` and `--password` flag. You can omit the **--method=user** if you want as it's the default method. The `organization-id` flag can be substituted with the `INFISICAL_ORGANIZATION_ID` environment variable. ```bash theme={"dark"} infisical login --interactive ``` #### Description Forces interactive CLI login where you'll be prompted to enter your email, password, and select your organization in the terminal, instead of opening a browser. ```bash theme={"dark"} infisical login --email= --password= --organization-id= --plain ``` #### Description When used with direct user login or machine identity authentication, outputs only the JWT access token without any additional formatting. This is useful for scripting and CI/CD pipelines where you need to capture the token. ```bash theme={"dark"} # Example: Capture token in a variable export INFISICAL_TOKEN=$(infisical login --email= --password= --organization-id= --plain --silent) ``` Use it alongside the `silent` flag to disable all messages in the console except from the access token. ```bash theme={"dark"} infisical login --jwt= --machine-identity-id= ``` #### Description The JWT provided by an identity provider for OIDC or plain JWT authentication. This is required if the `--method` flag is set to `oidc-auth` or `jwt-auth`. The `jwt` flag can be substituted with the `INFISICAL_JWT` environment variable. ```bash theme={"dark"} infisical login --domain= ``` #### Description Specifies the Infisical API URL for non-US Cloud instances. This flag is required when connecting to any instance other than US Cloud (e.g. EU Cloud or self-hosted). ```bash theme={"dark"} # Example for EU Cloud infisical login --domain="https://eu.infisical.com" # Example for localhost infisical login --domain="http://localhost:8080" # Example for self-hosted infisical login --domain="https://your-self-hosted-infisical.com" ``` **Critical:** If you use `--domain` during login, you must also include it on **all subsequent CLI commands** (e.g., `infisical secrets`, `infisical export`, etc.). Alternatively, set the `INFISICAL_API_URL` environment variable to avoid having to use `--domain` on every command. Refer to the [Domain Configuration](/cli/usage#domain-configuration) section for more details. ### User Authentication Examples The following examples demonstrate different ways to authenticate as a user with the Infisical CLI. By default, running `infisical login` without any flags opens your browser for authentication. ```bash theme={"dark"} # Opens browser for authentication infisical login ``` The browser will open to the Infisical login page, and upon successful authentication, the CLI will be automatically authenticated. Direct login is ideal for CI/CD pipelines and automation scripts where browser-based authentication is not possible. #### Using Command-Line Flags ```bash theme={"dark"} # Basic direct login (defaults to US Cloud) infisical login --email user@example.com --password "your-password" --organization-id "your-organization-id" # Basic direct login (EU Cloud) infisical login --domain https://eu.infisical.com --email user@example.com --password "your-password" --organization-id "your-organization-id" # Basic direct login (Self-hosted Instance) infisical login --domain https://your-self-hosted-infisical.com --email user@example.com --password "your-password" --organization-id "your-organization-id" # Output only JWT token for scripting export INFISICAL_TOKEN=$(infisical login --email user@example.com --password "your-password" --organization-id "your-organization-id" --plain --silent) ``` #### Using Environment Variables (Recommended for CI/CD) ```bash theme={"dark"} # Set credentials as environment variables export INFISICAL_EMAIL="user@example.com" export INFISICAL_PASSWORD="your-password" export INFISICAL_ORGANIZATION_ID="your-organization-id" # Login without additional flags infisical login # Or with plain output for token capture export INFISICAL_TOKEN=$(infisical login --plain --silent) ``` **For non-US Cloud instances:** If you're using EU Cloud or a self-hosted instance, you must set `INFISICAL_API_URL` before login or use `--domain` on all commands. Refer to the [Domain Configuration](/cli/usage#domain-configuration) section for more details. Interactive login prompts you to enter credentials in the terminal instead of opening a browser. ```bash theme={"dark"} # Force interactive CLI login infisical login --interactive ``` You'll be prompted to enter: * Email address * Password After the prompt, you will be shown a list of organizations to choose from. If you have SSO enabled, we recommend using the default browser login. ### Machine Identity Authentication Quick Start In this example we'll be using the `universal-auth` method to login to obtain an Infisical access token, which we will then use to fetch secrets with. ```bash theme={"dark"} export INFISICAL_TOKEN=$(infisical login --method=universal-auth --client-id= --client-secret= --silent --plain) # silent and plain is important to ensure only the token itself is printed, so we can easily set it as an environment variable. ``` **For non-US Cloud instances:** If you're using EU Cloud or a self-hosted instance, you must set `INFISICAL_API_URL` before login or use `--domain` on all commands. Refer to the [Domain Configuration](/cli/usage#domain-configuration) section for more details. Now that we've set the `INFISICAL_TOKEN` environment variable, we can use the CLI to interact with Infisical. The CLI will automatically check for the presence of the `INFISICAL_TOKEN` environment variable and use it for authentication. Alternatively, if you would rather use the `--token` flag to pass the token directly, you can do so by running the following command: ```bash theme={"dark"} infisical [command] --token= # The token output from the login command. ``` ```bash theme={"dark"} infisical secrets --projectId= --env=dev --recursive ``` This command will fetch all secrets from the `dev` environment in your project, including all secrets in subfolders. The `--recursive`, and `--env` flag is optional and will fetch all secrets in subfolders. The default environment is `dev` if no `--env` flag is provided. # infisical relay Source: https://infisical.com/docs/cli/commands/relay Relay-related commands for Infisical ```bash theme={"dark"} infisical relay start --host= --name= --auth-method= ``` ```bash theme={"dark"} # Install systemd service sudo infisical relay systemd install --host= --name= --token= # Uninstall systemd service sudo infisical relay systemd uninstall ``` ## Description Relay-related commands for Infisical that provide identity-aware relay infrastructure for routing encrypted traffic. Relays are organization-deployed servers that route encrypted traffic between Infisical and your gateways. ## Subcommands & flags Run the Infisical relay component. The relay handles network traffic routing between Infisical and your gateways. ```bash theme={"dark"} infisical relay start --host= --name= --auth-method= ``` ### Flags The host (IP address or hostname) of the instance where the relay is deployed. This must be a static public IP or resolvable hostname that gateways can reach. ```bash theme={"dark"} # Example with IP address infisical relay start --host=203.0.113.100 --name=my-relay # Example with hostname infisical relay start --host=relay.example.com --name=my-relay ``` The name of the relay. This is an arbitrary identifier for your relay instance. ```bash theme={"dark"} # Example infisical relay start --name=my-relay --host=192.168.1.100 ``` ### Authentication Relays support all standard Infisical authentication methods. Choose the authentication method that best fits your environment and set the corresponding flags when starting the relay. ```bash theme={"dark"} # Example with Universal Auth infisical relay start --host=192.168.1.100 --name=my-relay --auth-method=universal-auth --client-id= --client-secret= ``` ### Available Authentication Methods The Infisical CLI supports multiple authentication methods for relays. Below are the available authentication methods, with their respective flags. The Universal Auth method is a simple and secure way to authenticate with Infisical. It requires a client ID and a client secret to authenticate with Infisical. Your machine identity client ID. Your machine identity client secret. The authentication method to use. Must be `universal-auth` when using Universal Auth. ```bash theme={"dark"} infisical relay start --auth-method=universal-auth --client-id= --client-secret= --host= --name= ``` The Native Kubernetes method is used to authenticate with Infisical when running in a Kubernetes environment. It requires a service account token to authenticate with Infisical. Your machine identity ID. Path to the Kubernetes service account token to use. Default: `/var/run/secrets/kubernetes.io/serviceaccount/token`. The authentication method to use. Must be `kubernetes` when using Native Kubernetes. ```bash theme={"dark"} infisical relay start --auth-method=kubernetes --machine-identity-id= --host= --name= ``` The Native Azure method is used to authenticate with Infisical when running in an Azure environment. Your machine identity ID. The authentication method to use. Must be `azure` when using Native Azure. ```bash theme={"dark"} infisical relay start --auth-method=azure --machine-identity-id= --host= --name= ``` The Native GCP ID Token method is used to authenticate with Infisical when running in a GCP environment. Your machine identity ID. The authentication method to use. Must be `gcp-id-token` when using Native GCP ID Token. ```bash theme={"dark"} infisical relay start --auth-method=gcp-id-token --machine-identity-id= --host= --name= ``` The GCP IAM method is used to authenticate with Infisical with a GCP service account key. Your machine identity ID. Path to your GCP service account key file *(Must be in JSON format!)* The authentication method to use. Must be `gcp-iam` when using GCP IAM. ```bash theme={"dark"} infisical relay start --auth-method=gcp-iam --machine-identity-id= --service-account-key-file-path= --host= --name= ``` The AWS IAM method is used to authenticate with Infisical with an AWS IAM role while running in an AWS environment like EC2, Lambda, etc. Your machine identity ID. The authentication method to use. Must be `aws-iam` when using Native AWS IAM. ```bash theme={"dark"} infisical relay start --auth-method=aws-iam --machine-identity-id= --host= --name= ``` The OIDC Auth method is used to authenticate with Infisical via identity tokens with OIDC. Your machine identity ID. The OIDC JWT from the identity provider. The authentication method to use. Must be `oidc-auth` when using OIDC Auth. ```bash theme={"dark"} infisical relay start --auth-method=oidc-auth --machine-identity-id= --jwt= --host= --name= ``` The JWT Auth method is used to authenticate with Infisical via a JWT token. The JWT token to use for authentication. Your machine identity ID. The authentication method to use. Must be `jwt-auth` when using JWT Auth. ```bash theme={"dark"} infisical relay start --auth-method=jwt-auth --jwt= --machine-identity-id= --host= --name= ``` You can use the `INFISICAL_TOKEN` environment variable to authenticate with Infisical with a raw machine identity access token. The machine identity access token to use for authentication. ```bash theme={"dark"} infisical relay start --token= --host= --name= ``` Manage systemd service for Infisical relay. This allows you to install and run the relay as a systemd service on Linux systems. ### Requirements * **Operating System**: Linux only (systemd is not supported on other operating systems) * **Privileges**: Root/sudo privileges required for both install and uninstall operations * **Systemd**: The system must be running systemd as the init system ```bash theme={"dark"} infisical relay systemd ``` ### Subcommands Install and enable systemd service for the relay. Must be run with sudo on Linux systems. ```bash theme={"dark"} sudo infisical relay systemd install --host= --name= --token= [flags] ``` #### Flags The host (IP address or hostname) of the instance where the relay is deployed. This must be a static public IP or resolvable hostname that gateways can reach. ```bash theme={"dark"} # Example with IP address sudo infisical relay systemd install --host=203.0.113.100 --name=my-relay --token= # Example with hostname sudo infisical relay systemd install --host=relay.example.com --name=my-relay --token= ``` The name of the relay. ```bash theme={"dark"} # Example sudo infisical relay systemd install --name=my-relay --host=192.168.1.100 --token= ``` Connect with Infisical using machine identity access token. ```bash theme={"dark"} # Example sudo infisical relay systemd install --token= --host= --name= ``` Domain of your self-hosted Infisical instance. Optional flag for specifying a custom domain. ```bash theme={"dark"} # Example sudo infisical relay systemd install --domain=http://localhost:8080 --token= --host= --name= ``` #### Examples ```bash theme={"dark"} # Install relay with token authentication sudo infisical relay systemd install --host=192.168.1.100 --name=my-relay --token= # Install with custom domain sudo infisical relay systemd install --domain=http://localhost:8080 --token= --host= --name= ``` #### Post-installation After successful installation, the service will be enabled but not started. To start the service: ```bash theme={"dark"} sudo systemctl start infisical-relay ``` To check the service status: ```bash theme={"dark"} sudo systemctl status infisical-relay ``` To view service logs: ```bash theme={"dark"} sudo journalctl -u infisical-relay -f ``` Uninstall and remove systemd service for the relay. Must be run with sudo on Linux systems. ```bash theme={"dark"} sudo infisical relay systemd uninstall ``` #### Examples ```bash theme={"dark"} # Uninstall the relay systemd service sudo infisical relay systemd uninstall ``` #### What it does * Stops the `infisical-relay` systemd service if it's running * Disables the service from starting on boot * Removes the systemd service file * Cleans up the service configuration # infisical reset Source: https://infisical.com/docs/cli/commands/reset Reset Infisical ```bash theme={"dark"} infisical reset ``` ## Description This command provides a way to clear all Infisical-generated configuration data, effectively resetting the software to its default settings. This can be an effective way to address any persistent issues that arise while using the CLI. # infisical run Source: https://infisical.com/docs/cli/commands/run The command that injects your secrets into local environment ```bash theme={"dark"} infisical run [options] -- [your application start command] # Example infisical run [options] -- npm run dev ``` ```bash theme={"dark"} infisical run [options] --command [string command] # Example infisical run [options] --command "npm run bootstrap && npm run dev start; other-bash-command" ``` ## Description Inject secrets from Infisical into your application process. ## Subcommands & flags Use this command to inject secrets into your applications process ```bash theme={"dark"} $ infisical run -- # Example $ infisical run -- npm run dev ``` ### Environment variables Used to fetch secrets via a [machine identity](/documentation/platform/identities/machine-identities) apposed to logged in credentials. Simply, export this variable in the terminal before running this command. ```bash theme={"dark"} # Example export INFISICAL_TOKEN=$(infisical login --method=universal-auth --client-id= --client-secret= --silent --plain) # --plain flag will output only the token, so it can be fed to an environment variable. --silent will disable any update messages. ``` Alternatively, you may use service tokens. ```bash theme={"dark"} # Example export INFISICAL_TOKEN= ``` Used to disable the check for new CLI versions. This can improve the time it takes to run this command. Recommended for production environments. To use, simply export this variable in the terminal before running this command. ```bash theme={"dark"} # Example export INFISICAL_DISABLE_UPDATE_CHECK=true ``` ### Flags By passing the `watch` flag, you are telling the CLI to watch for changes that happen in your Infisical project. If secret changes happen, the command you provided will automatically be restarted with the new environment variables attached. ```bash theme={"dark"} # Example infisical run --watch -- printenv ``` Explicitly set the directory where the .infisical.json resides. This is useful for some monorepo setups. ```bash theme={"dark"} # Example infisical run --project-config-dir=/some-dir -- printenv ``` Pass secrets into multiple commands at once ```bash theme={"dark"} # Example infisical run --command="npm run build && npm run dev; more-commands..." ``` The project ID to fetch secrets from. This is required when using a machine identity to authenticate. ```bash theme={"dark"} # Example infisical run --projectId= -- npm run dev ``` If you are using a [machine identity](/documentation/platform/identities/machine-identities) to authenticate, you can pass the token as a flag ```bash theme={"dark"} # Example infisical run --token="" --projectId= -- npm run start ``` You may also expose the token to the CLI by setting the environment variable `INFISICAL_TOKEN` before executing the run command. This will have the same effect as setting the token with `--token` flag Turn on or off the shell parameter expansion in your secrets. If you have used shell parameters in your secret(s), activating this feature will populate them before injecting them into your application process. Default value: `true` By default imported secrets are available, you can disable it by setting this option to false. Default value: `true` {" "} This is used to specify the environment from which secrets should be retrieved. The accepted values are the environment slugs defined for your project, such as `dev`, `staging`, `test`, and `prod`. Default value: `dev` Prioritizes personal secrets with the same name over shared secrets Default value: `true` When working with tags, you can use this flag to filter and retrieve only secrets that are associated with a specific tag(s). ```bash theme={"dark"} # Example infisical run --tags=tag1,tag2,tag3 -- npm run dev ``` Note: you must reference the tag by its slug name not its fully qualified name. Go to project settings to view all tag slugs. By default, all secrets are fetched The `--path` flag indicates which project folder secrets will be injected from. ```bash theme={"dark"} # Example infisical run --path="/nextjs" -- npm run dev ``` ## Automatically reload command when secrets change To automatically reload your command when secrets change, use the `--watch` flag. ```bash theme={"dark"} infisical run --watch -- npm run dev ``` This will watch for changes in your secrets and automatically restart your command with the new secrets. When your command restarts, it will have the new environment variables injeceted into it. Please note that this feature is intended for development purposes. It is not recommended to use this in production environments. Generally it's not recommended to automatically reload your application in production when remote changes are made. # scan Source: https://infisical.com/docs/cli/commands/scan Scan git history, directories, and files for secrets ```bash theme={"dark"} infisical scan # Display the full secret findings infisical scan --verbose ``` ## Description The `infisical scan` command serves to scan repositories, directories, and files. It's compatible with both individual developer machines and Continuous Integration (CI) environments. When you run `infisical scan` on a Git repository, Infisical will parses the output of a `git log -p` command. This command generates [patches](https://stackoverflow.com/questions/8279602/what-is-a-patch-in-git-version-control) that Infisical uses to identify secrets in your code. You can configure the range of commits that `git log` will cover using the `--log-opts` flag. Any options you can use with `git log -p` are valid for `--log-opts`. For instance, to instruct Infisical to scan a specific range of commits, use the following command: `infisical scan --log-opts="--all commitA..commitB"`. For more details, refer to the [Git log documentation](https://git-scm.com/docs/git-log). To scan individual files and directories, use the `--no-git` flag. ### Flags **Description** git log options **Description** treat git repo as a regular directory and scan those files, --log-opts has no effect on the scan when --no-git is set Default value: `false` Short hand: `-b` **Description** scan input from stdin, ex: `cat some_file | infisical scan --pipe` Default value: `false` Short hand: `-b` **Description** scan files that are symlinks to other files Default value: `false` Short hand: `-b` **Description** path to baseline with issues that can be ignored Short hand: `-c` **Description** config file path order of precedence: 1. \--config flag 2. env var INFISICAL\_SCAN\_CONFIG 3. (--source/-s)/.infisical-scan.toml If none of the three options are used, then Infisical will use the default config **Description** exit code when leaks have been encountered (default 1) **Description** files larger than this will be skipped **Description** turn off color for verbose output **Description** redact secrets from logs and stdout **Description** output format (json, csv, sarif) (default "json") **Description** report file **Description** path to source (default ".") **Description** show verbose output from scan # scan git-changes Source: https://infisical.com/docs/cli/commands/scan-git-changes Scan for secrets in your uncommitted code ```bash theme={"dark"} infisical scan git-changes # Display the full secret findings infisical scan git-changes --verbose ``` ## Description Scanning for secrets before you commit your changes is great way to prevent leaks. Infisical makes this easy with the sub command `git-changes`. The `git-changes` scans for uncommitted changes in a Git repository, and is especially designed for use on developer machines, aligning with the ['shift left'](https://cloud.google.com/architecture/devops/devops-tech-shifting-left-on-security) security approach. When `git-changes` is run on a Git repository, Infisical parses the output from a `git diff` command. To scan changes in commits that have been staged via `git add`, you can add the `--staged` flag to the sub command. This flag is particularly useful when using Infisical CLI as a pre-commit tool. ### Flags **Description** detect secrets in a --staged state Default value: `false` **Description** git log options Short hand: `-b` **Description** path to baseline with issues that can be ignored Short hand: `-c` **Description** config file path order of precedence: 1. \--config flag 2. env var INFISICAL\_SCAN\_CONFIG 3. (--source/-s)/.infisical-scan.toml If none of the three options are used, then Infisical will use the default config **Description** exit code when leaks have been encountered (default 1) **Description** files larger than this will be skipped **Description** turn off color for verbose output **Description** redact secrets from logs and stdout **Description** output format (json, csv, sarif) (default "json") **Description** report file **Description** path to source (default ".") **Description** show verbose output from scan # scan install Source: https://infisical.com/docs/cli/commands/scan-install Add various scanning tools seamlessly into your development lifecycle ```bash theme={"dark"} infisical scan install --pre-commit-hook ``` ## Description The command `infisical scan install` is designed to incorporate various scanning tools seamlessly into your development lifecycle. Initially, we are offering users the ability to install a pre-commit hook. This hook conducts an automatic scan for any exposed secrets in your commits before they are pushed. ### Flags ```bash theme={"dark"} infisical scan install --pre-commit-hook ``` **Description** Installs a git pre-commit hook that triggers Infisical to scan your staged changes for any exposed secrets prior to pushing. # infisical secrets Source: https://infisical.com/docs/cli/commands/secrets Perform CRUD operations with Infisical secrets ``` infisical secrets ``` ## Description This command enables you to perform CRUD (create, read, update, delete) operations on secrets within your Infisical project. With it, you can view, create, update, and delete secrets in your environment. ### Sub-commands Use this command to print out all of the secrets in your project ```bash theme={"dark"} $ infisical secrets ``` ### Environment variables Used to fetch secrets via a [machine identity](/documentation/platform/identities/machine-identities) apposed to logged in credentials. Simply, export this variable in the terminal before running this command. ```bash theme={"dark"} # Example export INFISICAL_TOKEN=$(infisical login --method=universal-auth --client-id= --client-secret= --silent --plain) # --plain flag will output only the token, so it can be fed to an environment variable. --silent will disable any update messages. ``` Alternatively, you may use service tokens. ```bash theme={"dark"} # Example export INFISICAL_TOKEN= ``` Used to disable the check for new CLI versions. This can improve the time it takes to run this command. Recommended for production environments. To use, simply export this variable in the terminal before running this command. ```bash theme={"dark"} # Example export INFISICAL_DISABLE_UPDATE_CHECK=true ``` ### Flags Parse shell parameter expansions in your secrets Default value: `true` The project ID to fetch secrets from. This is required when using a machine identity to authenticate. ```bash theme={"dark"} # Example infisical secrets --projectId= ``` Used to select the environment name on which actions should be taken on Default value: `dev` The `--path` flag indicates which project folder secrets will be injected from. ```bash theme={"dark"} # Example infisical secrets --path="/" --env=dev ``` The `--plain` flag will output all your secret values without formatting, one per line. ```bash theme={"dark"} # Example infisical secrets --plain --silent ``` The `--silent` flag disables output of tip/info messages. Useful when running in scripts or CI/CD pipelines. ```bash theme={"dark"} # Example infisical secrets --silent ``` Can be used inline to replace `INFISICAL_DISABLE_UPDATE_CHECK` This command allows you selectively print the requested secrets by name ```bash theme={"dark"} $ infisical secrets get ... # Example $ infisical secrets get DOMAIN $ infisical secrets get DOMAIN PORT ``` ### Flags Used to select the environment name on which actions should be taken on Default value: `dev` The `--plain` flag will output all your requested secret values without formatting, one per line. Default value: `false` ```bash theme={"dark"} # Example infisical secrets get FOO --plain infisical secrets get FOO BAR --plain # Fetch a single value and assign it to a variable API_KEY=$(infisical secrets get FOO --plain --silent) ``` When running in CI/CD environments or in a script, set `INFISICAL_DISABLE_UPDATE_CHECK=true` or add the `--silent` flag. This will help hide any CLI info/debug output and only show the secret value. The `--silent` flag disables output of tip/info messages. Useful when running in scripts or CI/CD pipelines. ```bash theme={"dark"} # Example infisical secrets get FOO --plain --silent ``` Can be used inline to replace `INFISICAL_DISABLE_UPDATE_CHECK` Use `--plain` instead, as it supports single and multiple secrets. Used to print the plain value of a single requested secret without any table style. Default value: `false` Example: `infisical secrets get DOMAIN --raw-value` When running in CI/CD environments or in a script, set `INFISICAL_DISABLE_UPDATE_CHECK=true` or add the `--silent` flag. This will help hide any CLI info/debug output and only show the secret value. This command allows you to set or update secrets in your environment. If the secret key provided already exists, its value will be updated with the new value. If the secret key does not exist, a new secret will be created using both the key and value provided. ```bash theme={"dark"} $ infisical secrets set ... ## Example $ infisical secrets set STRIPE_API_KEY=sjdgwkeudyjwe DOMAIN=example.com HASH=jebhfbwe SECRET_PEM_KEY=@secret.pem ``` When setting secret values: * Use `secretName=@path/to/file` to load the secret value from a file * Use `secretName=\@value` if you need the literal '@' character at the beginning of your value Example: ```bash theme={"dark"} # Set a secret with the value loaded from a certificate file $ secrets set CERTIFICATE=@/path/to/certificate.pem # Set a secret with the literal value "@example.com" $ secrets set email="\@example.com" ``` ### Flags Used to select the environment name on which actions should be taken on Default value: `dev` Used to select the project folder in which the secrets will be set. This is useful when creating new secrets under a particular path. ```bash theme={"dark"} # Example infisical secrets set DOMAIN=example.com --path="common/backend" ``` Used to select the type of secret to create. This could be either personal or shared (defaults to shared) ```bash theme={"dark"} # Example infisical secrets set DOMAIN=example.com --type=personal ``` Used to set secrets from a file, supporting both `.env` and `YAML` formats. The file path can be either absolute or relative to the current working directory. The file should contain secrets in the following formats: * `key=value` for `.env` files * `key: value` for YAML files Comments can be written using `# comment` or `// comment`. Empty lines will be ignored during processing. ```bash theme={"dark"} # Example infisical secrets set --file="./.env" ``` This command allows you to delete secrets by their name(s). ```bash theme={"dark"} $ infisical secrets delete ... ## Example $ infisical secrets delete STRIPE_API_KEY DOMAIN HASH ``` ### Flags Used to select the environment name on which actions should be taken on Default value: `dev` The `--path` flag indicates which project folder secrets will be injected from. ```bash theme={"dark"} # Example infisical secrets delete ... --path="/" ``` This command allows you to fetch, create and delete folders from within a path from a given project. ```bash theme={"dark"} $ infisical secrets folders ``` ### sub commands Used to fetch all folders within a path in a given project ``` infisical secrets folders get --path=/some/path/to/folder ``` #### Flags The path from where folders should be fetched from Default value: `/` Fetch folders using a [machine identity](/documentation/platform/identities/machine-identities) access token. Default value: \`\` Used to create a folder by name within a path. ``` infisical secrets folders create --path=/some/path/to/folder --name=folder-name ``` ### Flags Path to where the folder should be created Default value: `/` Name of the folder to be created in selected `--path` Default value: \`\` Used to delete a folder by name within a path. ``` infisical secrets folders delete --path=/some/path/to/folder --name=folder-name ``` ### Flags Path to where the folder should be created Default value: `/` Name of the folder to be deleted within selected `--path` Default value: \`\` This command allows you to generate an example .env file from your secrets and with their associated comments and tags. This is useful when you would like to let others who work on the project but do not use Infisical become aware of the required environment variables and their intended values. To place default values in your example .env file, you can simply include the syntax `DEFAULT:` within your secret's comment in Infisical. This will result in the specified value being extracted and utilized as the default. ```bash theme={"dark"} $ infisical secrets generate-example-env ## Example $ infisical secrets generate-example-env > .example-env ``` ### Flags Used to select the environment name on which actions should be taken on Default value: `dev` # infisical service-token Source: https://infisical.com/docs/cli/commands/service-token Manage Infisical service tokens This command is deprecated and will be removed in the near future. Please switch to using [Machine Identities](/documentation/platform/identities/machine-identities) for authenticating with Infisical. ```bash theme={"dark"} infisical service-token create --scope=dev:/global --scope=dev:/backend --access-level=read --access-level=write ``` ## Description The Infisical `service-token` command allows you to manage service tokens for a given Infisical project. With this command, you can create, view, and delete service tokens. Use this command to create a service token ```bash theme={"dark"} $ infisical service-token create --scope=dev:/backend/** --access-level=read --access-level=write ``` ### Flags ```bash theme={"dark"} infisical service-token create --scope=dev:/global --scope=dev:/backend/** --access-level=read ``` Use the scope flag to define which environments and paths your service token should be authorized to access. The value of your scope flag should be in the following `:`. Here, `environment slug` refers to the slug name of the environment, and `path` indicates the folder path where your secrets are stored. For specifying multiple scopes, you can use multiple --scope flags. The `path` can be a Glob pattern ```bash theme={"dark"} infisical service-token create --scope=dev:/global --access-level=read --projectId=63cefb15c8d3175601cfa989 ``` The project ID you'd like to create the service token for. By default, the CLI will attempt to use the linked Infisical project in `.infisical.json` generated by `infisical init` command. ```bash theme={"dark"} infisical service-token create --scope=dev:/global --access-level=read --name service-token-name ``` Service token name Default: `Service token generated via CLI` ```bash theme={"dark"} infisical service-token create --scope=dev:/global --access-level=read --expiry-seconds 120 ``` Set the service token's expiration time in seconds from now. To never expire set to zero. Default: `1 day` ```bash theme={"dark"} infisical service-token create --scope=dev:/global --access-level=read --access-level=write ``` The type of access the service token should have. Can be `read` and or `write` ```bash theme={"dark"} infisical service-token create --scope=dev:/global --access-level=read --access-level=write --token-only ``` When true, only the service token will be printed Default: `false` # infisical ssh Source: https://infisical.com/docs/cli/commands/ssh Generate SSH credentials with the CLI ## Description [Infisical SSH](/documentation/platform/ssh) lets you issue SSH credentials to clients to provide short-lived, secure SSH access to infrastructure. This command enables you to obtain SSH credentials used to access a remote host. We recommend using the `connect` sub-command which handles the full workflow of issuing credentials and establishing an SSH connection in one step. ### Sub-commands This command is used to connect to an SSH host using issued credentials. It will automatically issue credentials and either add them to your SSH agent or write them to disk before establishing an SSH connection. ```bash theme={"dark"} $ infisical ssh connect ``` ### Flags The hostname of the SSH host to connect to. If not provided, you will be prompted to select from available hosts. The login user for the SSH connection. If not provided, you will be prompted to select from available login users. Whether to write the Host CA public key to `~/.ssh/known_hosts` if it doesn't already exist. Default value: `true` The path to write the SSH credentials to such as `~/.ssh`, `./some_folder`, `./some_folder/id_rsa-cert.pub`. If not provided, the credentials will be added to the SSH agent and used to establish an interactive SSH connection. Use a machine identity access token This command is used to register a new SSH host with Infisical. This command can be used with the `--write-user-ca-to-file`, `--write-host-cert-to-file`, and `--configure-sshd` flags to also configure the host's SSH daemon with the necessary certificate authority and host certificate settings. ```bash theme={"dark"} $ infisical ssh add-host --projectId= --hostname= ``` ### Flags Project ID the host belongs to (required) Hostname of the SSH host (required) Alias for the SSH host (optional) Write User CA public key to `/etc/ssh/infisical_user_ca.pub` Default value: `false` Custom file path to write the User CA public key Default value: `/etc/ssh/infisical_user_ca.pub` Write SSH host certificate to `/etc/ssh/ssh_host__key-cert.pub` Default value: `false` Update `TrustedUserCAKeys`, `HostKey`, and `HostCertificate` in the `/etc/ssh/sshd_config` file Default value: `false` Note: This flag requires both --write-user-ca-to-file and --write-host-cert-to-file to be set Force overwrite of existing certificate files as part of `--write-user-ca-to-file` and `--write-host-cert-to-file` Default value: `false` Use a machine identity access token # infisical token Source: https://infisical.com/docs/cli/commands/token Manage your Infisical identity access tokens ```bash theme={"dark"} infisical token renew ``` ## Description The Infisical `token` command allows you to manage your universal auth access tokens. With this command, you can renew your access tokens. In the future more subcommands will be added to better help you manage your tokens through the CLI. Use this command to renew your access token. This command will renew your access token and output a renewed access token to the console. ```bash theme={"dark"} $ infisical token renew ``` # infisical user Source: https://infisical.com/docs/cli/commands/user Manage logged in users ```bash theme={"dark"} infisical user ``` ## Description This command allows you to manage the current logged in users on the CLI ### Sub-commands Use this command to switch between profiles that are currently logged into the CLI ```bash theme={"dark"} infisical user switch ``` With this command, you can modify the backend API that is utilized for all requests associated with a specific profile. For instance, you have the option to point the profile to use either the Infisical Cloud or your own self-hosted Infisical instance. ```bash theme={"dark"} infisical user update domain ``` Use this command to get your current Infisical access token and session information. This command requires you to be logged in. The command will display: * Your session ID * Your full JWT access token ```bash theme={"dark"} infisical user get token ``` Example output: ```bash theme={"dark"} Session ID: abc123-xyz-456 Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... ``` ### Flags Output only the JWT token without formatting (no session ID) Default value: `false` ```bash theme={"dark"} # Example infisical user get token --plain ``` Example output: ```bash theme={"dark"} eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... ``` # infisical vault Source: https://infisical.com/docs/cli/commands/vault Change the vault type in Infisical ```bash theme={"dark"} infisical vault # Example output Vaults are used to securely store your login details locally. Available vaults: - auto (automatically select native vault on system) - file (encrypted file vault) You are currently using [file] vault to store your login credentials ``` ```bash theme={"dark"} infisical vault set # Example infisical vault set keychain ``` ## Description To safeguard your login details when using the CLI, Infisical attempts to store them in a system keyring. If a system keyring cannot be found on your machine, the data is stored in a config file. # FAQ Source: https://infisical.com/docs/cli/faq Frequently Asked Questions about Infisical CLI Frequently asked questions about the CLI can be found on this page. If you can't find the answer you are looking for, please create an issue on our GitHub repository or join our Slack channel for additional support. By default, the CLI will choose the most suitable store available on your system. If you experience issues with the default store, you can switch to a different one. If none of the available stores work for you, you can try using the `file` store type by running `infisical vault set file`, which should work in most cases. If you are still experiencing trouble, please seek support. [Learn more about vault command](./commands/vault) Yes. If you have previously retrieved secrets for a specific project and environment (such as dev, staging, or prod), the `run`/`secret` command will utilize the saved secrets, even when offline, on subsequent fetch attempts. Yes. This is simply a configuration file and contains no sensitive data. Visit the Infisical website and navigate to a project of your choice. Once on the project page, access the **Project Settings** from the sidebar. Within the Project name section, click the "Copy Project ID" button for copying the current Project ID to clipboard, or simply obtain it from the URL of the current page. ``` https://app.infisical.com/project//settings ``` The Infisical CLI supports custom HTTP headers for requests to servers that require additional authentication. Set these headers using the `INFISICAL_CUSTOM_HEADERS` environment variable: ```bash theme={"dark"} export INFISICAL_CUSTOM_HEADERS="Access-Client-Id=your-client-id Access-Client-Secret=your-client-secret" ``` After setting this environment variable, run your Infisical commands as usual. Custom headers are necessary when your Infisical server is protected by services like Cloudflare Access or other reverse proxies that require specific authentication headers. Without this feature, you would need to implement security workarounds that might compromise your security posture. Custom headers should be specified in the format `headername1=headervalue1 headername2=headervalue2`, with spaces separating each header-value pair. For example: ```bash theme={"dark"} export INFISICAL_CUSTOM_HEADERS="Header1=value1 Header2=value2 Header3=value3" ``` # Install Source: https://infisical.com/docs/cli/overview Infisical's CLI is one of the best ways to manage environments and secrets. Install it here The Infisical CLI is a powerful command line tool that can be used to retrieve, modify, export and inject secrets into any process or application as environment variables. You can use it across various environments, whether it's local development, CI/CD, staging, or production. ## Installation As of 04/08/25, all future releases for Debian/Ubuntu will be distributed via the official Infisical repository at [https://artifacts-cli.infisical.com](https://artifacts-cli.infisical.com). No new releases will be published for Debian/Ubuntu on Cloudsmith going forward. Use [brew](https://brew.sh/) package manager ```bash theme={"dark"} brew install infisical/get-cli/infisical ``` ### Updates ```bash theme={"dark"} brew update && brew upgrade infisical ``` Use [Scoop](https://scoop.sh/) package manager ```bash theme={"dark"} scoop bucket add org https://github.com/Infisical/scoop-infisical.git ``` ```bash theme={"dark"} scoop install infisical ``` ### Updates ```bash theme={"dark"} scoop update infisical ``` Use [Winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/) package manager ```bash theme={"dark"} winget install infisical ``` Use [NPM](https://www.npmjs.com/) package manager ```bash theme={"dark"} npm install -g @infisical/cli ``` ### Updates ```bash theme={"dark"} npm update -g @infisical/cli ``` Install prerequisite ```bash theme={"dark"} apk add --no-cache bash sudo ``` Add Infisical repository ```bash theme={"dark"} curl -1sLf \ 'https://dl.cloudsmith.io/public/infisical/infisical-cli/setup.alpine.sh' \ | bash ``` Then install CLI ```bash theme={"dark"} apk update && sudo apk add infisical ``` ### If you are installing the CLI in production environments, we highly recommend to set the version of the CLI to a specific version. This will help keep your CLI version consistent across reinstalls. [View versions](https://cloudsmith.io/~infisical/repos/infisical-cli/packages/) Add Infisical repository ```bash theme={"dark"} curl -1sLf \ 'https://dl.cloudsmith.io/public/infisical/infisical-cli/setup.rpm.sh' \ | sudo -E bash ``` Then install CLI ```bash theme={"dark"} sudo yum install infisical ``` ### If you are installing the CLI in production environments, we highly recommend to set the version of the CLI to a specific version. This will help keep your CLI version consistent across reinstalls. [View versions](https://cloudsmith.io/~infisical/repos/infisical-cli/packages/) Add Infisical repository ```bash theme={"dark"} curl -1sLf \ 'https://artifacts-cli.infisical.com/setup.deb.sh' \ | sudo -E bash ``` Then install CLI ```bash theme={"dark"} sudo apt-get update && sudo apt-get install -y infisical ``` ### If you are installing the CLI in production environments, we highly recommend to set the version of the CLI to a specific version. This will help keep your CLI version consistent across reinstalls. [View versions](https://cloudsmith.io/~infisical/repos/infisical-cli/packages/) Use the `yay` package manager to install from the [Arch User Repository](https://aur.archlinux.org/packages/infisical-bin) ```bash theme={"dark"} yay -S infisical-bin ``` ### If you are installing the CLI in production environments, we highly recommend to set the version of the CLI to a specific version. This will help keep your CLI version consistent across reinstalls. [View versions](https://cloudsmith.io/~infisical/repos/infisical-cli/packages/) ## Quick Usage Guide Now that you have the CLI installed on your system, follow this guide to make the best use of it # Project config file Source: https://infisical.com/docs/cli/project-config Project config file & customization options To link your local project on your machine with an Infisical project, we suggest using the infisical init CLI command. This will generate a `.infisical.json` file in the root directory of your project. The `.infisical.json` file specifies various parameters, such as the Infisical project to retrieve secrets from, along with other configuration options. Furthermore, you can define additional properties in the file to further tailor your local development experience. ## Set default environment If you need to change environments while using the CLI, you can do so by including the `--env` flag in your command. However, this can be inconvenient if you typically work in just one environment. To simplify the process, you can establish a default environment, which will be used for every command unless you specify otherwise. ```json .infisical.json theme={"dark"} { "workspaceId": "63ee5410a45f7a1ed39ba118", "defaultEnvironment": "test", "gitBranchToEnvironmentMapping": null } ``` ### How it works If both `defaultEnvironment` and `gitBranchToEnvironmentMapping` are configured, `gitBranchToEnvironmentMapping` will take precedence over `defaultEnvironment`. However, if `gitBranchToEnvironmentMapping` is not set and `defaultEnvironment` is, then the `defaultEnvironment` will be used to execute your Infisical CLI commands. If you wish to override the `defaultEnvironment`, you can do so by using the `--env` flag explicitly. ## Set Infisical environment based on GitHub branch When fetching your secrets from Infisical, you can switch between environments by using the `--env` flag. However, in certain cases, you may prefer the environment to be automatically mapped based on the current GitHub branch you are working on. To achieve this, simply add the `gitBranchToEnvironmentMapping` property to your configuration file, as shown below. ```json .infisical.json theme={"dark"} { "workspaceId": "63ee5410a45f7a1ed39ba118", "gitBranchToEnvironmentMapping": { "branchName": "dev", "anotherBranchName": "staging" } } ``` ### How it works After configuring this property, every time you use the CLI with the specified configuration file, it will automatically verify if there is a corresponding environment mapping for the current Github branch you are on. If it exists, the CLI will use that environment to retrieve secrets. You can override this behavior by explicitly using the `--env` flag while interacting with the CLI. # Secret scanning Source: https://infisical.com/docs/cli/scanning-overview Scan and prevent secret leaks in your code base Building upon its core functionality of fetching and injecting secrets into your applications, Infisical now takes a significant step forward in bolstering your code security. We've enhanced our CLI tool to include a powerful scanning feature, capable of identifying more than 140 different types of secret leaks in your codebase. In addition to scanning for past leaks, this new addition also actively aids in preventing future leaks. # Scanning ```bash theme={"dark"} infisical scan # Display the full secret findings infisical scan --verbose ``` The `infisical scan` command serves to scan repositories, directories, and files. It's compatible with both individual developer machines and Continuous Integration (CI) environments. When you run `infisical scan` on a Git repository, Infisical will parses the output of a `git log -p` command. This command generates [patches](https://stackoverflow.com/questions/8279602/what-is-a-patch-in-git-version-control) that Infisical uses to identify secrets in your code. You can configure the range of commits that `git log` will cover using the `--log-opts` flag. Any options you can use with `git log -p` are valid for `--log-opts`. For instance, to instruct Infisical to scan a specific range of commits, use the following command: `infisical scan --log-opts="--all commitA..commitB"`. For more details, refer to the [Git log documentation](https://git-scm.com/docs/git-log). To scan individual files and directories, use the `--no-git` flag. **View [full details for this command](./commands/scan)** ```bash theme={"dark"} infisical scan git-changes # Display the full secret findings infisical scan git-changes --verbose ``` Scanning for secrets before you commit your changes is great way to prevent leaks. Infisical makes this easy with the sub command `git-changes`. The `git-changes` scans for uncommitted changes in a Git repository, and is especially designed for use on developer machines, aligning with the ['shift left'](https://cloud.google.com/architecture/devops/devops-tech-shifting-left-on-security) security approach. When `git-changes` is run on a Git repository, Infisical parses the output from a `git diff` command. To scan changes in commits that have been staged via `git add`, you can add the `--staged` flag to the sub command. This flag is particularly useful when using Infisical CLI as a pre-commit tool. **View [full details for this command](./commands/scan-git-changes)** ​ `git-changes` command is only for Git repositories; using it on files or directories will result in an error. # # # Automatically scan changes before you commit To lower the risk of committing hardcoded secrets to your code repository, we have designed a custom git pre-commit hook. This hook scans the changes you're about to commit for any exposed secrets. If any hardcoded secrets are detected, it will block your commit. ### Install pre-commit hook To install this git hook, go into your local git repository and run the following command. ```bash theme={"dark"} infisical scan install --pre-commit-hook ``` To disable this hook after installing it, run the command `git config --bool hooks.infisical-scan false` ### Third party hooks management If you would rather handle your pre-commit hook outside of the standard `.git/hooks` directory, you can quickly achieve this by adding the following command into your pre-commit script. For instance, if you utilize [Husky](https://typicode.github.io/husky/) for managing your Git hooks, you can insert the command provided below into your `.husky/pre-commit` file. ```bash theme={"dark"} infisical scan git-changes --staged --verbose ``` # # # Creating a baseline When scanning large repositories or repositories with a long history, it can be helpful to use a baseline. A baseline allows Infisical to ignore any old findings that are already present in the baseline findings. You can create a infisical scan report by running `infisical scan` with the `--report-path` flag. To create a Infisical scan report and save it in a file called leaks-report.json, use the following command: ``` infisical scan --report-path leaks-report.json ``` Once a baseline is created, you can apply it when running the `infisical scan` command again. Use the following command: ``` infisical scan --baseline-path leaks-report.json --report-path findings.json ``` After running the `scan` command with the `--baseline-path` flag, the report output in findings.json will only contain new issues. # # # Configuration file To customize the scan, such as specifying your own rules or establishing exceptions for certain files or paths that should not be flagged as risks, you can define these specifications in the configuration file. ```toml infisical-scan.toml theme={"dark"} # Title for the configuration file title = "Some title" # This configuration is the foundation that can be expanded. If there are any overlapping rules # between this base and the expanded configuration, the rules in this base will take priority. # Another aspect of extending configurations is the ability to link multiple files, up to a depth of 2. # "Allowlist" arrays get appended and may have repeated elements. # "useDefault" and "path" cannot be used simultaneously. Please choose one. [extend] # useDefault will extend the base configuration with the default config: # https://raw.githubusercontent.com/Infisical/infisical/main/cli/config/infisical-scan.toml useDefault = true # or you can supply a path to a configuration. Path is relative to where infisical cli # was invoked, not the location of the base config. path = "common_config.toml" # An array of tables that contain information that define instructions # on how to detect secrets [[rules]] # Unique identifier for this rule id = "some-identifier-for-rule" # Short human readable description of the rule. description = "awesome rule 1" # Golang regular expression used to detect secrets. Note Golang's regex engine # does not support lookaheads. regex = '''one-go-style-regex-for-this-rule''' # Golang regular expression used to match paths. This can be used as a standalone rule or it can be used # in conjunction with a valid `regex` entry. path = '''a-file-path-regex''' # Array of strings used for metadata and reporting purposes. tags = ["tag","another tag"] # A regex match may have many groups, this allows you to specify the group that should be used as (which group the secret is contained in) # its entropy checked if `entropy` is set. secretGroup = 3 # Float representing the minimum shannon entropy a regex group must have to be considered a secret. # Shannon entropy measures how random a data is. Since secrets are usually composed of many random characters, they typically have high entropy entropy = 3.5 # Keywords are used for pre-regex check filtering. # If rule has keywords but the text fragment being scanned doesn't have at least one of it's keywords, it will be skipped for processing further. # Ideally these values should either be part of the identifier or unique strings specific to the rule's regex # (introduced in v8.6.0) keywords = [ "auth", "password", "token", ] # You can include an allowlist table for a single rule to reduce false positives or ignore commits # with known/rotated secrets [rules.allowlist] description = "ignore commit A" commits = [ "commit-A", "commit-B"] paths = [ '''go\.mod''', '''go\.sum''' ] # note: (rule) regexTarget defaults to check the _Secret_ in the finding. # if regexTarget is not specified then _Secret_ will be used. # Acceptable values for regexTarget are "match" and "line" regexTarget = "match" regexes = [ '''process''', '''getenv''', ] # note: stopwords targets the extracted secret, not the entire regex match # if the extracted secret is found in the stopwords list, the finding will be skipped (i.e not included in report) stopwords = [ '''client''', '''endpoint''', ] # This is a global allowlist which has a higher order of precedence than rule-specific allowlists. # If a commit listed in the `commits` field below is encountered then that commit will be skipped and no # secrets will be detected for said commit. The same logic applies for regexes and paths. [allowlist] description = "global allow list" commits = [ "commit-A", "commit-B", "commit-C"] paths = [ '''gitleaks\.toml''', '''(.*?)(jpg|gif|doc)''' ] # note: (global) regexTarget defaults to check the _Secret_ in the finding. # if regexTarget is not specified then _Secret_ will be used. # Acceptable values for regexTarget are "match" and "line" regexTarget = "match" regexes = [ '''219-09-9999''', '''078-05-1120''', '''(9[0-9]{2}|666)-\d{2}-\d{4}''', ] # note: stopwords targets the extracted secret, not the entire regex match # if the extracted secret is found in the stopwords list, the finding will be skipped (i.e not included in report) stopwords = [ '''client''', '''endpoint''', ] ``` # # # Ignoring Known Secrets If you're intentionally committing a test secret that `infisical scan` might flag, you can instruct Infisical to overlook that secret with the methods listed below. ### infisical-scan:ignore To ignore a secret contained in line of code, simply add `infisical-scan:ignore ` at the end of the line as comment in the given programming. ```js example.js theme={"dark"} function helloWorld() { console.log("8dyfuiRyq=vVc3RRr_edRk-fK__JItpZ"); // infisical-scan:ignore } ``` ### .infisicalignore An alternative method to exclude specific findings involves creating a .infisicalignore file at your repository's root. You can then add the fingerprints of the findings you wish to exclude. The Infisical scan report provides a unique Fingerprint for each secret found. By incorporating these Fingerprints into the .infisicalignore file, Infisical will skip the corresponding secret findings in subsequent scans. ```.ignore .infisicalignore theme={"dark"} bea0ff6e05a4de73a5db625d4ae181a015b50855:frontend/components/utilities/attemptLogin.js:stripe-access-token:147 bea0ff6e05a4de73a5db625d4ae181a015b50855:backend/src/json/integrations.json:generic-api-key:5 1961b92340e5d2613acae528b886c842427ce5d0:frontend/components/utilities/attemptLogin.js:stripe-access-token:148 ``` # Quickstart Source: https://infisical.com/docs/cli/usage Manage secrets with Infisical CLI The CLI is designed for a variety of secret management applications ranging from local development to CI/CD and production scenarios. In the following steps, we explore how to use the Infisical CLI to fetch back environment variables from Infisical and inject them into your local development process. If you prefer learning by watching, you can follow along our step-by-step video tutorial [here](https://www.youtube.com/watch?v=EzDQC7nY3YY). Start by running the `infisical login` command to authenticate with Infisical. ```bash theme={"dark"} infisical login ``` If you are in a containerized environment such as WSL 2 or Codespaces, run `infisical login -i` to avoid browser based login Next, navigate to your project and initialize Infisical. ```bash theme={"dark"} # navigate to your project cd /path/to/project # initialize infisical infisical init ``` The `infisical init` command creates a `.infisical.json` file, containing [local project settings](./project-config), at the location where the command is executed. The `.infisical.json` file does not contain any sensitive data, so you may commit it to your git repository. Finally, pass environment variables from Infisical into your application. ```bash theme={"dark"} infisical run --env=dev --path=/apps/firefly -- [your application start command] # e.g. npm run dev # example with node (nodemon) infisical run --env=staging --path=/apps/spotify -- nodemon index.js # example with flask infisical run --env=prod --path=/apps/backend -- flask run # example with spring boot - maven infisical run --env=dev --path=/apps/ -- ./mvnw spring-boot:run --quiet ``` Custom aliases can utilize secrets from Infisical. Suppose there is a custom alias `yd` in `custom.sh` that runs `yarn dev` and needs the secrets provided by Infisical. ```bash theme={"dark"} #!/bin/sh yd() { yarn dev } ``` To make the secrets available from Infisical to `yd`, you can run the following command: ```bash theme={"dark"} infisical run --env=prod --path=/apps/reddit --command="source custom.sh && yd" ``` View all available options for `run` command [here](./commands/run) In the following steps, we explore how to use the Infisical CLI in a non-local development scenario to fetch back environment variables and export them to a file. Follow the steps listed [here](/documentation/platform/identities/universal-auth) to create a machine identity and obtain a **client ID** and **client secret** for it. Run the following command to authenticate with Infisical using the **client ID** and **client secret** credentials from step 1 and set the `INFISICAL_TOKEN` environment variable to the retrieved access token. ```bash theme={"dark"} export INFISICAL_TOKEN=$(infisical login --method=universal-auth --client-id= --client-secret= --silent --plain) # --plain flag will output only the token, so it can be fed to an environment variable. --silent will disable any update messages. ``` The CLI is configured to look out for the `INFISICAL_TOKEN` environment variable, so going forward any command used will be authenticated. Alternatively, assuming you have an access token on hand, you can also pass it directly to the CLI using the `--token` flag in conjunction with other CLI commands. Keep in mind that the machine identity access token has a limited lifetime. It is recommended to use it only for the duration of the task at hand. You can [refresh the token](./commands/token) if needed. Finally, export the environment variables from Infisical to a file of choice. ```bash theme={"dark"} # export variables to a .env file (with export keyword) infisical export --format=dotenv-export > .env # export variables to a YAML file infisical export --format=yaml > secrets.yaml ``` Starting with CLI version v0.4.0, you can now choose to log in via Infisical Cloud (US/EU) or your own self-hosted instance by simply running `infisical login` and following the on-screen instructions — no need to manually set the `INFISICAL_API_URL` environment variable. For versions prior to v0.4.0, the CLI defaults to US Cloud. To connect to EU Cloud or a self-hosted instance, set the `INFISICAL_API_URL` environment variable to `https://eu.infisical.com` or your custom URL. ## Domain Configuration **Important:** If you're not using interactive login, you must configure the domain for **all CLI commands**. The CLI defaults to US Cloud ([https://app.infisical.com](https://app.infisical.com)). To connect to **EU Cloud ([https://eu.infisical.com](https://eu.infisical.com))** or a **self-hosted instance**, you must configure the domain in one of the following ways: * Use the `INFISICAL_API_URL` environment variable * Use the `--domain` flag on every command The easiest way to ensure all CLI commands use the correct domain is to set the `INFISICAL_API_URL` environment variable. This applies the domain setting globally to all commands: ```bash theme={"dark"} # Linux/MacOS export INFISICAL_API_URL="https://your-domain.infisical.com" # Windows PowerShell setx INFISICAL_API_URL "https://your-domain.infisical.com" ``` Once set, all subsequent CLI commands will automatically use this domain: ```bash theme={"dark"} # Login with the domain infisical login --method=universal-auth --client-id= --client-secret= --silent --plain # All other commands will also use the same domain automatically infisical secrets --projectId --env dev ``` The `--domain` flag can be used to set the domain for a single command. This applies the domain setting to the command only: ```bash theme={"dark"} # Login with domain infisical login --domain="https://your-domain.infisical.com" --method=universal-auth --client-id= --client-secret= --silent --plain # All subsequent commands must also include --domain infisical secrets --domain="https://your-domain.infisical.com" --projectId= --env=dev ``` If you use `--domain` during login but forget to include it on subsequent commands, you may encounter authentication errors. ## Custom Request Headers The Infisical CLI supports custom HTTP headers for requests to servers protected by authentication services such as Cloudflare Access. Configure these headers using the `INFISICAL_CUSTOM_HEADERS` environment variable: ```bash theme={"dark"} # Syntax: headername1=headervalue1 headername2=headervalue2 export INFISICAL_CUSTOM_HEADERS="Access-Client-Id=your-client-id Access-Client-Secret=your-client-secret" # Execute Infisical commands after setting the environment variable infisical secrets ``` This functionality enables secure interaction with Infisical instances that require specific authentication headers. ## History Your terminal keeps a history with the commands you run. When you create Infisical secrets directly from your terminal, they'll stay there for a while. For security and privacy concerns, we recommend you to configure your terminal to ignore those specific Infisical commands. `$HOME/.profile` is pretty common but, you could place it under `$HOME/.profile.d/infisical.sh` or any profile file run at login ```bash theme={"dark"} cat <> $HOME/.profile && source $HOME/.profile # Ignoring specific Infisical CLI commands DEFAULT_HISTIGNORE=$HISTIGNORE export HISTIGNORE="*infisical secrets set*:$DEFAULT_HISTIGNORE" EOF ``` If you're on WSL, then you can use the Unix/Linux method. Here's some [documentation](https://superuser.com/a/1658331) about how to clear the terminal history, in PowerShell and CMD ## FAQ Yes. The CLI is set to connect to Infisical US Cloud by default, but if you're using EU Cloud or a self-hosted instance you can configure the domain for **all CLI commands**. #### Method 1: Use the updated CLI (v0.4.0+) Beginning with CLI version V0.4.0, you can choose between logging in through Infisical US Cloud, EU Cloud, or your own self-hosted instance. Simply execute the `infisical login` command and follow the on-screen instructions. #### Method 2: Export environment variable You can point the CLI to the self-hosted Infisical instance by exporting the environment variable `INFISICAL_API_URL` in your terminal. ```bash theme={"dark"} # Set the API URL export INFISICAL_API_URL="https://your-self-hosted-infisical.com" # For EU Cloud export INFISICAL_API_URL="https://eu.infisical.com" # Remove the setting unset INFISICAL_API_URL ``` ```bash theme={"dark"} # Set the API URL setx INFISICAL_API_URL "https://your-self-hosted-infisical.com" # For EU Cloud setx INFISICAL_API_URL "https://eu.infisical.com" # Remove the setting setx INFISICAL_API_URL "" # NOTE: Once set, please restart powershell for the change to take effect ``` #### Method 3: Set manually on every command If you prefer not to use an environment variable, you must include the `--domain` flag on **every CLI command** you run: ```bash theme={"dark"} # Login with domain infisical login --domain="https://your-domain.infisical.com" --method=oidc-auth --jwt $JWT # All subsequent commands must also include --domain infisical secrets --domain="https://your-self-hosted-infisical.com" --projectId --env dev infisical export --domain="https://your-self-hosted-infisical.com" --format=dotenv-export ``` **Best Practice:** Use `INFISICAL_API_URL` environment variable (Method 2) to avoid having to remember the `--domain` flag on every command. This is especially important in CI/CD pipelines and automation scripts. To use Infisical for non local development scenarios, please create a service token. The service token will allow you to authenticate and interact with Infisical. Once you have created a service token with the required permissions, you’ll need to feed the token to the CLI. ```bash theme={"dark"} infisical export --token= infisical secrets --token= infisical run --token= -- npm run dev ``` #### Pass via shell environment variable The CLI is configured to look for an environment variable named `INFISICAL_TOKEN`. If set, it’ll attempt to use it for authentication. ```bash theme={"dark"} export INFISICAL_TOKEN= ``` # Code of Conduct Source: https://infisical.com/docs/contributing/getting-started/code-of-conduct What you should know before contributing to Infisical? ## Our Pledge We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation. We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. ## Our Standards Examples of behavior that contributes to a positive environment for our community include: * Demonstrating empathy and kindness toward other people * Being respectful of differing opinions, viewpoints, and experiences * Giving and gracefully accepting constructive feedback * Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience * Focusing on what is best not just for us as individuals, but for the overall community Examples of unacceptable behavior include: * The use of sexualized language or imagery, and sexual attention or advances of any kind * Trolling, insulting or derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or email address, without their explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Enforcement Responsibilities Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. ## Scope This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [team@infisical.com](mailto:team@infisical.com). All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the reporter of any incident. ## Enforcement Guidelines Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: ### 1. Correction **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. **Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. ### 2. Warning **Community Impact**: A violation through a single incident or series of actions. **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. ### 3. Temporary Ban **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. ### 4. Permanent Ban **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. **Consequence**: A permanent ban from any sort of public interaction within the community. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code\_of\_conduct.html][v2.1]. Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][mozilla coc]. For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][faq]. Translations are available at [https://www.contributor-covenant.org/translations][translations]. [homepage]: https://www.contributor-covenant.org [v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html [mozilla coc]: https://github.com/mozilla/diversity [faq]: https://www.contributor-covenant.org/faq [translations]: https://www.contributor-covenant.org/translations # Overview Source: https://infisical.com/docs/contributing/getting-started/overview Contributing to the Infisical ecosystem. To set a strong foundation, this section outlines how we, the community and members of Infisical, should approach the development and contribution process. ## Code-bases Infisical has two major code-bases. One for the platform code, and one for SDKs. The contribution process has some key differences between the two, so we've split the documentation into two sections: * The [Infisical Platform](https://github.com/Infisical/infisical), the Infisical platform itself. * The Infisical SDKs, please refer to each individual SDK repositories for more information. * [Node.js SDK](https://github.com/Infisical/node-sdk-v2) * [Python SDK](https://github.com/Infisical/python-sdk-official) * [Java SDK](https://github.com/Infisical/java-sdk) * [.NET SDK](https://github.com/Infisical/infisical-dotnet-sdk) * [Go SDK](https://github.com/Infisical/go-sdk) * [C++ SDK](https://github.com/Infisical/infisical-cpp-sdk) * [PHP SDK](https://github.com/Infisical/php-sdk) * [Rust SDK](https://github.com/Infisical/rust-sdk) ## Community We are building an inclusive community, and this means adhering to the [Code of Conduct](/contributing/getting-started/code-of-conduct). ## Bugs and issues Bug reports help make Infisical a better experience for everyone. When you report a bug, a template will be created automatically containing information we'd like to know. Before raising a new issue, please search existing ones to make sure you're not creating a duplicate. If the issue is related to security, please email us directly at [team@infisical.com](mailto:team@infisical.com). ## Deciding what to work on You can start by browsing through our list of issues or adding your own that improves on the platform experience. Once you've decided on an issue, leave a comment and wait to get approved; this helps avoid multiple people working on the same issue. If you're ever in doubt about whether or not a proposed feature aligns with Infisical as a whole, feel free to raise an issue about it and we'll get back to you promptly. ## Writing and submitting code Anyone can contribute code to Infisical. To get started, check out the local development guide for the platform: * Local development guide for Platform is [here](/contributing/platform/developing). ## Licensing Most of Infisical's code is under the MIT license, though some paid feature restrictions are covered by a proprietary license. Any third party components incorporated into our code are licensed under the original license provided by the applicable component owner. # Pull requests Source: https://infisical.com/docs/contributing/getting-started/pull-requests This guide walks through the code submission process for Infisical. ## Making a pull request Once you are done making changes in local development, you can submit a pull request (PR) to the main repository branch. We require a few considerations on your part to ensure that PRs are easy to review and up to standard with the code. ### Title and content Start by providing a concise title addressing what your PR achieves such as "add pagination to retrieve environment variables for GitLab integration." You should follow the automatically-generated PR template to fill in the PR description. This includes a more detailed description of the changes in the PR, the type of PR, and an acknowledgement that you've read and agreed to the contributing guidelines. ### Feature PRs Give a functional overview of how your feature works, including how the user can use the feature. Then share any technical details in an overview of how the PR works. As of `06-01-2023`, all PRs created after this date are required to attach a video of you performing the described functionality. ### Bug Fix PRs Give an overview of the bug at hand and how your PR fixes the it at both a high and low level. Feel free to add a short video or screenshots of what your PR achieves. ## Getting your PR reviewed One or two relevant members of the Infisical team should review and approve the PR before it is merged. You can ping someone from the team in our [Slack](https://infisical.com/slack) to review your PR. The team member(s) will start by enabling baseline checks to ensure that there are no leaked secrets, new dependencies are clear, and the frontend/backend services start up. Afterward, they will review your PR thoroughly by testing the code and leave any feedback or work in with you to revise the PR up to standard. Once everything is good, the team member(s) will approve the PR to be merged into the `main` branch; all changes will be tested in CI/CD and our staging environment first before being deployed to production. Due to the high volume of issues, PRs, etc. from the community, and limited bandwidth on our end to address everything instantly, we prefer reviewing PRs once they are fully complete and well-tested. In the past, we've often had to review low-quality PRs up to 10 times which severely restricts our capacity to address other issues, PRs, and initiatives in the pipeline. As such, we ask of the community to submit higher-quality PRs that, for example, don't break existing code; in return we'll prioritize the first 3 reviews for PRs. # Backend folder structure Source: https://infisical.com/docs/contributing/platform/backend/folder-structure ``` ├── scripts ├── e2e-test ├── bdd └── src/ ├── @types/ │ ├── knex.d.ts │ ├── fastify.d.ts │ ├── ... ├── db/ │ ├── migrations │ ├── schemas │ └── seeds ├── keystore/ ├── lib/ │ ├── api-docs │ ├── aws │ ├── axios │ ├── base64 │ ├── casl │ ├── certificates │ ├── config │ ├── crypto │ ├── dates │ ├── delay │ ├── error-codes │ ├── errors │ ├── files │ ├── fn │ ├── ... ├── queue ├── server/ │ ├── routes/ │ │ ├── v1 │ │ ├── v2 │ │ ├── v3 │ │ └── v4 │ ├── plugins │ ├── config │ └── lib ├── services/ │ ├── auth │ ├── org │ ├── ... │ └── project/ │ ├── project-service.ts │ ├── project-types.ts │ └── project-dal.ts └── ee/ ├── routes └── services ``` ### `backend/scripts` Contains reusable scripts for backend automation, like running migrations and generating SQL schemas. ### `backend/e2e-test` Integration tests for the APIs. ### `backend/bdd` Behavior-Driven Development (BDD) tests using Python and Gherkin feature files. ### `backend/src` The source code of the backend. * `@types`: Type definitions for libraries like Fastify, Knex, and other third-party dependencies. * `db`: Knex.js configuration for the database, including migrations, seed files, and SQL type schemas. * `keystore`: Key-value store abstraction layer supporting Redis and PostgreSQL for application caching, distributed locking, and coordination. * `lib`: Stateless, reusable functions used across the codebase, organized by functionality (crypto, config, dates, etc.). * `queue`: Infisical's queue system based on BullMQ. ### `src/server` * Scope anything related to Fastify/service here. * Includes routes, Fastify plugins, server configurations, and server-specific utilities. * The routes folder contains various versions of routes separated into v1, v2, v3, v4, etc. ### `src/services` * Handles the core business logic for all operations. * Follows the co-location principle: related components should be kept together. * Each service component typically contains: 1. **dal**: Database Access Layer functions for database operations 2. **service**: The service layer containing business logic. 3. **type**: Type definitions used within the service component. 4. **fns**: An optional component for sharing reusable functions related to the service. 5. **queue**: An optional component for queue-specific logic, like `secret-queue.ts`. ### `src/ee` Follows the same pattern as above, with the exception of a license change from MIT to Infisical Proprietary License. ### Guidelines and Best Practices * All services are interconnected at `/src/server/routes/index.ts`, following the principle of simple dependency injection. * Files should be named in dash-case. * Avoid using classes in the codebase; opt for simple functions instead. * All committed code must be properly linted using `npm run lint:fix` and type-checked with `npm run type:check`. * Minimize shared logic between services as much as possible. * Controllers within a router component should ideally call only one service layer, with exceptions for services like `audit-log` that require access to request object data. # Backend development guide Source: https://infisical.com/docs/contributing/platform/backend/how-to-create-a-feature Suppose you're interested in implementing a new feature in Infisical's backend, let's call it "feature-x." Here are the general steps you should follow. ## Creating new database model If your feature involves a change in the database, you need to first address this by generating the necessary database schemas. 1. If you're adding a new table, update the `TableName` enum in `/src/db/schemas/models.ts` to include the new table name. 2. Create a new migration file by going to the `/backend` folder and running `npm run migration:new` and give it a relevant name, such as `feature-x`. 3. Navigate to `/src/db/migrations/_.ts`. 4. Modify both the `up` and `down` functions to create or alter Postgres fields on migration up and to revert these changes on migration down, ensuring idempotency as outlined [here](https://github.com/graphile/migrate/blob/main/docs/idempotent-examples.md). ### Generating TS Schemas While typically you would need to manually write TS types for Knex type-sense, we have automated this process: 1. If you haven't done it yet, create a new `.env.migration` file at the root of the Infisical directory then copy the contents of the file linked [here](https://github.com/Infisical/infisical/blob/main/.env.migration.example) 2. Start the server. 3. Go to the `/backend` folder and run `npm run migration:latest-dev` to apply all database changes. 4. Execute `npm run generate:schema` to automatically generate types and schemas using [zod](https://github.com/colinhacks/zod) in the `/src/db/schemas` folder. 5. Update the barrel export in `schema/index` and include the new tables in `/src/@types/knex.d.ts` to enable type-sensing in Knex.js. ## Business Logic Once the database changes are in place, it's time to create the APIs for `feature-x`: 1. Execute `npm run generate:component`. 2. Choose option 1 for the service component. 3. Name the service in dash-case, like `feature-x`. This will create a `feature-x` folder in `/src/services` containing three files. 1. `feature-x-dal`: The Database Access Layer functions. 2. `feature-x-service`: The service layer where all the business logic is handled. 3. `feature-x-type`: The types used by `feature-x`. For reusable shared functions, set up a file named `feature-x-fns`. Use the custom Infisical function `ormify` in `src/lib/knex` for simple database operations within the DAL. ## Connecting the Service Layer to the Server Layer Server-related logic is handled in `/src/server`. To connect the service layer to the server layer, we use Fastify's dependency injection pattern: 1. Add the service type in `/src/@types/fastify.d.ts` under the `services` namespace of the `FastifyInstance` interface. 2. In `/src/server/routes/index.ts`, instantiate the required dependencies for `feature-x` (such as the DAL and service layers), and then add the service instance to the `server.decorate()` call, where all services are registered for dependency injection. 3. This makes the service layer accessible within all routes under the Fastify service instance, accessed via `server.services..`. ## Writing API Routes 1. To create a route component, run `npm run generate:component`. 2. Select option 3, type the router name in dash-case, and provide the version number. This will generate a router file in `src/server/routes/v/` 1. Implement your logic to connect with the service layer as needed. 2. Import the router component in the version folder's index.ts. For instance, if it's in v1, import it in `v1/index.ts`. 3. Finally, register it under the appropriate prefix for access. # Local development Source: https://infisical.com/docs/contributing/platform/developing This guide will help you set up and run the Infisical platform in local development. ## Fork and clone the repo [Fork](https://docs.github.com/en/get-started/quickstart/fork-a-repo) the [repository](https://github.com/Infisical/infisical) to your own GitHub account and then [clone](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) it to your local device. Once, you've done that, create a new branch: ```console theme={"dark"} git checkout -b MY_BRANCH_NAME ``` ## Set up environment variables Start by creating a `.env` file at the root of the Infisical directory then copy the contents of the file linked [here](https://github.com/Infisical/infisical/blob/main/.env.example). View all available [environment variables](https://infisical.com/docs/self-hosting/configuration/envars) and guidance for each. ## Starting Infisical for development We use Docker to spin up all required services for Infisical in local development. If you are unfamiliar with Docker, don’t worry, all you have to do is install Docker for your machine and run the command below to start up the development server. #### Start local server ```bash theme={"dark"} docker compose -f docker-compose.dev.yml up --build --force-recreate ``` #### Access local server Once all the services have spun up, browse to [http://localhost:8080](http://localhost:8080). #### Shutdown local server ```bash theme={"dark"} # To stop environment use Control+C (on Mac) CTRL+C (on Win) or docker compose -f docker-compose.dev.yml down ``` ## Starting Infisical docs locally We use [Mintlify](https://mintlify.com/) for our docs. #### Install Mint CLI. ```bash theme={"dark"} npm i -g mint ``` or ```bash theme={"dark"} yarn global add mint ``` #### Running the docs Go to `docs` directory and run `mint dev`. This will start up the docs on `localhost:3000` ```bash theme={"dark"} # From the root directory cd docs; mint dev; ``` # Audit Logs Source: https://infisical.com/docs/documentation/getting-started/concepts/audit-logs Understand how Infisical logs activity and supports external audit streaming. Infisical records a detailed audit trail of actions across the platform — providing deep visibility into access, changes, and usage for security and compliance purposes. Every interaction with Infisical resources generates an audit event. These events are immutable and include metadata such as the actor, event type, affected resources, timestamp, IP address, and client source. Audit logs enable teams to: * Monitor access and changes to secrets, certificates, and infrastructure. * Investigate incidents with full context around who did what, when, and how. * Meet compliance and governance requirements with structured activity records. To learn more, refer to the [audit logs documentation](/documentation/platform/audit-logs). ## Log Coverage Infisical tracks dozens of event types across the platform — including secret access, permission changes, certificate issuance, SSH session activity, and identity management. Each audit entry includes structured fields that make it easy to search, filter, and correlate across systems. For example: * Event Type: Action that occurred (e.g., `create-secret`, `issue-ssh-cert`). * Actor: Who performed the action (user or machine identity). * Resource: What was affected (e.g., project, secret, certificate). * Context: IP address, user agent, permissions, and more. ## External Log Streaming For centralized monitoring and long-term retention, Infisical supports [audit log streaming](/documentation/platform/audit-log-streams/audit-log-streams) to external systems. You can forward logs to SIEM platforms, storage buckets, or observability stacks using JSON-based collectors. Infisical integrates well with tools like [Fluent Bit](/documentation/platform/audit-log-streams/audit-log-streams-with-fluentbit#deploy-fluent-bit), enabling teams to route logs to destinations such as: * AWS S3 * Elasticsearch * Splunk * Datadog * Cloud-native log pipelines # Client Ecosystem Source: https://infisical.com/docs/documentation/getting-started/concepts/client-integrations Get an overview of the CLI, SDKs, agents, APIs, and integrations that interact with Infisical. Infisical provides a flexible interface for integrating into development workflows and infrastructure. Around it is a rich ecosystem of clients and integrations that allow users and systems to interact with Infisical across any environment. These clients enable access to secrets, certificates, and other resources from wherever they’re needed—whether that’s a developer’s terminal, a CI/CD pipeline, or a running Kubernetes workload. ## Available Clients and Interfaces Infisical offers a non-exhaustive set of clients and interfaces to support a wide range of use cases: * [CLI](/cli/overview): A powerful command-line interface for developers and operators to interact with Infisical from local or automated environments. Commonly used for secret access, SSH credential issuance, and more. * [SDKs](/sdks/overview): Official client libraries for languages like Go, Node.js, and Python make it easy to integrate Infisical directly into applications and internal tooling. * [HTTP API](/api-reference/overview/introduction): A fully documented RESTful API powers all core functionality and enables advanced or custom integrations. * [Agents](/integrations/platforms/infisical-agent): Lightweight background processes that can fetch and sync secrets or credentials into local environments, containers, or file systems. * [Kubernetes Operator](/integrations/platforms/kubernetes/overview): A native controller that syncs Infisical secrets into Kubernetes as native Secrets, and supports secure workload integration. * [External Secrets Operator (ESO)](https://external-secrets.io/latest/provider/infisical): Allows Infisical to act as a backend provider for syncing secrets into Kubernetes `Secret` objects using the widely adopted External Secrets Operator. * [Kubernetes cert-manager](/documentation/platform/pki/k8s-cert-manager): A controller that issues X.509 certificates from Infisical using the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme) configured on a [certificate profile](/documentation/platform/pki/certificates/profiles) using the cert-manager Issuer and Certificate CRDs. * [Secret Syncs](/integrations/secret-syncs/overview): Native integrations to forward secrets to services like GitHub, GitLab, AWS Secrets Manager, Vercel, and more. This modular ecosystem lets teams use Infisical alongside their existing stack—without requiring opinionated workflows or lock-in. # Using Infisical: Cloud or Self-Hosted Source: https://infisical.com/docs/documentation/getting-started/concepts/deployment-models Choose between Infisical Cloud or a self-managed deployment Infisical can be used in two ways: via [Infisical Cloud](https://app.infisical.com), a managed offering, or through a self-hosted deployment within your own infrastructure. Both options provide the same core platform capabilities. The decision depends on your operational model, trust boundaries, and compliance requirements. While Infisical Cloud comes with built-in security and operational guarantees, a self-hosted deployment gives you full control—but also full responsibility for securing and maintaining the system. ## Infisical Cloud Infisical Cloud is our managed service found at [app.infisical.com](https://app.infisical.com). It includes automated updates, availability guarantees, and secure infrastructure operations. For most teams, Infisical Cloud is the recommended way to get started. It simplifies adoption by removing the need to manage deployment, scaling, or maintenance internally. Use this if: * You prefer not to operate infrastructure or handle upgrades * You require a secure, production-grade hosted service * You want to adopt Infisical with minimal operational overhead

By default, Infisical Cloud is a secure, multi-tenant service. For enterprises with stricter isolation or regulatory needs, dedicated cloud instances are available.

Contact [sales@infisical.com](mailto:sales@infisical.com) to learn more.

## Self-Hosted Infisical Infisical can also be deployed and managed within your own infrastructure. This approach provides full control over platform configuration, data storage, and operational security. In this model, your team is responsible for maintaining uptime, monitoring, patching, and integrations. Use this if: * You require complete control over data, deployment, and security posture * Your compliance model mandates self-managed or on-premise systems * You need to tightly integrate with internal tooling and infrastructure Infisical supports multiple deployment methods, including [Docker](/self-hosting/deployment-options/standalone-infisical), [Docker Compose](/self-hosting/deployment-options/docker-compose), [Kubernetes](/self-hosting/deployment-options/kubernetes-helm), and [Linux package](/self-hosting/deployment-options/native/linux-package/installation). To learn more, refer to the [self-hosting documentation](/self-hosting/overview).

The open-source core is available under the MIT license. Additional enterprise features and support are available with a commercial license.

Contact [sales@infisical.com](mailto:sales@infisical.com) to learn more.

# Platform Hierarchy Source: https://infisical.com/docs/documentation/getting-started/concepts/platform-hierarchy Understand how organizations and projects are structured in Infisical. Infisical is structured around organizations and projects, allowing teams to manage multiple products, access scopes, and use cases within a single account while keeping boundaries and responsibilities clearly defined. ## Organizations An [organization](/documentation/platform/organization) typically represents a company or high-level entity (e.g. Acme Corp). It acts as the umbrella for all projects, members, and billing settings. [Users](/documentation/platform/identities/user-identities) are invited to an organization and assigned [organization-level roles](/documentation/platform/access-controls/role-based-access-controls#organization-level-access-controls) that determine what they can manage—such as members, machine identities, and billing details. organization ## Projects A [project](/documentation/platform/project) belongs to an organization and defines a specific scope of work. Each project has a product type such as Secrets Management, SSH, or PKI that determines what features are available in that project. For example: * A Secrets Management project manages application secrets across environments. * An SSH project enables certificate-based access to infrastructure. * A PKI project manages certificate authorities and X.509 certificate workflows. Users are added to a project and assigned [project-level roles](/documentation/platform/access-controls/role-based-access-controls#project-level-access-controls) that determine what they can manage—such as secrets, access policies, or certificate authorities. A user can have different roles across projects, allowing for flexible and fine-grained access control that reflects how teams operate in practice. organization projects ## Key Characteristics * Projects are isolated in terms of configuration, permissions, and product workflows. * Access is managed independently at both the organization and project level. * All projects within an organization share the same billing and user directory. Teams can adopt Infisical incrementally—starting with one product and expanding as needed. # Platform Identity and Access Management Source: https://infisical.com/docs/documentation/getting-started/concepts/platform-iam Understand how users, machine identities, roles, and permissions are managed. Infisical uses identity-based access control to govern how users and systems interact with secrets, certificates, infrastructure, and other resources on the platform. There are two types of identities: * [User identities](/documentation/platform/identities/user-identities): Represent individuals such as developers or administrators that typically access the platform via browser. * [Machine identities](/documentation/platform/identities/machine-identities): Represent systems such as CI pipelines or applications that programmatically interact with the platform. Each identity is granted access based on its assigned roles and permissions and must authenticate with the platform in order to access any resources. To learn more, refer to the [identities documentation](/documentation/platform/identities/overview). ## Roles and Access Infisical provides a robust and flexible access control system. The primary authorization mechanism is [role-based access control (RBAC)](/documentation/platform/access-controls/role-based-access-controls), where identities are assigned roles at two access control levels: * [Organization-level access control](/documentation/platform/access-controls/role-based-access-controls#organization-level-access-controls): Control billing, member management, and platform-wide settings * [Project-level access control](/documentation/platform/access-controls/role-based-access-controls#project-level-access-controls): Control access to specific product resources like secrets, SSH hosts, or certificates Beyond RBAC, Infisical also supports additional project-level permissioning features, [including attribute-based access control (ABAC)](/documentation/platform/access-controls/abac/overview), [temporary access grants](/documentation/platform/access-controls/temporary-access), and [additional privileges](/documentation/platform/access-controls/additional-privileges) for select project types. To learn more, refer to the [access control documentation](/documentation/platform/access-controls/overview). # What is Infisical? Source: https://infisical.com/docs/documentation/getting-started/introduction The open source platform for managing secrets, certificates, and secure infrastructure access. ## What is Infisical? [Infisical](https://infisical.com) is the [open source](https://github.com/Infisical/infisical), all-in-one platform for secrets, certificates, and privileged access management. It provides modern security workflows — including secrets rotation, dynamic credentials, access approvals, and SSH certificate-based access — all within one platform designed for developers, infrastructure, and security teams. Start managing secrets securely with [Infisical Cloud](https://app.infisical.com) or learn how to [host Infisical](/self-hosting/overview) yourself. ## Why use Infisical? Managing secrets, credentials, and infrastructure access is a critical concern for engineering teams. As infrastructure scales and environments become more complex, [secrets start to sprawl](https://infisical.com/blog/what-is-secret-sprawl) — across codebases, CI/CD pipelines, configuration files, and cloud services. This makes them difficult to track, rotate, and secure. Without proper management, secret sprawl turns into risk: hardcoded credentials, unrotated keys, fragmented access controls that attackers can exploit amongst other things. Infisical addresses this challenge by providing an all-in-one platform and workflows to: * Securely store and manage application secrets from development to production. * Scan code and pipelines for exposed credentials. * Automate X.509 certificate issuance and renewal. * Manage SSH access using short-lived, policy-driven certificates. * Encrypt and decrypt sensitive data with centralized key control. * Audit every access, credential use, and change. Infisical is designed to integrate cleanly into your stack—improving security without adding complexity. ## What does Infisical include? Infisical consists of several tightly integrated products, each designed to solve a specific part of the infrastructure security surface: * [Secrets Management](/documentation/platform/secrets-mgmt/overview): Securely store, access, and distribute secrets across environments with fine-grained controls, automatic rotation, and audit logging. * [Secrets Scanning](/documentation/platform/secret-scanning/overview): Detect hardcoded secrets in code, CI pipelines, and infrastructure—integrated with GitHub, GitLab, Bitbucket, and more. * [Certificate Management](/documentation/platform/pki/overview): Issue and manage X.509 certificates using protocols like EST, with support for internal and external CAs. * [Infisical SSH](/documentation/platform/ssh/overview): Provide short-lived SSH access to servers using certificate-based authentication, replacing static keys with policy-driven, time-bound control. * [Infisical KMS](/documentation/platform/kms/overview): Encrypt and decrypt data using centrally managed keys with enforced access policies and full audit visibility. * [Infisical PAM](/documentation/platform/pam/overview): Manage access to resources like databases, servers, and accounts with policy-based controls and approvals. # Overview Source: https://infisical.com/docs/documentation/getting-started/overview The open source platform for managing secrets, certificates, and secure infrastructure access. Learn what Infisical is and how it can help you manage secrets, certificates, and secure access across your infrastructure. ## Products Securely store, manage, and control access to sensitive application secrets across your environments. Automatically detect and alert on hardcoded secrets in source code, CI pipelines, and infrastructure. Automate CA and X.509 certificate lifecycle management across your infrastructure. Replace static SSH keys with short-lived SSH certificates to simplify access and improve security. Manage access to resources like databases, servers, and accounts with policy-based controls and approvals. Encrypt and decrypt sensitive data using a centralized key management system. ## Resources Explore Infisical’s command-line interface for managing secrets, certificates, and system operations via terminal. Browse Infisical’s API documentation to programmatically interact with secrets, access controls, and certificate workflows. Learn how to deploy and operate Infisical on your own infrastructure with full control and data ownership. # Introduction Source: https://infisical.com/docs/documentation/guides/introduction Whether you're running a Node application on Heroku, Next.js application with Vercel, or Kubernetes on AWS, Infisical has a secret management strategy from local development to production ready for you. ## Guides by Language Manage secrets across your Node stack Manage secrets across your Python stack ## Guides by Stack Manage secrets for your Next.js + Vercel stack Want a guide? [Throw in a request](https://github.com/Infisical/infisical/issues). # Managing Secrets With Kubernetes Operator Source: https://infisical.com/docs/documentation/guides/kubernetes-operator How to use the Infisical Kubernetes Operator to Push Secrets, Pull Secrets, and Generate Dynamic Secrets within your clusters. Infisical's Kubernetes Operator provides a seamless, secure, and automated way to synchronize secrets between your Infisical instance and your Kubernetes clusters. The Operator's three Custom Resource Definitions (CRDs) make this possible. In this guide, we provide the necessary CRDs and configurations for your kubernetes cluster, but you can customize them to fit your use-case. In this guide, we'll walk through how to: 1. **Install the Infisical Operator on your Kubernetes cluster**. 2. **Configure Authentication using Kubernetes Service Accounts**. 3. **Use Each of the three CRDs**. * **InfisicalSecret** \[Sync secrets from Infisical to Kubernetes] * **InfisicalPushSecret** \[Sync secrets from Kubernetes to Infisical] * **InfisicalDynamicSecret** \[Manage Dynamic Secrets and automatically create time-bound leases] ## Prerequisites Before we begin, make sure your environment is ready 1. Installed tools * [helm](https://helm.sh/docs/intro/install/), [git](https://git-scm.com/downloads), [kubectl](https://kubernetes.io/docs/tasks/tools/) 2. Kubernetes Cluster * Ensure you have access to a running cluster and connect with kubectl 3. PostgreSQL Cluster (for InfisicalDynamicSecret) * Ensure you have a running database that you have access to 4. Clone [infisical-guides-source-code](https://github.com/Infisical/infisical-guides-source-code) repository 5. Access to an Infisical instance (cloud or self-hosted) ## Step-By-Step Guide The [Infisical Operator](https://infisical.com/docs/integrations/platforms/kubernetes/overview) runs inside your cluster and is responsible for handling secret synchronization events. ```console theme={"dark"} helm repo add infisical-helm-charts 'https://dl.cloudsmith.io/public/infisical/helm-charts/helm/charts/' helm repo update helm install infisical-operator infisical-helm-charts/secrets-operator ``` Verify the operator pod is running: ```console theme={"dark"} kubectl get pods -n default ``` The operator uses a [Machine Identity](https://infisical.com/docs/documentation/platform/identities/machine-identities) to authenticate with Infisical through the Kubernetes Auth Method 1. Login to [Infisical](https://app.infisical.com/) 2. Select **Organization Access** from the left navigational pane 3. Create an Identity and give it a name and a role 4. Once the Machine Identity is created, copy the **Identity ID** (will be used later) 5. Select the created Machine Identity, and add a [Kubernetes Authentication Method](https://infisical.com/docs/documentation/platform/identities/kubernetes-auth). Use these configurations: * **Allowed Service Account Names**: infisical-service-account, default * **Allowed Namespaces**: default * **Kubernetes Host URL** can be found by running `kubectl cluster-info` * **Token Reviewer JWT / CA Certificate**: We will be generating these two later and adding them in later, leave it blank for now 6. Once the Machine Identity has been created, navigate back to **Overview** 7. Now select **Add New Project** * Add a **Project Name**, and select **Secrets Management** as the product type * Add a description (Optional). 8. Once the Project is created, navigate into the Project to **Add Secrets**. You can add any key-value pair for this example, however if you want to use the InfisicalSecret CRD example provided in this demo, use the following configurations: * **Key**: SMTP\_HOST * **Value**: [smtp@gmail.com](mailto:smtp@gmail.com) * **Tags**: N/A (Not needed for this demonstration) * **Environments**: Production 9. Now lets navigate to the **Project Access** tab on the left hand navigation pane. * Add the machine identity we created, and give it Admin permissions (just for demonstration purposes) Now we will be interacting with the local repository you cloned earlier. Make sure you are in the directory that contains the yaml configurations. Assuming you are in your root user directory: ```console theme={"dark"} cd infisical-guides-source-code/kubernetes-operator-demo ``` 1. Create the `infisical-token-reviewer` service account. This Manifest creates a **service account** that the Infisical Operator uses to authenticate with Kubernetes for token reviews. It allows Infisical to validate Kubernetes tokens securely during the Machine Identity authentication process. ```console theme={"dark"} kubectl apply -f infisical-reviewer-service-account.yaml ``` 2. Create the token for the reviewer service account. This Yaml defines a **service account token secret** linked to the reviewer account created above. It generates a JWT token that Infisical uses for the Kubernetes Auth Method in your Machine Identity configuration. ```console theme={"dark"} kubectl apply -f service-account-reviewer-token.yaml ``` 3. This file binds the `infisical-token-reviewer` service account to the built-in `system:auth-delegator` ClusterRole. That role allows the service account to perform **token review** and **authentication delegation** requests on behalf of other service accounts - a key part of Kubernetes-based identity verification. Without this binding, the Infisical Operator wouldn't have permission to validate tokens. ```console theme={"dark"} kubectl apply -f cluster-role-binding.yaml ``` 4. Create the service account that will be used by the InfisicalSecret. This file creates a **dedicated service account** `infisical-service-account` that the Infisical Operator uses to access and sync secrets within your cluster. It operates as the Operator's working identity in your cluster, separate from the token reviewer. ```console theme={"dark"} kubectl apply -f infisical-service-account.yaml ``` 5. Create the token for the Infisical service account. This manifest defines a **token secret** for the `infisical-service-account`. It allows the Infisical operator to authenticate against Infisical's API when syncing secrets. The token will then be manually patched and associated with the service account to make sure Kubernetes mains it persistently. ```console theme={"dark"} kubectl apply -f infisical-service-account-token.yaml ``` 6. Apply the patch to manually associate the token secret ```console theme={"dark"} kubectl patch serviceaccount infisical-service-account -p '{"secrets": [{"name": "infisical-service-account-token"}]}' -n default ``` 7. Create the **JWT Token** and **Certificate** and add it to the **Machine Identity** we created under **Kubernetes Auth**. For the generated CA, navigate to the **Advanced** tab to paste the certificate: * JWT Command ```console theme={"dark"} kubectl get secret infisical-token-reviewer-token -n default -o jsonpath='{.data.token}' | base64 -d ``` * CA Command ```console theme={"dark"} kubectl get secret infisical-token-reviewer-token -n default -o jsonpath='{.data.ca\.crt}' | base64 -d ``` 1. Check to see if the service accounts were created ```console theme={"dark"} kubectl get serviceaccount -n default | grep infisical ``` 2. Verify the tokens were created and linked ```console theme={"dark"} kubectl get secrets -n default | grep infisical ``` The [InfisicalSecret](https://infisical.com/docs/integrations/platforms/kubernetes/infisical-secret-crd) CRD tells the operator to sync secrets from Infisical to Kubernetes. By referencing your `identityID`, `projectSlug`, and `envSlug`, this CRD tells the Infisical Operator which Infisical secrets to fetch and how to format them into a Kubernetes Secret. Make sure to edit the provided CRD to match your specific Machine Identity ID, Project ID, and which environment your secrets are being pulled from (default is prod). * **Project Slug**: Can be found when you select your project and navigate to settings * **Identity ID**: Can be found when you select your machine identity from your organization's access control 1. After editing the `example-infisical-secret-crd.yaml` to contain your demo-specific values, apply the yaml in your cluster ```console theme={"dark"} kubectl apply -f example-infisical-secret-crd.yaml ``` 1. Check that the `InfisicalSecret` was created successfully ```console theme={"dark"} kubectl get infisicalsecret -n default ``` 2. Check that the operator created the `managed-secret` ```console theme={"dark"} kubectl get secret managed-secret -n default ``` 3. View the secret contents (base64 encoded) ```console theme={"dark"} kubectl get secret managed-secret -n default -o jsonpath='{.data}' | jq ``` 1. Deploy the nginx demo deployment that will use the managed secret. ```console theme={"dark"} kubectl apply -f demo-deployment.yaml ``` 2. Wait 15-20 seconds and then verify the deployments ```console theme={"dark"} kubectl get deployments kubectl get pods -l app=nginx ``` 1. Check that the environment variable is in the running pod. If everything was successful, at this point you should be able to see the secret populate in the kubernetes pod and have a successful **sync** from Infisical to Kubernetes. ```console theme={"dark"} kubectl exec -it $(kubectl get pod -l app=nginx -o jsonpath='{.items[0].metadata.name}') -- env | grep SMTP ``` Now that we have successfully synced secrets from Infisical to Kubernetes, lets explore how we can push **Kubernetes Secrets** to Infisical. 1. Either create a **Kubernetes Secret** via yaml, or use the one in the repository. ```console theme={"dark"} kubectl apply -f source-secret.yaml ``` 2. Verify creation of the secret ```console theme={"dark"} kubectl get secret push-secret-demo -n default -o yaml ``` The [InfisicalPushSecret](https://infisical.com/docs/integrations/platforms/kubernetes/infisical-push-secret-crd) CRD tells the operator to sync secrets from Kubernetes to Infisical. Make sure you edit the CRD to include the specific **Project Slug**, and **Identity ID**. The other values present in `example-push-secret.yaml` should be configured based on the previously committed yaml configurations. 1. Apply the InfisicalPushSecret CRD provided after making the necessary changes ```console theme={"dark"} kubectl apply -f example-push-secret-crd.yaml ``` 2. Once your CRD has been configured, go back to your project within Infisical and check to see if your secrets have populated there. secrets dashboard The [InfisicalDynamicSecret](https://infisical.com/docs/integrations/platforms/kubernetes/infisical-dynamic-secret-crd) CRD allows you to sync dynamic secrets and create leases automatically in Kubernetes as native **Kubernetes Secret** resources Any Pod, Deployment, or other Kubernetes resource can make use of dynamic secrets from Infisical just like any other Kubernetes secret. 1. Navigate to your Infisical **Project** and click on the dropdown next to **Add Secret**. From here you will select **Add Dynamic Secret** * Select **SQL Database** as the service you would like to connect to. * Select **PostegreSQL** as the database service. Enter in the connection details for your database, specifically the **Host**, **Port**, **User**, **Password**, and **Database Name**. * For the **Secret Name**, if you want to use the same name as the one in the cloned **InfisicalDynamicSecret** CRD, use the name **dynamic-secret-lease**. Otherwise you will need to change the **dynamicSecret.secretName** config in the InfisicalDynamicSecret CRD to whatever you name the secret here. * In the CA (SSL) section, make sure to upload the **CA Certificate** for your database. * Finally, select **Prod** as the environment (we are keeping this configuration as part of the demonstration). secrets dashboard dynamic 2. Edit the `dynamic-secret-crd` with the proper machine **Identity ID**, **Project Slug**, **dynamicSecret.secretName** (same as the **Secret Name** you gave to the dynamic secret in Infisical), and managedSecretReference.secretName (name of the kubernetes secret that Infisical Operator will create/populate in the cluster). * If you want to keep the **managedSecretReference.secretName** then you can leave it as **dynamic-secret-test** 3. Once the changes have been saved, apply the yaml: ```console theme={"dark"} kubectl apply -f dynamic-secret-crd.yaml ``` 4. After applying the CRD, you should notice that the dynamic secret lease has been created and synced with your cluster. Verify by running: ```console theme={"dark"} kubectl get secret dynamic-secret-test -n default -o yaml ``` 5. Once the dynamic secret lease has been created, you should see that the secret has data that contains the lease credentials. dynamic secrets output **Congratulations! You successfully managed secrets with Kubernetes.** # Secret Management in Development Environments Source: https://infisical.com/docs/documentation/guides/local-development Learn how to manage secrets in local development environments. ## Problem at hand There are a number of issues that arise with secret management in local development environment: 1. **Getting secrets onto local machines**. When new developers join or a new project is created, the process of getting the development set of secrets onto local machines is often unclear. As a result, developers end up spending a lot of time onboarding and risk potentially following insecure practices when sharing secrets from one developer to another. 2. **Syncing secrets with teammates**. One of the problems with .env files is that they become unsynced when one of the developers updates a secret or configuration. Even if the rest of the team is notified, developers don't make all the right changes immediately, and later on end up spending a lot of time debugging an issue due to missing environment variables. This leads to a lot of inefficiencies and lost time. 3. **Accidentally leaking secrets**. When developing locally, it's common for developers to accidentally leak a hardcoded secret as part of a commit. As soon as the secret is part of the git history, it becomes hard to get it removed and create a security vulnerability. ## Solution One of the main benefits of Infisical is the facilitation of secret management workflows in local development use cases. In particular, Infisical heavily follows the "Security Shift Left" principle to enable developers to effortlessly follow secure practices when coding. ### CLI [Infisical CLI](/cli/overview) is the most frequently used Infisical tool for secret management in local development environments. It makes it easy to inject secrets right into the local application environments based on the permissions given to corresponding developers. ### Dashboard On top of that, Infisical provides a great [Web Dashboard](https://app.infisical.com/signup) that can be used to making quick secret updates. project dashboard ### Personal Overrides By default, all the secrets in the Infisical environments are shared among project members who have the permission to access those environment. At the same time, when doing local development, it is often desirable to change the value of a certain secret only for a particular self. For such use cases, Infisical supports the functionality of **Personal Overrides** – which allow developers to override values of any secrets without affecting the workflows of the rest of the team. Personal Overrides can be created both in the dashboard or via [Infisical CLI](/cli/overview). ### Secret Scanning In addition, Infisical also provides a set of tools to automatically prevent secret leaks to git history. This functionality can be set up on the level of [Infisical CLI using pre-commit hooks](/cli/scanning-overview#automatically-scan-changes-before-you-commit) or through a direct integration with platforms like GitHub. # Microsoft Power Apps Source: https://infisical.com/docs/documentation/guides/microsoft-power-apps Learn how to manage secrets in Microsoft Power Apps with Infisical. In recent years, there has been a shift towards so-called low-code and no-code platforms. These platforms are particularly appealing to businesses without internal development capabilities, yet teams often discover that some coding is necessary to fully satisfy their business needs. Low-code platforms have become increasingly sophisticated and useful, leading to a rise in their adoption by businesses. A prime example is Microsoft Power Apps, which offers a range of data sources and service integrations right out of the box. However, even with advanced tools, you might not always find a ready-made solution for every challenge. This means that low-code doesn't equate to no-code, as some coding and customization are still required to cater to specific needs. Consider the need for data integrations where an HTTP-based call to a web service might be necessary, typically requiring authentication through an API key or another type of secret. Importantly, it's crucial to avoid hardcoding these secrets, as they would then be accessible to anyone with collaboration rights to the code. This underscores the importance of using a secret management solution like Infisical. In this article, we'll demonstrate how to retrieve app secrets from Infisical for use in a Power Apps application. We'll create a simple application with a dedicated data connector to illustrate the ease of integrating Infisical with Power Apps. This tutorial assumes some prior programming experience in C#. Prerequisites: * Created Microsoft Power App. First, let’s create a new Azure Function using the Azure Management Portal. Get the [Function App](https://azuremarketplace.microsoft.com/en-us/marketplace/apps/Microsoft.FunctionApp?tab=Overview) from the [Azure Marketplace](https://azuremarketplace.microsoft.com/en-us/). function app Place it in a subscription using any resource group. The name of the function is arbitrary. We'll use .NET as a runtime stack, but you can use whatever you're most comfortable with. The OS choice is also up to you. While Linux may look like a lightweight solution, Windows actually has more Azure Functions support. For instance, you cannot edit a Linux-based Azure Function within the Azure management portal. By using a consumption plan, we'll only pay for the resources we use when they are requested. This is the classic “serverless” approach, where you do not pay for running servers, only for interactivity. Once the new Azure Functions instance is ready, we add a function. In this case, we can do that already from the Azure Management Portal. Use the “HTTP trigger” template and choose the “function” authorization level. The code for the first function can be as simple as: ``` using System.Net; public static async Task Run(HttpRequestMessage req, TraceWriter log) { log.Info("C# HTTP trigger function processed a request."); return req.CreateResponse(HttpStatusCode.OK, "Hello World"); } ``` The code above is written for the older runtime. As a result, you may need to change the runtime version to 1 for the Azure Power Apps integration to work. If we start at a newer version (for example, 3) this triggers a warning before the migration. Finally, we also need to publish the Swagger (or API) definitions and enable cross-origin resource sharing (CORS). While the API definitions are rather easy to set up, the correct CORS value may be tricky. For now, we can use the wildcard option to allow all hosts. Once we set all this up, it’s time to create the custom connector. You can create the custom connector via the data pane. When we use “Create from Azure Service (Preview)”, this yields a dialog similar to the following: custom-connector We can now fill out the fields using the information for our created function. The combination boxes are automatically filled in order. Once we select one of the reachable subscriptions (tied to the same account we’ve used to log in to create a Power App), the available services are displayed. Once we select our Azure Functions service, we select the function for retrieving the secret. You can add Infisical in an Azure Function quite easily using the [Infisical SDK for .NET](https://infisical.com/docs/sdks/languages/csharp) (or other languages). This enables the function to communicate with Infisical to obtain secrets, among other things. In short, we can simply bring all the necessary classes over and start using the Client class. Essentially, this enables us to write code like this: ``` var settings = new ClientSettings { ClientId = "CLIENT_ID", ClientSecret = "CLIENT_SECRET", // SiteUrl = "http://localhost:8080", <-- This line can be omitted if you're using Infisical Cloud. }; var infisical = new InfisicalClient(settings); var options = new GetSecretOptions { SecretName = "TEST", ProjectId = "PROJECT_ID", Environment = "dev", }; var secret = infisical.GetSecret(options); ``` Knowing the URL of Infisical as well as the Client Id and Client Secret, we can now access the desired values. Now it’s time to actually use the secret within a Power App. There are two ways to request a desired target service with a secret retrieved from the function: 1. Call the function first, retrieve the secret, then call the target service, for example, via another custom connector with the secret as input. 2. Perform the final API request within the function call — not returning a secret at all, just the response from invoking the target service. While the first option is more flexible (and presumably cheaper!), the second option is definitely easier. In the end, you should mostly decide based on whether the function should be reused for other purposes. If the single Power App is the only consumer of the function, it may make more sense to go with the second option. Otherwise, you should use the first option. For our simple example, we don’t need to reuse the function. We also don’t want the additional complexity of maintaining two different custom connectors, where we only use one to pass data to the other one. Based on the previous snippet, we create the following code (for proxying a GET request from an API accessible via the URL specified in the apiEndpoint variable). ``` using (var client = new HttpClient()) { client.DefaultRequestHeaders .Accept .Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Add("X-API-KEY", secret); var result = await client.GetAsync(apiEndpoint); var resultContent = await result.Content.ReadAsStringAsync(); req.CreateResponse(HttpStatusCode.OK, resultContent); } ``` This creates a request to the resource protected by an API key that is retrieved from Infisical. # Next.js + Vercel Source: https://infisical.com/docs/documentation/guides/nextjs-vercel This guide demonstrates how to use Infisical to manage secrets for your Next.js + Vercel stack from local development to production. It uses: * Infisical (you can use [Infisical Cloud](https://app.infisical.com) or a [self-hosted instance of Infisical](https://infisical.com/docs/self-hosting/overview)) to store your secrets. ## Project Setup To begin, we need to set up a project in Infisical and add secrets to an environment in it. ### Create a project 1. Create a new project in [Infisical](https://app.infisical.com/). 2. Add a secret to the development environment of this project so we can pull it back for local development. In the **Secrets Overview** page, press **Explore Development** and add a secret with the key `NEXT_PUBLIC_NAME` and value `YOUR_NAME`. 3. Add a secret to the production environment of this project so we can sync it to Vercel. Switch to the **Production** environment and add a secret with the key `NEXT_PUBLIC_NAME` and value `ANOTHER_NAME`. ## Create a Next.js app Initialize a new Node.js app. We can use `create-next-app` to initialize an app called `infisical-nextjs`. ```console theme={"dark"} npx create-next-app@latest --use-npm infisical-nextjs cd infisical-nextjs ``` ```console theme={"dark"} npx create-next-app@latest --ts --use-npm infisical-nextjs cd infisical-nextjs ``` Next, inside `pages/_app.js`, lets add a `console.log()` to print out the environment variable in the browser console. ```js theme={"dark"} import '@/styles/globals.css' export default function App({ Component, pageProps }) { console.log('Hello, ', process.env.NEXT_PUBLIC_NAME); return } ``` ```tsx theme={"dark"} import '@/styles/globals.css' import type { AppProps } from 'next/app' export default function App({ Component, pageProps }: AppProps) { console.log('Hello, ', process.env.NEXT_PUBLIC_NAME); return } ``` ## Infisical CLI for local development environment variables We'll now use the Infisical CLI to fetch secrets from Infisical into your Next.js app for local development. ### CLI Installation Follow the instructions for your operating system to install the Infisical CLI. Use [brew](https://brew.sh/) package manager ```console theme={"dark"} $ brew install infisical/get-cli/infisical ``` Use [Scoop](https://scoop.sh/) package manager ```console theme={"dark"} $ scoop bucket add org https://github.com/Infisical/scoop-infisical.git ``` ```console theme={"dark"} $ scoop install infisical ``` Install prerequisite ```console theme={"dark"} $ apk add --no-cache bash sudo ``` Add Infisical repository ```console theme={"dark"} $ curl -1sLf \ 'https://dl.cloudsmith.io/public/infisical/infisical-cli/setup.alpine.sh' \ | bash ``` Then install CLI ```console theme={"dark"} $ apk update && sudo apk add infisical ``` Add Infisical repository ```console theme={"dark"} $ curl -1sLf \ 'https://dl.cloudsmith.io/public/infisical/infisical-cli/setup.rpm.sh' \ | sudo -E bash ``` Then install CLI ```console theme={"dark"} $ sudo yum install infisical ``` Add Infisical repository ```console theme={"dark"} $ curl -1sLf \ 'https://dl.cloudsmith.io/public/infisical/infisical-cli/setup.deb.sh' \ | sudo -E bash ``` Then install CLI ```console theme={"dark"} $ sudo apt-get update && sudo apt-get install -y infisical ``` Use the `yay` package manager to install from the [Arch User Repository](https://aur.archlinux.org/packages/infisical-bin) ```console theme={"dark"} $ yay -S infisical-bin ``` ### Login Authenticate the CLI with the Infisical platform using your email and password. ```console theme={"dark"} $ infisical login ``` ### Initialization Run the `init` command at the root of the Next.js app. This step connects your local project to the project on the Infisical platform and creates a `infisical.json` file containing a reference to that latter project. ```console theme={"dark"} $ infisical init ``` ### Start the Next.js app with secrets injected as environment variables ```console theme={"dark"} $ infisical run -- npm run dev ``` If you open your browser console, **Hello, YOUR\_NAME** should be printed out. Here, the CLI fetched the secret from Infisical and injected it into the Next.js app upon starting up. By default, the CLI fetches secrets from the development environment which has the slug `dev`; you can inject secrets from different environments by modifying the `env` flag as per the [CLI documentation](/cli/usage). At this stage, you know how to use the Infisical CLI to inject secrets into your Next.js app for local development. ## Infisical-Vercel integration for production environment variables Use our [Vercel Secret Syncs](../../integrations/secret-syncs/vercel) guide to sync secrets from Infisical to Vercel as production environment variables. At this stage, you know how to use the Infisical-Vercel integration to sync production secrets from Infisical to Vercel. The following environment variable names are reserved by Vercel and cannot be synced: `AWS_SECRET_KEY`, `AWS_EXECUTION_ENV`, `AWS_LAMBDA_LOG_GROUP_NAME`, `AWS_LAMBDA_LOG_STREAM_NAME`, `AWS_LAMBDA_FUNCTION_NAME`, `AWS_LAMBDA_FUNCTION_MEMORY_SIZE`, `AWS_LAMBDA_FUNCTION_VERSION`, `NOW_REGION`, `TZ`, `LAMBDA_TASK_ROOT`, `LAMBDA_RUNTIME_DIR`, `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_SESSION_TOKEN`, `AWS_REGION`, and `AWS_DEFAULT_REGION`. ## FAQ Vercel does not specialize in secret management which means it lacks many useful features for effectively managing environment variables. Here are some features that teams benefit from by using Infisical together with Vercel: * Audit logs: See which team members are creating, reading, updating, and deleting environment variables across all environments. * Versioning and point in time recovery: Rolling back secrets and an entire project state. * Overriding secrets that should be unique amongst team members. And much more. Yes. Your secrets are still encrypted at rest. To note, most secret managers actually don't support end-to-end encryption. Check out the [security guide](/internals/security). See also: * [Documentation for the Infisical CLI](/cli/overview) * [Documentation for the Vercel Secret Sync](../../integrations/secret-syncs/vercel) # Node Source: https://infisical.com/docs/documentation/guides/node This guide demonstrates how to use Infisical to manage secrets for your Node stack from local development to production. It uses: * Infisical (you can use [Infisical Cloud](https://app.infisical.com) or a [self-hosted instance of Infisical](https://infisical.com/docs/self-hosting/overview)) to store your secrets. * The [@infisical/sdk](https://github.com/Infisical/node-sdk-v2) Node.js client SDK to fetch secrets back to your Node application on demand. ## Project Setup To begin, we need to set up a project in Infisical and add secrets to an environment in it. ### Create a project 1. Create a new project in [Infisical](https://app.infisical.com/). 2. Add a secret to the development environment of this project so we can pull it back for local development. In the **Secrets Overview** page, press **Explore Development** and add a secret with the key `NAME` and value `YOUR_NAME`. ### Create a Machine Identity Now that we've created a project and added a secret to its development environment, we need to configure an Infisical Machine Identity that our Node application can use to access the secret. * [How to setup machine identities](/documentation/platform/identities/overview) ## Create a Node app For this demonstration, we use a minimal Express application. However, the same principles will apply to any Node application such as those built on Koa or Fastify. ### Create an Express app Initialize a new Node.js project with a default `package.json` file. ```console theme={"dark"} npm init -y ``` Install `express` and [@infisical/sdk](https://www.npmjs.com/package/@infisical/sdk), the client Node SDK for Infisical. ```console theme={"dark"} npm install express @infisical/sdk ``` Finally, create an index.js file containing the application code. ```js theme={"dark"} const express = require('express'); const { InfisicalSDK } = require("@infisical/sdk"); const app = express(); const PORT = 3000; let client; const setupClient = () => { if (client) { return; } const infisicalSdk = new InfisicalSDK({ siteUrl: "your-infisical-instance.com" // Optional, defaults to https://app.infisical.com }); await infisicalSdk.auth().universalAuth.login({ clientId: "", clientSecret: "" }); // If authentication was successful, assign the client client = infisicalSdk; } app.get("/", async (req, res) => { const name = await client.secrets().getSecret({ environment: "dev", // dev, staging, prod, etc. projectId: "", secretPath: "/", secretName: "NAME" }); res.send(`Hello! My name is: ${name.secretValue}`); }); app.listen(PORT, async () => { // initialize http server and Infisical await setupClient(); console.log(`Server listening on port ${PORT}`); }); ``` Here, we initialized a `client` instance of the Infisical Node SDK with the [Machine Identity](/documentation/platform/identities/overview) that we created earlier, giving access to the secrets in the development environment of the project in Infisical that we created earlier. Finally, start the app and head to `http://localhost:3000` to see the message **Hello, Your Name**. ```console theme={"dark"} node index.js ``` The client fetched the secret with the key `NAME` from Infisical that we returned in the response of the endpoint. At this stage, you know how to fetch secrets from Infisical back to your Node application. By using Machine Identities scoped to different projects and environments, you can easily manage secrets across various stages of your project in Infisical, from local development to production. ## FAQ The SDK caches every secret and falls back to the cached value if a request fails. If no cached value ever-existed, the SDK falls back to whatever value is on `process.env`. The token enables the SDK to authenticate with Infisical to fetch back your secrets. Although the SDK requires you to pass in a token, it enables greater efficiency and security than if you managed dozens of secrets yourself without it. Here're some benefits: * You always pull in the right secrets because they're fetched on demand from a centralized source that is Infisical. * You can use the Infisical which comes with tons of benefits like secret versioning, access controls, audit logs, etc. * You now risk leaking one token that can be revoked instead of dozens of raw secrets. And much more. See also: * Explore the [Node SDK](https://github.com/Infisical/node-sdk-v2) # Infisical Organizational Structure Blueprint Source: https://infisical.com/docs/documentation/guides/organization-structure Learn how to structure your projects, secrets, and other resources within Infisical. Infisical is designed to provide comprehensive, centralized, and efficient management of secrets, certificates, and encryption keys within organizations. Below is an overview of Infisical's structured components, which developers and administrators can leverage for optimal project management and security posture. ### 0. Cluster/Instance * **Best Practice**: In most cases, a single Infisical instance or cluster is sufficient. Multiple clusters are typically only necessary for large, globally distributed organizations. * **Use Cases**: * **Cloud-hosted** deployments typically use a single cluster. While technically possible, using multiple clusters is not a common practice and is generally unnecessary. * **Self-hosted** deployments can be configured with multiple clusters if needed. ### 1. Organization * **Definition**: An Infisical [organization](/documentation/platform/organization) is a set of projects that use the same billing. * **Use Cases**: * In **self-hosted** setups, you can create multiple organizations (e.g., one for each department or business unit). * In **cloud-hosted deployments**, it's standard to use a single organization. ### 2. Projects * **Definition and Role**: [Projects](/documentation/platform/project) are the highest-level construct within an [organization](/documentation/platform/organization) in Infisical. They serve as the primary container for all functionalities. * **Common Project Mappings**: Projects typically align with applications, services, or code repositories — each being a valid and common approach depending on your organizational structure. * **Functional Capabilities**: Each project encompasses features for managing secrets, certificates, and encryption keys, serving as the central hub for these resources. Projects are isolated from one another. Secrets, certificates, and other resources cannot be shared or referenced across different projects. Each project maintains its own separate set of resources. ### 3. Environments * **Purpose**: Environments are designed for organizing and compartmentalizing secrets within projects. * **Customization Options**: Environments can be tailored to align with existing infrastructure setups of any project. Default options include **Development**, **Staging**, and **Production**. * **Structure**: Each environment inherently has a root level for storing secrets, but additional sub-organizations can be created through [folders](/documentation/platform/folder) for better secret management. ### 4. Folders * **Use Case**: Folders are available for more advanced organizational needs, allowing logical separation of secrets. * **Typical Structure**: Folders can correspond to specific logical units, such as microservices or different layers of an application, providing refined control over secrets. ### 5. Imports * **Purpose and Benefits**: To promote reusability and avoid redundancy within a project, Infisical supports the use of imports and references. This allows secrets, folders, or entire environments to be referenced within the same project as needed. * **Project Isolation**: Imports and references only work within a single project. Secrets cannot be imported or referenced across different projects, as projects are isolated from one another. * **Best Practice**: Utilizing [secret imports](/documentation/platform/secret-reference#secret-imports) or [references](/documentation/platform/secret-reference#secret-referencing) ensures consistency and minimizes manual overhead when managing secrets within a project. ### 6. Approval Workflows * **Importance**: Implementing approval workflows is recommended for organizations aiming to enhance efficiency and strengthen their security posture. * **Types of Workflows**: * **[Access Requests](/documentation/platform/pr-workflows)**: This workflow allows developers to request access to sensitive resources. Such access can be configured for temporary use, a practice known as "just-in-time" access. * **[Change Requests](/documentation/platform/access-controls/access-requests)**: Facilitates reviews and approvals when changes are proposed for sensitive environments or specific folders, ensuring proper oversight. ### 7. Access Controls Infisical’s access control framework is unified for both human users and machine identities, ensuring consistent management across the board. ### 7.1 Roles * **2 Role Types**: * **Organization-Level Roles**: Provide broad access across the organization (e.g., ability to manage billing, configure settings, etc.). * **Project-Level Roles**: Essential for configuring access to specific secrets and other sensitive assets within a project. * **Granular Permissions**: While default roles are available, [custom roles](/documentation/platform/access-controls/role-based-access-controls#creating-custom-roles) can be created for more tailored access controls. * **Admin Considerations**: Note that admin users are able to access all projects. This role should be assigned judiciously to prevent unintended overreach. Project access is defined not via an organization-level role, but rather through specific project memberships of both human and machine identities. Admin roles bypass this by default. ### 7.2 Additional Privileges [Additional privileges](/documentation/platform/access-controls/additional-privileges) can be assigned to users and machines on an ad-hoc basis for specific scenarios where roles alone are insufficient. If you find yourself using additional privileges too much, it is recommended to create custom roles. Additional privileges can be temporary or permanent. ### 7.3 Attribute-Based Access Control (ABAC) [Attribute-based Access Controls](/documentation/platform/access-controls/abac/overview) allow restrictions based on tags or attributes linked to secrets. These can be integrated with SAML assertions and other security frameworks for dynamic access management. ### 7.4 User Groups * **Application**: Organizations should use users groups in situations when they have a lot of developers with the same level of access (e.g., separated by team, department, seniority, etc.). * **Synchronization**: [User groups](/documentation/platform/groups) can be synced with an identity provider to maintain consistency and reduce manual management. ### **Implementation Note** For larger-scale organizations, automating configurations through **Terraform** or other infrastructure-as-code (IaC) tools is advisable. Manual configurations may lead to errors, so leveraging IaC enhances reliability and consistency in managing Infisical's robust capabilities. This structured approach ensures that Infisical's functionalities are fully leveraged, providing both flexibility and rigorous control over an organization's sensitive information and access needs. # Python Source: https://infisical.com/docs/documentation/guides/python This guide demonstrates how to use Infisical to manage secrets for your Python stack from local development to production. It uses: * Infisical (you can use [Infisical Cloud](https://app.infisical.com) or a [self-hosted instance of Infisical](https://infisical.com/docs/self-hosting/overview)) to store your secrets. * The [infisicalsdk](https://pypi.org/project/infisicalsdk/) Python client SDK to fetch secrets back to your Python application on demand. ## Project Setup To begin, we need to set up a project in Infisical and add secrets to an environment in it. ### Create a project 1. Create a new project in [Infisical](https://app.infisical.com/). 2. Add a secret to the development environment of this project so we can pull it back for local development. In the **Secrets Overview** page, press **Explore Development** and add a secret with the key `NAME` and value `YOUR_NAME`. ### Create a Machine Identity Now that we've created a project and added a secret to its development environment, we need to configure an Infisical Machine Identity that our Python application can use to access the secret. * [How to setup machine identities](/documentation/platform/identities/overview) ## Create a Python app For this demonstration, we use a minimal Flask application. However, the same principles will apply to any Python application such as those built with Django. ### Create a Flask app First, create a virtual environment and activate it. ```console theme={"dark"} python3 -m venv env source env/bin/activate ``` Install Flask and [infisicalsdk](https://pypi.org/project/infisicalsdk/), the client Python SDK for Infisical. ```console theme={"dark"} pip install flask infisicalsdk ``` Finally, create an `app.py` file containing the application code. ```py theme={"dark"} from flask import Flask from infisical_sdk import InfisicalSDKClient app = Flask(__name__) client = InfisicalSDKClient(host="https://app.infisical.com") # host is optional, defaults to https://app.infisical.com client.auth.universal_auth.login( "", "" ) @app.route("/") def hello_world(): # access value name = client.secrets.get_secret_by_name( secret_name="NAME", project_id="", environment_slug="dev", secret_path="/" ) return f"Hello! My name is: {name.secretValue}" ``` Here, we initialized a `client` instance of the Infisical Python SDK with the Infisical Token that we created earlier, giving access to the secrets in the development environment of the project in Infisical that we created earlier. Finally, start the app and head to `http://localhost:5000` to see the message **Hello, Your Name**. ```console theme={"dark"} flask run ``` The client fetched the secret with the key `NAME` from Infisical that we returned in the response of the endpoint. At this stage, you know how to fetch secrets from Infisical back to your Python application. By using Infisical Tokens scoped to different environments, you can easily manage secrets across various stages of your project in Infisical, from local development to production. ## FAQ The token enables the SDK to authenticate with Infisical to fetch back your secrets. Although the SDK requires you to pass in a token, it enables greater efficiency and security than if you managed dozens of secrets yourself without it. Here're some benefits: * You always pull in the right secrets because they're fetched on demand from a centralized source that is Infisical. * You can use the Infisical which comes with tons of benefits like secret versioning, access controls, audit logs, etc. * You now risk leaking one token that can be revoked instead of dozens of raw secrets. And much more. See also: * Explore the [Python SDK](https://github.com/Infisical/python-sdk-official) # Machine identities Source: https://infisical.com/docs/documentation/platform/access-controls/abac/managing-machine-identity-attributes Learn how to set metadata and leverage authentication attributes for machine identities. Machine identities can have metadata set manually, just like users. In addition, during the machine authentication process (e.g., via OIDC), extra attributes called claims—are provided, which can be used in your ABAC policies. #### Setting Metadata on Machine Identities #### Accessing Attributes From Machine Identity Login When machine identities authenticate, they may receive additional payloads/attributes from the service provider. For methods like OIDC, these come as claims in the token and can be made available in your policies. 1. Navigate to the Identity Authentication settings and select the OIDC Auth Method. 2. In the **Advanced section**, locate the Claim Mapping configuration. 3. Map the OIDC claims to permission attributes by specifying: * **Attribute Name:** The identifier to be used in your policies (e.g., department). * **Claim Path:** The dot notation path to the claim in the OIDC token (e.g., user.department). For example, if your OIDC provider returns: ```json theme={"dark"} { "sub": "machine456", "name": "Service A", "user": { "department": "engineering", "role": "service" } } ``` You might map: * **department:** to `user.department` * **role:** to `user.role` Once configured, these attributes become available in your policies using the following format: ``` {{ identity.auth.oidc.claims. }} ``` For identities authenticated using Kubernetes, the service account's namespace and name are available in their policy and can be accessed as follows: ``` {{ identity.auth.kubernetes.namespace }} {{ identity.auth.kubernetes.name }} ``` For identities authenticated using AWS Auth, several attributes can be accessed. On top of the 3 base attributes, there's 4 derived from the ARN. The example below includes comments showing how each derived attribute looks like based on this ARN: `arn:aws:iam::123456789012:user/example-user` ``` {{ identity.auth.aws.accountId }} {{ identity.auth.aws.arn }} {{ identity.auth.aws.userId }} // Derived from ARN {{ identity.auth.aws.partition }} // aws {{ identity.auth.aws.service }} // iam {{ identity.auth.aws.resourceType }} // user {{ identity.auth.aws.resourceName }} // example-user ``` At the moment we only support OIDC claims, Kubernetes attributes, and AWS attributes. Payloads on other authentication methods are not yet accessible. # Users identities Source: https://infisical.com/docs/documentation/platform/access-controls/abac/managing-user-metadata How to set and use metadata attributes on user identities for ABAC. User identities can have metadata attributes assigned directly. These attributes (such as location or department) are used to define dynamic access policies. #### Setting Metadata on Users For organizations using SAML for **user logins**, Infisical automatically maps metadata attributes from SAML assertions to user identities on every login. This enables dynamic policies based on the user's SAML attributes. #### Applying ABAC Policies with User Metadata Attribute-based access controls are currently only available for policies defined on Secrets Manager projects. You can set ABAC permissions to dynamically set access to environments, folders, secrets, and secret tags. In your policies, metadata values are accessed as follows: * **User ID:** `{{ identity.id }}` (always available) * **Username:** `{{ identity.username }}` (always available) * **Metadata Attributes:** `{{ identity.metadata. }}` (available if set) # Overview Source: https://infisical.com/docs/documentation/platform/access-controls/abac/overview Learn the basics of ABAC for both users and machine identities. Infisical's Attribute-based Access Controls (ABAC) enable dynamic, attribute-driven permissions for both users and machine identities. ABAC enforces fine-grained, context-aware access controls using metadata attributes—stored as key-value pairs—either attached to identities or provided during authentication. Manage user metadata manually or automatically via SAML logins. Set metadata manually like users and access additional attributes provided during machine authentication (for example, OIDC claims). # Access Requests Source: https://infisical.com/docs/documentation/platform/access-controls/access-requests Learn how to request access to sensitive resources in Infisical. In certain situations, developers need to expand their access to a certain new project or a sensitive environment. For those use cases, it is helpful to utilize Infisical's **Access Requests** functionality. This functionality works in the following way: 1. A project administrator sets up an access policy that assigns access managers (also known as eligible approvers) to a certain sensitive folder or environment. Create Access Request Policy Modal A step policy enables a sequential approval workflow in which approvals must follow the designated chain. Access Request Policies 2. When a developer requests access to one of such sensitive resources, the request is visible in the dashboard, and the corresponding eligible approvers get an email notification about it. Access Request Create Access Request Dashboard 3. An eligible approver can approve or reject the access request. Access Request Bypass Optionally, approvers can edit the duration of an access request to reduce how long access will be granted by clicking the **Edit** icon next to the duration. Edit Access Request If the access request matches with a policy that allows break-glass approval bypasses, the requester may bypass the policy and get access to the resource without full approval. 5. As soon as the request is approved, developer is able to access the sought resources. # Additional Privileges Source: https://infisical.com/docs/documentation/platform/access-controls/additional-privileges Learn how to add specific privileges on top of predefined roles. Even though Infisical supports full-fledged [role-base access controls](./role-based-access-controls) with ability to set predefined permissions for user and machine identities, it is sometimes desired to set additional privileges for specific user or machine identities on top of their roles. Infisical **Additional Privileges** functionality enables specific permissions with access to sensitive secrets/folders by identities within certain projects. It is possible to set up additional privileges through Web UI or API. To provision specific privileges through Web UI: 1. Click on the `Edit` button next to the set of roles for user or identities. Edit User Role 2. Click `Add Additional Privileges` in the corresponding section of the permission management modal. Add Specific Privilege 3. Fill out the necessary parameters in the privilege entry that appears. It is possible to specify the `Environment` and `Secret Path` to which you want to enable access. It is also possible to define the range of permissions (`View`, `Create`, `Modify`, `Delete`) as well as how long the access should last (e.g., permanent or timed). Additional privileges 4. Click the `Save` button to enable the additional privilege. Confirm Specific Privilege # Assume Privileges Source: https://infisical.com/docs/documentation/platform/access-controls/assume-privilege Learn how to temporarily assume the privileges of a user or machine identity within a project. This feature allows authorized users to temporarily take on the permissions of another user or identity. It helps administrators and access managers test and verify permissions before granting access, ensuring everything is set up correctly. It also reduces back-and-forth with end users when troubleshooting permission-related issues. ## How It Works When an authorized user activates assume privileges mode, they temporarily inherit the target user or identity’s permissions for up to one hour.\ During this time, they can perform actions within the system with the same level of access as the target user. * **Permission-based**: Only permissions are inherited, not the full identity * **Time-limited**: Access automatically expires after one hour * **Audited**: All actions are logged under the original user's account. This means any action taken during the session will be recorded under the entity assuming the privileges, not the target entity. * **Authorization required**: Only users with the specific **assume privilege** permission can use this feature * **Scoped to a single project**: You can only assume privileges for one project at a time ## How to Assume Privileges Click on the user or identity you want to assume. Access control page Click **Assume Privilege**, then type `assume` to confirm and start your session. Access control detail page You will see a yellow banner indicating that your assume privilege session is active. You can exit at any time by clicking **Exit**. session start # Access Controls Source: https://infisical.com/docs/documentation/platform/access-controls/overview Learn about Infisical's access control toolset. To make sure that users and machine identities are only accessing the resources and performing actions they are authorized to, Infisical supports a wide range of access control tools. Manage user and machine identitity permissions through predefined roles. Manage user and machine identitity permissions based on their attributes. Add specific privileges to users and machines on top of their roles. Grant timed access to roles and specific privileges. Enable users to request (temporary) access to sensitive resources. Set up review policies for secret changes in sensitive environments. Track every action performed by user and machine identities in Infisical. # Project Access Requests Source: https://infisical.com/docs/documentation/platform/access-controls/project-access-requests Learn how to request access to projects in Infisical. The Project Access Request feature allows users to view all projects within organization, including those they don't currently have access to. Users can request access to these projects by submitting a request that automatically notifies project administrators via email, along with any comments provided by the user. # Viewing Available Projects From the Infisical dashboard, users can view all projects within the organization: 1. Navigate to the main dashboard after logging in 2. The overview page for each product displays two tabs: * **My Projects**: Projects you currently have access to * **All Projects**: Complete list of projects in the organization all-project-view # Requesting Access to a Project To request access to a project you don't currently have access for: 1. Click the **Request Access** button next to the project name all-project-view 2. Add a comment explaining why you need access all-project-view 3. Click **Submit Request** Project administrators will receive email notification with details regarding the access request. # Role-based Access Controls Source: https://infisical.com/docs/documentation/platform/access-controls/role-based-access-controls Learn how to use RBAC to manage user permissions. Infisical's Role-based Access Controls (RBAC) enable the usage of predefined and custom roles that imply a set of permissions for user and machine identities. Such roles make it possible to restrict access to resources and the range of actions that can be performed. In general, access controls can be split up across [projects](/documentation/platform/project) and [organizations](/documentation/platform/organization). ## Organization-level access controls By default, every user and machine identity in a organization is either an **admin** or a **member**. **Admins** are able to perform every action with the organization, including adding and removing organization members, managing access controls, setting up security settings, and creating new projects. **Members**, on the other hand, are restricted from removing organization members, modifying billing information, updating access controls, and performing a number of other actions. Overall, organization-level access controls are significantly of administrative nature. Access to projects, secrets and other sensitive data is specified on the project level. Org member role ## Project-level access controls By default, every user in a project is either a **viewer**, **developer**, or an **admin**. Each of these roles comes with a varying access to different features and resources inside projects. As such: * **Admin**: This role enables identities to have access to all environments, folders, secrets, and actions within the project. * **Developers**: This role restricts identities from performing project control actions, updating Approval Workflow policies, managing roles, editing and removing project members, and more. * **Viewer**: The most limiting bulit-in role on the project level – it forbids user and machine identities to perform any action and rather shows them in the read-only mode. Project member role ## Creating custom roles By creating custom roles, you are able to adjust permissions to the needs of your organization. This can be useful for: * Creating superadmin roles, roles specific to SRE engineers, etc. * Restricting access of users to specific secrets, folders, and environments. * Embedding these specific roles into [Approval Workflow policies](/documentation/platform/pr-workflows). It is worth noting that users are able to assume multiple built-in and custom roles. A user will gain access to all actions within the roles assigned to them, not just the actions those roles share in common. project member custom role # Temporary Access Source: https://infisical.com/docs/documentation/platform/access-controls/temporary-access Learn how to set up timed access to sensitive resources for user and machine identities. Certain environments and secrets are so sensitive that it is recommended to not give any user permanent access to those. For such use cases, Infisical supports the functionality of **Temporary Access** provisioning. To provision temporary access through Web UI: 1. Click on the `Edit` button next to the set of roles for user or identities. Edit User Role 2. Click `Permanent` next to the role or specific privilege that you want to make temporary. 3. Specify the duration of remporary access (e.g., `1m`, `2h`, `3d`). Configure temp access 4. Click `Grant`. 5. Click the corresponding `Save` button to enable remporary access. Temporary Access Every user and machine identity should always have at least one permanent role attached to it. # Server Admin Console Source: https://infisical.com/docs/documentation/platform/admin-panel/server-admin Configure and manage server related features The Server Admin Console provides **server administrators** with the ability to customize settings and manage users for their entire Infisical instance. The first user to setup an account on your Infisical instance is designated as the server administrator by default. ## Accessing the Server Admin Console On the sidebar, hover over **Admin** to access the settings dropdown and press the **Server Admin Console** option. Access Server Admin Console ## General Tab Configure general settings for your instance. General Settings General Settings 1 ### Allow User Signups User signups are enabled by default, allowing **Anyone** with access to your instance to sign up. This can alternatively be **Disabled** to prevent any users from signing up. ### Restrict Signup Domain Signup can be restricted to users matching one or more email domains, such as your organization's domain, to control who has access to your instance. ### Default Organization If you're using SAML/LDAP/OIDC for only one organization on your instance, you can specify a default organization to use at login to skip requiring users to manually enter the organization slug. ### Trust Emails By default, users signing up through SAML/LDAP/OIDC will still need to verify their email address to prevent email spoofing. This requirement can be skipped by enabling the switch to trust logins through the respective method. ### Broadcast Messages Auth consent content is displayed to users on the login page. They can be used to display important information to users, such as a maintenance message or a new feature announcement. Both HTML and Markdown formatting are supported, allowing for customized styling like below: ``` **You are entering a confidential website** ``` ```html theme={"dark"}
You are entering a confidential website
``` Auth Consent Usage Page frame content is displayed as a header and footer in ALL protected pages. Like the auth consent content, both HTML and Markdown formatting are supported here as well. Page Frame Usage ## Authentication Tab From this tab, you can configure which login methods are enabled for your instance. Authentication Settings ## Rate Limit Tab This tab allows you to set various rate limits for your Infisical instance. You do not need to redeploy when making changes to rate limits as these will be propagated automatically. Rate Limit Settings Note that rate limit configuration is a paid feature. Please contact [sales@infisical.com](mailto:sales@infisical.com) to purchase a license for its use. ## User Management Tab From this tab, you can view all the users who have signed up for your instance. You can search for users using the search bar and remove them from your instance by clicking on the three dots icon on the right. Additionally, the Server Admin can grant server administrator access to other users through this menu. User Management Note that rate limit configuration is a paid feature. Please contact [sales@infisical.com](mailto:sales@infisical.com) to purchase a license for its use. # Audit Log Streams Source: https://infisical.com/docs/documentation/platform/audit-log-streams/audit-log-streams Learn how to stream Infisical Audit Logs to external logging providers. Audit log streams is a paid feature. If you're using Infisical Cloud, then it is available under the **Enterprise Tier**. If you're self-hosting Infisical, then you should contact [team@infisical.com](mailto:team@infisical.com) to purchase an enterprise license to use it. Infisical Audit Log Streaming enables you to transmit your organization's audit logs to external logging providers for monitoring and analysis. ## Overview 1. Navigate to **Organization Settings** 2. Select the **Audit Log Streams** tab 3. Click **Add Log Stream** stream create If your log provider is included in this list, select it. Otherwise click on **Custom** to input your own Endpoint URL and headers. select provider Depending on your chosen provider, you'll be asked to input different credentials. For **Custom**, you need to input an endpoint URL and headers. custom provider Once you're finished, click **Create Log Stream**. Your audit logs are now ready to be streamed. stream list ## Example Providers Infisical offers a dedicated **Azure** provider to stream your audit logs, enabling seamless integration with services like Microsoft Sentinel. After setting up all Azure resources, it may take 10-20 minutes for logs to begin streaming. Navigate to [Data Collection Endpoints](https://portal.azure.com/#view/HubsExtension/BrowseResource.ReactView/resourceType/microsoft.insights%2Fdatacollectionendpoints) and click **Create**. azure create dce Configure your Data Collection Endpoint by providing an **Endpoint Name**, **Subscription**, and a **Resource group**. Then click **Review + Create**. azure configure dce After creation, it may take a few minutes for the Data Collection Endpoint to appear. Once visible, click on it and copy the **Logs Ingestion** URL. You will need this URL in later steps. azure dce url If you already have a Log Analytics Workspace, you may skip this step. Navigate to [Log Analytics Workspaces](https://portal.azure.com/#browse/Microsoft.OperationalInsights%2Fworkspaces) and click **Create**. azure create law Configure your Log Analytics Workspace by providing a **Subscription**, **Resource group**, and a **Name**. Then click **Review + Create**. azure configure law Once the workspace is deployed, click **Go to resource** to access it. azure go to resource Within your Log Analytics Workspace, navigate to **Tables** and click **Create**. Select **New custom log (DCR-based)** from the dropdown. azure new table Configure the Custom Log Table: Provide a **Table name** (e.g., `InfisicalLogs`), select the **Data collection endpoint** created in Step 1, and create a new **Data collection rule** as illustrated in the image below. Then, click **Next**. azure configure table On the **Schema and transformation** page, you'll be prompted to upload a **Log Sample**. Create a `.json` file with the following content and upload it: ```json theme={"dark"} { "id": "00000000-0000-0000-0000-000000000000", "actor": "user", "actorMetadata": { "email": "user@example.com", "userId": "00000000-0000-0000-0000-000000000000", "username": "user@example.com" }, "ipAddress": "0.0.0.0", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36", "userAgentType": "web", "eventType": "get-secrets", "eventMetadata": {}, "projectName": "MyProject", "orgId": "00000000-0000-0000-0000-000000000000", "projectId": "00000000-0000-0000-0000-000000000000", "TimeGenerated": "2025-01-01T00:00:00.000Z" } ``` Optionally, you can add **Transformations** to further destructure the data. For example, to extract actor email and userId: ``` source | extend ActorEmail = tostring(actorMetadata.email), ActorUserId = tostring(actorMetadata.userId) ``` On the final step, click **Create**. It may take a few minutes for your Custom Log Table to be created and appear under Tables. After creating your Data Collection Rule, you'll need its **Immutable ID**. Navigate to [Data collection rules](https://portal.azure.com/#view/HubsExtension/BrowseResource.ReactView/resourceType/microsoft.insights%2Fdatacollectionrules). Click on your newly created DCR and copy its **Immutable ID** for the next step. azure dcr In Infisical, create a new audit log stream and select the **Azure** provider. Input the following details: * **Tenant ID**: Your Tenant ID * **Client ID**: The Client ID of an App Registration * **Client Secret**: The Client Secret of an App Registration * **Data Collection Endpoint URL**: Obtained from Step 1 * **Data Collection Rule Immutable ID**: Obtained from Step 4 * **Custom Log Table Name**: Defined in Step 3 azure create als The App Registration used for authentication must have the **Monitoring Metrics Publisher** role assigned on the **Data Collection Rule** created in Step 3. [See Microsoft Guide](https://learn.microsoft.com/en-us/azure/azure-monitor/logs/tutorial-logs-ingestion-portal#assign-permissions-to-the-dcr). You can stream to Better Stack using a **Custom** log stream. On Better Stack, select **Connect Source** and click **Create source** after providing a name. better stack connect source Once your source is created, take note of the **endpoint** and **Source token** for the next step. better stack connect On Infisical, create a new audit log stream and select the **Custom** option. select custom 1. Fill in the endpoint URL with your Better Stack source endpoint 2. Create a new header with key `Authorization` and set the value as `Bearer ` custom provider Once you're finished, click **Create Log Stream**. Stream Infisical audit logs to Cribl Stream for centralized processing and routing. Infisical supports Cribl as a provider for seamless integration. In Cribl Stream, navigate to **Worker Groups** and select your Worker Group. Take note of the **Ingress Address** for later steps. cribl ingress address Within your Worker Group, navigate to **Data > Sources > HTTP** and click **Add Source**. cribl add source Configure the **Input ID**, **Port**, and **Cribl HTTP event API** path (e.g., `/infisical`). Then, generate an **Auth Token**. You can optionally configure TLS in the **TLS Settings** tab and add a pipeline in the **Pre-Processing** tab. Ensure that you're using a port that's open on your instance. cribl general settings Once you've configured the Data Source, click **Save** and deploy your changes. On Infisical, create a new audit log stream and select the **Cribl** provider option. Input the following credentials: * **Cribl Stream URL**: Your HTTP source endpoint composed of `http://://_bulk` * **Cribl Stream Token**: The authentication token from Step 1 If you configured TLS for your Data Source, use the `https://` protocol. cribl details Once you're finished, click **Create Log Stream**. You can stream to Datadog using the **Datadog** provider log stream. api key create api key form api key form On Infisical, create a new audit log stream and select the **Datadog** provider option. Input your **Datadog Region** and the **Token** obtained from step 2. datadog details Once you're finished, click **Create Log Stream**. You can stream to Splunk using the **Splunk** provider log stream. Navigate to **Settings** > **Data Inputs**. splunk data inputs Click on **HTTP Event Collector**. splunk http collector Click on **New Token** in the top left. splunk new token Provide a name and click **Next**. splunk name On the next page, click **Review** and then **Submit** at the top. On the final page you'll see your token. Copy the **Token Value** and your Splunk hostname from the URL to be used for later. splunk credentials On Infisical, create a new audit log stream and select the **Splunk** provider option. Input your **Splunk Hostname** and the **Token** obtained from step 1. splunk details Once you're finished, click **Create Log Stream**. ### Example Log Entry ```created-secret.json theme={"dark"} { "id": "7dc1713b-d787-4147-9e21-770be01cc992", "actor": "user", "actorMetadata": { "email": "example@infisical.com", "userId": "7383b701-d83f-45c0-acb4-04e138b987ab", "username": "example@infisical.com" }, "ipAddress": "127.0.0.1", "eventType": "create-secret", "eventMetadata": { "secretId": "3e5c796e-6599-4181-8dca-51133bb3acd0", "secretKey": "TEST-SECRET", "secretPath": "/", "environment": "dev", "secretVersion": 1 }, "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36", "userAgentType": "web", "expiresAt": "2025-01-18T01:11:25.552Z", "createdAt": "2025-01-15T01:11:25.552Z", "updatedAt": "2025-01-15T01:11:25.552Z", "orgId": "785649f1-ff4b-4ef9-a40a-9b9878e46e57", "projectId": "09bfcc01-0917-4bea-9c7a-2d320584d5b1", "projectName": "example-project" } ``` ### Audit Logs Structure Streamed audit log structure **varies based on provider**, but they all share the audit log fields shown below. The unique identifier for the log entry. The entity responsible for performing or causing the event; this can be a user or service. The metadata associated with the actor. This varies based on the actor type. This metadata is present when the `actor` field is set to `user`. The unique identifier for the actor. The email address of the actor. The username of the actor. This metadata is present when the `actor` field is set to `identity`. The unique identifier for the identity. The name of the identity. This metadata is present when the `actor` field is set to `service`. The unique identifier for the service. The name of the service. If the `actor` field is set to `platform`, `scimClient`, or `unknownUser`, the `actorMetadata` field will be an empty object. The IP address of the actor. The type of event that occurred. Below you can see a list of possible event types. More event types will be added in the future as we expand our audit logs further. `get-secrets`, `delete-secrets`, `get-secret`, `create-secret`, `update-secret`, `delete-secret`, `get-workspace-key`, `authorize-integration`, `update-integration-auth`, `unauthorize-integration`, `create-integration`, `delete-integration`, `add-trusted-ip`, `update-trusted-ip`, `delete-trusted-ip`, `create-service-token`, `delete-service-token`, `create-identity`, `update-identity`, `delete-identity`, `login-identity-universal-auth`, `add-identity-universal-auth`, `update-identity-universal-auth`, `get-identity-universal-auth`, `create-identity-universal-auth-client-secret`, `revoke-identity-universal-auth-client-secret`, `get-identity-universal-auth-client-secret`, `create-environment`, `update-environment`, `delete-environment`, `add-workspace-member`, `remove-workspace-member`, `create-folder`, `update-folder`, `delete-folder`, `create-webhook`, `update-webhook-status`, `delete-webhook`, `webhook-triggered`, `get-secret-imports`, `create-secret-import`, `update-secret-import`, `delete-secret-import`, `update-user-workspace-role`, `update-user-workspace-denied-permissions`, `create-certificate-authority`, `get-certificate-authority`, `update-certificate-authority`, `delete-certificate-authority`, `get-certificate-authority-csr`, `get-certificate-authority-cert`, `sign-intermediate`, `import-certificate-authority-cert`, `get-certificate-authority-crl`, `issue-cert`, `get-cert`, `delete-cert`, `revoke-cert`, `get-cert-body`, `create-pki-alert`, `get-pki-alert`, `update-pki-alert`, `delete-pki-alert`, `create-pki-collection`, `get-pki-collection`, `update-pki-collection`, `delete-pki-collection`, `get-pki-collection-items`, `add-pki-collection-item`, `delete-pki-collection-item`, `org-admin-accessed-project`, `create-certificate-template`, `update-certificate-template`, `delete-certificate-template`, `get-certificate-template`, `create-certificate-template-est-config`, `update-certificate-template-est-config`, `get-certificate-template-est-config`, `update-project-slack-config`, `get-project-slack-config`, `integration-synced`, `create-shared-secret`, `delete-shared-secret`, `read-shared-secret`. The metadata associated with the event. This varies based on the event type. The user agent of the actor, if applicable. The type of user agent. The expiration date of the log entry. When this date is reached, the log entry will be deleted from Infisical. The creation date of the log entry. The last update date of the log entry. This is unlikely to be out of sync with the `createdAt` field, as we do not update log entries after they've been created. The unique identifier for the organization where the event occurred. The unique identifier for the project where the event occurred. The `projectId` field will only be present if the event occurred at the project level, not the organization level. The name of the project where the event occurred. The `projectName` field will only be present if the event occurred at the project level, not the organization level. # Stream to Non-HTTP providers Source: https://infisical.com/docs/documentation/platform/audit-log-streams/audit-log-streams-with-fluentbit How to stream Infisical Audit Logs to Non-HTTP log providers Audit log streams is a paid feature. If you're using Infisical Cloud, then it is available under the **Enterprise Tier**. If you're self-hosting Infisical, then you should contact [team@infisical.com](mailto:team@infisical.com) to purchase an enterprise license to use it. This guide will demonstrate how you can send Infisical Audit log streams to storage solutions that do not support direct HTTP-based ingestion, such as AWS S3. To achieve this, you will learn how you can use a log collector like Fluent Bit to capture and forward logs from Infisical to non-HTTP storage options. In this pattern, Fluent Bit acts as an intermediary, accepting HTTP log streams from Infisical and transforming them into a format that can be sent to your desired storage provider. ## Overview Log collectors are tools used to collect, analyze, transform, and send logs to storage. For the purposes of this guide, we will use [Fluent Bit](https://fluentbit.io) as our log collector and send logs from Infisical to AWS S3. However, this is just a example and you can use any log collector of your choice. ## Deploy Fluent Bit You can deploy Fluent Bit in one of two ways: 1. As a sidecar to your self-hosted Infisical instance 2. As a standalone service in any deployment/compute service (e.g., AWS EC2, ECS, or GCP Compute Engine) To view all deployment methods, visit the [Fluent Bit Getting Started guide](https://docs.fluentbit.io/manual/installation/getting-started-with-fluent-bit). ## Configure Fluent Bit To set up Fluent Bit, you'll need to provide a configuration file that establishes an HTTP listener and configures an output to send JSON data to your chosen storage solution. The following Fluent Bit configuration sets up an HTTP listener on port `8888` and sends logs to AWS S3: ```ini theme={"dark"} [SERVICE] Flush 1 Log_Level info Daemon off [INPUT] Name http Listen 0.0.0.0 Port 8888 [OUTPUT] Name s3 Match * bucket my-bucket region us-west-2 total_file_size 50M use_put_object Off compression gzip s3_key_format /$TAG/%Y/%m/%d/%H_%M_%S.gz ``` ### Connecting Infisical Audit Log Stream Once Fluent Bit is set up and configured, you can point the Infisical [audit log stream](/documentation/platform/audit-log-streams/audit-log-streams) to Fluent Bit's HTTP listener, which will then forward the logs to your chosen provider. Using this pattern, you are able to send Infisical Audit logs to various providers that do not support HTTP based log ingestion by default. # Overview Source: https://infisical.com/docs/documentation/platform/audit-logs Track all actions performed within Infisical Note that Audit Logs is a paid feature. If you're using Infisical Cloud, then it is available under the **Pro**, and **Enterprise Tier** with varying retention periods. If you're self-hosting Infisical, then you should contact [sales@infisical.com](mailto:sales@infisical.com) to purchase an enterprise license to use it. Infisical provides audit logs for security and compliance teams to monitor information access. With the Audit Log functionality, teams can: * **Track** 40+ different events; * **Filter** audit logs by event, actor, source, date or any combination of these filters; * **Inspect** extensive metadata in the event of any suspicious activity or incident review. Audit logs ## Audit Log Structure Each log contains the following data: | Field | Type | Description | Purpose | | ------------------------- | -------- | --------------------------------------------------------- | ------------------------------------------------------------- | | **event** | Object | Contains details about the action performed | Captures what happened | | event.type | String | The specific action that occurred (e.g., "create-secret") | Identifies the exact operation | | event.metadata | Object | Context-specific details about the event | Provides detailed information relevant to the specific action | | **actor** | Object | Information about who performed the action | Identifies the responsible entity | | actor.type | String | Category of actor (user, service, identity, etc.) | Distinguishes between human and non-human actors | | actor.metadata | Object | Details about the specific actor | Provides identity information | | actor.metadata.userId | String | Unique identifier for user actors | Links to specific user account | | actor.metadata.email | String | Email address for user actors | Email of the executing user | | actor.metadata.username | String | Username for user actors | Username of the executing user | | actor.metadata.serviceId | String | Identifier for service actors | ID of specific service token | | actor.metadata.identityId | String | Identifier for identity actors | ID to specific identity | | actor.metadata.permission | Object | Permission context for the action | Shows permission template data when action was performed | | **orgId** | String | Organization identifier | Indicates which organization the action occurred in | | **projectId** | String | Project identifier | Indicates which project the action affected | | **ipAddress** | String | Source IP address | Shows where the request originated from | | **userAgent** | String | Client application information | Identifies browser or application used | | **userAgentType** | String | Category of client (web, CLI, SDK, etc.) | Classifies the access method | | **timestamp** | DateTime | When the action occurred | Records the exact time of the event | ```json theme={"dark"} { "id": "[UUID]", "ipAddress": "[IP_ADDRESS]", "userAgent": "[USER_AGENT_STRING]", "userAgentType": "web", "expiresAt": "[TIMESTAMP]", "createdAt": "[TIMESTAMP]", "updatedAt": "[TIMESTAMP]", "orgId": "[ORGANIZATION_UUID]", "projectId": "[PROJECT_UUID]", "projectName": "[PROJECT_NAME]", "event": { "type": "get-secrets", "metadata": { "secretPath": "[PATH]", "environment": "[ENVIRONMENT_NAME]", "numberOfSecrets": [NUMBER] } }, "actor": { "type": "user", "metadata": { "email": "[EMAIL]", "userId": "[USER_UUID]", "username": "[USERNAME]", "permission": { "metadata": {}, "auth": {} } } } } ``` # Email and Password Source: https://infisical.com/docs/documentation/platform/auth-methods/email-password Learn how to authenticate into Infisical with email and password. **Email and Password** is the most common authentication method that can be used by user identities for authentication into Web Dashboard and Infisical CLI. It is recommended to utilize [Multi-factor Authentication](/documentation/platform/mfa) in addition to it. It is currently possible to use the **Email and Password** auth method to authenticate into the Web Dashboard and Infisical CLI. ### Emergency Kit Every **Email and Password** is accompanied by an emergency kit given to users during signup. If the password is lost or forgotten, emergency kit is only way to retrieve the access to your account. It is possible to generate a new emergency kit with the following steps: 1. Open the `Personal Settings` menu. open personal settings 2. Scroll down to the `Emergency Kit` section. 3. Enter your current password and click `Save`. ### Change Password You can update your account password at any time: 1. Open the `Personal Settings` menu. open personal settings 2. Navigate to the `Authentication` tab. open authentication tab 3. In the `Change Password` section, enter your current password and new password. change password section 4. Click `Save` to save your new password. ### Change Email You can update your account email address: 1. Open the `Personal Settings` menu. 2. Navigate to the `Authentication` tab. 3. In the `Change Email` section, enter your new email address. If you don't currently have Email authentication enabled, it will be automatically activated when you change your email. You may disable it in the authentication settings after logging in with your new email if needed. change email section 4\. Click `Send Verification Code` to receive an 6-digit verification code at your new email address. 5\. Check your new email inbox and enter the verification code. change email section 6\. Click `Confirm Email Change` to complete the process. 7\. You will be logged out and need to sign in again with your new email address. Changing your email will remove all connected external authentication methods and terminate all active sessions for security. Email changes are disabled if SCIM is enabled for any of your organizations. Contact your organization administrator if you need to change your email address in a SCIM-enabled environment. # AWS ElastiCache Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/aws-elasticache Learn how to dynamically generate AWS ElastiCache user credentials. The Infisical AWS ElastiCache dynamic secret allows you to generate AWS ElastiCache credentials on demand based on configured role. ## Prerequisites 2. Create an AWS IAM user with the following permissions: ```json theme={"dark"} { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Action": [ "elasticache:DescribeUsers", "elasticache:ModifyUser", "elasticache:CreateUser", "elasticache:CreateUserGroup", "elasticache:DeleteUser", "elasticache:DescribeReplicationGroups", "elasticache:DescribeUserGroups", "elasticache:ModifyReplicationGroup", "elasticache:ModifyUserGroup" ], "Resource": "arn:aws:elasticache:::user:*" } ] } ``` 3. Create an access key ID and secret access key for the user you created in the previous step. You will need these to configure the Infisical dynamic secret. New leases may take up-to a couple of minutes before ElastiCache has the chance to complete their configuration. It is recommended to use a retry strategy when establishing new ElastiCache connections. This may prevent errors when trying to use a password that isn't yet live on the targeted ElastiCache cluster. While a leasing is being created, you will be unable to create new leases for the same dynamic secret. Please ensure that your ElastiCache cluster has transit encryption enabled and set to required. This is required for the dynamic secret to work. ## Set up Dynamic Secrets with AWS ElastiCache Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal Name by which you want the secret to be referenced Default time-to-live for a generated secret (it is possible to modify this value after a secret is generated) Maximum time-to-live for a generated secret. The region that the ElastiCache cluster is located in. *(e.g. us-east-1)* This is the access key ID of the AWS IAM user you created in the prerequisites. This will be used to provision and manage the dynamic secret leases. This is the secret access key of the AWS IAM user you created in the prerequisites. This will be used to provision and manage the dynamic secret leases. A CA may be required if your DB requires it for incoming connections. This is often the case when connecting to a managed service. Modify ElastiCache Statements Modal Specifies a template for generating usernames. This field allows customization of how usernames are automatically created. Allowed template variables are * `{{randomUsername}}`: Random username string * `{{unixTimestamp}}`: Current Unix timestamp * `{{identity.name}}`: Name of the identity that is generating the secret * `{{random N}}`: Random string of N characters Allowed template functions are * `truncate`: Truncates a string to a specified length * `replace`: Replaces a substring with another value Examples: ``` {{randomUsername}} // 3POnzeFyK9gW2nioK0q2gMjr6CZqsRiX {{unixTimestamp}} // 17490641580 {{identity.name}} // testuser {{random-5}} // x9k2m {{truncate identity.name 4}} // test {{replace identity.name 'user' 'replace'}} // testreplace ``` If you want to provide specific privileges for the generated dynamic credentials, you can modify the ElastiCache statement to your needs. This is useful if you want to only give access to a specific resource. After submitting the form, you will see a dynamic secret created in the dashboard. If this step fails, you may have to add the CA certificate. Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret. Once you click the `Submit` button, a new secret lease will be generated and the credentials from it will be shown to you. Provision Lease ## Audit or Revoke Leases Once you have created one or more leases, you will be able to access them by clicking on the respective dynamic secret item on the dashboard. This will allow you to see the expiration time of the lease or delete a lease before it's set time to live. Provision Lease ## Renew Leases To extend the life of the generated dynamic secret leases past its initial time to live, simply click on the **Renew** button as illustrated below. Provision Lease Lease renewals cannot exceed the maximum TTL set when configuring the dynamic secret # AWS IAM Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/aws-iam Learn how to dynamically generate AWS IAM Users. The Infisical AWS IAM dynamic secret allows you to generate AWS IAM Users and temporary credentials on demand based on a configured AWS policy. Infisical supports several authentication methods to connect to your AWS account, including assuming an IAM Role, using IAM Roles for Service Accounts (IRSA) on EKS, or static Access Keys. ## AWS STS Duration Limits When using **Temporary Credentials**, AWS STS has specific maximum duration limits: * **AssumeRole operations**: Maximum 1 hour (3600 seconds) when using temporary credentials * **GetSessionToken operations** (Access Key & IRSA): Maximum 12 hours (43200 seconds) **Automatic Duration Adjustment**: If you specify a TTL that exceeds these AWS limits, Infisical will automatically use the maximum allowed duration instead of failing the operation. This ensures your dynamic secrets work reliably within AWS constraints. ## Prerequisite Infisical needs an AWS IAM principal (a user or a role) with the required permissions to create and manage other IAM users and temporary credentials. This principal will be responsible for the lifecycle of the dynamically generated users and temporary credentials. Required permissions for creating temporary IAM users: ```json theme={"dark"} { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:AttachUserPolicy", "iam:CreateAccessKey", "iam:CreateUser", "iam:DeleteAccessKey", "iam:DeleteUser", "iam:DeleteUserPolicy", "iam:DetachUserPolicy", "iam:GetUser", "iam:ListAccessKeys", "iam:ListAttachedUserPolicies", "iam:ListGroupsForUser", "iam:ListUserPolicies", "iam:PutUserPolicy", "iam:AddUserToGroup", "iam:RemoveUserFromGroup", "iam:TagUser" ], "Resource": ["*"] } ] } ``` To minimize managing user access you can attach a resource in format > arn:aws:iam::\:user/\ Replace **\** with your AWS account id and **\** with a path to minimize managing user access. Required permissions for Access Key and Assume Role methods: ```json theme={"dark"} { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:GetSessionToken", "sts:AssumeRole" ], "Resource": ["*"] } ] } ``` To minimize managing user access you can attach a resource in format > arn:aws:iam::\:user/\ Replace **\** with your AWS account id and **\** with a path to minimize managing user access. ## Set up Dynamic Secrets with AWS IAM Infisical will assume the provided role in your AWS account securely, without the need to share any credentials. To connect your self-hosted Infisical instance with AWS, you need to set up an AWS IAM User account that can assume the configured AWS IAM Role. If your instance is deployed on AWS, the aws-sdk will automatically retrieve the credentials. Ensure that you assign the provided permission policy to your deployed instance, such as ECS or EC2. The following steps are for instances not deployed on AWS: Navigate to [Create IAM User](https://console.aws.amazon.com/iamv2/home#/users/create) in your AWS Console. Attach the following inline permission policy to the IAM User to allow it to assume any IAM Roles: ```json theme={"dark"} { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAssumeAnyRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::*:role/*" } ] } ``` Obtain the AWS access key ID and secret access key for your IAM User by navigating to **IAM > Users > \[Your User] > Security credentials > Access keys**. Access Key Step 1 Access Key Step 2 Access Key Step 3 1. Set the access key as **DYNAMIC\_SECRET\_AWS\_ACCESS\_KEY\_ID**. 2. Set the secret key as **DYNAMIC\_SECRET\_AWS\_SECRET\_ACCESS\_KEY**. 1. Navigate to the [Create IAM Role](https://console.aws.amazon.com/iamv2/home#/roles/create?step=selectEntities) page in your AWS Console. IAM Role Creation 2. Select **AWS Account** as the **Trusted Entity Type**. 3. Select **Another AWS Account** and provide the appropriate Infisical AWS Account ID: use **381492033652** for the **US region**, and **345594589636** for the **EU region**. This restricts the role to be assumed only by Infisical. If self-hosting, provide your AWS account number instead. **For Dedicated Instances**: Your AWS account ID differs from the one provided above. Please reach out to Infisical support to obtain your AWS account ID. 4. (Recommended) Enable "Require external ID" and input your **Project ID** to strengthen security and mitigate the [confused deputy problem](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html). 5. Assign permission as shared in prerequisite. When configuring an IAM Role that Infisical will assume, it’s highly recommended to enable the **"Require external ID"** option and specify your **Project ID**. This precaution helps protect your AWS account against the [confused deputy problem](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html), a potential security vulnerability where Infisical could be tricked into performing actions on your behalf by an unauthorized actor. Always enable "Require external ID" and use your Project ID when setting up the IAM Role. Copy IAM Role ARN Navigate to the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret to. Add Dynamic Secret Button Dynamic Secret Modal Dynamic Secret Setup Modal Name by which you want the secret to be referenced Default time-to-live for a generated secret (it is possible to modify this value after a secret is generated) Maximum time-to-live for a generated secret Specifies a template for generating usernames. This field allows customization of how usernames are automatically created. Allowed template variables are * `{{randomUsername}}`: Random username string * `{{unixTimestamp}}`: Current Unix timestamp * `{{identity.name}}`: Name of the identity that is generating the secret * `{{random N}}`: Random string of N characters Allowed template functions are * `truncate`: Truncates a string to a specified length * `replace`: Replaces a substring with another value Examples: ``` {{randomUsername}} // 3POnzeFyK9gW2nioK0q2gMjr6CZqsRiX {{unixTimestamp}} // 17490641580 {{identity.name}} // testuser {{random-5}} // x9k2m {{truncate identity.name 4}} // test {{replace identity.name 'user' 'replace'}} // testreplace ``` Tags to be added to the created IAM User resource. Select *Assume Role* method. Choose the credential generation approach: * **IAM User (Default)**: Creates new temporary IAM users in your AWS account * **Temporary Credentials**: Generates temporary credentials from your role connection The ARN of the AWS Role to assume. The AWS data center region. [IAM AWS Path](https://aws.amazon.com/blogs/security/optimize-aws-administration-with-iam-paths/) to scope created IAM User resource access. The IAM Policy ARN of the [AWS Permissions Boundary](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html) to attach to IAM users created in the role. The AWS IAM groups that should be assigned to the created users. Multiple values can be provided by separating them with commas. The AWS IAM managed policies that should be attached to the created users. Multiple values can be provided by separating them with commas. The AWS IAM inline policy that should be attached to the created users. Multiple values can be provided by separating them with commas. Specifies a template for generating usernames. This field allows customization of how usernames are automatically created. Allowed template variables are: * `{{randomUsername}}`: Random username string * `{{unixTimestamp}}`: Current Unix timestamp * `{{identity.name}}`: Name of the identity that is generating the secret * `{{random N}}`: Random string of N characters Allowed template functions are: * `truncate`: Truncates a string to a specified length * `replace`: Replaces a substring with another value Tags to be added to the created IAM User resource. When **Credential Type** is set to **Temporary Credentials**: No additional configuration parameters are required. The generated credentials will: * Inherit the permissions of the assumed role * Include an AWS Session Token * Be valid for the duration specified in Default TTL **Duration Limit**: AssumeRole temporary credentials are limited to 1 hour maximum by AWS. TTL values exceeding this limit will be automatically adjusted to 1 hour. After submitting the form, you will see a dynamic secret created in the dashboard. Dynamic Secret Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret in step 4. Once you click the `Submit` button, a new secret lease will be generated and the credentials for it will be shown to you. **Credentials format depends on your chosen credential type:** **IAM User credential type:** * AWS Username * AWS Access Key ID * AWS Secret Access Key **Temporary Credentials credential type:** * AWS Access Key ID * AWS Secret Access Key * AWS Session Token Provision Lease This method is recommended for self-hosted Infisical instances running on AWS EKS. It uses [IAM Roles for Service Accounts (IRSA)](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) to securely grant permissions to the Infisical pods without managing static credentials. In order to use IRSA, the `KUBERNETES_AUTO_FETCH_SERVICE_ACCOUNT_TOKEN` environment variable must be set to `true` for your self-hosted Infisical instance. If you don't already have one, you need to create an IAM OIDC provider for your EKS cluster. This allows IAM to trust authentication tokens from your Kubernetes cluster. 1. Find your cluster's OIDC provider URL from the EKS console or by using the AWS CLI: `aws eks describe-cluster --name --query "cluster.identity.oidc.issuer" --output text` 2. Navigate to the [IAM Identity Providers](https://console.aws.amazon.com/iam/home#/providers) page in your AWS Console and create a new OpenID Connect provider with the URL and `sts.amazonaws.com` as the audience. Create OIDC Provider Placeholder 1. Navigate to the [Create IAM Role](https://console.aws.amazon.com/iamv2/home#/roles/create?step=selectEntities) page in your AWS Console. 2. Select **Web identity** as the **Trusted Entity Type**. 3. Choose the OIDC provider you created in the previous step. 4. For the **Audience**, select `sts.amazonaws.com`. IAM Role Creation for IRSA 5. Attach the permission policy detailed in the **Prerequisite** section at the top of this page. 6. After creating the role, edit its **Trust relationship** to specify the service account Infisical is using in your cluster. This ensures only the Infisical pod can assume this role. ```json theme={"dark"} { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam:::oidc-provider/oidc.eks..amazonaws.com/id/" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks..amazonaws.com/id/:sub": "system:serviceaccount::", "oidc.eks..amazonaws.com/id/:aud": "sts.amazonaws.com" } } } ] } ``` Replace ``, ``, ``, ``, and `` with your specific values. For the IRSA mechanism to work, the Infisical service account in your Kubernetes cluster must be annotated with the ARN of the IAM role you just created. Run the following command, replacing the placeholders with your values: ```bash theme={"dark"} kubectl annotate serviceaccount -n \ eks.amazonaws.com/role-arn=arn:aws:iam:::role/ ``` This annotation tells the EKS Pod Identity Webhook to inject the necessary environment variables and tokens into the Infisical pod, allowing it to assume the specified IAM role. Navigate to the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret to. Add Dynamic Secret Button Dynamic Secret Modal Dynamic Secret Setup Modal for IRSA Name by which you want the secret to be referenced Default time-to-live for a generated secret (it is possible to modify this value after a secret is generated) Maximum time-to-live for a generated secret Specifies a template for generating usernames. This field allows customization of how usernames are automatically created. Allowed template variables are * `{{randomUsername}}`: Random username string * `{{unixTimestamp}}`: Current Unix timestamp * `{{identity.name}}`: Name of the identity that is generating the secret * `{{random N}}`: Random string of N characters Allowed template functions are * `truncate`: Truncates a string to a specified length * `replace`: Replaces a substring with another value Examples: ``` {{randomUsername}} // 3POnzeFyK9gW2nioK0q2gMjr6CZqsRiX {{unixTimestamp}} // 17490641580 {{identity.name}} // testuser {{random-5}} // x9k2m {{truncate identity.name 4}} // test {{replace identity.name 'user' 'replace'}} // testreplace ``` Tags to be added to the created IAM User resource. Select *IRSA* method. Choose the credential generation approach: * **IAM User**: Creates new temporary IAM users in your AWS account * **Temporary Credentials**: Generates temporary credentials from your IRSA role connection The ARN of the AWS IAM Role for the service account to assume. The AWS data center region. [IAM AWS Path](https://aws.amazon.com/blogs/security/optimize-aws-administration-with-iam-paths/) to scope created IAM User resource access. The IAM Policy ARN of the [AWS Permissions Boundary](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html) to attach to IAM users created in the role. The AWS IAM groups that should be assigned to the created users. Multiple values can be provided by separating them with commas. The AWS IAM managed policies that should be attached to the created users. Multiple values can be provided by separating them with commas. The AWS IAM inline policy that should be attached to the created users. Multiple values can be provided by separating them with commas. Specifies a template for generating usernames. This field allows customization of how usernames are automatically created. Allowed template variables are: * `{{randomUsername}}`: Random username string * `{{unixTimestamp}}`: Current Unix timestamp * `{{identity.name}}`: Name of the identity that is generating the secret * `{{random N}}`: Random string of N characters Allowed template functions are: * `truncate`: Truncates a string to a specified length * `replace`: Replaces a substring with another value Tags to be added to the created IAM User resource. When **Credential Type** is set to **Temporary Credentials**: No additional configuration parameters are required. The generated credentials will: * Inherit the permissions of the assumed IRSA role * Include an AWS Session Token * Be valid for the duration specified in Default TTL **Duration Limit**: IRSA temporary credentials support up to 12 hours maximum via GetSessionToken. TTL values exceeding this limit will be automatically adjusted. After submitting the form, you will see a dynamic secret created in the dashboard. Dynamic Secret Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret in step 4. Once you click the `Submit` button, a new secret lease will be generated and the credentials for it will be shown to you. Provision Lease Infisical will use the provided **Access Key ID** and **Secret Key** to connect to your AWS instance. Navigate to the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret to. Add Dynamic Secret Button Dynamic Secret Modal Dynamic Secret Setup Modal Name by which you want the secret to be referenced Default time-to-live for a generated secret (it is possible to modify this value after a secret is generated) Maximum time-to-live for a generated secret Select *Access Key* method. Choose the credential generation approach: * **IAM User**: Creates new temporary IAM users in your AWS account * **Temporary Credentials**: Generates temporary credentials from your access key connection The managing AWS IAM User Access Key The managing AWS IAM User Secret Key The AWS data center region. [IAM AWS Path](https://aws.amazon.com/blogs/security/optimize-aws-administration-with-iam-paths/) to scope created IAM User resource access. The IAM Policy ARN of the [AWS Permissions Boundary](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html) to attach to IAM users created in the role. The AWS IAM groups that should be assigned to the created users. Multiple values can be provided by separating them with commas. The AWS IAM managed policies that should be attached to the created users. Multiple values can be provided by separating them with commas. The AWS IAM inline policy that should be attached to the created users. Multiple values can be provided by separating them with commas. Specifies a template for generating usernames. This field allows customization of how usernames are automatically created. Allowed template variables are: * `{{randomUsername}}`: Random username string * `{{unixTimestamp}}`: Current Unix timestamp * `{{identity.name}}`: Name of the identity that is generating the secret * `{{random N}}`: Random string of N characters Allowed template functions are: * `truncate`: Truncates a string to a specified length * `replace`: Replaces a substring with another value Tags to be added to the created IAM User resource. When **Credential Type** is set to **Temporary Credentials**: No additional configuration parameters are required. The generated credentials will: * Inherit the permissions of your access key connection * Include an AWS Session Token * Be valid for the duration specified in Default TTL **Duration Limit**: Access Key temporary credentials support up to 12 hours maximum via GetSessionToken. TTL values exceeding this limit will be automatically adjusted. After submitting the form, you will see a dynamic secret created in the dashboard. Dynamic Secret Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret in step 4. Once you click the `Submit` button, a new secret lease will be generated and the credentials for it will be shown to you. **Credentials format depends on your chosen credential type:** **IAM User credential type:** * AWS Username * AWS Access Key ID * AWS Secret Access Key **Temporary Credentials credential type:** * AWS Access Key ID * AWS Secret Access Key * AWS Session Token Provision Lease ## Audit or Revoke Leases Once you have created one or more leases, you will be able to access them by clicking on the respective dynamic secret item on the dashboard. This will allow you to see the lease details and delete the lease ahead of its expiration time. Provision Lease ## Renew Leases To extend the life of the generated dynamic secret lease past its initial time to live, simply click on the **Renew** button as illustrated below. Provision Lease Lease renewals cannot exceed the maximum TTL set when configuring the dynamic secret # Azure Entra Id Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/azure-entra-id Learn how to dynamically generate Azure Entra Id user credentials. The Infisical Azure Entra Id dynamic secret allows you to generate Azure Entra Id credentials on demand based on configured role. ## Prerequisites Login to [Microsoft Entra ID](https://entra.microsoft.com/) Go to Overview, Copy and store `Tenant Id` Copy Tenant Id Go to Applications > App registrations. Click on New Registration. Copy Tenant Id Enter an application name. Click Register. Copy and store `Application Id`. Copy Application Id Go to Clients and Secrets. Click on New Client Secret. Enter a description, select expiry and click Add. Copy and store `Client Secret` value. Copy client Secret Go to API Permissions. Click on Add a permission. Click add a permission Click on Microsoft Graph. Click Microsoft Graph Click on Application Permissions. Search and select `User.ReadWrite.All` and click Add permissions. Add User.Read.All Click on Grant admin consent for app. Click yes to confirm. Grant admin consent Go to Dashboard. Click on show more. Show more Click on Roles & admins. Search for User Administrator and click on it. User Administrator Click on Add assignments. Search for the application name you created and select it. Click on Add. Add assignments ## Set up Dynamic Secrets with Azure Entra ID Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal Prefix for the secrets to be created Default time-to-live for a generated secret (it is possible to modify this value after a secret is generated) Maximum time-to-live for a generated secret. The Tenant ID of your Azure Entra ID account. The Application ID of the application you created in Azure Entra ID. The Client Secret of the application you created in Azure Entra ID. Multi select list of users to generate secrets for. After submitting the form, you will see a dynamic secret for each user created in the dashboard. Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret. Once you click the `Submit` button, a new secret lease will be generated and the credentials from it will be shown to you. Provision Lease ## Audit or Revoke Leases Once you have created one or more leases, you will be able to access them by clicking on the respective dynamic secret item on the dashboard. This will allow you to see the expiration time of the lease or delete a lease before its set time to live. Provision Lease ## Renew Leases To extend the life of the generated dynamic secret leases past its initial time to live, simply click on the **Renew** button as illustrated below. Provision Lease Lease renewals cannot exceed the maximum TTL set when configuring the dynamic secret # Azure SQL Database Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/azure-sql-database Learn how to dynamically generate Azure SQL Database user credentials. The Infisical Azure SQL Database dynamic secret allows you to generate Azure SQL Database user credentials on demand based on configured roles. ## How Azure SQL Database Authentication Works Azure SQL Database uses a two-tier authentication system that differs from traditional SQL Server: 1. **Master Database**: Contains server-level logins that can authenticate to the Azure SQL Database server 2. **User Databases**: Individual databases that contain database users mapped to server logins When creating dynamic credentials for Azure SQL Database, Infisical performs a two-step process: 1. **Create Login in Master Database**: Creates a server-level login with the specified password 2. **Create User in Target Database**: Creates a database user mapped to the login and grants the necessary permissions This architecture ensures proper security isolation and follows Azure SQL Database best practices. ## Prerequisite Create a user with the required permissions in your Azure SQL Database instance. This user will be used to create new accounts on-demand. The user needs: * `loginmanager` role in the master database (to create logins) * `db_owner` role in the target database (to create users and grant permissions) ## Set up Dynamic Secrets with Azure SQL Database Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal Name by which you want the secret to be referenced Default time-to-live for a generated secret (it is possible to modify this value after a secret is generated) Maximum time-to-live for a generated secret List of key/value metadata pairs Azure SQL Database server hostname (e.g., myserver.database.windows.net) Database port (typically 1433 for Azure SQL Database) Username that will be used to create dynamic secrets (must have loginmanager role in master and db\_owner in target database) Password that will be used to create dynamic secrets Name of the target database where users will be created and granted permissions Enable SSL encryption for the database connection (recommended for Azure SQL Database) SSL certificate authority certificate. For Azure SQL Database, this is typically not required as Azure manages the certificates. Dynamic Secret Setup Modal Modify SQL Statements Modal Azure SQL Database dynamic secrets use predefined SQL statements that follow Azure's security best practices: SQL statement executed in the master database to create a server-level login. This login allows authentication to the Azure SQL Database server. SQL statement executed in the target database to create a database user and grant permissions. The user is mapped to the login created in the master database. SQL statements executed when a lease expires or is manually revoked. The system intelligently routes DROP USER commands to the target database and DROP LOGIN commands to the master database for proper cleanup. Specifies a template for generating usernames. This field allows customization of how usernames are automatically created. Allowed template variables are: * `{{randomUsername}}`: Random username string * `{{unixTimestamp}}`: Current Unix timestamp * `{{identity.name}}`: Name of the identity that is generating the secret * `{{random N}}`: Random string of N characters Allowed template functions are: * `truncate`: Truncates a string to a specified length * `replace`: Replaces a substring with another value Examples: ``` {{randomUsername}} // 3POnzeFyK9gW2nioK0q2gMjr6CZqsRiX {{unixTimestamp}} // 17490641580 {{identity.name}} // testuser {{random-5}} // x9k2m {{truncate identity.name 4}} // test {{replace identity.name 'user' 'replace'}} // testreplace ``` After submitting the form, you will see a dynamic secret created in the dashboard. If this step fails, ensure your user has the proper permissions in both the master database (`loginmanager` role) and target database (`db_owner` role). Dynamic Secret Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret. Once you click the `Submit` button, a new secret lease will be generated and the credentials for it will be shown to you. Provision Lease ## Audit or Revoke Leases Once you have created one or more leases, you will be able to access them by clicking on the respective dynamic secret item on the dashboard. This will allow you to see the expiration time of the lease or delete the lease before its set time to live. When a lease is revoked or expires, Infisical automatically: 1. **Drops the user** from the target database 2. **Drops the login** from the master database This ensures complete cleanup and prevents orphaned credentials. Provision Lease ## Renew Leases To extend the life of the generated dynamic secret leases past its initial time to live, simply click on the **Renew** button as illustrated below. Provision Lease Lease renewals cannot exceed the maximum TTL set when configuring the dynamic secret # Cassandra Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/cassandra Learn how to dynamically generate Cassandra database user credentials The Infisical Cassandra dynamic secret allows you to generate Cassandra database credentials on demand based on configured role. ## Prerequisite Infisical requires a Cassandra user in your instance with the necessary permissions. This user will facilitate the creation of new accounts as needed. Ensure the user possesses privileges for creating, dropping, and granting permissions to roles for it to be able to create dynamic secrets. In your Cassandra configuration file `cassandra.yaml`, make sure you have the following settings: ```yaml theme={"dark"} authenticator: PasswordAuthenticator authorizer: CassandraAuthorizer ``` The above configuration allows user creation and granting permissions. ## Set up Dynamic Secrets with Cassandra Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal Name by which you want the secret to be referenced Default time-to-live for a generated secret (it is possible to modify this value after a secret is generated) Maximum time-to-live for a generated secret Cassandra Host. You can specify multiple Cassandra hosts by separating them with commas. Cassandra port Username that will be used to create dynamic secrets Password that will be used to create dynamic secrets Specify the local data center in Cassandra that you want to use. This choice should align with your Cassandra cluster setup. Keyspace name where you want to create dynamic secrets. This ensures that the user is limited to that keyspace. A CA may be required if your cassandra requires it for incoming connections. Dynamic Secret Setup Modal Modify CQL Statements Modal Specifies a template for generating usernames. This field allows customization of how usernames are automatically created. Allowed template variables are * `{{randomUsername}}`: Random username string * `{{unixTimestamp}}`: Current Unix timestamp * `{{identity.name}}`: Name of the identity that is generating the secret * `{{random N}}`: Random string of N characters Allowed template functions are * `truncate`: Truncates a string to a specified length * `replace`: Replaces a substring with another value Examples: ``` {{randomUsername}} // 3POnzeFyK9gW2nioK0q2gMjr6CZqsRiX {{unixTimestamp}} // 17490641580 {{identity.name}} // testuser {{random-5}} // x9k2m {{truncate identity.name 4}} // test {{replace identity.name 'user' 'replace'}} // testreplace ``` If you want to provide specific privileges for the generated dynamic credentials, you can modify the CQL statement to your needs. This is useful if you want to only give access to a specific key-space(s). After submitting the form, you will see a dynamic secret created in the dashboard. If this step fails, you may have to add the CA certificate. Dynamic Secret Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret in step 4. Once you click the `Submit` button, a new secret lease will be generated and the credentials for it will be shown to you. Provision Lease ## Audit or Revoke Leases Once you have created one or more leases, you will be able to access them by clicking on the respective dynamic secret item on the dashboard. This will allow you to see the lease details and delete the lease ahead of its expiration time. Provision Lease ## Renew Leases To extend the life of the generated dynamic secret lease past its initial time to live, simply click on the **Renew** button as illustrated below. Provision Lease Lease renewals cannot exceed the maximum TTL set when configuring the dynamic secret # Couchbase Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/couchbase Learn how to dynamically generate Couchbase Database user credentials. The Infisical Couchbase dynamic secret allows you to generate Couchbase Cloud Database user credentials on demand based on configured roles and bucket access permissions. ## Prerequisite Create an API Key in your Couchbase Cloud following the [official documentation](https://docs.couchbase.com/cloud/get-started/create-account.html#create-api-key). The API Key must have permission to manage database users in your Couchbase Cloud organization and project. ## Set up Dynamic Secrets with Couchbase Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal Name by which you want the secret to be referenced Default time-to-live for a generated secret (it is possible to modify this value after a secret is generated) Maximum time-to-live for a generated secret The Couchbase Cloud API URL Your Couchbase Cloud organization ID Your Couchbase Cloud project ID Your Couchbase Cloud cluster ID where users will be created Database credential roles to assign to the generated user. Available options: * **read**: Read access to bucket data (alias for data\_reader) * **write**: Read and write access to bucket data (alias for data\_writer) Specify bucket access configuration: * Use `*` for access to all buckets * Use comma-separated bucket names (e.g., `bucket1,bucket2,bucket3`) for specific buckets * Use Advanced Bucket Configuration for granular scope and collection access Your Couchbase Cloud API Key for authentication Dynamic Secret Setup Modal Advanced Configuration Modal Enable advanced bucket configuration to specify granular access to buckets, scopes, and collections When Advanced Bucket Configuration is enabled, you can configure: List of buckets with optional scope and collection specifications: * **Bucket Name**: Name of the bucket (e.g., travel-sample) * **Scopes**: Optional array of scopes within the bucket * **Scope Name**: Name of the scope (e.g., inventory, \_default) * **Collections**: Optional array of collection names within the scope Specifies a template for generating usernames. This field allows customization of how usernames are automatically created. Allowed template variables are: * `{{randomUsername}}`: Random username string * `{{unixTimestamp}}`: Current Unix timestamp * `{{identity.name}}`: Name of the identity that is generating the secret * `{{random N}}`: Random string of N characters Allowed template functions are: * `truncate`: Truncates a string to a specified length * `replace`: Replaces a substring with another value Examples: ``` {{randomUsername}} // infisical-3POnzeFyK9gW2nioK0q2gMjr6CZqsRiX {{unixTimestamp}} // 17490641580 {{identity.name}} // testuser {{random 5}} // x9k2m {{truncate identity.name 4}} // test {{replace identity.name 'user' 'replace'}} // testreplace ``` Optional password generation requirements for Couchbase users: Length of the generated password Minimum required character counts: * **Lowercase Count**: Minimum lowercase letters (default: 1) * **Uppercase Count**: Minimum uppercase letters (default: 1) * **Digit Count**: Minimum digits (default: 1) * **Symbol Count**: Minimum special characters (default: 1) Special characters allowed in passwords. Cannot contain: `< > ; . * & | £` Couchbase password requirements: minimum 8 characters, maximum 128 characters, at least 1 uppercase, 1 lowercase, 1 digit, and 1 special character. Cannot contain: `< > ; . * & | £` After submitting the form, you will see a dynamic secret created in the dashboard. If this step fails, you may need to verify your Couchbase Cloud API key permissions and organization/project/cluster IDs. Dynamic Secret Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret. Once you click the `Submit` button, a new secret lease will be generated and the credentials for it will be shown to you. Provision Lease ## Advanced Bucket Configuration Examples The advanced bucket configuration allows you to specify granular access control: ### Example 1: Specific Bucket Access ```json theme={"dark"} [ { "name": "travel-sample" } ] ``` ### Example 2: Bucket with Specific Scopes ```json theme={"dark"} [ { "name": "travel-sample", "scopes": [ { "name": "inventory" }, { "name": "_default" } ] } ] ``` ### Example 3: Bucket with Scopes and Collections ```json theme={"dark"} [ { "name": "travel-sample", "scopes": [ { "name": "inventory", "collections": ["airport", "airline"] }, { "name": "_default", "collections": ["users"] } ] } ] ``` ## Audit or Revoke Leases Once you have created one or more leases, you will be able to access them by clicking on the respective dynamic secret item on the dashboard. This will allow you to see the expiration time of the lease or delete a lease before its set time to live. Provision Lease ## Renew Leases To extend the life of the generated dynamic secret leases past its initial time to live, simply click on the **Renew** button as illustrated below. Provision Lease Lease renewals cannot exceed the maximum TTL set when configuring the dynamic secret ## Couchbase Roles and Permissions The Couchbase dynamic secret integration supports the following database credential roles: * **read**: Provides read-only access to bucket data * **write**: Provides read and write access to bucket data These roles are specifically for database credentials and are different from Couchbase's administrative roles. They provide data-level access to buckets, scopes, and collections based on your configuration. ## Troubleshooting ### Common Issues 1. **Invalid API Key**: Ensure your Couchbase Cloud API key has the necessary permissions to manage database users 2. **Invalid Organization/Project/Cluster IDs**: Verify that the provided IDs exist and are accessible with your API key 3. **Role Permission Errors**: Make sure you're using only the supported database credential roles (read, write) 4. **Bucket Access Issues**: Ensure the specified buckets exist in your cluster and are accessible # Elasticsearch Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/elastic-search Learn how to dynamically generate Elasticsearch user credentials. The Infisical Elasticsearch dynamic secret allows you to generate Elasticsearch credentials on demand based on configured role. ## Prerequisites 1. Create a role with at least `manage_security` and `monitor` permissions. 2. Assign the newly created role to your API key or user that you'll use later in the dynamic secret configuration. For testing purposes, you can also use a highly privileged role like `superuser`, that will have full control over the cluster. This is not recommended in production environments following the principle of least privilege. ## Set up Dynamic Secrets with Elasticsearch Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal Name by which you want the secret to be referenced Default time-to-live for a generated secret (it is possible to modify this value after a secret is generated) Maximum time-to-live for a generated secret. Your Elasticsearch host. This is the endpoint that your instance runs on. *(Example: [https://your-cluster-ip](https://your-cluster-ip))* The port that your Elasticsearch instance is running on. *(Example: 9200)* The roles that the new user that is created when a lease is provisioned will be assigned to. This is a required field. This defaults to `superuser`, which is highly privileged. It is recommended to create a new role with the least privileges required for the lease. Select the authentication method you want to use to connect to your Elasticsearch instance. The username of the user that will be used to provision new dynamic secret leases. Only required if you selected the `Username/Password` authentication method. The password of the user that will be used to provision new dynamic secret leases. Only required if you selected the `Username/Password` authentication method. The ID of the API key that will be used to provision new dynamic secret leases. Only required if you selected the `API Key` authentication method. The API key that will be used to provision new dynamic secret leases. Only required if you selected the `API Key` authentication method. A CA may be required if your DB requires it for incoming connections. This is often the case when connecting to a managed service. Specifies a template for generating usernames. This field allows customization of how usernames are automatically created. Allowed template variables are * `{{randomUsername}}`: Random username string * `{{unixTimestamp}}`: Current Unix timestamp * `{{identity.name}}`: Name of the identity that is generating the secret * `{{random N}}`: Random string of N characters Allowed template functions are * `truncate`: Truncates a string to a specified length * `replace`: Replaces a substring with another value Examples: ``` {{randomUsername}} // 3POnzeFyK9gW2nioK0q2gMjr6CZqsRiX {{unixTimestamp}} // 17490641580 {{identity.name}} // testuser {{random-5}} // x9k2m {{truncate identity.name 4}} // test {{replace identity.name 'user' 'replace'}} // testreplace ``` Dynamic Secret Setup Modal After submitting the form, you will see a dynamic secret created in the dashboard. If this step fails, you may have to add the CA certificate. Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret. Once you click the `Submit` button, a new secret lease will be generated and the credentials from it will be shown to you. Provision Lease ## Audit or Revoke Leases Once you have created one or more leases, you will be able to access them by clicking on the respective dynamic secret item on the dashboard. This will allow you to see the expiration time of the lease or delete a lease before it's set time to live. Provision Lease ## Renew Leases To extend the life of the generated dynamic secret leases past its initial time to live, simply click on the **Renew** button as illustrated below. Provision Lease Lease renewals cannot exceed the maximum TTL set when configuring the dynamic secret # GCP IAM Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/gcp-iam Learn how to dynamically generate GCP service account tokens. The Infisical GCP IAM dynamic secret allows you to generate GCP service account tokens on demand based on service account permissions. GCP service account access tokens cannot be revoked. As such, revoking or regenerating a token does not invalidate the old one; it remains active until it expires. You must enable the [IAM API](https://console.cloud.google.com/apis/library/iam.googleapis.com) and [IAM Credentials API](https://console.cloud.google.com/apis/library/iamcredentials.googleapis.com) in your GCP console as a prerequisite Using the GCP integration on a self-hosted instance of Infisical requires configuring a service account on GCP and configuring your instance to use it. Service Account API Service Account IAM Page Create a new service account that will be used to impersonate other GCP service accounts for your app connections. Create Service Account Page Press "DONE" after creating the service account. Download the JSON key file for your service account. This will be used to authenticate your instance with GCP. Service Account Credential Page 1. Copy the entire contents of the downloaded JSON key file. 2. Set it as a string value for the `INF_APP_CONNECTION_GCP_SERVICE_ACCOUNT_CREDENTIAL` environment variable. 3. Restart your Infisical instance to apply the changes. 4. You can now use GCP integration with service account impersonation. ## Create GCP Service Account Service Account Page Create Service Account When you assign specific roles and permissions to this service account, any tokens generated through Infisical's dynamic secrets functionality will inherit these exact permissions. This means that applications using these dynamically generated tokens will have the same access capabilities as defined by the service account's role assignments, ensuring proper access control while maintaining the principle of least privilege. After configuring the appropriate roles, press "DONE". To enable service account impersonation, you'll need to grant the **Service Account Token Creator** role to the Infisical instance's service account. This configuration allows Infisical to securely impersonate the new service account. * Navigate to the IAM & Admin > Service Accounts section in your Google Cloud Console * Select the newly created service account * Click on the "PERMISSIONS" tab * Click "Grant Access" to add a new principal If you're using Infisical Cloud US, use the following service account: `infisical-us@infisical-us.iam.gserviceaccount.com` If you're using Infisical Cloud EU, use the following service account: `infisical-eu@infisical-eu.iam.gserviceaccount.com` If you're self-hosting, follow the "Self-Hosted Instance" guide at the top of the page and then use service account you created Service Account Page ## Set up Dynamic Secrets with GCP IAM Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal Name by which you want the secret to be referenced Default time-to-live for a generated secret (it is possible to modify this value after a secret is generated) Maximum time-to-live for a generated secret The email tied to the service account created in earlier steps. After submitting the form, you will see a dynamic secret created in the dashboard. Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret. Once you click the `Submit` button, a new secret lease will be generated and the credentials from it will be shown to you. Dynamic Secret Lease ## Audit or Revoke Leases Once you have created one or more leases, you will be able to access them by clicking on the respective dynamic secret item on the dashboard. This will allow you to see the expiration time of the lease or delete a lease before its set time to live. Lease Data ## Renew Leases To extend the life of the generated dynamic secret leases past its initial time to live, simply click on the **Renew** button as illustrated below. Lease Renew Lease renewals cannot exceed the maximum TTL set when configuring the dynamic secret # GitHub Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/github Learn how to dynamically generate GitHub App tokens. The Infisical GitHub dynamic secret allows you to generate short-lived tokens for a GitHub App on demand based on service account permissions. ## Setup GitHub App Navigate to [GitHub App settings](https://github.com/settings/apps) and click **New GitHub App**. integrations github app create Give the application a name and a homepage URL. These values do not need to be anything specific. Disable webhook by unchecking the Active checkbox. integrations github app webhook Configure the app's permissions to grant the necessary access for the dynamic secret's short-lived tokens based on your use case. Create the GitHub Application. integrations github app create confirm If you have a GitHub organization, you can create an application under it in your organization Settings > Developer settings > GitHub Apps > New GitHub App. Copy the **App ID** and generate a new **Private Key** for your GitHub Application. integrations github app create private key Save these for later steps. Install your application to whichever repositories and organizations that you want the dynamic secret to access. Install App Install App Once you've installed the app, **copy the installation ID** from the URL and save it for later steps. Install App ## Set up Dynamic Secrets with GitHub Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal Name by which you want the secret to be referenced The ID of the app created in earlier steps. The Private Key of the app created in earlier steps. The ID of the installation from earlier steps. After submitting the form, you will see a dynamic secret created in the dashboard. Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, the TTL will be fixed to 1 hour. Provision Lease Once you click the `Submit` button, a new secret lease will be generated and the credentials from it will be shown to you. Dynamic Secret Lease ## Audit or Revoke Leases Once you have created one or more leases, you will be able to access them by clicking on the respective dynamic secret item on the dashboard. This will allow you to see the expiration time of the lease or delete a lease before its set time to live. Lease Data GitHub App tokens cannot be revoked. As such, revoking a token on Infisical does not invalidate the GitHub token; it remains active until it expires. ## Renew Leases GitHub App tokens cannot be renewed because they are fixed to a lifetime of 1 hour. # Kubernetes Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/kubernetes Learn how to dynamically generate Kubernetes service account tokens. The Infisical Kubernetes dynamic secret allows you to generate short-lived service account tokens on demand. ## Overview The Kubernetes dynamic secret feature enables you to generate short-lived service account tokens for your Kubernetes clusters. This is particularly useful for: * **Secure Access Management**: Instead of using long-lived service account tokens, you can generate short-lived tokens that automatically expire, reducing the risk of token exposure. * **Temporary Access**: Generate tokens with specific TTLs (Time To Live) for temporary access to your Kubernetes clusters. * **Audit Trail**: Each token generation is tracked, providing better visibility into who accessed your cluster and when. * **Integration with Private Clusters**: Seamlessly work with private Kubernetes clusters using Infisical's Gateway feature. Kubernetes service account tokens cannot be revoked once issued. This is why it's important to use short TTLs and carefully manage token generation. The tokens will automatically expire after their TTL period. Kubernetes service account tokens are JWTs (JSON Web Tokens) with a fixed expiration time. Once a token is generated, its lifetime cannot be extended. If you need longer access, you'll need to generate a new token. This feature is ideal for scenarios where you need to: * Provide temporary access to developers or CI/CD pipelines * Rotate service account tokens frequently * Maintain a secure audit trail of cluster access * Manage access to multiple Kubernetes clusters ## Set up Dynamic Secrets with Kubernetes Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal Before proceeding with the setup, you'll need to make two key decisions: 1. **Credential Type**: How you want to manage service accounts * **Static**: Use an existing service account with predefined permissions * **Dynamic**: Create temporary service accounts with specific role assignments 2. **Authentication Method**: How you want to authenticate with the cluster * **Token (API)**: Use a service account token for direct API access * **Gateway**: Use an Infisical Gateway deployed in your cluster Static credentials generate service account tokens for a predefined service account. This is useful when you want to: * Generate tokens for an existing service account * Maintain consistent permissions across token generations * Use a service account that already has the necessary RBAC permissions ### Prerequisites * A Kubernetes cluster with a service account * Cluster access token with permissions to create service account tokens * (Optional) [Gateway](/documentation/platform/gateways/overview) for private cluster access ### Authentication Setup Choose your authentication method: This method uses a service account token to authenticate with the Kubernetes cluster. It's suitable when: * You want to use a specific service account token that you've created * You're working with a public cluster or have network access to the cluster's API server * You want to explicitly control which service account is used for operations With Token (API) authentication, Infisical uses the provided service account token to make API calls to your Kubernetes cluster. This token must have the necessary permissions to generate tokens for the target service account. 1. Create a service account: ```yaml infisical-service-account.yaml theme={"dark"} apiVersion: v1 kind: ServiceAccount metadata: name: infisical-token-requester namespace: default ``` ```bash theme={"dark"} kubectl apply -f infisical-service-account.yaml ``` 2. Set up RBAC permissions: ```yaml rbac.yaml theme={"dark"} apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: tokenrequest rules: - apiGroups: [""] resources: - "serviceaccounts/token" - "serviceaccounts" verbs: - "create" - "get" --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: tokenrequest roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: tokenrequest subjects: - kind: ServiceAccount name: infisical-token-requester namespace: default ``` ```bash theme={"dark"} kubectl apply -f rbac.yaml ``` 3. Create and obtain the token: ```yaml service-account-token.yaml theme={"dark"} apiVersion: v1 kind: Secret type: kubernetes.io/service-account-token metadata: name: infisical-token-requester-token annotations: kubernetes.io/service-account.name: "infisical-token-requester" ``` ```bash theme={"dark"} kubectl apply -f service-account-token.yaml kubectl patch serviceaccount infisical-token-requester -p '{"secrets": [{"name": "infisical-token-requester-token"}]}' -n default kubectl get secret infisical-token-requester-token -n default -o=jsonpath='{.data.token}' | base64 --decode ``` This method uses an Infisical Gateway deployed in your Kubernetes cluster. It's ideal when: * You want to avoid storing static service account tokens * You prefer to use the Gateway's pre-configured service account * You want centralized management of cluster operations With Gateway authentication, Infisical communicates with the Gateway, which then uses its own service account to make API calls to the Kubernetes API server. The Gateway's service account must have the necessary permissions to generate tokens for the target service account. When using Gateway authentication, the Gateway will access the Kubernetes API server using its internal cluster URL (typically [https://kubernetes.default.svc](https://kubernetes.default.svc)) and TLS configuration. You don't need to specify these values separately in the dynamic secret configuration. 1. Deploy the Infisical Gateway in your cluster 2. Set up RBAC permissions for the Gateway's service account: ```yaml rbac.yaml theme={"dark"} apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: tokenrequest rules: - apiGroups: [""] resources: - "serviceaccounts/token" - "serviceaccounts" verbs: - "create" - "get" --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: tokenrequest roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: tokenrequest subjects: - kind: ServiceAccount name: infisical-gateway namespace: infisical ``` ```bash theme={"dark"} kubectl apply -f rbac.yaml ``` Dynamic credentials create a temporary service account, assign it to a defined role/cluster-role, and generate a service account token. This is useful when you want to: * Create temporary service accounts with specific permissions * Automatically clean up service accounts after token expiration * Assign different roles to different users or applications * Maintain strict control over service account permissions * Support multiple namespaces with a single dynamic secret configuration ### Prerequisites * A Kubernetes cluster with a service account * Cluster access token with permissions to create service accounts and manage RBAC * (Optional) [Gateway](/documentation/platform/gateways/overview) for private cluster access ### Namespace Support When configuring a dynamic secret, you can specify multiple allowed namespaces as a comma-separated list. During lease creation, you can then specify which namespace to use from this allowed list. This provides flexibility while maintaining security by: * Allowing a single dynamic secret configuration to support multiple namespaces * Restricting service account creation to only the specified allowed namespaces * Enabling fine-grained control over which namespaces can be used for each lease For example, if you configure a dynamic secret with allowed namespaces "default,kube-system,monitoring", you can create leases that use any of these namespaces while preventing access to other namespaces in your cluster. ### Authentication Setup Choose your authentication method: This method uses a service account token to authenticate with the Kubernetes cluster. It's suitable when: * You want to use a specific service account token that you've created * You're working with a public cluster or have network access to the cluster's API server * You want to explicitly control which service account is used for operations With Token (API) authentication, Infisical uses the provided service account token to make API calls to your Kubernetes cluster. This token must have the necessary permissions to create and manage service accounts, their tokens, and RBAC resources. 1. Create a service account: ```yaml service-account.yaml theme={"dark"} apiVersion: v1 kind: ServiceAccount metadata: name: infisical-token-requester namespace: default --- apiVersion: v1 kind: Secret type: kubernetes.io/service-account-token metadata: name: infisical-token-requester-token annotations: kubernetes.io/service-account.name: "infisical-token-requester" ``` ```bash theme={"dark"} kubectl apply -f service-account.yaml ``` 2. Set up RBAC permissions: ```yaml rbac.yaml theme={"dark"} apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: tokenrequest rules: - apiGroups: [""] resources: - "serviceaccounts/token" - "serviceaccounts" verbs: - "create" - "get" - "delete" - apiGroups: ["rbac.authorization.k8s.io"] resources: - "rolebindings" - "clusterrolebindings" verbs: - "create" - "delete" --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: tokenrequest roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: tokenrequest subjects: - kind: ServiceAccount name: infisical-token-requester namespace: default --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: infisical-dynamic-role-binding-sa roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: infisical-dynamic-role subjects: - kind: ServiceAccount name: infisical-token-requester namespace: default ``` ```bash theme={"dark"} kubectl apply -f rbac.yaml ``` This method uses an Infisical Gateway deployed in your Kubernetes cluster. It's ideal when: * You want to avoid storing static service account tokens * You prefer to use the Gateway's pre-configured service account * You want centralized management of cluster operations With Gateway authentication, Infisical communicates with the Gateway, which then uses its own service account to make API calls to the Kubernetes API server. The Gateway's service account must have the necessary permissions to create and manage service accounts, their tokens, and RBAC resources. When using Gateway authentication, the Gateway will access the Kubernetes API server using its internal cluster URL (typically [https://kubernetes.default.svc](https://kubernetes.default.svc)) and TLS configuration. You don't need to specify these values separately in the dynamic secret configuration. 1. Deploy the Infisical Gateway in your cluster 2. Set up RBAC permissions for the Gateway's service account: ```yaml rbac.yaml theme={"dark"} apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: tokenrequest rules: - apiGroups: [""] resources: - "serviceaccounts/token" - "serviceaccounts" verbs: - "create" - "get" - "delete" - apiGroups: ["rbac.authorization.k8s.io"] resources: - "rolebindings" - "clusterrolebindings" verbs: - "create" - "delete" --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: tokenrequest roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: tokenrequest subjects: - kind: ServiceAccount name: infisical-gateway namespace: infisical --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: infisical-dynamic-role-binding-sa roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: infisical-dynamic-role subjects: - kind: ServiceAccount name: infisical-gateway namespace: infisical ``` ```bash theme={"dark"} kubectl apply -f rbac.yaml ``` In Kubernetes RBAC, a service account can only create role bindings for resources that it has access to. This means that if you want to create dynamic service accounts with access to certain resources, the service account creating these bindings (either the token requester or Gateway service account) must also have access to those same resources. For example, if you want to create dynamic service accounts that can access secrets, the token requester service account must also have access to secrets. Name by which you want the secret to be referenced Default time-to-live for a generated secret (it is possible to modify this value after a secret is generated) Maximum time-to-live for a generated secret Select a gateway for private cluster access. If not specified, the Internet Gateway will be used. Kubernetes API server URL (e.g., [https://kubernetes.default.svc](https://kubernetes.default.svc)). Not required when using Gateway authentication as the Gateway will use its internal cluster URL. Whether to enable SSL verification for the Kubernetes API server connection. Not required when using Gateway authentication as the Gateway will use its internal TLS configuration. Custom CA certificate for the Kubernetes API server. Leave blank to use the system/public CA. Not required when using Gateway authentication as the Gateway will use its internal TLS configuration. Choose between Token (API) or Gateway authentication. If using Gateway, the Gateway must be deployed in your Kubernetes cluster. Token with permissions to create service accounts and manage RBAC (required when using Token authentication) Choose between Static (predefined service account) or Dynamic (temporary service accounts with role assignments) Name of the service account to generate tokens for Kubernetes namespace where the service account exists Kubernetes namespace(s) where the service accounts will be created. You can specify multiple namespaces as a comma-separated list (e.g., "default,kube-system"). During lease creation, you can specify which namespace to use from this allowed list. Type of role to assign (ClusterRole or Role) Name of the role to assign to the temporary service account Optional list of audiences to include in the generated token Dynamic Secret Setup Modal Dynamic Secret Setup Modal After submitting the form, you will see a dynamic secret created in the dashboard. ## Generate and Manage Tokens Once you've successfully configured the dynamic secret, you're ready to generate on-demand service account tokens. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret. Once you click the `Submit` button, a new secret lease will be generated and the service account token will be shown to you. Provision Lease ## Audit or Revoke Leases Once you have created one or more leases, you will be able to access them by clicking on the respective dynamic secret item on the dashboard. This will allow you to see the lease details and delete the lease ahead of its expiration time. While you can delete the lease from Infisical, the actual Kubernetes service account token cannot be revoked. The token will remain valid until its TTL expires. This is why it's crucial to use appropriate TTL values when generating tokens. Provision Lease # LDAP Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/ldap Learn how to dynamically generate user credentials via LDAP. The Infisical LDAP dynamic secret allows you to generate user credentials on demand via LDAP. The integration is general to any LDAP implementation but has been tested with OpenLDAP and Active directory as of now. ## Prerequisites 1. Create a user with the necessary permissions to create users in your LDAP server. 2. Ensure your LDAP server is reachable via Infisical instance. ## Create LDAP Credentials Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal Name by which you want the secret to be referenced Default time-to-live for a generated secret (it is possible to modify this value after a secret is generated) Maximum time-to-live for a generated secret. LDAP url to connect to. *(Example: ldap\://your-ldap-ip:389 or ldaps\://domain:636)* DN to bind to. This should have permissions to create a new users. Password for the given DN. CA certificate to use for TLS in case of a secure connection. The type of LDAP credential - select Dynamic. LDIF to run while creating a user in LDAP. This can include extra steps to assign the user to groups or set permissions. Here `{{Username}}`, `{{Password}}` and `{{EncodedPassword}}` are templatized variables for the username and password generated by the dynamic secret. `{{EncodedPassword}}` is the encoded password required for the `unicodePwd` field in Active Directory as described [here](https://learn.microsoft.com/en-us/troubleshoot/windows-server/active-directory/change-windows-active-directory-user-password). **OpenLDAP** Example: ``` dn: uid={{Username}},dc=infisical,dc=com changetype: add objectClass: top objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson cn: John Doe sn: Doe uid: jdoe mail: jdoe@infisical.com userPassword: {{Password}} ``` **Active Directory** Example: ``` dn: CN={{Username}},OU=Test Create,DC=infisical,DC=com changetype: add objectClass: top objectClass: person objectClass: organizationalPerson objectClass: user userPrincipalName: {{Username}}@infisical.com sAMAccountName: {{Username}} unicodePwd::{{EncodedPassword}} userAccountControl: 66048 dn: CN=test-group,OU=Test Create,DC=infisical,DC=com changetype: modify add: member member: CN={{Username}},OU=Test Create,DC=infisical,DC=com - ``` LDIF to run while revoking a user in LDAP. This can include extra steps to remove the user from groups or set permissions. Here `{{Username}}` is a templatized variable for the username generated by the dynamic secret. **OpenLDAP / Active Directory** Example: ``` dn: CN={{Username}},OU=Test Create,DC=infisical,DC=com changetype: delete ``` LDIF to run incase Creation LDIF fails midway. For the creation example shown above, if the user is created successfully but not added to a group, this LDIF can be used to remove the user. Here `{{Username}}`, `{{Password}}` and `{{EncodedPassword}}` are templatized variables for the username generated by the dynamic secret. **OpenLDAP / Active Directory** Example: ``` dn: CN={{Username}},OU=Test Create,DC=infisical,DC=com changetype: delete ``` Specifies a template for generating usernames. This field allows customization of how usernames are automatically created. Allowed template variables are * `{{randomUsername}}`: Random username string * `{{unixTimestamp}}`: Current Unix timestamp * `{{identity.name}}`: Name of the identity that is generating the secret * `{{random N}}`: Random string of N characters Allowed template functions are * `truncate`: Truncates a string to a specified length * `replace`: Replaces a substring with another value Examples: ``` {{randomUsername}} // 3POnzeFyK9gW2nioK0q2gMjr6CZqsRiX {{unixTimestamp}} // 17490641580 {{identity.name}} // testuser {{random-5}} // x9k2m {{truncate identity.name 4}} // test {{replace identity.name 'user' 'replace'}} // testreplace ``` After submitting the form, you will see a dynamic secret created in the dashboard. Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret. Once you click the `Submit` button, a new secret lease will be generated and the credentials from it will be shown to you with an array of DN's altered depending on the Creation LDIF. Provision Lease Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal Name by which you want the secret to be referenced Default time-to-live for a generated secret (it is possible to modify this value after a secret is generated) Maximum time-to-live for a generated secret. LDAP url to connect to. *(Example: ldap\://your-ldap-ip:389 or ldaps\://domain:636)* DN to bind to. This should have permissions to create a new users. Password for the given DN. CA certificate to use for TLS in case of a secure connection. The type of LDAP credential - select Static. LDIF to run for rotating the credentals of an LDAP user. This can include extra LDAP steps based on your needs. Here `{{Password}}` and `{{EncodedPassword}}` are templatized variables for the password generated by the dynamic secret. Note that the `-` characters and the empty lines found at the end of the examples are necessary based on the LDIF format. **OpenLDAP** Example: ``` dn: cn=sheencaps capadngan,ou=people,dc=acme,dc=com changetype: modify replace: userPassword password: {{Password}} - ``` **Active Directory** Example: ``` dn: cn=sheencaps capadngan,ou=people,dc=acme,dc=com changetype: modify replace: unicodePwd unicodePwd::{{EncodedPassword}} - ``` `{{EncodedPassword}}` is the encoded password required for the `unicodePwd` field in Active Directory as described [here](https://learn.microsoft.com/en-us/troubleshoot/windows-server/active-directory/change-windows-active-directory-user-password). After submitting the form, you will see a dynamic secret created in the dashboard. Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret. Once you click the `Submit` button, a new secret lease will be generated and the credentials from it will be shown to you with an array of DN's altered depending on the Creation LDIF. Provision Lease ## Active Directory Integration * Passwords in Active Directory are set using the `unicodePwd` field. This must be proceeded by two colons `::` as shown in the example. [Source](https://learn.microsoft.com/en-us/troubleshoot/windows-server/active-directory/change-windows-active-directory-user-password) * Active directory uses the `userAccountControl` field to enable account. [Read More](https://learn.microsoft.com/en-us/troubleshoot/windows-server/active-directory/useraccountcontrol-manipulate-account-properties) * `userAccountControl` set to `512` enables a user. * To disable AD's password expiration for this dynamic user account. The `userAccountControl` value for this is: `65536`. * Since `userAccountControl` flag is cumulative set it to `512 + 65536` = `66048` to do both. * Active Directory does not permit direct modification of a user's `memberOf` attribute. The member attribute of a group and the `memberOf` attribute of a user are [linked attributes](https://learn.microsoft.com/en-us/windows/win32/ad/linked-attributes), where the member attribute represents the forward link, which can be modified. In the context of AD group membership, the group's `member` attribute serves as the forward link. Therefore, to add a newly created dynamic user to a group, a modification request must be issued to the desired group, updating its membership to include the new user. ## LDIF Entries User account management is handled through **LDIF entries**. #### Things to Remember * **No trailing spaces:** Ensure there are no trailing spaces on any line, including blank lines. * **Empty lines before modify blocks:** Every modify block must be preceded by an empty line. * **Multiple modifications:** You can define multiple modifications for a DN within a single modify block. Each modification should end with a single dash (`-`). # Mongo Atlas Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/mongo-atlas Learn how to dynamically generate Mongo Atlas Database user credentials. The Infisical Mongo Atlas dynamic secret allows you to generate Mongo Atlas Database credentials on demand based on configured role. ## Prerequisite Create a project scoped API Key with the required permission in your Mongo Atlas following the [official doc](https://www.mongodb.com/docs/atlas/configure-api-access/#grant-programmatic-access-to-a-project). The API Key must have permission to manage users in the project. ## Set up Dynamic Secrets with Mongo Atlas Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal Name by which you want the secret to be referenced Default time-to-live for a generated secret (it is possible to modify this value after a secret is generated) Maximum time-to-live for a generated secret The public key of your generated Atlas API Key. This acts as a username. The private key of your generated Atlas API Key. This acts as a password. Unique 24-hexadecimal digit string that identifies your project. This is same as project id List that provides the pairings of one role with one applicable database. * **Database Name**: Database to which the user is granted access privileges. * **Collection**: Collection on which this role applies. * **Role Name**: Human-readable label that identifies a group of privileges assigned to a database user. This value can either be a built-in role or a custom role. * Enum: `atlasAdmin` `backup` `clusterMonitor` `dbAdmin` `dbAdminAnyDatabase` `enableSharding` `read` `readAnyDatabase` `readWrite` `readWriteAnyDatabase` ``. Dynamic Secret Setup Modal Modify Scope Modal Specifies a template for generating usernames. This field allows customization of how usernames are automatically created. Allowed template variables are * `{{randomUsername}}`: Random username string * `{{unixTimestamp}}`: Current Unix timestamp * `{{identity.name}}`: Name of the identity that is generating the secret * `{{random N}}`: Random string of N characters Allowed template functions are * `truncate`: Truncates a string to a specified length * `replace`: Replaces a substring with another value Examples: ``` {{randomUsername}} // 3POnzeFyK9gW2nioK0q2gMjr6CZqsRiX {{unixTimestamp}} // 17490641580 {{identity.name}} // testuser {{random-5}} // x9k2m {{truncate identity.name 4}} // test {{replace identity.name 'user' 'replace'}} // testreplace ``` List that contains clusters, MongoDB Atlas Data Lakes, and MongoDB Atlas Streams Instances that this database user can access. If omitted, MongoDB Cloud grants the database user access to all the clusters, MongoDB Atlas Data Lakes, and MongoDB Atlas Streams Instances in the project. * **Label**: Human-readable label that identifies the cluster or MongoDB Atlas Data Lake that this database user can access. * **Type**: Category of resource that this database user can access. After submitting the form, you will see a dynamic secret created in the dashboard. If this step fails, you may have to add the CA certificate. Dynamic Secret Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret. Once you click the `Submit` button, a new secret lease will be generated and the credentials for it will be shown to you. Provision Lease ## Audit or Revoke Leases Once you have created one or more leases, you will be able to access them by clicking on the respective dynamic secret item on the dashboard. This will allow you to see the expiration time of the lease or delete a lease before it's set time to live. Provision Lease ## Renew Leases To extend the life of the generated dynamic secret leases past its initial time to live, simply click on the **Renew** button as illustrated below. Provision Lease Lease renewals cannot exceed the maximum TTL set when configuring the dynamic secret # Mongo DB Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/mongo-db Learn how to dynamically generate Mongo DB Database user credentials. The Infisical Mongo DB dynamic secret allows you to generate Mongo DB Database credentials on demand based on configured role. If your using Mongo Atlas, please use [Atlas Dynamic Secret](./mongo-atlas) as MongoDB commands are not supported by atlas. ## Prerequisite Create a user with the required permission in your MongoDB instance. This user will be used to create new accounts on-demand. ## Set up Dynamic Secrets with Mongo DB Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal Name by which you want the secret to be referenced Default time-to-live for a generated secret (it is possible to modify this value after a secret is generated) Maximum time-to-live for a generated secret Database host URL. Database port number. If your Mongo DB is cluster you can omit this. Username of the admin user that will be used to create dynamic secrets Password of the admin user that will be used to create dynamic secrets Name of the database for which you want to create dynamic secrets Human-readable label that identifies a group of privileges assigned to a database user. This value can either be a built-in role or a custom role. * Enum: `atlasAdmin` `backup` `clusterMonitor` `dbAdmin` `dbAdminAnyDatabase` `enableSharding` `read` `readAnyDatabase` `readWrite` `readWriteAnyDatabase` ``. A CA may be required if your DB requires it for incoming connections. Specifies a template for generating usernames. This field allows customization of how usernames are automatically created. Allowed template variables are * `{{randomUsername}}`: Random username string * `{{unixTimestamp}}`: Current Unix timestamp * `{{identity.name}}`: Name of the identity that is generating the secret * `{{random N}}`: Random string of N characters Allowed template functions are * `truncate`: Truncates a string to a specified length * `replace`: Replaces a substring with another value Examples: ``` {{randomUsername}} // 3POnzeFyK9gW2nioK0q2gMjr6CZqsRiX {{unixTimestamp}} // 17490641580 {{identity.name}} // testuser {{random-5}} // x9k2m {{truncate identity.name 4}} // test {{replace identity.name 'user' 'replace'}} // testreplace ``` Dynamic Secret Setup Modal After submitting the form, you will see a dynamic secret created in the dashboard. If this step fails, you may have to add the CA certificate. Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret. Once you click the `Submit` button, a new secret lease will be generated and the credentials from it will be shown to you. Provision Lease ## Audit or Revoke Leases Once you have created one or more leases, you will be able to access them by clicking on the respective dynamic secret item on the dashboard. This will allow you to see the expiration time of the lease or delete a lease before it's set time to live. Provision Lease ## Renew Leases To extend the life of the generated dynamic secret leases past its initial time to live, simply click on the **Renew** button as illustrated below. Provision Lease Lease renewals cannot exceed the maximum TTL set when configuring the dynamic secret # MS SQL Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/mssql Learn how to dynamically generate MS SQL database user credentials. The Infisical MS SQL dynamic secret allows you to generate Microsoft SQL server database credentials on demand based on configured role. ## Prerequisite Create a user with the required permission in your SQL instance. This user will be used to create new accounts on-demand. ## Set up Dynamic Secrets with MS SQL Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal Name by which you want the secret to be referenced Default time-to-live for a generated secret (it is possible to modify this value after a secret is generated) Maximum time-to-live for a generated secret List of key/value metadata pairs Choose the service you want to generate dynamic secrets for. This must be selected as **MS SQL**. Database host Database port Username that will be used to create dynamic secrets Password that will be used to create dynamic secrets Name of the database for which you want to create dynamic secrets A CA may be required if your DB requires it for incoming connections. AWS RDS instances with default settings will requires a CA which can be downloaded [here](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html#UsingWithRDS.SSL.CertificatesAllRegions). Dynamic Secret Setup Modal Modify SQL Statements Modal Specifies a template for generating usernames. This field allows customization of how usernames are automatically created. Allowed template variables are * `{{randomUsername}}`: Random username string * `{{unixTimestamp}}`: Current Unix timestamp * `{{identity.name}}`: Name of the identity that is generating the secret * `{{random N}}`: Random string of N characters Allowed template functions are * `truncate`: Truncates a string to a specified length * `replace`: Replaces a substring with another value Examples: ``` {{randomUsername}} // 3POnzeFyK9gW2nioK0q2gMjr6CZqsRiX {{unixTimestamp}} // 17490641580 {{identity.name}} // testuser {{random-5}} // x9k2m {{truncate identity.name 4}} // test {{replace identity.name 'user' 'replace'}} // testreplace ``` After submitting the form, you will see a dynamic secret created in the dashboard. If this step fails, you may have to add the CA certificate. Dynamic Secret Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret. Once you click the `Submit` button, a new secret lease will be generated and the credentials for it will be shown to you. Provision Lease ## Audit or Revoke Leases Once you have created one or more leases, you will be able to access them by clicking on the respective dynamic secret item on the dashboard. This will allow you to see the expiration time of the lease or delete the lease before it's set time to live. Provision Lease ## Renew Leases To extend the life of the generated dynamic secret leases past its initial time to live, simply click on the **Renew** button as illustrated below. Provision Lease Lease renewals cannot exceed the maximum TTL set when configuring the dynamic secret # MySQL Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/mysql Learn how to dynamically generate MySQL Database user credentials. The Infisical MySQL dynamic secret allows you to generate MySQL Database credentials on demand based on configured role. ## Prerequisite Create a user with the required permission in your SQL instance. This user will be used to create new accounts on-demand. ## Set up Dynamic Secrets with MySQL Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal Name by which you want the secret to be referenced Default time-to-live for a generated secret (it is possible to modify this value after a secret is generated) Maximum time-to-live for a generated secret List of key/value metadata pairs Choose the service you want to generate dynamic secrets for. This must be selected as **MySQL**. Database host Database port Username that will be used to create dynamic secrets Password that will be used to create dynamic secrets Name of the database for which you want to create dynamic secrets A CA may be required if your DB requires it for incoming connections. AWS RDS instances with default settings will requires a CA which can be downloaded [here](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html#UsingWithRDS.SSL.CertificatesAllRegions). Modify SQL Statements Modal Specifies a template for generating usernames. This field allows customization of how usernames are automatically created. Allowed template variables are * `{{randomUsername}}`: Random username string * `{{unixTimestamp}}`: Current Unix timestamp * `{{identity.name}}`: Name of the identity that is generating the secret * `{{random N}}`: Random string of N characters Allowed template functions are * `truncate`: Truncates a string to a specified length * `replace`: Replaces a substring with another value Examples: ``` {{randomUsername}} // 3POnzeFyK9gW2nioK0q2gMjr6CZqsRiX {{unixTimestamp}} // 17490641580 {{identity.name}} // testuser {{random-5}} // x9k2m {{truncate identity.name 4}} // test {{replace identity.name 'user' 'replace'}} // testreplace ``` After submitting the form, you will see a dynamic secret created in the dashboard. If this step fails, you may have to add the CA certificate. Dynamic Secret Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret. Once you click the `Submit` button, a new secret lease will be generated and the credentials from it will be shown to you. Provision Lease ## Audit or Revoke Leases Once you have created one or more leases, you will be able to access them by clicking on the respective dynamic secret item on the dashboard. This will allow you to see the expiration time of the lease or delete a lease before it's set time to live. Provision Lease ## Renew Leases To extend the life of the generated dynamic secret leases past its initial time to live, simply click on the **Renew** button as illustrated below. Provision Lease Lease renewals cannot exceed the maximum TTL set when configuring the dynamic secret # Oracle Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/oracle Learn how to dynamically generate Oracle Database user credentials. The Infisical Oracle dynamic secret allows you to generate Oracle Database credentials on demand based on configured role. ## Prerequisite Create a user with the required permission in your SQL instance. This user will be used to create new accounts on-demand. ## Set up Dynamic Secrets with Oracle Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal Name by which you want the secret to be referenced Default time-to-live for a generated secret (it is possible to modify this value after a secret is generated) Maximum time-to-live for a generated secret List of key/value metadata pairs Choose the service you want to generate dynamic secrets for. This must be selected as **Oracle**. Database host Database port Username that will be used to create dynamic secrets Password that will be used to create dynamic secrets Name of the database for which you want to create dynamic secrets A CA may be required if your DB requires it for incoming connections. AWS RDS instances with default settings will requires a CA which can be downloaded [here](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html#UsingWithRDS.SSL.CertificatesAllRegions). Dynamic Secret Setup Modal Modify SQL Statements Modal Specifies a template for generating usernames. This field allows customization of how usernames are automatically created. Allowed template variables are * `{{randomUsername}}`: Random username string * `{{unixTimestamp}}`: Current Unix timestamp * `{{identity.name}}`: Name of the identity that is generating the secret * `{{random N}}`: Random string of N characters Allowed template functions are * `truncate`: Truncates a string to a specified length * `replace`: Replaces a substring with another value Examples: ``` {{randomUsername}} // 3POnzeFyK9gW2nioK0q2gMjr6CZqsRiX {{unixTimestamp}} // 17490641580 {{identity.name}} // testuser {{random-5}} // x9k2m {{truncate identity.name 4}} // test {{replace identity.name 'user' 'replace'}} // testreplace ``` After submitting the form, you will see a dynamic secret created in the dashboard. If this step fails, you may have to add the CA certificate. Dynamic Secret Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret. Once you click the `Submit` button, a new secret lease will be generated and the credentials for it will be shown to you. Provision Lease ## Audit or Revoke Leases Once you have created one or more leases, you will be able to access them by clicking on the respective dynamic secret item on the dashboard. This will allow you to see the expiration time of the lease or delete a lease before it's set time to live. Provision Lease ## Renew Leases To extend the life of the generated dynamic secret leases past its initial time to live, simply click on the **Renew** button as illustrated below. Provision Lease Lease renewals cannot exceed the maximum TTL set when configuring the dynamic secret # Dynamic Secrets Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/overview Learn how to generate secrets dynamically on-demand. Note that Dynamic Secrets is a paid feature. If you're using Infisical Cloud, then it is available under the **Enterprise Tier** If you're self-hosting Infisical, then you should contact [sales@infisical.com](mailto:sales@infisical.com) to purchase an enterprise license to use it. ## Introduction Contrary to static key-value secrets, which require manual input of data into the secure Infisical storage, **dynamic secrets are generated on-demand upon access**. **Dynamic secrets are unique to every identity using them**. Such secrets come are generated only at the moment they are retrieved, eliminating the possibility of theft or reuse by another identity. Thanks to Infisical's integrated revocation capabilities, dynamic secrets can be promptly invalidated post-use, significantly reducing their lifespan. ## Benefits of Dynamic Secrets This approach offers several advantages in terms of security and management: * **Enhanced Security**: By frequently changing secrets, dynamic secrets minimize the risk associated with secret compromise. Even if an attacker manages to obtain a secret, it would likely be invalid by the time they attempt to use it. * **Reduced Secret Lifetime**: The limited validity period of dynamic secrets means that they are less valuable targets for attackers. This inherently reduces the time window during which a secret can be exploited. * **Automated Management**: Dynamic secrets enable automated systems to handle the generation, distribution, revocation, and rotation of secrets without human intervention, thus reducing the risk of human error. * **Auditing and Traceability**: The generation of dynamic secrets can be tightly controlled and monitored. This allows for detailed auditing of who accessed what secret and when, improving overall security posture and compliance with regulatory standards. * **Scalability**: Dynamic secret management systems can scale more effectively to handle a large number of services and applications, as they automate much of the overhead associated with manual secret management. Dynamic secrets are particularly useful in environments with stringent security requirements, such as cloud environments, distributed systems, and microservices architectures, where they help to manage database credentials, API keys, tokens, and other types of secrets. ## Infisical Dynamic Secret Templates 1. [PostgreSQL](./postgresql) 2. [MySQL](./mysql) 3. [Cassandra](./cassandra) 4. [Oracle](./oracle) 5. [Redis](./redis) 6. [AWS IAM](./aws-iam) **FAQ** This usually happens when the SQL statements defined for creating or revoking the secret are not compatible with your database provider. Different SQL engines have different expectations for quoting identifiers and values. For example, some use backticks (`` `username` ``), others use single quotes (`'username'`), and some expect double quotes (`"username"`). A statement that works on one provider might fail on another. **Recommendation:**\ Make sure to adjust your SQL statements to follow the syntax required by your specific database provider. Always test them directly on your target database to ensure they execute without errors. # PostgreSQL Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/postgresql Learn how to dynamically generate PostgreSQL database users. The Infisical PostgreSQL dynamic secret allows you to generate PostgreSQL database credentials on demand based on configured role. ## Prerequisite Create a user with the required permission in your SQL instance. This user will be used to create new accounts on-demand. ## Set up Dynamic Secrets with PostgreSQL Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal Name by which you want the secret to be referenced Default time-to-live for a generated secret (it is possible to modify this value after a secret is generated) Maximum time-to-live for a generated secret List of key/value metadata pairs Choose the service you want to generate dynamic secrets for. This must be selected as **PostgreSQL**. Database host Database port Username that will be used to create dynamic secrets Password that will be used to create dynamic secrets Name of the database for which you want to create dynamic secrets A CA may be required if your DB requires it for incoming connections. AWS RDS instances with default settings will requires a CA which can be downloaded [here](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html#UsingWithRDS.SSL.CertificatesAllRegions). Dynamic Secret Setup Modal Modify SQL Statements Modal Specifies a template for generating usernames. This field allows customization of how usernames are automatically created. Allowed template variables are * `{{randomUsername}}`: Random username string * `{{unixTimestamp}}`: Current Unix timestamp * `{{identity.name}}`: Name of the identity that is generating the secret * `{{random N}}`: Random string of N characters Allowed template functions are * `truncate`: Truncates a string to a specified length * `replace`: Replaces a substring with another value Examples: ``` {{randomUsername}} // 3POnzeFyK9gW2nioK0q2gMjr6CZqsRiX {{unixTimestamp}} // 17490641580 {{identity.name}} // testuser {{random-5}} // x9k2m {{truncate identity.name 4}} // test {{replace identity.name 'user' 'replace'}} // testreplace ``` If you want to provide specific privileges for the generated dynamic credentials, you can modify the SQL statement to your needs. This is useful if you want to only give access to a specific table(s). After submitting the form, you will see a dynamic secret created in the dashboard. If this step fails, you may have to add the CA certificate. Dynamic Secret Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret. Once you click the `Submit` button, a new secret lease will be generated and the credentials for it will be shown to you. Provision Lease ## Audit or Revoke Leases Once you have created one or more leases, you will be able to access them by clicking on the respective dynamic secret item on the dashboard. This will allow you to see the expiration time of the lease or delete the lease before it's set time to live. Provision Lease ## Renew Leases To extend the life of the generated dynamic secret leases past its initial time to live, simply click on the **Renew** button as illustrated below. Provision Lease Lease renewals cannot exceed the maximum TTL set when configuring the dynamic secret # RabbitMQ Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/rabbit-mq Learn how to dynamically generate RabbitMQ user credentials. The Infisical RabbitMQ dynamic secret allows you to generate RabbitMQ credentials on demand based on configured role. ## Prerequisites 1. Ensure that the `management` plugin is enabled on your RabbitMQ instance. This is required for the dynamic secret to work. ## Set up Dynamic Secrets with RabbitMQ Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal Name by which you want the secret to be referenced Default time-to-live for a generated secret (it is possible to modify this value after a secret is generated) Maximum time-to-live for a generated secret. Your RabbitMQ host. This must be in HTTP format. *(Example: [http://your-cluster-ip](http://your-cluster-ip))* The port that the RabbitMQ management plugin is listening on. This is `15672` by default. The name of the virtual host that the user will be assigned to. This defaults to `/`. The permissions that the user will have on the virtual host. This defaults to `.*`. The three permission fields all take a regular expression *(regex)*, that should match resource names for which the user is granted read / write / configuration permissions The username of the user that will be used to provision new dynamic secret leases. The password of the user that will be used to provision new dynamic secret leases. Specifies a template for generating usernames. This field allows customization of how usernames are automatically created. Allowed template variables are * `{{randomUsername}}`: Random username string * `{{unixTimestamp}}`: Current Unix timestamp * `{{identity.name}}`: Name of the identity that is generating the secret * `{{random N}}`: Random string of N characters Allowed template functions are * `truncate`: Truncates a string to a specified length * `replace`: Replaces a substring with another value Examples: ``` {{randomUsername}} // 3POnzeFyK9gW2nioK0q2gMjr6CZqsRiX {{unixTimestamp}} // 17490641580 {{identity.name}} // testuser {{random-5}} // x9k2m {{truncate identity.name 4}} // test {{replace identity.name 'user' 'replace'}} // testreplace ``` A CA may be required if your DB requires it for incoming connections. This is often the case when connecting to a managed service. Dynamic Secret Setup Modal After submitting the form, you will see a dynamic secret created in the dashboard. If this step fails, you may have to add the CA certificate. Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret. Once you click the `Submit` button, a new secret lease will be generated and the credentials from it will be shown to you. Provision Lease ## Audit or Revoke Leases Once you have created one or more leases, you will be able to access them by clicking on the respective dynamic secret item on the dashboard. This will allow you to see the expiration time of the lease or delete a lease before it's set time to live. Provision Lease ## Renew Leases To extend the life of the generated dynamic secret leases past its initial time to live, simply click on the **Renew** button as illustrated below. Provision Lease Lease renewals cannot exceed the maximum TTL set when configuring the dynamic secret # Redis Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/redis Learn how to dynamically generate Redis Database user credentials. The Infisical Redis dynamic secret allows you to generate Redis Database credentials on demand based on configured role. ## Prerequisite Create a user with the required permission in your Redis instance. This user will be used to create new accounts on-demand. ## Set up Dynamic Secrets with Redis Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal Name by which you want the secret to be referenced Default time-to-live for a generated secret (it is possible to modify this value after a secret is generated) Maximum time-to-live for a generated secret. The database host, this can be an IP address or a domain name as long as Infisical can reach it. The database port, this is the port that the Redis instance is listening on. Redis username that will be used to create new users on-demand. This is often 'default' or 'admin'. Password that will be used to create dynamic secrets. This is required if your Redis instance is password protected. A CA may be required if your DB requires it for incoming connections. This is often the case when connecting to a managed service. Modify Redis Statements Modal Specifies a template for generating usernames. This field allows customization of how usernames are automatically created. Allowed template variables are * `{{randomUsername}}`: Random username string * `{{unixTimestamp}}`: Current Unix timestamp * `{{identity.name}}`: Name of the identity that is generating the secret * `{{random N}}`: Random string of N characters Allowed template functions are * `truncate`: Truncates a string to a specified length * `replace`: Replaces a substring with another value Examples: ``` {{randomUsername}} // 3POnzeFyK9gW2nioK0q2gMjr6CZqsRiX {{unixTimestamp}} // 17490641580 {{identity.name}} // testuser {{random-5}} // x9k2m {{truncate identity.name 4}} // test {{replace identity.name 'user' 'replace'}} // testreplace ``` If you want to provide specific privileges for the generated dynamic credentials, you can modify the Redis statement to your needs. This is useful if you want to only give access to a specific table(s). After submitting the form, you will see a dynamic secret created in the dashboard. If this step fails, you may have to add the CA certificate. Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret. Once you click the `Submit` button, a new secret lease will be generated and the credentials from it will be shown to you. Provision Lease ## Audit or Revoke Leases Once you have created one or more leases, you will be able to access them by clicking on the respective dynamic secret item on the dashboard. This will allow you to see the expiration time of the lease or delete a lease before it's set time to live. Provision Lease ## Renew Leases To extend the life of the generated dynamic secret leases past its initial time to live, simply click on the **Renew** button as illustrated below. Provision Lease Lease renewals cannot exceed the maximum TTL set when configuring the dynamic secret # SAP ASE Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/sap-ase Learn how to dynamically generate SAP ASE database account credentials. The Infisical SAP ASE dynamic secret allows you to generate SAP ASE database credentials on demand. ## Prerequisite * Infisical requires that you have a user in your SAP ASE instance, configured with the appropriate permissions. This user will facilitate the creation of new accounts as needed. Ensure the user possesses privileges for creating, dropping, and granting permissions to roles for it to be able to create dynamic secrets. The user used for authentication must have access to the `master` database. You can use the `sa` user for this purpose or create a new user with the necessary permissions. * The SAP ASE instance should be reachable by Infisical. ## Set up Dynamic Secrets with SAP ASE Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal Name by which you want the secret to be referenced Default time-to-live for a generated secret (it is possible to modify this value when a secret is generate) The maximum time-to-live for a generated secret Your SAP ASE instance host (IP or domain) Your SAP ASE instance port. On default SAP ASE instances this is usually `5000`. The database name that you want to generate credentials for. This database must exist on the SAP ASE instance. Please note that the user/password used for authentication must have access to this database, **and** the `master` database. Username that will be used to create dynamic secrets Password that will be used to create dynamic secrets Dynamic Secret Setup Modal Modify SQL Statements Modal Specifies a template for generating usernames. This field allows customization of how usernames are automatically created. Allowed template variables are * `{{randomUsername}}`: Random username string * `{{unixTimestamp}}`: Current Unix timestamp * `{{identity.name}}`: Name of the identity that is generating the secret * `{{random N}}`: Random string of N characters Allowed template functions are * `truncate`: Truncates a string to a specified length * `replace`: Replaces a substring with another value Examples: ``` {{randomUsername}} // 3POnzeFyK9gW2nioK0q2gMjr6CZqsRiX {{unixTimestamp}} // 17490641580 {{identity.name}} // testuser {{random-5}} // x9k2m {{truncate identity.name 4}} // test {{replace identity.name 'user' 'replace'}} // testreplace ``` If you want to provide specific privileges for the generated dynamic credentials, you can modify the SQL statement to your needs. Due to SAP ASE limitations, the attached SQL statements are not executed as a transaction. After submitting the form, you will see a dynamic secret created in the dashboard. Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret in step 4. Once you click the `Submit` button, a new secret lease will be generated and the credentials for it will be shown to you. Provision Lease ## Audit or Revoke Leases Once you have created one or more leases, you will be able to access them by clicking on the respective dynamic secret item on the dashboard. This will allow you see the lease details and delete the lease ahead of its expiration time. Provision Lease ## Renew Leases To extend the life of the generated dynamic secret lease past its initial time to live, simply click on the **Renew** as illustrated below. Provision Lease Lease renewals cannot exceed the maximum TTL set when configuring the dynamic secret. # SAP HANA Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/sap-hana Learn how to dynamically generate SAP HANA database account credentials. The Infisical SAP HANA dynamic secret allows you to generate SAP HANA database credentials on demand. ## Prerequisite * Infisical requires a SAP HANA database user in your instance with the necessary permissions. This user will facilitate the creation of new accounts as needed. Ensure the user possesses privileges for creating, dropping, and granting permissions to roles for it to be able to create dynamic secrets. * The SAP HANA instance should be reachable by Infisical. ## Set up Dynamic Secrets with SAP HANA Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal Name by which you want the secret to be referenced Default time-to-live for a generated secret (it is possible to modify this value after a secret is generated) Maximum time-to-live for a generated secret SAP HANA Host SAP HANA Port Username that will be used to create dynamic secrets Password that will be used to create dynamic secrets A CA may be required for SSL if you are self-hosting SAP HANA Dynamic Secret Setup Modal Modify SQL Statements Modal Specifies a template for generating usernames. This field allows customization of how usernames are automatically created. Allowed template variables are * `{{randomUsername}}`: Random username string * `{{unixTimestamp}}`: Current Unix timestamp * `{{identity.name}}`: Name of the identity that is generating the secret * `{{random N}}`: Random string of N characters Allowed template functions are * `truncate`: Truncates a string to a specified length * `replace`: Replaces a substring with another value Examples: ``` {{randomUsername}} // 3POnzeFyK9gW2nioK0q2gMjr6CZqsRiX {{unixTimestamp}} // 17490641580 {{identity.name}} // testuser {{random-5}} // x9k2m {{truncate identity.name 4}} // test {{replace identity.name 'user' 'replace'}} // testreplace ``` If you want to provide specific privileges for the generated dynamic credentials, you can modify the SQL statement to your needs. Due to SAP HANA limitations, the attached SQL statements are not executed as a transaction. After submitting the form, you will see a dynamic secret created in the dashboard. If this step fails, you may have to add the CA certficate. Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret in step 4. Once you click the `Submit` button, a new secret lease will be generated and the credentials for it will be shown to you. Provision Lease ## Audit or Revoke Leases Once you have created one or more leases, you will be able to access them by clicking on the respective dynamic secret item on the dashboard. This will allow you to see the lease details and delete the lease ahead of its expiration time. Provision Lease ## Renew Leases To extend the life of the generated dynamic secret lease past its initial time to live, simply click on the **Renew** button as illustrated below. Provision Lease Lease renewals cannot exceed the maximum TTL set when configuring the dynamic secret. # Snowflake Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/snowflake Learn how to dynamically generate Snowflake user credentials. Infisical's Snowflake dynamic secrets allow you to generate Snowflake user credentials on demand. ## Snowflake Prerequisites Infisical requires a Snowflake user in your account with the USERADMIN role. This user will act as a service account for Infisical and facilitate the creation of new users as needed. Snowflake User
    Dashboard Be sure to uncheck "Force user to change password on first time login" Snowflake Create Service
    User Snowflake Account And Organization
    Identifiers ## Set up Dynamic Secrets with Snowflake Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal The name you want to reference this secret by Default time-to-live for a generated secret (it is possible to modify this value when generating a secret) Maximum time-to-live for a generated secret Snowflake account identifier Snowflake organization identifier Username of the Infisical Service User Password of the Infisical Service User Dynamic Secret Setup Modal Modify SQL Statements Modal Specifies a template for generating usernames. This field allows customization of how usernames are automatically created. Allowed template variables are * `{{randomUsername}}`: Random username string * `{{unixTimestamp}}`: Current Unix timestamp * `{{identity.name}}`: Name of the identity that is generating the secret * `{{random N}}`: Random string of N characters Allowed template functions are * `truncate`: Truncates a string to a specified length * `replace`: Replaces a substring with another value Examples: ``` {{randomUsername}} // 3POnzeFyK9gW2nioK0q2gMjr6CZqsRiX {{unixTimestamp}} // 17490641580 {{identity.name}} // testuser {{random-5}} // x9k2m {{truncate identity.name 4}} // test {{replace identity.name 'user' 'replace'}} // testreplace ``` If you want to provide specific privileges for the generated dynamic credentials, you can modify the SQL statement to your needs. After submitting the form, you will see a dynamic secret created in the dashboard. Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret in step 4. Once you click the `Submit` button, a new secret lease will be generated and the credentials for it will be shown to you. Provision Lease ## Audit or Revoke Leases Once you have created one or more leases, you will be able to access them by clicking on the respective dynamic secret item on the dashboard. This will allow you to see the lease details and delete the lease ahead of its expiration time. Provision Lease ## Renew Leases To extend the life of the generated dynamic secret lease past its initial time to live, simply click on the **Renew** button as illustrated below. Provision Lease Lease renewals cannot exceed the maximum TTL set when configuring the dynamic secret. # TOTP Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/totp Learn how to dynamically generate time-based one-time passwords. The Infisical TOTP dynamic secret allows you to generate time-based one-time passwords on demand. ## Prerequisite * Infisical requires either an OTP url or a secret key from a TOTP provider. ## Set up Dynamic Secrets with TOTP Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal Name by which you want the secret to be referenced There are two supported configuration types - `url` and `manual`. When `url` is selected, you can configure the TOTP generator using the OTP URL. When `manual` is selected, you can configure the TOTP generator using the secret key along with other configurations like period, number of digits, and algorithm. OTP URL in `otpauth://` format used to generate TOTP codes. Base32 encoded secret used to generate TOTP codes. Time interval in seconds between generating new TOTP codes. Number of digits to generate in each TOTP code. Hash algorithm to use when generating TOTP codes. The supported algorithms are sha1, sha256, and sha512. Dynamic Secret Setup Modal Dynamic Secret Setup Modal After submitting the form, you will see a dynamic secret created in the dashboard. Once you've successfully configured the dynamic secret, you're ready to generate on-demand TOTPs. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Dynamic Secret Once you click the `Generate` button, a new secret lease will be generated and the TOTP will be shown to you. Provision Lease # Vertica Source: https://infisical.com/docs/documentation/platform/dynamic-secrets/vertica Learn how to dynamically generate Vertica database users. The Infisical Vertica dynamic secret allows you to generate Vertica database credentials on demand based on configured role. ## Prerequisite Create a user with the required permission in your Vertica instance. This user will be used to create new accounts on-demand. ## Set up Dynamic Secrets with Vertica Open the Secret Overview dashboard and select the environment in which you would like to add a dynamic secret. Add Dynamic Secret Button Dynamic Secret Modal Name by which you want the secret to be referenced Default time-to-live for a generated secret (it is possible to modify this value after a secret is generated) Maximum time-to-live for a generated secret Select a gateway for private cluster access. If not specified, the Internet Gateway will be used. Vertica database host Vertica database port (default: 5433) Name of the Vertica database for which you want to create dynamic secrets Username that will be used to create dynamic secrets Password that will be used to create dynamic secrets Dynamic Secret Setup Modal Modify SQL Statements Modal Specifies a template for generating usernames. This field allows customization of how usernames are automatically created. Allowed template variables are * `{{randomUsername}}`: Random username string * `{{unixTimestamp}}`: Current Unix timestamp Customize the SQL statement used to create new users. Default creates a user with basic schema permissions. Customize the SQL statement used to revoke users. Default revokes a user. Length of generated passwords (1-250 characters) Minimum required character counts: * **Lowercase Count**: Minimum lowercase letters (default: 1) * **Uppercase Count**: Minimum uppercase letters (default: 1) * **Digit Count**: Minimum digits (default: 1) * **Symbol Count**: Minimum symbols (default: 0) Symbols allowed in generated passwords After submitting the form, you will see a dynamic secret created in the dashboard. Dynamic Secret Once you've successfully configured the dynamic secret, you're ready to generate on-demand credentials. To do this, simply click on the 'Generate' button which appears when hovering over the dynamic secret item. Alternatively, you can initiate the creation of a new lease by selecting 'New Lease' from the dynamic secret lease list section. Dynamic Secret Dynamic Secret When generating these secrets, it's important to specify a Time-to-Live (TTL) duration. This will dictate how long the credentials are valid for. Provision Lease Ensure that the TTL for the lease falls within the maximum TTL defined when configuring the dynamic secret. Once you click the `Submit` button, a new secret lease will be generated and the credentials for it will be shown to you. Provision Lease ## Audit or Revoke Leases Once you have created one or more leases, you will be able to access them by clicking on the respective dynamic secret item on the dashboard. This will allow you to see the expiration time of the lease or delete the lease before its set time to live. Provision Lease ## Renew Leases To extend the life of the generated dynamic secret leases past its initial time to live, simply click on the **Renew** button as illustrated below. Provision Lease Lease renewals cannot exceed the maximum TTL set when configuring the dynamic secret # Event Subscriptions Source: https://infisical.com/docs/documentation/platform/event-subscriptions Subscribe to events in Infisical for real-time updates **Note:** Event Subscriptions is a paid feature. - **Infisical Cloud users:** Event Subscriptions is available under the **Enterprise Tier**. - **Self-Hosted Infisical:** Please contact [sales@infisical.com](mailto:sales@infisical.com) to purchase an enterprise license. Event Subscriptions in Infisical allow you to receive real-time notifications when specific actions occur within your account or organization. These notifications include changes to secrets, users, teams, and many more **coming soon**. ## How It Works * Server receives message over pubsub connection indicating changes have occurred * Server processes the change notification * Updated data is synchronized across all connected Infisical instances * Client applications receive real-time updates through [Server-Sent Events (SSE)](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) * All servers maintain consistent state without manual intervention This ensures your infrastructure stays up-to-date automatically, without requiring restarts or manual synchronization. Event Subscriptions are designed for real-time communication and do not include persistence or replay capabilities—events are delivered once and are not stored for future retrieval. ## Supported Resources You can currently subscribe to notifications for the following resources and event types: * **Secrets** * `secret:created`: Triggered when a secret is created * `secret:updated`: Triggered when a secret is updated * `secret:deleted`: Triggered when a secret is deleted ## Permissions Setup To receive events on a supported resource, the identity must have `Subscribe` action permission on that resource. Follow these steps to set up the necessary permissions: Select Project On your project page, open **Project Settings** from the sidebar. In the Project name section, click **Copy Project ID** to copy your Project ID, or extract it from the URL: `https://app.infisical.com/project//settings` Project Detail Project
    Access Navigate to **Access Management**, then select **Project Roles**. Project Role You can either edit an existing role or create a new role for event subscriptions. Role Detail Select the specific resources that the role should have access to. Add policy Policy setting Ensure the **Subscribe** action is selected for the relevant resources and events. ## Conditions By default, the role will have access to all events for the selected resources in this project. Policy setting Policy setting Policy setting ## Getting Started Currently, events are only available via [API](/api-reference/endpoints/events) but will soon be available in our SDKs, Kubernetes Operator, and more. ### API Usage You need an auth token to use this API. To get an authentication token, follow the authentication guide for one of our supported auth methods from the [machine identities documentation](/documentation/platform/identities/machine-identities#authentication-methods). #### Creating a Subscription Postman Subscription **Request Parameters:** * `projectId`: Project whose events you want to subscribe to * `register`: List of event filters * `conditions`: Conditions to filter events on * `environmentSlug`: Project environment * `secretPath`: Path of the secrets Postman Subscription Response The subscribe endpoint responds with a `text/event-stream` content type to initiate SSE streaming. For more specific details, please refer to our [API Reference](/api-reference/endpoints/events). # Migrating from EnvKey to Infisical Source: https://infisical.com/docs/documentation/platform/external-migrations/envkey Learn how to migrate secrets from EnvKey to Infisical. ## Migrating from EnvKey EnvKey Dashboard Go to Import/Export on the top right corner, Click on Export Org and save the exported file. Export organization Click on copy to copy the encryption key and save it. Copy encryption key Open the Infisical dashboard and go to Organization Settings > External Migrations. Infisical Organization settings Select the EnvKey platform and click on Next. Select EnvKey platform Upload the exported file from EnvKey, paste the encryption key and click Import data. Infisical Import EnvKey It may take several minutes to complete the migration. You will receive an email when the migration is complete, or if there were any errors during the migration process. ## Talk to our team To make the migration process even more seamless, you can [schedule a meeting with our team](https://infisical.cal.com/vlad/migration-from-envkey-to-infisical) to learn more about how Infisical compares to EnvKey and discuss unique needs of your organization. You are also welcome to email us at [support@infisical.com](mailto:support@infisical.com) to ask any questions or get any technical help. # External Migrations Source: https://infisical.com/docs/documentation/platform/external-migrations/overview Learn how to migrate resources from third-party secrets management platforms to Infisical. ## Overview Infisical supports migrating resources from third-party secrets management platforms to Infisical. This is useful if you're looking to easily switch to Infisical and wish to move over your existing resources from a different platform. Infisical offers two types of migration approaches: * **In-Platform Migration Tooling**: Configure platform connections to enable granular, on-demand imports of secrets, policies, and configurations directly within the Infisical UI. This allows you to migrate resources incrementally as needed. * **Bulk Data Import**: Perform one-time organization-level migrations to import all resources from external platforms at once. This is ideal for initial migrations when moving entirely to Infisical. ## Supported Platforms * [EnvKey](./envkey) * [Vault](./vault) We're always looking to add more migration paths for other providers. If we're missing a platform, please open an issue on our [GitHub repository](https://github.com/infisical/infisical/issues). # Migrating from Vault to Infisical Source: https://infisical.com/docs/documentation/platform/external-migrations/vault Learn how to migrate resources from Vault to Infisical. Infisical provides two approaches for migrating from HashiCorp Vault. ### Which approach should I use? **Choose In-Platform Migration Tooling if you want to:** * Migrate specific secrets, not everything at once * Import secrets into existing Infisical projects * Translate Vault policies to Infisical access controls * Import Kubernetes authentication configurations * Have more control over the migration process **Choose Bulk Data Import if you want to:** * Migrate all secrets from Vault in one go * Automatically create new Infisical projects from your Vault structure * Perform a one-time migration when moving entirely from Vault to Infisical ## In-Platform Migration Tooling This migration approach lets you set up a connection to your Vault instance once, then import specific resources as needed throughout Infisical. **Organization Admin Access Required:** All in-platform migration features (importing secrets, Kubernetes configurations, and policies from Vault) are only accessible to organization admins. ### Step 1: Set Up Your Vault Connection In your Vault instance, create a policy that allows Infisical to read your secrets, policies, and authentication configurations. This policy grants read-only access and doesn't allow Infisical to modify anything in Vault. ```hcl theme={"dark"} # System endpoints - for listing namespaces, policies, mounts, and auth methods path "sys/namespaces" { capabilities = ["list"] } path "sys/policy" { capabilities = ["read", "list"] } path "sys/policy/*" { capabilities = ["read"] } path "sys/mounts" { capabilities = ["read"] } path "sys/auth" { capabilities = ["read"] } # KV v2 secrets - for listing and reading secrets # Replace '+' with your actual KV v2 mount paths (e.g., "secret", "kv") path "+/metadata/*" { capabilities = ["list", "read"] } path "+/data/*" { capabilities = ["read"] } # KV v1 secrets - for listing and reading secrets # Replace '+' with your actual KV v1 mount paths (e.g., "secret", "kv-v1") # WARNING: This is broad - ideally specify exact mount names path "+/*" { capabilities = ["list", "read"] } # Kubernetes auth - for reading auth configuration and roles path "auth/+/config" { capabilities = ["read"] } path "auth/+/role" { capabilities = ["list"] } path "auth/+/role/*" { capabilities = ["read"] } # Kubernetes secrets engine - for reading secrets engine configuration and roles path "+/config" { capabilities = ["read"] } path "+/roles" { capabilities = ["list"] } path "+/roles/*" { capabilities = ["read"] } ``` Save this policy in Vault with the name `infisical-in-platform-migration`. In Infisical, navigate to **Organization Settings > App Connections** and create a new HashiCorp Vault connection. Follow the [HashiCorp Vault App Connection documentation](/integrations/app-connections/hashicorp-vault) for detailed setup instructions. When configuring authentication (Token or AppRole), make sure it uses the `infisical-in-platform-migration` policy you created. Navigate to **Organization Settings > External Migrations** in Infisical. Under the "In-Platform Migration Tooling" section for HashiCorp Vault, click **"+ Add Namespace"**. In-Platform Migration Tooling Configure your namespace: Namespace Configuration * **Namespace**: Enter your Vault namespace path (e.g., `admin/namespace1`). If you intend to use the root namespace, set the namespace value to "root". * **Connection**: Select the App Connection you created in the previous step. You can add multiple namespaces with different connections if you have multiple Vault instances or namespaces to migrate from. ### Step 2: Import Your Resources Once your Vault connection is configured, you'll see import options throughout Infisical wherever relevant. Here's what you can import: #### Import Secrets into a Project You can import secrets from Vault directly into a specific environment and secret path: 1. Navigate to your project and select a specific environment (e.g., Development, Production) 2. In the secrets view, click the dropdown icon (caret) next to the **"+ Add Secret"** button 3. Select **"Add from HashiCorp Vault"** Import Vault Secrets 4. Choose your Vault namespace and the secret path you want to import 5. Click **"Import Secrets"** The secrets will be imported into your current environment and folder path. #### Import Kubernetes Authentication Configurations When setting up Kubernetes authentication for a machine identity, you can import the configuration from Vault: 1. Navigate to **Access Control > Machine Identities** and select an identity 2. Click **"Add Authentication Method"** and choose **Kubernetes Auth** 3. In the configuration modal, click **"Load from Vault"** Load Kubernetes Auth from Vault 4. Select your Vault namespace and the Kubernetes role 5. Click **"Load"** Kubernetes Auth Form Populated The authentication settings (service accounts, TTL, policies, etc.) will be automatically populated from your Vault configuration. Sensitive values like service account JWTs cannot be retrieved from Vault and must be manually provided in the form after importing the configuration. #### Import Kubernetes Dynamic Secret Configurations When creating a Kubernetes dynamic secret, you can import the configuration from a Vault Kubernetes secrets engine role: 1. Navigate to your project and select an environment 2. Click **"+ Add Secret"** dropdown and choose **"Dynamic Secret"** 3. Select **Kubernetes** as the provider 4. Click **"Load from Vault"** at the top of the form Load Kubernetes Dynamic Secret from Vault 5. Select your Vault namespace, Kubernetes secrets engine mount, and role 6. Click **"Load Configuration"** The form will be automatically populated with the role's configuration including: * Cluster URL and CA certificate * Credential type (Static or Dynamic) * Service account name or Kubernetes role settings * Allowed namespaces * Token TTL values * Token audiences Sensitive values like cluster tokens cannot be retrieved from Vault and must be manually provided in the form after loading the configuration. #### Import and Translate Access Control Policies When configuring project role-based access control, you can import Vault HCL policies and automatically translate them to Infisical permissions. Policy translation is best-effort and provides a starting point based on your Vault configuration. The translated permissions should be reviewed and adjusted as needed since Vault and Infisical have different access control models. Infisical will analyze path patterns and capabilities to suggest equivalent permissions. **To import and translate a policy:** 1. Navigate to your project, then go to **Access Control > Roles** and create or edit a role 2. In the policy configuration, click **"Add from HashiCorp Vault"** Import Vault Policy Button 3. Select your Vault namespace 4. Either choose an existing policy from the dropdown or paste your own HCL policy Translate Vault Policy Modal 5. Review the automatically translated Infisical permissions 6. Make any adjustments and save **How policy translation works:** * Vault path patterns are analyzed to identify KV secret engines and environments * Vault capabilities (`read`,`list`, `create`, etc.) are mapped to Infisical permissions * Wildcards in paths are converted to glob patterns * Secret paths are preserved for granular access control Always review the translated permissions carefully, as Vault's capability-based model may not map 1:1 with Infisical's permission structure. *** ## Bulk Data Import This migration approach imports all secrets from your Vault instance in one operation and automatically creates new Infisical projects based on your Vault structure. ### Understanding Project Mapping Before starting the bulk import, you need to decide how your Vault structure will map to Infisical projects: Each Vault namespace becomes a single Infisical project, with each KV secret engine becoming an environment within that project. **Example:** If you have a namespace with 3 KV secret engines (`dev-secrets`, `staging-secrets`, `prod-secrets`): * Creates: 1 Infisical project * Environments: 3 (`dev-secrets`, `staging-secrets`, `prod-secrets`) Each KV secret engine becomes its own Infisical project with a single `Production` environment. **Example:** If you have 3 KV secret engines (`dev-secrets`, `staging-secrets`, `prod-secrets`): * Creates: 3 Infisical projects (`dev-secrets`, `staging-secrets`, `prod-secrets`) * Each project has: 1 environment (`Production`) ### How to Perform a Bulk Import In your Vault instance, create a policy that allows Infisical to read all secrets and metadata. This policy grants read-only access. ```hcl theme={"dark"} # Allow listing secret engines/mounts path "sys/mounts" { capabilities = ["read", "list"] } # For KV v2 engines - access to both data and metadata path "*/data/*" { capabilities = ["read", "list"] } path "*/metadata/*" { capabilities = ["read", "list"] } # If using Vault Enterprise - allow listing namespaces path "sys/namespaces" { capabilities = ["list", "read"] } # Cross-namespace access (Enterprise only) path "+/*" { capabilities = ["read", "list"] } path "+/sys/mounts" { capabilities = ["read", "list"] } ``` Save this policy in Vault with the name `infisical-bulk-migration`. Use the Vault CLI to generate an access token: ```bash theme={"dark"} vault token create --policy="infisical-bulk-migration" ``` Copy the `token` value from the output - you'll need it in the next step. In Infisical, navigate to **Organization Settings > External Migrations**. Infisical Organization settings Under the "Bulk Data Import" section, click **"+ Import"**. Select **HashiCorp Vault** as the migration source and click **Next**. Select Vault platform Fill in your Vault connection details: Configure Vault migration * **Vault URL**: Your Vault instance URL (e.g., `https://vault.example.com`) * **Vault Namespace**: Optional - only needed if using Vault Enterprise namespaces * **Vault Access Token**: The token you generated in step 2 * **Project Mapping**: Choose how to structure your Infisical projects (see [Understanding Project Mapping](#understanding-project-mapping)) Click **"Import Data"** to start the migration. The import runs in the background and may take several minutes. You'll receive an email when it completes. # Folders Source: https://infisical.com/docs/documentation/platform/folder Learn how to organize secrets with folders. Infisical Folders enable users to organize secrets using custom structures dependent on the intended use case (also known as **path-based secret storage**). It is great for organizing secrets around hierarchies with multiple services or types of secrets involved at large quantities. Infisical Folders can be infinitely nested to mirror your application architecture – whether it's microservices, monorepos, or any logical grouping that best suits your needs. Consider the following structure for a microservice architecture: ``` | service1 |---- envars |---- users |-------- tokens1 |-------- tokens2 | service2 |---- envars ... ``` In this example, we store environment variables for each microservice under each respective `/envars` folder. We also store user-specific secrets for micro-service 1 under `/service1/users`. With this folder structure in place, your applications only need to specify a path like `/microservice1/envars` to fetch secrets from there. By extending this example, you can see how path-based secret storage provides a versatile approach to manage secrets for any architecture. ## Managing folders To add a folder, press the downward chevron to the right of the **Add Secret** button; then press on the **Add Folder** button. Folder names can only contain alphabets, numbers, and dashes add folder To delete a folder, hover over it and press the **X** button that appears on the right side. delete folder ### Comparing folders It's possible to compare the contents of folders across environments in the **Secrets Overview** page. When you click on a folder, the table will display the items within it across environments. In the image below, you can see that the **Development** environment is the only one that contains items in the `/users` folder, being other folders `/user-a`, `/user-b`, ... `/user-f`. comparing folders ### Replicating Folder Contents If you want to copy secrets or folders from one path to another, you can utilize the **Replicate Secrets** functionality located in the **Add Secret** dropdown. replicate secrets replicate secrets modal First, select the **Source Environment** and the **Source Root Path** you want to copy secrets *from*. In the example provided, we select `/dev-folder` as the source root path from the Development environment. This means any secrets within `/dev-folder` from Development will be replicated. By default, these secrets are copied into the *currently active* folder/path in your target environment (e.g., the root folder of your Staging environment in this scenario). As a final step, you can select the specific secrets you wish to copy and then click **Replicate Secrets**. replicate secrets modal The result shows two secrets successfully copied from the `/dev-folder` in the Development environment into the root folder of the Staging environment. If you do not select a **Source Root Path**, the replication will consider the contents of the *entire root* of the **Source Environment** (e.g., the Development environment). In this example that would mean copying the `/dev-folder` itself rather than just its contents. # Gateway Deployment Source: https://infisical.com/docs/documentation/platform/gateways/gateway-deployment Complete guide to deploying Infisical Gateways including network configuration and firewall requirements Infisical Gateways enables secure communication between your private resources and the Infisical platform without exposing inbound ports in your network. This guide covers everything you need to deploy and configure Infisical Gateways. ## Deployment Steps To successfully deploy an Infisical Gateway for use, follow these steps in order. Create a machine identity with the correct permissions to create and manage gateways. This identity is used by the gateway to authenticate with Infisical and should be provisioned in advance. The gateway supports several [machine identity auth methods](/documentation/platform/identities/machine-identities), as listed below. Choose the one that best fits your environment and set the corresponding environment variables when deploying the gateway. Simple and secure authentication using client ID and client secret. **Environment Variables:** * `INFISICAL_AUTH_METHOD=universal-auth` * `INFISICAL_UNIVERSAL_AUTH_CLIENT_ID=` * `INFISICAL_UNIVERSAL_AUTH_CLIENT_SECRET=` Direct authentication using a machine identity access token. **Environment Variables:** * `INFISICAL_TOKEN=` Authentication using Kubernetes service account tokens. **Environment Variables:** * `INFISICAL_AUTH_METHOD=kubernetes` * `INFISICAL_MACHINE_IDENTITY_ID=` Authentication using AWS IAM roles. **Environment Variables:** * `INFISICAL_AUTH_METHOD=aws-iam` * `INFISICAL_MACHINE_IDENTITY_ID=` Authentication using GCP identity tokens. **Environment Variables:** * `INFISICAL_AUTH_METHOD=gcp-id-token` * `INFISICAL_MACHINE_IDENTITY_ID=` Authentication using GCP service account keys. **Environment Variables:** * `INFISICAL_AUTH_METHOD=gcp-iam` * `INFISICAL_MACHINE_IDENTITY_ID=` * `INFISICAL_GCP_SERVICE_ACCOUNT_KEY_FILE_PATH=` Authentication using Azure managed identity. **Environment Variables:** * `INFISICAL_AUTH_METHOD=azure` * `INFISICAL_MACHINE_IDENTITY_ID=` Authentication using OIDC identity tokens. **Environment Variables:** * `INFISICAL_AUTH_METHOD=oidc-auth` * `INFISICAL_MACHINE_IDENTITY_ID=` * `INFISICAL_JWT=` Authentication using JWT tokens. **Environment Variables:** * `INFISICAL_AUTH_METHOD=jwt-auth` * `INFISICAL_MACHINE_IDENTITY_ID=` * `INFISICAL_JWT=` Ensure a relay server is running and accessible before you deploy any gateways. You have two options: * **Managed relay (Infisical Cloud, US/EU only):** Managed relays are only available for Infisical Cloud instances in the US and EU regions. If you are using Infisical Cloud in these regions, you can use the provided managed relay. * **Self-hosted relay:** For all other cases, including all self-hosted and dedicated enterprise instances of Infisical, you must deploy your own relay server. You can also choose to deploy your own relay server when using Infisical Cloud if you require reduced geographic proximity to your target resources for lower latency or to reduce network congestion. For setup instructions, see the [Relay Deployment Guide](/documentation/platform/gateways/relay-deployment). Make sure the Infisical CLI is installed on the machine or environment where you plan to deploy the gateway. The CLI is required for gateway installation and management. See the [CLI Installation Guide](/cli/overview) for instructions. Ensure your network and firewall settings allow the gateway to connect to all required services. All connections are outbound only; no inbound ports need to be opened. | Protocol | Destination | Port | Purpose | | -------- | -------------------------------------- | ---- | ------------------------------------------ | | TCP | Relay Server IP/Hostname | 2222 | SSH reverse tunnel establishment | | TCP | Infisical instance host (US/EU, other) | 443 | API communication and certificate requests | For managed relays, allow outbound traffic to the provided relay server IP/hostname. For self-hosted relays, allow outbound traffic to your own relay server address. If you are in a corporate environment with strict egress filtering, ensure outbound TCP 2222 to relay servers and outbound HTTPS 443 to Infisical API endpoints are allowed. The Infisical CLI is used to install and start the gateway in your chosen environment. The CLI provides commands for both production and development scenarios, and supports a variety of options/flags to configure your deployment. To view all available flags and equivalent environment variables for gateway deployment, see the [Gateway CLI Command Reference](/cli/commands/gateway). For production deployments on Linux servers, install the Gateway as a systemd service so that it runs securely in the background and automatically restarts on failure or system reboot: ```bash theme={"dark"} sudo infisical gateway systemd install --token --domain --name sudo systemctl start infisical-gateway ``` By default, the gateway connects to the most optimal relay. Use the `--target-relay-name` flag to manually specify a different relay server. The systemd install command requires a Linux operating system with root/sudo privileges. For production deployments on Kubernetes clusters, install the Gateway using the Infisical Helm chart: #### Install the latest Helm Chart repository ```bash theme={"dark"} helm repo add infisical-helm-charts 'https://dl.cloudsmith.io/public/infisical/helm-charts/helm/charts/' helm repo update ``` #### Create a Kubernetes Secret The gateway supports all identity authentication methods through environment variables: ```bash theme={"dark"} kubectl create secret generic infisical-gateway-environment \ --from-literal=INFISICAL_AUTH_METHOD=universal-auth \ --from-literal=INFISICAL_UNIVERSAL_AUTH_CLIENT_ID= \ --from-literal=INFISICAL_UNIVERSAL_AUTH_CLIENT_SECRET= \ --from-literal=INFISICAL_GATEWAY_NAME= ``` By default, the gateway connects to the most optimal relay. Use the `--from-literal=INFISICAL_RELAY_NAME=` flag to manually specify a different relay server. #### Install the Gateway ```bash theme={"dark"} helm install infisical-gateway infisical-helm-charts/infisical-gateway ``` For development or testing environments: ```bash theme={"dark"} sudo infisical gateway start --token --name= ``` By default, the gateway connects to the most optimal relay. Use the `--target-relay-name` flag to manually specify a different relay server. After deployment, verify your gateway is working: 1. **Check logs** for "Gateway started successfully" message indicating the gateway is running and connected to the relay 2. **Verify registration** in the Infisical by visiting the Gateways section of your organization. The new gateway should appear with a recent heartbeat timestamp. 3. **Test connectivity** by creating a resource in Infisical that uses the gateway to access a private service. Verify the resource can successfully connect through the gateway. ## Frequently Asked Questions No inbound ports need to be opened for gateways. The gateway only makes outbound connections: * **Outbound SSH** to relay servers on port 2222 * **Outbound HTTPS** to Infisical API endpoints on port 443 * **SSH reverse tunnels** handle all communication - no return traffic configuration needed This design maintains security by avoiding the need for inbound firewall rules that could expose your network to external threats. Test relay connectivity and outbound API access from the gateway: 1. Test SSH port to relay: ```bash theme={"dark"} nc -zv 2222 ``` 2. Test outbound API access (replace with your Infisical domain if different): ```bash theme={"dark"} curl -I https://app.infisical.com ``` If the gateway cannot connect to the relay: 1. Verify the relay server is running and accessible 2. Check firewall rules allow outbound connections on port 2222 3. Confirm the relay name matches exactly 4. Test SSH port to relay: ```bash theme={"dark"} nc -zv 2222 ``` If you encounter authentication failures: 1. Verify machine identity credentials are correct 2. Check token expiration and renewal 3. Ensure authentication method is properly configured Check gateway logs for detailed error information: * **systemd service:** ```bash theme={"dark"} sudo journalctl -u infisical-gateway -f ``` * **Kubernetes:** ```bash theme={"dark"} kubectl logs deployment/infisical-gateway ``` * **Local installation:** Logs appear in the terminal where you started the gateway For systemd-based installations, the gateway's configuration file is stored at `/etc/infisical/gateway.conf`. You may reference or inspect this file for troubleshooting advanced configuration issues. The gateway is designed to handle network interruptions gracefully: * **Automatic reconnection**: The gateway will automatically attempt to reconnect to relay servers if the SSH connection is lost * **Connection retry logic**: Built-in retry mechanisms handle temporary network outages without manual intervention * **Persistent SSH tunnels**: SSH connections are automatically re-established when connectivity is restored * **Certificate rotation**: The gateway handles certificate renewal automatically during reconnection * **Graceful degradation**: The gateway logs connection issues and continues attempting to restore connectivity No manual intervention is typically required during network interruptions. # Gateway Overview Source: https://infisical.com/docs/documentation/platform/gateways/overview How to access private network resources from Infisical Architecture Overview The Infisical Gateway provides secure access to private resources within your network without needing direct inbound connections to your environment. This is particularly useful when Infisical isn't hosted within the same network as the resources it needs to reach. This method keeps your resources fully protected from external access while enabling Infisical to securely interact with resources like databases. Gateway is a paid feature available under the Enterprise Tier for Infisical Cloud users. Self-hosted Infisical users can contact [sales@infisical.com](mailto:sales@infisical.com) to purchase an enterprise license. ## Core Components The Gateway system consists of two primary components working together to enable secure network access: A Gateway is a lightweight service that you deploy within your own network infrastructure to provide secure access to your private resources. Think of it as a secure bridge between Infisical and your internal systems. Gateways must be deployed within the same network where your target resources are located, with direct network connectivity to the private resources you want Infisical to access. For different networks, regions, or isolated environments, you'll need to deploy separate gateways. **Core Functions:** * **Network Placement**: Deployed within your VPCs, data centers, or on-premises infrastructure where your private resources live * **Connection Model**: Only makes outbound connections to Infisical's relay servers, so no inbound firewall rules are needed * **Security Method**: Uses SSH reverse tunnels with certificate-based authentication for maximum security * **Resource Access**: Acts as a proxy to connect Infisical to your private databases, APIs, and other services A Relay Server is the routing infrastructure that enables secure communication between the Infisical platform and your deployed gateways. It acts as an intermediary that never sees your actual data. **Core Functions:** * **Traffic Routing**: Routes encrypted traffic between the Infisical platform and your gateways without storing or inspecting the data * **Network Isolation**: Enables secure communication without requiring direct network connections between Infisical and your private infrastructure * **Authentication Management**: Validates SSH certificates and manages secure routing between authenticated gateways **Deployment Options:** To reduce operational overhead, Infisical Cloud (US/EU) provides managed relay infrastructure, though organizations can also deploy their own relays for reduced latency. * **Infisical Managed**: Use pre-deployed relays in select regions, shared across all Infisical Cloud organizations. Each organization traffic is isolated and encrypted. * **Self-Deployed**: Deploy your own dedicated relay servers geographically close to your infrastructure for reduced latency. ## How It Works The Gateway system uses SSH reverse tunnels for secure, firewall-friendly connectivity: 1. **Gateway Registration**: The gateway establishes an outbound SSH reverse tunnel to a relay server using SSH certificates issued by Infisical 2. **Persistent Connection**: The gateway maintains an open TCP connection with the relay server, creating a secure channel for incoming requests 3. **Request Routing**: When Infisical needs to access your resources, requests are routed through the relay server to the already-established gateway connection 4. **Resource Access**: The gateway receives the routed requests and connects to your private resources on behalf of Infisical ## Health Check To monitor their operational status, both gateways and relays transmit hourly heartbeats. A component is considered unhealthy if a heartbeat is not received for over an hour. Infisical automatically notifies all organization admins of unhealthy gateway or relay statuses through email and in-app notifications. ## Getting Started Ready to set up your gateway? Follow the guides below. Deploy and configure your gateway within your network infrastructure. Set up relay servers if using self-deployed infrastructure. Learn about the security model and implementation best practices. # Overview Source: https://infisical.com/docs/documentation/platform/gateways/relay-deployment/overview How to deploy Infisical Relay Servers Infisical Relay is a secure routing layer that allows Infisical to connect to your private network resources, such as databases or internal APIs, without exposing them to the public internet. The relay acts as an intermediary, forwarding encrypted traffic between Infisical and your deployed gateways. This ensures that your sensitive data remains protected and never leaves your network unencrypted. With this architecture, you can achieve secure, firewall-friendly access across network boundaries, making it possible for Infisical to interact with resources even in highly restricted environments. Before diving in, it's important to determine whether you actually need to deploy your own relay server or if you can use Infisical's managed infrastructure. ## Do You Need to Deploy a Relay? Not all users need to deploy their own relay servers. Infisical provides managed relay infrastructure in US/EU regions for Infisical Cloud users, which requires no setup or maintenance. You only need to deploy a relay if you: * Are self-hosting Infisical * Have a dedicated enterprise instance of Infisical (managed by Infisical) * Require closer geographic proximity to target resources than managed relays provide for lower latency and reduced network congestion when accessing resources through the relay * Need full control over relay infrastructure and traffic routing If you are using Infisical Cloud and do not have specific requirements, you can use the managed relays provided by Infisical and skip the rest of this guide. ## Deployment Steps To successfully deploy an Infisical Relay for use, follow these steps in order. Create a machine identity with the correct permissions to create and manage relays. This identity is used by the relay to authenticate with Infisical and should be provisioned in advance. The relay supports several [machine identity auth methods](/documentation/platform/identities/machine-identities) for authentication, as listed below. Choose the one that best fits your environment and set the corresponding environment variables when deploying the relay. Simple and secure authentication using client ID and client secret. **Environment Variables:** * `INFISICAL_AUTH_METHOD=universal-auth` * `INFISICAL_UNIVERSAL_AUTH_CLIENT_ID=` * `INFISICAL_UNIVERSAL_AUTH_CLIENT_SECRET=` Direct authentication using a machine identity access token. **Environment Variables:** * `INFISICAL_TOKEN=` Authentication using Kubernetes service account tokens. **Environment Variables:** * `INFISICAL_AUTH_METHOD=kubernetes` * `INFISICAL_MACHINE_IDENTITY_ID=` Authentication using AWS IAM roles. **Environment Variables:** * `INFISICAL_AUTH_METHOD=aws-iam` * `INFISICAL_MACHINE_IDENTITY_ID=` Authentication using GCP identity tokens. **Environment Variables:** * `INFISICAL_AUTH_METHOD=gcp-id-token` * `INFISICAL_MACHINE_IDENTITY_ID=` Authentication using GCP service account keys. **Environment Variables:** * `INFISICAL_AUTH_METHOD=gcp-iam` * `INFISICAL_MACHINE_IDENTITY_ID=` * `INFISICAL_GCP_SERVICE_ACCOUNT_KEY_FILE_PATH=` Authentication using Azure managed identity. **Environment Variables:** * `INFISICAL_AUTH_METHOD=azure` * `INFISICAL_MACHINE_IDENTITY_ID=` Authentication using OIDC identity tokens. **Environment Variables:** * `INFISICAL_AUTH_METHOD=oidc-auth` * `INFISICAL_MACHINE_IDENTITY_ID=` * `INFISICAL_JWT=` Authentication using JWT tokens. **Environment Variables:** * `INFISICAL_AUTH_METHOD=jwt-auth` * `INFISICAL_MACHINE_IDENTITY_ID=` * `INFISICAL_JWT=` Provision a server or virtual machine where you plan to deploy the relay. This server must have a static IP address or DNS name to be identifiable by the Infisical platform. Ensure your network and firewall settings allow the server to accept inbound connections and make outbound connections: **Inbound Connections Rules:** | Protocol | Source | Port | Purpose | | -------- | -------------------------------------- | ---- | -------------------------------- | | TCP | Gateways | 2222 | SSH reverse tunnel establishment | | TCP | Infisical instance host (US/EU, other) | 8443 | Platform-to-relay communication | **Outbound Connections Rules:** | Protocol | Destination | Port | Purpose | | -------- | -------------------------------------- | ---- | ------------------------------------------ | | TCP | Infisical instance host (US/EU, other) | 443 | API communication and certificate requests | You can deploy the Infisical Relay in various ways. This guide provides a manual setup example using the Infisical CLI. For an infrastructure-as-code approach, see our [Terraform guide](/documentation/platform/gateways/relay-deployment/terraform). The Infisical CLI is used to install and start the relay in your chosen environment. The CLI provides commands for both production and development scenarios, and supports a variety of options/flags to configure your deployment. To view all available flags and equivalent environment variables for relay deployment, see the [Relay CLI Command Reference](/cli/commands/relay). For production deployments on Linux servers, install the Relay as a systemd service. This installation method only supports [Token Auth](/documentation/platform/identities/token-auth) at the moment. Once you have a [Token Auth](/documentation/platform/identities/token-auth) token, set the following environment variables for relay authentication: ```bash theme={"dark"} export INFISICAL_TOKEN= ``` The systemd install command requires a Linux operating system with root/sudo privileges. ```bash theme={"dark"} sudo infisical relay systemd install \ --token \ --name \ --domain \ --host # Start the relay service sudo systemctl start infisical-relay sudo systemctl enable infisical-relay ``` For non-Linux systems or when you need more control over the relay process: ```bash theme={"dark"} infisical relay start \ --host= \ --name= \ --auth-method= ``` This method supports all [machine identity auth methods](/documentation/platform/identities/machine-identities) and runs in the foreground. Suitable for production use on non-Linux systems or development environments. Set the appropriate environment variables for your chosen auth method as described in Step 1 before running the relay start command. ## Frequently Asked Questions No, relay servers cannot decrypt any traffic passing through them due to end-to-end encryption: * **Client-to-Gateway mTLS (via TLS-pinned tunnel)**: Clients connect via a proxy that establishes a TLS-pinned tunnel to the gateway; mTLS between the client and gateway is negotiated inside this tunnel, encrypting all application traffic * **SSH tunnel encryption**: The mTLS-encrypted traffic is then transmitted through SSH reverse tunnels to relay servers * **Double encryption**: Traffic is encrypted twice - once by client mTLS and again by SSH tunnels * **Relay only routes traffic**: The relay server only routes the doubly-encrypted traffic without access to either encryption layer The relay infrastructure is designed as a secure routing mechanism where only the client and gateway can decrypt the actual application traffic. Deploying your own relay provides several advantages: * **Dedicated resources**: Full control over relay infrastructure and performance * **Lower latency**: Deploy closer to your gateways for optimal performance * **Compliance**: Meet specific data routing and compliance requirements * **Custom network policies**: Implement organization-specific network configurations * **Geographic proximity**: Reduce network congestion and improve response times to access resources * **High availability**: Deploy multiple relays for redundancy and load distribution Organization-deployed relays give you complete control over your secure communication infrastructure. For detailed troubleshooting: **Platform cannot connect to relay:** * Check firewall rules allow inbound TCP with TLS on port 8443 * Test connectivity: `openssl s_client -connect :8443` **Test network connectivity:** ```bash theme={"dark"} # Test outbound API access from relay. Replace URL with your Infisical instance if self-hosted curl -I https://app.infisical.com # Test TCP with TLS port from platform openssl s_client -connect :8443 ``` Relay server outages affect gateway connectivity: * **Gateway reconnection**: Gateways will automatically attempt to reconnect when the relay comes back online * **Service interruption**: While the relay is down, the Infisical platform cannot reach gateways through that relay. As a result, any secrets or resources accessed via those gateways will be temporarily unavailable until connectivity is restored. * **Multiple relays**: Deploy multiple relay servers for redundancy and high availability * **Automatic restart**: Use systemd or container orchestration to automatically restart failed relay services For production environments, consider deploying multiple relay servers to avoid single points of failure. # Terraform Source: https://infisical.com/docs/documentation/platform/gateways/relay-deployment/terraform How to deploy Infisical Relay Servers using Terraform This guide walks you through deploying an Infisical Relay server using Terraform. Select a provider below for specific instructions. The provided configuration automates the creation of the EC2 instance, sets up the necessary security group rules, and uses a startup script to install and configure the Infisical Relay service. ### Prerequisites Before you start, make sure you have the following: * An AWS account with permissions to create EC2 instances, Security Groups, and Elastic IPs. * An existing VPC and Subnet ID in your desired AWS region. * The AMI ID for your chosen OS (this guide uses an Ubuntu 22.04 LTS AMI). * Credentials for the Infisical Relay to authenticate with your Infisical instance. This guide uses a Machine Identity token, but other methods are available. You can find a full list of authentication options [here](/cli/commands/relay#available-authentication-methods). ### Terraform Configuration Here is the complete Terraform configuration to deploy the Infisical Relay. ```terraform theme={"dark"} terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 5.0" } } } provider "aws" { region = "us-west-2" # Change to your desired AWS region } # Security Group for the Infisical Relay instance resource "aws_security_group" "infisical_relay_sg" { name = "infisical-relay-sg" description = "Allows inbound traffic for Infisical Relay and SSH" vpc_id = "vpc-0c71f9c5709d88d18" # Change to your VPC ID # Inbound: Allows the Infisical platform to securely communicate with the Relay server. ingress { from_port = 8443 to_port = 8443 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } # Inbound: Allows Infisical Gateway to securely communicate via the Relay. ingress { from_port = 2222 to_port = 2222 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } # Inbound: Allows secure shell (SSH) access for administration. ingress { from_port = 22 to_port = 22 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] # Restrict this to your IP in production } # Outbound: Allows the Relay server to make necessary outbound connections to the Infisical platform. egress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] } tags = { Name = "infisical-relay-sg" } } # Elastic IP for a static public IP address resource "aws_eip" "infisical_relay_eip" { tags = { Name = "infisical-relay-eip" } } # EC2 instance to run Infisical Relay module "infisical_relay_instance" { source = "terraform-aws-modules/ec2-instance/aws" version = "~> 5.6" name = "infisical-relay-example" ami = "ami-065778886ef8ec7c8" # Change to your desired AMI ID instance_type = "t3.micro" subnet_id = "subnet-0fd2337a1c604a494" # Change to your Subnet ID vpc_security_group_ids = [aws_security_group.infisical_relay_sg.id] associate_public_ip_address = false # We are using an Elastic IP instead user_data = <<-EOT #!/bin/bash set -e # Install Infisical CLI curl -1sLf 'https://artifacts-cli.infisical.com/setup.deb.sh' | bash apt-get update && apt-get install -y infisical # Install the relay as a systemd service. # This example uses a Machine Identity token for authentication via the INFISICAL_TOKEN environment variable. # # Note: For production environments, you might consider fetching the token from AWS Parameter Store or AWS Secrets Manager. export INFISICAL_TOKEN="your-machine-identity-token" sudo -E infisical relay systemd install \ --name "my-relay-example" \ --domain "https://app.infisical.com" \ --host "${aws_eip.infisical_relay_eip.public_ip}" # Start and enable the service to run on boot sudo systemctl start infisical-relay sudo systemctl enable infisical-relay EOT } # Associate the Elastic IP with the EC2 instance resource "aws_eip_association" "eip_assoc" { instance_id = module.infisical_relay_instance.id allocation_id = aws_eip.infisical_relay_eip.id } ``` The provided security group rules are open to the internet (`0.0.0.0/0`) for simplicity. In a production environment, you should restrict the `cidr_blocks` to known IP addresses for enhanced security, especially for the SSH port (22). ### How to Deploy 1. **Save the configuration:** Save the code above to a file named `main.tf`. 2. **Customize values:** Update the placeholder values in `main.tf` to match your AWS environment and Infisical credentials. You'll need to replace: * `region` in the `provider` block. * `vpc_id` in the `aws_security_group` resource. * `ami` and `subnet_id` in the `infisical_relay_instance` module. * The `INFISICAL_TOKEN` environment variable in the `user_data` script (e.g., `export INFISICAL_TOKEN="your-machine-identity-token"`). * The `--domain` in the `user_data` script if you are self-hosting Infisical. 3. **Apply the configuration:** Run the following Terraform commands in your terminal: ```bash theme={"dark"} terraform init terraform plan terraform apply ``` # Security Architecture Source: https://infisical.com/docs/documentation/platform/gateways/security Security model, tenant isolation, and best practices for Infisical Gateways and Relays The Infisical Gateway enables secure access to private resources using SSH reverse tunnels, certificate-based authentication, and a comprehensive PKI (Public Key Infrastructure) system. The architecture provides end-to-end encryption and complete tenant isolation through multiple certificate authorities. ## Security Model Overview ### Certificate Architecture The gateway system uses multiple certificate authorities depending on deployment configuration: **For Organizations Using Infisical-Managed Relays:** * **Instance relay SSH Client CA & Server CA** - Gateway ↔ Infisical Relay Server authentication * **Instance relay PKI Client CA & Server CA** - Platform ↔ Infisical Relay Server authentication * **Organization Gateway Client CA & Server CA** - Platform ↔ Gateway authentication **For Organizations Using Customer-Deployed Relays:** * **Organization relay SSH Client CA & Server CA** - Gateway ↔ Customer Relay Server authentication * **Organization relay PKI Client CA & Server CA** - Platform ↔ Customer Relay Server authentication * **Organization Gateway Client CA & Server CA** - Platform ↔ Gateway authentication ### Certificate Hierarchy ``` Instance Level (Shared Relays): ├── Instance Relay SSH CA (Gateway ↔ Relay) ├── Instance Relay PKI CA (Platform ↔ Relay) Organization Level: ├── Organization Relay SSH CA (Gateway ↔ Org Relay) ├── Organization Relay PKI CA (Platform ↔ Org Relay) └── Organization Gateway CA (Platform ↔ Gateway) ``` ## Communication Security ### 1. Gateway Registration When a gateway is first deployed: 1. Authenticates with Infisical using machine identity token 2. Receives SSH certificates for relay server authentication 3. Establishes SSH reverse tunnel to assigned relay server 4. Certificate issuance varies by relay configuration: * **Infisical-managed relay**: Receives Instance relay SSH client certificate + Instance relay SSH Server CA * **Customer-deployed relay**: Receives Organization relay SSH client certificate + Organization relay SSH Server CA ### 2. SSH Tunnel Authentication Gateway ↔ Relay Server communication uses SSH certificate authentication: * **Gateway Authentication**: * Presents SSH client certificate (Instance or Organization relay SSH Client CA) * Certificate contains gateway identification and permissions * Relay server validates certificate against appropriate SSH Client CA * **Relay Server Authentication**: * Presents SSH server certificate (Instance or Organization relay SSH Server CA) * Gateway validates certificate against appropriate SSH Server CA * Ensures gateway connects to legitimate relay infrastructure ### 3. Platform-to-Gateway Direct Connection The platform establishes secure direct connections with gateways through a **TLS-pinned tunnel** mechanism: 1. **TLS-Pinned Tunnel Establishment**: * Gateway initiates outbound connection to platform through SSH reverse tunnel * Platform establishes direct mTLS connection with gateway using Organization Gateway certificates * TLS certificate pinning ensures the connection is bound to the specific gateway identity * No inbound connections required - all communication flows through the outbound tunnel 2. **Connection Flow**: ``` Platform ←→ [TCP with TLS] ←→ Relay ←→ [SSH Reverse Tunnel] ←→ Gateway ``` * Gateway maintains persistent outbound SSH tunnel to relay server * Platform connects to relay server using TCP with TLS * Relay routes encrypted traffic between platform and gateway * TLS handshake occurs between platform and gateway through the relay * Application traffic flows through the TLS-pinned tunnel via relay routing 3. **Security Benefits**: * **No inbound connections**: Gateway never needs to accept incoming connections * **Certificate-based authentication**: Uses Organization Gateway certificates for mutual TLS * **Double encryption**: TLS traffic within SSH tunnel provides layered security * **Relay server isolation**: Relay cannot decrypt either TLS or application data * **Tenant isolation**: Each organization's traffic flows through separate authenticated channels ## Tenant Isolation ### Multi-Layer Certificate Isolation The architecture provides tenant isolation through multiple certificate authority layers: * **Instance-level CAs**: Shared relay infrastructure uses instance-level certificates * **Organization-level CAs**: Each organization has unique certificate authorities * **Relay deployment flexibility**: Organizations can choose shared or dedicated relay infrastructure * **Cryptographic separation**: Cross-tenant communication is cryptographically impossible ### Authentication Flows by Deployment Type **Infisical-Managed Relay Deployments:** * Gateway authenticates with relay using Instance relay SSH certificates * Platform authenticates with relay using Instance relay PKI certificates * Platform authenticates with gateway using Organization Gateway certificates **Customer-Deployed Relay Deployments:** * Gateway authenticates with relay using Organization relay SSH certificates * Platform authenticates with relay using Organization relay PKI certificates * Platform authenticates with gateway using Organization Gateway certificates ### Resource Access Control 1. **Certificate Validation**: * All connections require valid certificates from appropriate CAs * Embedded certificate details control access permissions * Ephemeral certificate validation ensures time-bound access 2. **Network Isolation**: * Each organization's traffic flows through isolated certificate-authenticated channels * Relay servers route traffic based on certificate validation without content access * Gateway validates all incoming connections against Organization Gateway Client CA # GitHub Team Sync Source: https://infisical.com/docs/documentation/platform/github-org-sync Learn how to automatically synchronize your GitHub teams with Infisical Groups. ## Overview The GitHub Organization Synchronization feature streamlines user and group management by automatically syncing users belonging to your specified GitHub organization with corresponding groups within Infisical. This integration ensures that users logging in via GitHub are automatically added to or removed from Infisical groups based on their team memberships within your GitHub organization. ## Configuration To enable and configure GitHub Organization Synchronization, follow these steps: 1. Navigate to the **Single Sign-On (SSO)** page and select the **Provisioning** tab. config 2. Click the **Configure** button and provide the name of your GitHub Organization. config-modal Toggle ON GitHub Organization sync to activate sync. toggle-on Connecting the Infisical OAuth application grants it permission to **read:org** details. This approval is done by selecting your organization during the GitHub OAuth login process. 1. Initiate the login process via the GitHub OAuth flow. oauth-flow-start 2. Select the organization you have connected. 3. Grant access to Infisical oauth application to your configured organization. Infisical shown here is an organization, just for walkthrough. grant-access This action only needs to be done once and authorizes the Infisical OAuth app to read organization details, including team information. The following users don't need to select organization in GitHub on login anymore. ## Working Once configured, the GitHub Organization Synchronization feature functions as follows: When a user logs in via the GitHub OAuth flow and selects the configured organization, the system will then automatically synchronize the teams they are a part of in GitHub with corresponding groups in Infisical. ## Manual Team Sync You can manually synchronize GitHub teams for all organization members who have previously logged in with GitHub. This bulk sync operation updates team memberships without requiring users to log in again. To perform manual syncs, you'll need to create a GitHub Personal Access Token with the appropriate permissions. GitHub offers two types of tokens: 1. Go to [GitHub Settings → Personal Access Tokens → Tokens (classic)](https://github.com/settings/tokens) 2. Click **Generate new token** → **Generate new token (classic)** 3. Give your token a descriptive name (e.g., "Infisical GitHub Sync") 4. Set an appropriate expiration date 5. Select the **read:org** scope - Required to read organization team information 6. Click **Generate token** 7. Copy the token immediately (you won't be able to see it again) Classic Token Creation 1. Go to [GitHub Settings → Personal Access Tokens → Fine-grained tokens](https://github.com/settings/personal-access-tokens/new) 2. Click **Generate new token** 3. Give your token a descriptive name (e.g., "Infisical GitHub Sync") 4. Set an appropriate expiration date 5. Select your organization under **Resource owner** 6. Under **Organization permissions**, set **Members** to **Read** 7. Click **Generate token** 8. Copy the token immediately (you won't be able to see it again) Fine-grained Token Creation 1. Navigate to the **Single Sign-On (SSO)** page and select the **Provisioning** tab. 2. Click the **Configure** button next to your GitHub Organization configuration. 3. In the configuration modal, you'll find an optional **GitHub Access Token** field. 4. Paste the token you generated in the previous step. 5. Click **Update** to save the configuration. Token Configuration Modal Once you have configured the GitHub access token: 1. Navigate to the **Single Sign-On (SSO)** page and select the **Provisioning** tab. 2. You'll see a **Sync Now** section with a button to trigger the manual sync. 3. Click **Sync Now** to synchronize GitHub teams for all organization members. Manual Sync Button The sync operation will process all organization members who have previously logged in with GitHub and update their team memberships accordingly. ## Troubleshooting If you encounter an error related to this, it indicates that you need to approve the Infisical OAuth application within your GitHub organization. You can verify the application's approval status by navigating to **[https://github.com/organizations/\_\_your-organization\_\_/settings/oauth\_application\_policy](https://github.com/organizations/__your-organization__/settings/oauth_application_policy)**. Replace `__your-organization__` with the actual name of your GitHub organization. check-approval # User Groups Source: https://infisical.com/docs/documentation/platform/groups Manage user groups in Infisical. User Groups is a paid feature. If you're using Infisical Cloud, then it is available under the **Enterprise Tier**. If you're self-hosting Infisical, then you should contact [team@infisical.com](mailto:team@infisical.com) to purchase an enterprise license to use it. ## Concept A (user) group is a collection of users that you can create in an Infisical organization to more efficiently manage permissions and access control for multiple users together. For example, you can have a group called `Developers` with the `Developer` role containing all the developers in your organization. User groups have the following properties: * If a group is added to a project under specific role(s), all users in the group will be provisioned access to the project with the role(s). Conversely, if a group is removed from a project, all users in the group will lose access to the project. * If a user is added to a group, they will inherit the access control properties of the group including access to project(s) under the role(s) assigned to the group. Conversely, if a user is removed from a group, they will lose access to project(s) that the group has access to. * If a user was previously added to a project under a role and is later added to a group that has access to the same project under a different role, then the user will now have access to the project under the composite permissions of the two roles. If the group is subsequently removed from the project, the user will not lose access to the project as they were previously added to the project separately. * A user can be part of multiple groups. If a user is part of multiple groups, they will inherit the composite permissions of all the groups that they are part of. ## Workflow In the following steps, we explore how to create and use user groups to provision user access to projects in Infisical. To create a group, head to your Organization Settings > Access Control > Groups and press **Create group**. groups org When creating a group, you specify an organization level [role](/documentation/platform/access-controls/role-based-access-controls) for it to assume; you can configure roles in Organization Settings > Access Control > Organization Roles. groups org create Now input a few details for your new group. Here’s some guidance for each field: * Name (required): A friendly name for the group like `Engineering`. * Slug (required): A unique identifier for the group like `engineering`. * Role (required): A role from the Organization Roles tab for the group to assume. The organization role assigned will determine what organization level resources this group can have access to. Next, you'll want to assign users to the group. To do this, press on the users icon on the group and start assigning users to the group. groups org users In this example, we're assigning **Alan Turing** and **Ada Lovelace** to the group **Engineering**. groups org assign users To enable the group to access project-level resources such as secrets within a specific project, you should add it to that project. To do this, head over to the project you want to add the group to and go to Project Settings > Access Control > Groups and press **Add group**. groups project Next, select the group you want to add to the project and the project level role you want to allow it to assume. The project role assigned will determine what project level resources this group can have access to. groups project add That's it! The users of the group now have access to the project under the role you assigned to the group. # Alibaba Cloud Auth Source: https://infisical.com/docs/documentation/platform/identities/alicloud-auth Learn how to authenticate with Infisical using Alibaba Cloud user accounts. **Alibaba Cloud Auth** is an authentication method that verifies Alibaba Cloud users through signature validation, allowing secure access to Infisical resources. ## Diagram The following sequence diagram illustrates the Alibaba Cloud Auth workflow for authenticating Alibaba Cloud users with Infisical. ```mermaid theme={"dark"} sequenceDiagram participant Client participant Infisical participant Alibaba Cloud Note over Client,Client: Step 1: Sign user identity request Note over Client,Infisical: Step 2: Login Operation Client->>Infisical: Send signed request details to /api/v1/auth/alicloud-auth/login Note over Infisical,Alibaba Cloud: Step 3: Request verification Infisical->>Alibaba Cloud: Forward signed request Alibaba Cloud-->>Infisical: Return user details Note over Infisical: Step 4: Identity property validation Infisical->>Client: Return short-lived access token Note over Client,Infisical: Step 5: Access Infisical API with token Client->>Infisical: Make authenticated requests using the short-lived access token ``` ## Concept At a high level, Infisical authenticates an Alibaba Cloud user by verifying its identity and checking that it meets specific requirements (e.g., its ARN is whitelisted) at the `/api/v1/auth/alicloud-auth/login` endpoint. If successful, then Infisical returns a short-lived access token that can be used to make authenticated requests to the Infisical API. To be more specific: 1. The client signs a `GetCallerIdentity` request using an Alibaba Cloud user's access key secret; this is done using an HMAC sha1 algorithm. 2. The client sends the signed request information alongside the signature to Infisical at the `/api/v1/auth/alicloud-auth/login` endpoint. 3. Infisical reconstructs the request and sends it to Alibaba Cloud for verification and obtains the identity associated with the Alibaba Cloud user. 4. Infisical checks the user's properties against set criteria such as **Allowed ARNs**. 5. If all checks pass, Infisical returns a short-lived access token that the client can use to make authenticated requests to the Infisical API. ## Prerequisite In order to sign requests, you must have an Alibaba Cloud user with credentials such as access key ID and secret. If you're unaware of how to create a user and obtain the needed credentials, expand the menu below. Visit [https://ram.console.aliyun.com/users](https://ram.console.aliyun.com/users) to get to the Users page and click **Create User**. Users Page Fill out the username and display name with values of your choice and click **OK**. User Info After a user has been created, click on its row to see user information. User Info Click **Create AccessKey** and select the most relevant option for your use-case. Then click **Continue**. User Info Save the displayed credentials for later steps. User Info ## Guide In the following steps, we explore how to create and use identities for your workloads and applications on Alibaba Cloud to access the Infisical API using request signing. ### Creating an identity To create an identity, head to your Organization Settings > Access Control > [Identities](https://app.infisical.com/organization/access-management?selectedTab=identities) and press **Create identity**. identities organization When creating an identity, you specify an organization-level [role](/documentation/platform/access-controls/role-based-access-controls) for it to assume; you can configure roles in Organization Settings > Access Control > [Organization Roles](https://app.infisical.com/organization/access-management?selectedTab=roles). identities organization create Input some details for your new identity: * **Name (required):** A friendly name for the identity. * **Role (required):** A role from the [**Organization Roles**](https://app.infisical.com/organization/access-management?selectedTab=roles) tab for the identity to assume. The organization role assigned will determine what organization-level resources this identity can have access to. Once you've created an identity, you'll be redirected to a page where you can manage the identity. identities page Since the identity has been configured with [Universal Auth](https://infisical.com/docs/documentation/platform/identities/universal-auth) by default, you should reconfigure it to use Alibaba Cloud Auth instead. To do this, click the cog next to **Universal Auth** and then select **Delete** in the options dropdown. identities press cog identities page remove default auth Now create a new Alibaba Cloud Auth Method. identities create alicloud auth method Here's some information about each field: * **Allowed ARNs:** A comma-separated list of trusted Alibaba Cloud ARNs that are allowed to authenticate with Infisical. * **Access Token TTL (default is `2592000` equivalent to 30 days):** The lifetime for an access token in seconds. This value will be referenced at renewal time. * **Access Token Max TTL (default is `2592000` equivalent to 30 days):** The maximum lifetime for an access token in seconds. This value will be referenced at renewal time. * **Access Token Max Number of Uses (default is `0`):** The maximum number of times that an access token can be used; a value of `0` implies an infinite number of uses. * **Access Token Trusted IPs:** The IPs or CIDR ranges that access tokens can be used from. By default, each token is given the `0.0.0.0/0`, allowing usage from any network address. ### Adding an identity to a project In order to allow an identity to access project-level resources such as secrets, you must add it to the relevant projects. To do this, head over to the project you want to add the identity to and navigate to Project Settings > Access Control > Machine Identities and press **Add Identity**. identities project Select the identity you want to add to the project and the project-level role you want it to assume. The project role given to the identity will determine what project-level resources this identity can access. identities project create ### Accessing the Infisical API with the identity To access the Infisical API as the identity, you need to construct a signed `GetCallerIdentity` request and then make a request to the `/api/v1/auth/alicloud-auth/login` endpoint passing the signed data and signature. Below is an example of how you can authenticate with Infisical using NodeJS. ```ts theme={"dark"} import crypto from "crypto"; // We highly recommend using environment variables instead of hardcoding these values const ALICLOUD_ACCESS_KEY_ID = "..."; const ALICLOUD_ACCESS_KEY_SECRET = "..."; const params: { [key: string]: string } = { Action: "GetCallerIdentity", Format: "JSON", Version: "2015-04-01", AccessKeyId: ALICLOUD_ACCESS_KEY_ID, SignatureMethod: "HMAC-SHA1", Timestamp: new Date().toISOString(), SignatureVersion: "1.0", SignatureNonce: crypto.randomBytes(16).toString("hex"), }; const canonicalizedQueryString = Object.keys(params) .sort() .map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`) .join("&"); const stringToSign = `GET&%2F&${encodeURIComponent(canonicalizedQueryString)}`; const signature = crypto .createHmac("sha1", `${ALICLOUD_ACCESS_KEY_SECRET}&`) .update(stringToSign) .digest("base64"); const res = await fetch( "https://app.infisical.com/api/v1/auth/alicloud-auth/login", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ identityId: "...", // Replace with your identity ID Signature: signature, ...params, }), }, ); const json = await res.json(); console.log("Infisical Response:", JSON.stringify(json)); ``` Each identity access token has a time-to-live (TTL) which you can infer from the response of the login operation; the default TTL is `7200` seconds, which can be adjusted. If an identity access token expires, it can no longer access the Infisical API. A new access token should be obtained by performing another login operation. # Machine Identity Auth Templates Source: https://infisical.com/docs/documentation/platform/identities/auth-templates Learn how to use auth templates to standardize authentication configurations for machine identities. ## Concept Machine Identity Auth Templates allow you to create reusable authentication configurations that can be applied across multiple machine identities. This feature helps standardize authentication setups, reduces configuration drift, and simplifies identity management at scale. Instead of manually configuring authentication settings for each identity, you can create templates with predefined authentication parameters and apply them to multiple identities. This ensures consistency and reduces the likelihood of configuration errors. Key Benefits: * **Standardization**: Ensure consistent authentication configurations across identities * **Efficiency**: Reduce time spent configuring individual identities * **Governance**: Centrally manage and update authentication parameters * **Scalability**: Easily apply proven configurations to new identities ## Managing Auth Templates Auth templates are managed in **Organization Settings > Access Control > Identities** under the **Identity Auth Templates** section. Identity Auth Templates Section ### Creating a Template In your organization settings, go to **Access Control > Identities** and scroll down to the **Identity Auth Templates** section. Click **Create Template** to open the template creation modal. Create Template Button Select the authentication method you want to create a template for (currently supports LDAP Auth). Fill in the template configuration based on your chosen authentication method. **For LDAP Auth templates**, configure the following fields: LDAP Auth Template * **Template Name**: A descriptive name for your template * **URL**: The LDAP server to connect to such as `ldap://ldap.your-org.com`, `ldaps://ldap.myorg.com:636` *(for connection over SSL/TLS)*, etc. * **Bind DN**: The DN to bind to the LDAP server with. * **Bind Pass**: The password to bind to the LDAP server with. * **Search Base / DN**: Base DN under which to perform user search such as `ou=Users,dc=acme,dc=com`. * **CA Certificate**: The CA certificate to use when verifying the LDAP server certificate. This field is optional but recommended. You can read more about LDAP Auth configuration in the [LDAP Auth documentation](/documentation/platform/identities/ldap-auth/general). ### Using Templates Once created, templates can be applied when configuring authentication methods for machine identities. When adding an auth method to an identity, you'll have the option to select from available templates or configure manually. Attach Template Attach Template Form ### Managing Template Usage You can view which identities are using a specific template by clicking **View Usages** in the template's dropdown menu. Template Usages Template Usages Modal ## FAQ Yes, you can edit existing templates. After editing a template, changes to templates will automatically update identities that are already using them. If you delete a template that's currently being used by identities, those identities will continue to function with their existing configuration. However, the link to the template will be broken, and you won't be able to use the template for new identities. Yes, click **View Usages** in the template's dropdown menu to see all identities currently using that template. Currently, auth templates support LDAP Auth. Support for additional authentication methods will be added in future releases. # AWS Auth Source: https://infisical.com/docs/documentation/platform/identities/aws-auth Learn how to authenticate with Infisical for EC2 instances, Lambda functions, and other IAM principals. **AWS Auth** is an AWS-native authentication method for IAM principals like EC2 instances or Lambda functions to access Infisical. ## Diagram The following sequence diagram illustrates the AWS Auth workflow for authenticating AWS IAM principals with Infisical. ```mermaid theme={"dark"} sequenceDiagram participant Client as Client participant Infis as Infisical participant AWS as AWS STS Note over Client,Client: Step 1: Sign GetCallerIdentityQuery Note over Client,Infis: Step 2: Login Operation Client->>Infis: Send signed query details /api/v1/auth/aws-auth/login Note over Infis,AWS: Step 3: Query verification Infis->>AWS: Forward signed GetCallerIdentity query AWS-->>Infis: Return IAM user/role details Note over Infis: Step 4: Identity Property Validation Infis->>Client: Return short-lived access token Note over Client,Infis: Step 5: Access Infisical API with Token Client->>Infis: Make authenticated requests using the short-lived access token ``` ## Concept At a high-level, Infisical authenticates an IAM principal by verifying its identity and checking that it meets specific requirements (e.g. it is an allowed IAM principal ARN) at the `/api/v1/auth/aws-auth/login` endpoint. If successful, then Infisical returns a short-lived access token that can be used to make authenticated requests to the Infisical API. To be more specific: 1. The client IAM principal signs a `GetCallerIdentity` query using the [AWS Signature v4 algorithm](https://docs.aws.amazon.com/IAM/latest/UserGuide/create-signed-request.html); this is done using the credentials from the AWS environment where the IAM principal is running. 2. The client sends the signed query data to Infisical including the request method, request body, and request headers at the `/api/v1/auth/aws-auth/login` endpoint. 3. Infisical reconstructs the query and sends it to AWS STS API via the [sts:GetCallerIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetCallerIdentity.html) method for verification and obtains the identity associated with the IAM principal. 4. Infisical checks the identity's properties against set criteria such **Allowed Principal ARNs**. 5. If all is well, Infisical returns a short-lived access token that the IAM principal can use to make authenticated requests to the Infisical API. We recommend using one of Infisical's clients like SDKs or the Infisical Agent to authenticate with Infisical using AWS Auth as they handle the authentication process including the signed `GetCallerIdentity` query construction for you. Also, note that Infisical needs network-level access to send requests to the AWS STS API as part of the AWS Auth workflow. ## Guide In the following steps, we explore how to create and use identities for your workloads and applications on AWS to access the Infisical API using the AWS Auth authentication method. To create an identity, head to your Organization Settings > Access Control > Identities and press **Create identity**. identities organization When creating an identity, you specify an organization level [role](/documentation/platform/access-controls/role-based-access-controls) for it to assume; you can configure roles in Organization Settings > Access Control > Organization Roles. identities organization create Now input a few details for your new identity. Here's some guidance for each field: * Name (required): A friendly name for the identity. * Role (required): A role from the **Organization Roles** tab for the identity to assume. The organization role assigned will determine what organization level resources this identity can have access to. Once you've created an identity, you'll be redirected to a page where you can manage the identity. identities page Since the identity has been configured with Universal Auth by default, you should re-configure it to use AWS Auth instead. To do this, press to edit the **Authentication** section, remove the existing Universal Auth configuration, and add a new AWS Auth configuration onto the identity. identities page remove default auth identities create aws auth method Here's some more guidance on each field: * Allowed Principal ARNs: A comma-separated list of trusted IAM principal ARNs that are allowed to authenticate with Infisical. The values should take one of three forms: `arn:aws:iam::123456789012:user/MyUserName`, `arn:aws:iam::123456789012:role/MyRoleName`, or `arn:aws:iam::123456789012:*`. Using a wildcard in this case allows any IAM principal in the account `123456789012` to authenticate with Infisical under the identity. * Allowed Account IDs: A comma-separated list of trusted AWS account IDs that are allowed to authenticate with Infisical. * STS Endpoint (default is `https://sts.amazonaws.com/`): The endpoint URL for the AWS STS API. This value should be adjusted based on the AWS region you are operating in (e.g. `https://sts.us-east-1.amazonaws.com/`); refer to the list of regional STS endpoints [here](https://docs.aws.amazon.com/general/latest/gr/sts.html). * Access Token TTL (default is `2592000` equivalent to 30 days): The lifetime for an acccess token in seconds. This value will be referenced at renewal time. * Access Token Max TTL (default is `2592000` equivalent to 30 days): The maximum lifetime for an acccess token in seconds. This value will be referenced at renewal time. * Access Token Max Number of Uses (default is `0`): The maximum number of times that an access token can be used; a value of `0` implies infinite number of uses. * Access Token Trusted IPs: The IPs or CIDR ranges that access tokens can be used from. By default, each token is given the `0.0.0.0/0`, allowing usage from any network address. To enable the identity to access project-level resources such as secrets within a specific project, you should add it to that project. To do this, head over to the project you want to add the identity to and go to Project Settings > Access Control > Machine Identities and press **Add identity**. Next, select the identity you want to add to the project and the project level role you want to allow it to assume. The project role assigned will determine what project level resources this identity can have access to. identities project identities project create To access the Infisical API as the identity, you need to construct a signed `GetCallerIdentity` query using the [AWS Signature v4 algorithm](https://docs.aws.amazon.com/IAM/latest/UserGuide/create-signed-request.html) and make a request to the `/api/v1/auth/aws-auth/login` endpoint containing the query data in exchange for an access token. We provide a few code examples below of how you can authenticate with Infisical from inside a Lambda function, EC2 instance, etc. and obtain an access token to access the [Infisical API](/api-reference/overview/introduction). The following query construction is an example of how you can authenticate with Infisical from inside a Lambda function. The shown example uses Node.js but you can use other languages supported by AWS Lambda. ```javascript theme={"dark"} import AWS from "aws-sdk"; import axios from "axios"; export const handler = async (event, context) => { try { const region = process.env.AWS_REGION; AWS.config.update({ region }); const iamRequestURL = `https://sts.${region}.amazonaws.com/`; const iamRequestBody = "Action=GetCallerIdentity&Version=2011-06-15"; const iamRequestHeaders = { "Content-Type": "application/x-www-form-urlencoded; charset=utf-8", Host: `sts.${region}.amazonaws.com`, }; // Create the request const request = new AWS.HttpRequest(iamRequestURL, region); request.method = "POST"; request.headers = iamRequestHeaders; request.headers["X-Amz-Date"] = AWS.util.date .iso8601(new Date()) .replace(/[:-]|\.\d{3}/g, ""); request.body = iamRequestBody; request.headers["Content-Length"] = Buffer.byteLength(iamRequestBody).toString(); // Sign the request const signer = new AWS.Signers.V4(request, "sts"); signer.addAuthorization(AWS.config.credentials, new Date()); const infisicalUrl = "https://app.infisical.com"; // or your self-hosted Infisical URL const identityId = ""; const { data } = await axios.post( `${infisicalUrl}/api/v1/auth/aws-auth/login`, { identityId, iamHttpRequestMethod: "POST", iamRequestUrl: Buffer.from(iamRequestURL).toString("base64"), iamRequestBody: Buffer.from(iamRequestBody).toString("base64"), iamRequestHeaders: Buffer.from( JSON.stringify(iamRequestHeaders) ).toString("base64"), } ); console.log("result data: ", data); // access token here } catch (err) { console.error(err); } }; ``` The following query construction is an example of how you can authenticate with Infisical from inside a EC2 instance. The shown example uses Node.js but you can use other language you wish. ```javascript theme={"dark"} import AWS from "aws-sdk"; import axios from "axios"; const main = async () => { try { // obtain region from EC2 instance metadata const tokenResponse = await axios.put("http://169.254.169.254/latest/api/token", null, { headers: { "X-aws-ec2-metadata-token-ttl-seconds": "21600" } }); const url = "http://169.254.169.254/latest/dynamic/instance-identity/document"; const response = await axios.get(url, { headers: { "X-aws-ec2-metadata-token": tokenResponse.data } }); const region = response.data.region; AWS.config.update({ region }); const iamRequestURL = `https://sts.${region}.amazonaws.com/`; const iamRequestBody = "Action=GetCallerIdentity&Version=2011-06-15"; const iamRequestHeaders = { "Content-Type": "application/x-www-form-urlencoded; charset=utf-8", Host: `sts.${region}.amazonaws.com` }; const request = new AWS.HttpRequest(new AWS.Endpoint(iamRequestURL), AWS.config.region); request.method = "POST"; request.headers = iamRequestHeaders; request.headers["X-Amz-Date"] = AWS.util.date.iso8601(new Date()).replace(/[:-]|\.\d{3}/g, ""); request.body = iamRequestBody; request.headers["Content-Length"] = Buffer.byteLength(iamRequestBody); const signer = new AWS.Signers.V4(request, "sts"); signer.addAuthorization(AWS.config.credentials, new Date()); const infisicalUrl = "https://app.infisical.com"; // or your self-hosted Infisical URL const identityId = ""; const { data } = await axios.post(`${infisicalUrl}/api/v1/auth/aws-auth/login`, { identityId, iamHttpRequestMethod: "POST", iamRequestUrl: Buffer.from(iamRequestURL).toString("base64"), iamRequestBody: Buffer.from(iamRequestBody).toString("base64"), iamRequestHeaders: Buffer.from(JSON.stringify(iamRequestHeaders)).toString("base64") }); console.log("result data: ", data); // access token here } catch (err) { console.error(err); } } main(); ``` The following query construction provides a generic example of how you can construct a signed `GetCallerIdentity` query and obtain the required payload components. The shown example uses Node.js but you can use any language you wish. ```javascript theme={"dark"} const AWS = require("aws-sdk"); const region = ""; const infisicalUrl = "https://app.infisical.com"; // or your self-hosted Infisical URL const iamRequestURL = `https://sts.${region}.amazonaws.com/`; const iamRequestBody = "Action=GetCallerIdentity&Version=2011-06-15"; const iamRequestHeaders = { "Content-Type": "application/x-www-form-urlencoded; charset=utf-8", Host: `sts.${region}.amazonaws.com` }; const request = new AWS.HttpRequest(new AWS.Endpoint(iamRequestURL), region); request.method = "POST"; request.headers = iamRequestHeaders; request.headers["X-Amz-Date"] = AWS.util.date.iso8601(new Date()).replace(/[:-]|\.\d{3}/g, ""); request.body = iamRequestBody; request.headers["Content-Length"] = Buffer.byteLength(iamRequestBody); const signer = new AWS.Signers.V4(request, "sts"); signer.addAuthorization(AWS.config.credentials, new Date()); ``` #### Sample request ```bash Request theme={"dark"} curl --location --request POST 'https://app.infisical.com/api/v1/auth/aws-auth/login' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'identityId=...' \ --data-urlencode 'iamHttpRequestMethod=...' \ --data-urlencode 'iamRequestBody=...' \ --data-urlencode 'iamRequestHeaders=...' ``` Note that you should replace `` with the ID of the identity you created in step 1. #### Sample response ```bash Response theme={"dark"} { "accessToken": "...", "expiresIn": 7200, "accessTokenMaxTTL": 43244 "tokenType": "Bearer" } ``` Next, you can use the access token to access the [Infisical API](/api-reference/overview/introduction) The following query construction is an example of how you can authenticate with Infisical from inside an EKS pod. The shown example uses Node.js Typescript but you can use any language you wish. ```javascript theme={"dark"} import axios from "axios"; import { Sha256 } from "@aws-crypto/sha256-js"; import { fromNodeProviderChain } from "@aws-sdk/credential-providers"; import { HttpRequest } from "@aws-sdk/protocol-http"; import { SignatureV4 } from "@aws-sdk/signature-v4"; const main = async () => { try { const tokenRes = await axios.put("http://169.254.169.254/latest/api/token", undefined, { headers: { "X-aws-ec2-metadata-token-ttl-seconds": "21600" } }); const { data: { region } } = await axios.get<{ region: string }>("http://169.254.169.254/latest/dynamic/instance-identity/document", { headers: { "X-aws-ec2-metadata-token": tokenRes.data, Accept: "application/json" } }); const credentials = await fromNodeProviderChain()(); if (!credentials.accessKeyId || !credentials.secretAccessKey) { throw new Error("Credentials not found"); } const iamRequestURL = `https://sts.${region}.amazonaws.com/`; const iamRequestBody = "Action=GetCallerIdentity&Version=2011-06-15"; const iamRequestHeaders = { "Content-Type": "application/x-www-form-urlencoded; charset=utf-8", Host: `sts.${region}.amazonaws.com` }; const request = new HttpRequest({ protocol: "https:", hostname: `sts.${region}.amazonaws.com`, path: "/", method: "POST", headers: { ...iamRequestHeaders, "Content-Length": String(Buffer.byteLength(iamRequestBody)) }, body: iamRequestBody }); const signer = new SignatureV4({ credentials, region, service: "sts", sha256: Sha256 }); const signedRequest = await signer.sign(request); const headers: Record = {}; Object.entries(signedRequest.headers).forEach(([key, value]) => { if (typeof value === "string") headers[key] = value; }); const iamRequest = { iamHttpRequestMethod: "POST", iamRequestUrl: iamRequestURL, iamRequestBody: iamRequestBody, iamRequestHeaders: headers }; const { data: { accessToken } } = await axios.post<{ accessToken: string }>("https://app.infisical.com/api/v1/auth/aws-auth/login", { ...iamRequest, identityId: "" }); console.log(`Infisical Access Token: ${accessToken}`); } catch (e) { console.error("Failed to do AWS auth", e); } }; ``` We recommend using one of Infisical's clients like SDKs or the Infisical Agent to authenticate with Infisical using AWS Auth as they handle the authentication process including the signed `GetCallerIdentity` query construction for you. Each identity access token has a time-to-live (TTL) which you can infer from the response of the login operation; the default TTL is `7200` seconds which can be adjusted. If an identity access token expires, it can no longer authenticate with the Infisical API. In this case, a new access token should be obtained by performing another login operation. # Azure Auth Source: https://infisical.com/docs/documentation/platform/identities/azure-auth Learn how to authenticate with Infisical for services on Azure **Azure Auth** is an Azure-native authentication method for Azure resources like Azure VMs, Azure App Services, Azure Functions, Azure Kubernetes Service, etc. to access Infisical. ## Diagram The following sequence diagram illustrates the Azure Auth workflow for authenticating Azure [service principals](https://learn.microsoft.com/en-us/entra/identity-platform/app-objects-and-service-principals?tabs=browser) with Infisical. ```mermaid theme={"dark"} sequenceDiagram participant Client as Client participant Infis as Infisical participant Azure as Azure AD OpenID Note over Client,Azure: Step 1: Instance Identity Token Retrieval Client->>Azure: Request managed identity access token Azure-->>Client: Return managed identity access token Note over Client,Infis: Step 2: Identity Token Login Operation Client->>Infis: Send managed identity access token to /api/v1/auth/azure-auth/login Infis->>Azure: Request public key Azure-->>Infis: Return public key Note over Infis: Step 3: Identity Token Verification Note over Infis: Step 4: Identity Property Validation Infis->>Client: Return short-lived access token Note over Client,Infis: Step 4: Access Infisical API with Token Client->>Infis: Make authenticated requests using the short-lived access token ``` ## Concept At a high-level, Infisical authenticates an Azure service by verifying its identity and checking that it meets specific requirements (e.g. it is bound to an allowed service principal) at the `/api/v1/auth/azure-auth/login` endpoint. If successful, then Infisical returns a short-lived access token that can be used to make authenticated requests to the Infisical API. To be more specific: 1. The client running on an Azure service obtains an [access token](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token#get-a-token-using-http) that is a JWT token representing the managed identity for the Azure resource such as a Virtual Machine; the managed identity is associated with a service principal in Azure AD. 2. The client sends the access token to Infisical. 3. Infisical verifies the token against the corresponding public key at the [public Azure AD OpenID configuration endpoint](https://learn.microsoft.com/en-us/answers/questions/793793/azure-ad-validate-access-token). 4. Infisical checks if the entity behind the access token is allowed to authenticate with Infisical based on set criteria such as **Allowed Service Principal IDs**. 5. If all is well, Infisical returns a short-lived access token that the client can use to make authenticated requests to the Infisical API. We recommend using one of Infisical's clients like SDKs or the Infisical Agent to authenticate with Infisical using Azure Auth as they handle the authentication process including generating the client access token for you. Also, note that Infisical needs network-level access to send requests to the Google Cloud API as part of the Azure Auth workflow. ## Guide In the following steps, we explore how to create and use identities for your applications in Azure to access the Infisical API using the Azure Auth authentication method. To create an identity, head to your Organization Settings > Access Control > Identities and press **Create identity**. identities organization When creating an identity, you specify an organization level [role](/documentation/platform/access-controls/role-based-access-controls) for it to assume; you can configure roles in Organization Settings > Access Control > Organization Roles. identities organization create Now input a few details for your new identity. Here's some guidance for each field: * Name (required): A friendly name for the identity. * Role (required): A role from the **Organization Roles** tab for the identity to assume. The organization role assigned will determine what organization level resources this identity can have access to. Once you've created an identity, you'll be redirected to a page where you can manage the identity. identities page Since the identity has been configured with Universal Auth by default, you should re-configure it to use Azure Auth instead. To do this, press to edit the **Authentication** section, remove the existing Universal Auth configuration, and add a new Azure Auth configuration onto the identity. identities page remove default auth identities create azure auth method Here's some more guidance on each field: * Tenant ID: The [tenant ID](https://learn.microsoft.com/en-us/entra/fundamentals/how-to-find-tenant) for the Azure AD organization. * Resource / Audience: The resource URL for the application registered in Azure AD. The value is expected to match the `aud` claim of the access token JWT later used in the login operation against Infisical. See the [resource](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token#get-a-token-using-http) parameter for how the audience is set when requesting a JWT access token from the Azure Instance Metadata Service (IMDS) endpoint. In most cases, this value should be `https://management.azure.com/` which is the default. * Allowed Service Principal IDs: A comma-separated list of Azure AD service principal IDs that are allowed to authenticate with Infisical. * Access Token TTL (default is `2592000` equivalent to 30 days): The lifetime for an acccess token in seconds. This value will be referenced at renewal time. * Access Token Max TTL (default is `2592000` equivalent to 30 days): The maximum lifetime for an acccess token in seconds. This value will be referenced at renewal time. * Access Token Max Number of Uses (default is `0`): The maximum number of times that an access token can be used; a value of `0` implies infinite number of uses. * Access Token Trusted IPs: The IPs or CIDR ranges that access tokens can be used from. By default, each token is given the `0.0.0.0/0`, allowing usage from any network address. To enable the identity to access project-level resources such as secrets within a specific project, you should add it to that project. To do this, head over to the project you want to add the identity to and go to Project Settings > Access Control > Machine Identities and press **Add identity**. Next, select the identity you want to add to the project and the project level role you want to allow it to assume. The project role assigned will determine what project level resources this identity can have access to. identities project identities project create To access the Infisical API as the identity, you need to generate a managed identity [access token](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token#get-a-token-using-http) that is a JWT token representing the managed identity for the Azure resource such as a Virtual Machine. The client token must be sent to the `/api/v1/auth/azure-auth/login` endpoint in exchange for a separate access token to access the Infisical API. We provide a few code examples below of how you can authenticate with Infisical to access the [Infisical API](/api-reference/overview/introduction). Start by making a request from your Azure client such as Virtual Machine to obtain a managed identity access token. For more examples of how to obtain the managed identity access token, refer to the [official documentation](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token#get-a-token-using-http). #### Sample request ```bash curl theme={"dark"} curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' -H Metadata:true -s ``` #### Sample response ```bash theme={"dark"} { "access_token": "eyJ0eXAi...", "refresh_token": "", "expires_in": "3599", "expires_on": "1506484173", "not_before": "1506480273", "resource": "https://management.azure.com/", "token_type": "Bearer" } ``` Next use send the obtained managed identity access token (i.e. the token from the `access_token` field above) to authenticate with Infisical and obtain a separate access token. #### Sample request ```bash Request theme={"dark"} curl --location --request POST 'https://app.infisical.com/api/v1/auth/gcp-auth/login' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'identityId=...' \ --data-urlencode 'jwt=...' ``` Note that you should replace `` with the ID of the identity you created in step 1. #### Sample response ```bash Response theme={"dark"} { "accessToken": "...", "expiresIn": 7200, "accessTokenMaxTTL": 43244 "tokenType": "Bearer" } ``` Next, you can use this access token to access the [Infisical API](/api-reference/overview/introduction) We recommend using one of Infisical's clients like SDKs or the Infisical Agent to authenticate with Infisical using Azure Auth as they handle the authentication process including retrieving the client access token. Each identity access token has a time-to-live (TTL) which you can infer from the response of the login operation; the default TTL is `7200` seconds which can be adjusted. If an identity access token expires, it can no longer authenticate with the Infisical API. In this case, a new access token should be obtained by performing another login operation. # GCP Auth Source: https://infisical.com/docs/documentation/platform/identities/gcp-auth Learn how to authenticate with Infisical for services on Google Cloud Platform **GCP Auth** is a GCP-native authentication method for GCP resources to access Infisical. It consists of two sub-methods/approaches: * GCP ID Token Auth: For GCP services including [Compute Engine](https://cloud.google.com/compute/docs/instances/verifying-instance-identity#request_signature), [App Engine standard environment](https://cloud.google.com/appengine/docs/standard/python3/runtime#metadata_server), [App Engine flexible environment](https://cloud.google.com/appengine/docs/flexible/python/runtime#metadata_server), [Cloud Functions](https://cloud.google.com/functions/docs/securing/function-identity#using_the_metadata_server_to_acquire_tokens), [Cloud Run](https://cloud.google.com/run/docs/container-contract#metadata-server), [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine/docs/concepts/workload-identity#instance_metadata), and [Cloud Build](https://cloud.google.com/kubernetes-engine/docs/concepts/workload-identity#instance_metadata) to authenticate with Infisical. * GCP IAM Auth: For Google Cloud Platform (GCP) service accounts to authenticate with Infisical. ## Diagram The following sequence diagram illustrates the GCP ID Token Auth workflow for authenticating GCP resources with Infisical. ```mermaid theme={"dark"} sequenceDiagram participant GCE as GCP Service participant Infis as Infisical participant Google as OAuth2 API Note over GCE,Google: Step 1: Instance Identity Token Retrieval GCE->>Google: Request instance identity metadata token Google-->>GCE: Return JWT token with RS256 signature Note over GCE,Infis: Step 2: Identity Token Login Operation GCE->>Infis: Send JWT token to /api/v1/auth/gcp-auth/login Infis->>Google: Request OAuth2 certificates Google-->>Infis: Return certificates Note over Infis: Step 3: Identity Token Verification Note over Infis: Step 4: Identity Property Validation Infis->>GCE: Return short-lived access token Note over GCE,Infis: Step 4: Access Infisical API with Token GCE->>Infis: Make authenticated requests using the short-lived access token ``` ## Concept At a high-level, Infisical authenticates a GCP resource by verifying its identity and checking that it meets specific requirements (e.g. it is an allowed GCE instance) at the `/api/v1/auth/gcp-auth/login` endpoint. If successful, then Infisical returns a short-lived access token that can be used to make authenticated requests to the Infisical API. To be more specific: 1. The client running on a GCP service obtains an [ID token](https://cloud.google.com/docs/authentication/get-id-token) constituting the identity for a GCP resource such as a GCE instance or Cloud Function; this is a unique JWT token that includes details about the instance as well as Google's [RS256 signature](https://datatracker.ietf.org/doc/html/rfc7518#section-3.3). 2. The client sends the ID token to Infisical at the `/api/v1/auth/gcp-auth/login` endpoint. 3. Infisical verifies the token against Google's [public OAuth2 certificates](https://www.googleapis.com/oauth2/v3/certs). 4. Infisical checks if the entity behind the ID token is allowed to authenticate with Infisical based on set criteria such as **Allowed Service Account Emails**. 5. If all is well, Infisical returns a short-lived access token that the client can use to make authenticated requests to the Infisical API. We recommend using one of Infisical's clients like SDKs or the Infisical Agent to authenticate with Infisical using GCP ID Token Auth as they handle the authentication process including generating the instance ID token for you. Also, note that Infisical needs network-level access to send requests to the Google Cloud API as part of the GCP Auth workflow. ## Guide In the following steps, we explore how to create and use identities for your workloads and applications on GCP to access the Infisical API using the GCP ID Token authentication method. To create an identity, head to your Organization Settings > Access Control > Identities and press **Create identity**. identities organization When creating an identity, you specify an organization level [role](/documentation/platform/access-controls/role-based-access-controls) for it to assume; you can configure roles in Organization Settings > Access Control > Organization Roles. identities organization create Now input a few details for your new identity. Here's some guidance for each field: * Name (required): A friendly name for the identity. * Role (required): A role from the **Organization Roles** tab for the identity to assume. The organization role assigned will determine what organization level resources this identity can have access to. Once you've created an identity, you'll be redirected to a page where you can manage the identity. identities page Since the identity has been configured with Universal Auth by default, you should re-configure it to use GCP Auth instead. To do this, press to edit the **Authentication** section, remove the existing Universal Auth configuration, and add a new GCP Auth configuration onto the identity; set the **Type** field to **GCP ID Token Auth**. identities page remove default auth identities create gcp auth method Here's some more guidance on each field: * Allowed Service Account Emails: A comma-separated list of trusted service account emails corresponding to the GCE resource(s) allowed to authenticate with Infisical; this could be something like `test@project.iam.gserviceaccount.com`, `12345-compute@developer.gserviceaccount.com`, etc. * Allowed Projects: A comma-separated list of trusted GCP projects that the GCE instance must belong to authenticate with Infisical. Note that this validation property will only work for GCE instances. * Allowed Zones: A comma-separated list of trusted zones that the GCE instances must belong to authenticate with Infisical; this should be the fully-qualified zone name in the format `-`like `us-central1-a`, `us-west1-b`, etc. Note that this validation property will only work for GCE instances. * Access Token TTL (default is `2592000` equivalent to 30 days): The lifetime for an acccess token in seconds. This value will be referenced at renewal time. * Access Token Max TTL (default is `2592000` equivalent to 30 days): The maximum lifetime for an acccess token in seconds. This value will be referenced at renewal time. * Access Token Max Number of Uses (default is `0`): The maximum number of times that an access token can be used; a value of `0` implies infinite number of uses. * Access Token Trusted IPs: The IPs or CIDR ranges that access tokens can be used from. By default, each token is given the `0.0.0.0/0`, allowing usage from any network address. To enable the identity to access project-level resources such as secrets within a specific project, you should add it to that project. To do this, head over to the project you want to add the identity to and go to Project Settings > Access Control > Machine Identities and press **Add identity**. Next, select the identity you want to add to the project and the project level role you want to allow it to assume. The project role assigned will determine what project level resources this identity can have access to. identities project identities project create To access the Infisical API as the identity, you need to generate an [ID token](https://cloud.google.com/docs/authentication/get-id-token) constituting the identity of the present GCE instance and make a request to the `/api/v1/auth/gcp-auth/login` endpoint containing the token in exchange for an access token. We provide a few code examples below of how you can authenticate with Infisical to access the [Infisical API](/api-reference/overview/introduction). Start by making a request from the GCE instance to obtain the ID token. For more examples of how to obtain the token in Java, Go, Node.js, etc. refer to the [official documentation](https://cloud.google.com/docs/authentication/get-id-token#curl). #### Sample request ```bash curl theme={"dark"} curl -H "Metadata-Flavor: Google" \ 'http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=&format=full' ``` Note that you should replace `` with the ID of the identity you created in step 1. Next use send the obtained JWT token along to authenticate with Infisical and obtain an access token. #### Sample request ```bash Request theme={"dark"} curl --location --request POST 'https://app.infisical.com/api/v1/auth/gcp-auth/login' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'identityId=...' \ --data-urlencode 'jwt=...' ``` #### Sample response ```bash Response theme={"dark"} { "accessToken": "...", "expiresIn": 7200, "accessTokenMaxTTL": 43244 "tokenType": "Bearer" } ``` Next, you can use the access token to access the [Infisical API](/api-reference/overview/introduction) We recommend using one of Infisical's clients like SDKs or the Infisical Agent to authenticate with Infisical using GCP IAM Auth as they handle the authentication process including generating the signed JWT token. Each identity access token has a time-to-live (TTL) which you can infer from the response of the login operation; the default TTL is `7200` seconds which can be adjusted. If an identity access token expires, it can no longer authenticate with the Infisical API. In this case, a new access token should be obtained by performing another login operation. ## Diagram The following sequence diagram illustrates the GCP IAM Auth workflow for authenticating GCP IAM service accounts with Infisical. ```mermaid theme={"dark"} sequenceDiagram participant GCE as Client participant Infis as Infisical participant Google as Cloud IAM Note over GCE,Google: Step 1: Signed JWT Token Generation GCE->>Google: Request to generate signed JWT token Google-->>GCE: Return signed JWT token Note over GCE,Infis: Step 2: JWT Token Login Operation GCE->>Infis: Send signed JWT token to /api/v1/auth/gcp-auth/login Infis->>Google: Request public key Google-->>Infis: Return public key Note over Infis: Step 3: JWT Token Verification Note over Infis: Step 4: JWT Property Validation Infis->>GCE: Return short-lived access token Note over GCE,Infis: Step 5: Access Infisical API with Token GCE->>Infis: Make authenticated requests using the short-lived access token ``` ## Concept At a high-level, Infisical authenticates an IAM service account by verifying its identity and checking that it meets specific requirements (e.g. it is an allowed service account) at the `/api/v1/auth/gcp-auth/login` endpoint. If successful, then Infisical returns a short-lived access token that can be used to make authenticated requests to the Infisical API. To be more specific: 1. The client generates a signed JWT token using the `projects.serviceAccounts.signJwt` [API method](https://cloud.google.com/iam/docs/reference/credentials/rest/v1/projects.serviceAccounts/signJwt); this is done using the service account credentials associated with the client. 2. The client sends the signed JWT token to Infisical at the `/api/v1/auth/gcp-auth/login` endpoint. 3. Infisical verifies the signed JWT token. 4. Infisical checks if the service account behind the JWT token is allowed to authenticate with Infisical based **Allowed Service Account Emails**. 5. If all is well, Infisical returns a short-lived access token that the client can use to make authenticated requests to the Infisical API. We recommend using one of Infisical's clients like SDKs or the Infisical Agent to authenticate with Infisical using GCP IAM Auth as they handle the authentication process including generating the signed JWT token. Also, note that Infisical needs network-level access to send requests to the Google Cloud API as part of the GCP Auth workflow. ## Guide In the following steps, we explore how to create and use identities for your workloads and applications on GCP to access the Infisical API using the GCP IAM authentication method. To create an identity, head to your Organization Settings > Access Control > Identities and press **Create identity**. identities organization When creating an identity, you specify an organization level [role](/documentation/platform/access-controls/role-based-access-controls) for it to assume; you can configure roles in Organization Settings > Access Control > Organization Roles. identities organization create Now input a few details for your new identity. Here's some guidance for each field: * Name (required): A friendly name for the identity. * Role (required): A role from the **Organization Roles** tab for the identity to assume. The organization role assigned will determine what organization level resources this identity can have access to. Once you've created an identity, you'll be redirected to a page where you can manage the identity. identities page Since the identity has been configured with Universal Auth by default, you should re-configure it to use GCP Auth instead. To do this, press to edit the **Authentication** section, remove the existing Universal Auth configuration, and add a new GCP Auth configuration onto the identity; set the **Type** field to **GCP IAM Auth**. identities page remove default auth identities organization create token auth method Here's some more guidance on each field: * Allowed Service Account Emails: A comma-separated list of trusted IAM service account emails that are allowed to authenticate with Infisical; this could be something like `test@project.iam.gserviceaccount.com`, `12345-compute@developer.gserviceaccount.com`, etc. * Access Token TTL (default is `2592000` equivalent to 30 days): The lifetime for an acccess token in seconds. This value will be referenced at renewal time. * Access Token Max TTL (default is `2592000` equivalent to 30 days): The maximum lifetime for an acccess token in seconds. This value will be referenced at renewal time. * Access Token Max Number of Uses (default is `0`): The maximum number of times that an access token can be used; a value of `0` implies infinite number of uses. * Access Token Trusted IPs: The IPs or CIDR ranges that access tokens can be used from. By default, each token is given the `0.0.0.0/0`, allowing usage from any network address. To enable the identity to access project-level resources such as secrets within a specific project, you should add it to that project. To do this, head over to the project you want to add the identity to and go to Project Settings > Access Control > Machine Identities and press **Add identity**. Next, select the identity you want to add to the project and the project level role you want to allow it to assume. The project role assigned will determine what project level resources this identity can have access to. identities project identities project create To access the Infisical API as the identity, you need to generate a signed JWT token using the `projects.serviceAccounts.signJwt` [API method](https://cloud.google.com/iam/docs/reference/credentials/rest/v1/projects.serviceAccounts/signJwt) and make a request to the `/api/v1/auth/gcp-auth/login` endpoint containing the signed JWT token in exchange for an access token. Make sure that the service account has the `iam.serviceAccounts.signJwt` permission or the `roles/iam.serviceAccountTokenCreator` role. We provide a few code examples below of how you can authenticate with Infisical to access the [Infisical API](/api-reference/overview/introduction). The following code provides a generic example of how you can generate a signed JWT token against the `projects.serviceAccounts.signJwt` API method. The shown example uses Node.js and the official [google-auth-library](https://github.com/googleapis/google-auth-library-nodejs#readme) package but you can use any language you wish. ```javascript theme={"dark"} const { GoogleAuth } = require("google-auth-library"); const auth = new GoogleAuth({ scopes: "https://www.googleapis.com/auth/cloud-platform", }); const credentials = await auth.getCredentials(); const identityId = ""; const jwtPayload = { sub: credentials.client_email, aud: identityId, }; const { data } = await client.request({ url: `https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/${credentials.client_email}:signJwt`, method: "POST", data: { payload: JSON.stringify(jwtPayload) }, }); const jwt = data.signedJwt // send this jwt to Infisical in the next step ``` #### Sample request ```bash Request theme={"dark"} curl --location --request POST 'https://app.infisical.com/api/v1/auth/gcp-auth/login' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'identityId=...' \ --data-urlencode 'jwt=...' ``` #### Sample response ```bash Response theme={"dark"} { "accessToken": "...", "expiresIn": 7200, "accessTokenMaxTTL": 43244 "tokenType": "Bearer" } ``` Next, you can use the access token to access the [Infisical API](/api-reference/overview/introduction) We recommend using one of Infisical's clients like SDKs or the Infisical Agent to authenticate with Infisical using GCP IAM Auth as they handle the authentication process including generating the signed JWT token. Each identity access token has a time-to-live (TTL) which you can infer from the response of the login operation; the default TTL is `7200` seconds which can be adjusted. If an identity access token expires, it can no longer authenticate with the Infisical API. In this case, a new access token should be obtained by performing another login operation. # JWT Auth Source: https://infisical.com/docs/documentation/platform/identities/jwt-auth Learn how to authenticate with Infisical using JWT-based authentication. **JWT Auth** is a platform-agnostic authentication method that validates JSON Web Tokens (JWTs) issued by your JWT issuer or authentication system, allowing secure authentication from any platform or environment that can obtain valid JWTs. ## Diagram The following sequence diagram illustrates the JWT Auth workflow for authenticating with Infisical. ```mermaid theme={"dark"} sequenceDiagram participant Client as Client Application participant Issuer as JWT Issuer participant Infis as Infisical Client->>Issuer: Step 1: Request JWT token Issuer-->>Client: Return signed JWT with claims Note over Client,Infis: Step 2: Login Operation Client->>Infis: Send signed JWT to /api/v1/auth/jwt-auth/login Note over Infis: Step 3: JWT Validation Infis->>Infis: Validate JWT signature using configured public keys or JWKS Infis->>Infis: Verify required claims (aud, sub, iss) Note over Infis: Step 4: Token Generation Infis->>Client: Return short-lived access token Note over Client,Infis: Step 5: Access Infisical API with Token Client->>Infis: Make authenticated requests using the short-lived access token ``` ## Concept At a high-level, Infisical authenticates a client by verifying the JWT and checking that it meets specific requirements (e.g. it is signed by a trusted key) at the `/api/v1/auth/jwt-auth/login` endpoint. If successful, then Infisical returns a short-lived access token that can be used to make authenticated requests to the Infisical API. To be more specific: 1. The client requests a JWT from their JWT issuer. 2. The fetched JWT is sent to Infisical at the `/api/v1/auth/jwt-auth/login` endpoint. 3. Infisical validates the JWT signature using either: * Pre-configured public keys (Static configuration) * Public keys fetched from a JWKS endpoint (JWKS configuration) 4. Infisical verifies that the configured claims match in the token. This includes standard claims like subject, audience, and issuer, as well as any additional custom claims specified in the configuration. 5. If all is well, Infisical returns a short-lived access token that the client can use to make authenticated requests to the Infisical API. For JWKS configuration, Infisical needs network-level access to the configured JWKS endpoint. ## Guide In the following steps, we explore how to create and use identities to access the Infisical API using the JWT authentication method. To create an identity, head to your Organization Settings > Access Control > Identities and press **Create identity**. identities organization When creating an identity, you specify an organization level [role](/documentation/platform/access-controls/role-based-access-controls) for it to assume; you can configure roles in Organization Settings > Access Control > Organization Roles. identities organization create Now input a few details for your new identity. Here's some guidance for each field: * Name (required): A friendly name for the identity. * Role (required): A role from the **Organization Roles** tab for the identity to assume. The organization role assigned will determine what organization level resources this identity can have access to. Once you've created an identity, you'll be redirected to a page where you can manage the identity. identities page Since the identity has been configured with Universal Auth by default, you should re-configure it to use JWT Auth instead. To do this, press to edit the **Authentication** section, remove the existing Universal Auth configuration, and add a new JWT Auth configuration onto the identity. identities page remove default auth identities create jwt auth method identities create jwt auth method Restrict access by properly configuring the JWT validation settings. Here's some more guidance for each field: **Static configuration**: * Public Keys: One or more PEM-encoded public keys (RSA or ECDSA) used to verify JWT signatures. Each key must include the proper BEGIN/END markers. **JWKS configuration**: * JWKS URL: The endpoint URL that serves your JSON Web Key Sets (JWKS). This endpoint must provide the public keys used for JWT signature verification. * JWKS CA Certificate: Optional PEM-encoded CA certificate used for validating the TLS connection to the JWKS endpoint. **Common fields for both configurations**: * Issuer: The unique identifier of the JWT provider. This value is used to verify the iss (issuer) claim in the JWT. * Audiences: A list of intended recipients. This value is checked against the aud (audience) claim in the token. * Subject: The expected principal that is the subject of the JWT. This value is checked against the sub (subject) claim in the token. * Claims: Additional claims that must be present in the JWT for it to be valid. You can specify required claim names and their expected values. * Access Token TTL (default is `2592000` equivalent to 30 days): The lifetime for an access token in seconds. This value will be referenced at renewal time. * Access Token Max TTL (default is `2592000` equivalent to 30 days): The maximum lifetime for an access token in seconds. This value will be referenced at renewal time. * Access Token Max Number of Uses (default is `0`): The maximum number of times that an access token can be used; a value of `0` implies infinite number of uses. * Access Token Trusted IPs: The IPs or CIDR ranges that access tokens can be used from. By default, each token is given the `0.0.0.0/0`, allowing usage from any network address. The `subject`, `audiences`, and `claims` fields support glob pattern matching; however, we highly recommend using hardcoded values whenever possible. To enable the identity to access project-level resources such as secrets within a specific project, you should add it to that project. To do this, head over to the project you want to add the identity to and go to Project Settings > Access Control > Machine Identities and press **Add identity**. Next, select the identity you want to add to the project and the project level role you want to allow it to assume. The project role assigned will determine what project level resources this identity can have access to. identities project identities project create To access the Infisical API as the identity, you will need to obtain a JWT from your JWT issuer that meets the validation requirements configured in step 2. Once you have obtained a valid JWT, you can use it to authenticate with Infisical at the `/api/v1/auth/jwt-auth/login` endpoint. We provide a code example below of how you might use the JWT to authenticate with Infisical to gain access to the [Infisical API](/api-reference/overview/introduction). The shown example uses Node.js but you can use any other language to authenticate with Infisical using your JWT. ```javascript theme={"dark"} try { // Obtain JWT from your issuer const jwt = ""; const infisicalUrl = "https://app.infisical.com"; // or your self-hosted Infisical URL const identityId = ""; const { data } = await axios.post( `{infisicalUrl}/api/v1/auth/jwt-auth/login`, { identityId, jwt, } ); console.log("result data: ", data); // access token here } catch(err) { console.error(err); } ``` We recommend using one of Infisical's clients like SDKs or the Infisical Agent to authenticate with Infisical using JWT Auth as they handle the authentication process for you. Each identity access token has a time-to-live (TTL) which you can infer from the response of the login operation; the default TTL is `2592000` seconds (30 days) which can be adjusted in the configuration. If an identity access token exceeds its max TTL or maximum number of uses, it can no longer authenticate with the Infisical API. In this case, a new access token should be obtained by performing another login operation with a valid JWT. # Kubernetes Auth Source: https://infisical.com/docs/documentation/platform/identities/kubernetes-auth Learn how to authenticate with Infisical in Kubernetes **Kubernetes Auth** is a Kubernetes-native authentication method for applications (e.g. pods) to access Infisical. ## Diagram The following sequence diagram illustrates the Kubernetes Auth workflow for authenticating applications running in pods with Infisical. ```mermaid theme={"dark"} sequenceDiagram participant Pod as Pod participant Infis as Infisical participant KubernetesServer as K8s API Server Note over Pod: Step 1: Service Account JWT Token Retrieval Note over Pod,Infis: Step 2: JWT Token Login Operation Pod->>Infis: Send JWT token to /api/v1/auth/kubernetes-auth/login Infis->>KubernetesServer: Forward JWT token for validation KubernetesServer-->>Infis: Return identity info for JWT Note over Infis: Step 3: Identity Property Verification Infis->>Pod: Return short-lived access token Note over Pod,Infis: Step 4: Access Infisical API with Token Pod->>Infis: Make authenticated requests using the short-lived access token ``` ## Concept At a high-level, Infisical authenticates an application in Kubernetes by verifying its identity and checking that it meets specific requirements (e.g. it is bound to an allowed service account) at the `/api/v1/auth/kubernetes-auth/login` endpoint. If successful, then Infisical returns a short-lived access token that can be used to make authenticated requests to the Infisical API. To be more specific: 1. The application deployed on Kubernetes retrieves its [service account credential](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#opt-out-of-api-credential-automounting) that is a JWT token at the `/var/run/secrets/kubernetes.io/serviceaccount/token` pod path. 2. The application sends the JWT token to Infisical at the `/api/v1/auth/kubernetes-auth/login` endpoint after which Infisical forwards the JWT token to the Kubernetes API Server at the TokenReview API for verification and to obtain the service account information associated with the JWT token. Infisical is able to authenticate and interact with the TokenReview API by using either the long lived JWT token set while configuring this authentication method or by using the incoming token itself. The JWT token mentioned in this context is referred as the token reviewer JWT token. 3. Infisical checks the service account properties against set criteria such **Allowed Service Account Names** and **Allowed Namespaces**. 4. If all is well, Infisical returns a short-lived access token that the application can use to make authenticated requests to the Infisical API. We recommend using one of Infisical's clients like SDKs or the Infisical Agent to authenticate with Infisical using Kubernetes Auth as they handle the authentication process including service account credential retrieval for you. ## Guide In the following steps, we explore how to create and use identities for your applications in Kubernetes to access the Infisical API using the Kubernetes Auth authentication method. **When to use this option**: Choose this approach when you want centralized authentication management. Only one service account needs special permissions, and your application service accounts remain unchanged. 1.1. Start by creating a service account in your Kubernetes cluster that will be used by Infisical to authenticate with the Kubernetes API Server. ```yaml infisical-service-account.yaml theme={"dark"} apiVersion: v1 kind: ServiceAccount metadata: name: infisical-auth namespace: default ``` ``` kubectl apply -f infisical-service-account.yaml ``` 1.2. Bind the service account to the `system:auth-delegator` cluster role. As described [here](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#other-component-roles), this role allows delegated authentication and authorization checks, specifically for Infisical to access the [TokenReview API](https://kubernetes.io/docs/reference/kubernetes-api/authentication-resources/token-review-v1/). You can apply the following configuration file: ```yaml cluster-role-binding.yaml theme={"dark"} apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: role-tokenreview-binding namespace: default roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:auth-delegator subjects: - kind: ServiceAccount name: infisical-auth namespace: default ``` ``` kubectl apply -f cluster-role-binding.yaml ``` 1.3. Next, create a long-lived service account JWT token (i.e. the token reviewer JWT token) for the service account using this configuration file for a new `Secret` resource: ```yaml service-account-token.yaml theme={"dark"} apiVersion: v1 kind: Secret type: kubernetes.io/service-account-token metadata: name: infisical-auth-token annotations: kubernetes.io/service-account.name: "infisical-auth" ``` ``` kubectl apply -f service-account-token.yaml ``` 1.4. Link the secret in step 1.3 to the service account in step 1.1: ```bash theme={"dark"} kubectl patch serviceaccount infisical-auth -p '{"secrets": [{"name": "infisical-auth-token"}]}' -n default ``` 1.5. Finally, retrieve the token reviewer JWT token from the secret. ```bash theme={"dark"} kubectl get secret infisical-auth-token -n default -o=jsonpath='{.data.token}' | base64 --decode ``` Keep this JWT token handy as you will need it for the **Token Reviewer JWT** field when configuring the Kubernetes Auth authentication method for the identity in step 2. **When to use this option**: Choose this approach to eliminate long-lived tokens. This option simplifies Infisical configuration but requires each application service account to have elevated permissions. The self-validation method eliminates the need for a separate long-lived reviewer JWT by using the same token for both authentication and validation. Instead of creating a dedicated reviewer service account, you'll grant the necessary permissions to each application service account. For each service account that needs to authenticate with Infisical, add the `system:auth-delegator` role: ```yaml client-role-binding.yaml theme={"dark"} apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: infisical-client-binding-[your-app-name] roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:auth-delegator subjects: - kind: ServiceAccount name: [your-app-service-account] namespace: [your-app-namespace] ``` ``` kubectl apply -f client-role-binding.yaml ``` When configuring Kubernetes Auth in Infisical, leave the **Token Reviewer JWT** field empty. Infisical will use the client's own token for validation. **When to use this option**: Choose this approach when you have a gateway deployed in your Kubernetes Cluster and wish to eliminate long-lived tokens. This approach simplifies Infisical Kubernetes Auth configuration, and only one service account will need to have the elevated `system:auth-delegator` ClusterRole binding. **Note:** Gateway is a paid feature. - **Infisical Cloud users:** Gateway is available under the **Enterprise Tier**. - **Self-Hosted Infisical:** Please contact [sales@infisical.com](mailto:sales@infisical.com) to purchase an enterprise license. To deploy a gateway in your Kubernetes cluster, follow our [Gateway deployment guide using helm](/documentation/platform/gateways/overview). To grant the gateway the `system:auth-delegator` ClusterRole binding, you can use the following command: ```yaml gateway-role-binding.yaml theme={"dark"} apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: infisical-token-reviewer-role-binding namespace: default # Replace with your namespace if not default roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:auth-delegator subjects: - kind: ServiceAccount name: infisical-gateway # The name of the gateway service account namespace: default # Replace with your namespace if not default ``` ```bash theme={"dark"} kubectl apply -f gateway-role-binding.yaml ``` The gateway service account name is `infisical-gateway` by default if deployed using Helm. To configure your Kubernetes Auth method to use the gateway as the token reviewer, set the `Review Method` to "Gateway as Reviewer", and select the gateway you want to use as the token reviewer. identities organization create kubernetes auth method To create an identity, head to your Organization Settings > Access Control > Identities and press **Create identity**. identities organization When creating an identity, you specify an organization level [role](/documentation/platform/access-controls/role-based-access-controls) for it to assume; you can configure roles in Organization Settings > Access Control > Organization Roles. identities organization create Now input a few details for your new identity. Here's some guidance for each field: * Name (required): A friendly name for the identity. * Role (required): A role from the **Organization Roles** tab for the identity to assume. The organization role assigned will determine what organization level resources this identity can have access to. Once you've created an identity, you'll be redirected to a page where you can manage the identity. identities page Since the identity has been configured with Universal Auth by default, you should re-configure it to use Kubernetes Auth instead. To do this, press to edit the **Authentication** section, remove the existing Universal Auth configuration, and add a new Kubernetes Auth configuration onto the identity. identities page remove default auth identities organization create kubernetes auth method Here's some more guidance on each field: * Kubernetes Host / Base Kubernetes API URL: The host string, host:port pair, or URL to the base of the Kubernetes API server. This can usually be obtained by running `kubectl cluster-info`. * Token Reviewer JWT: A long-lived service account JWT token for Infisical to access the [TokenReview API](https://kubernetes.io/docs/reference/kubernetes-api/authentication-resources/token-review-v1/) to validate other service account JWT tokens submitted by applications/pods. This is the JWT token obtained from step 1.5(Reviewer Tab). If omitted, the client's own JWT will be used instead, which requires the client to have the `system:auth-delegator` ClusterRole binding. This is shown in step 1, option 2. * Allowed Service Account Names: A comma-separated list of trusted service account names that are allowed to authenticate with Infisical. * Allowed Namespaces: A comma-separated list of trusted namespaces that service accounts must belong to authenticate with Infisical. * Allowed Audience: An optional audience claim that the service account JWT token must have to authenticate with Infisical. * CA Certificate: The PEM-encoded CA cert for the Kubernetes API server. This is used by the TLS client for secure communication with the Kubernetes API server. * Access Token TTL (default is `2592000` equivalent to 30 days): The lifetime for an acccess token in seconds. This value will be referenced at renewal time. * Access Token Max TTL (default is `2592000` equivalent to 30 days): The maximum lifetime for an acccess token in seconds. This value will be referenced at renewal time. * Access Token Max Number of Uses (default is `0`): The maximum number of times that an access token can be used; a value of `0` implies infinite number of uses. * Access Token Trusted IPs: The IPs or CIDR ranges that access tokens can be used from. By default, each token is given the `0.0.0.0/0`, allowing usage from any network address. To enable the identity to access project-level resources such as secrets within a specific project, you should add it to that project. To do this, head over to the project you want to add the identity to and go to Project Settings > Access Control > Machine Identities and press **Add identity**. Next, select the identity you want to add to the project and the project level role you want to allow it to assume. The project role assigned will determine what project level resources this identity can have access to. identities project identities project create To access the Infisical API as the identity, you should first make sure that the pod running your application is bound to a service account specified in the **Allowed Service Account Names** field of the identity's Kubernetes Auth authentication method configuration in step 2. Once bound, the pod will receive automatically mounted service account credentials that is a JWT token at the `/var/run/secrets/kubernetes.io/serviceaccount/token` path. This token should be used to authenticate with Infisical at the `/api/v1/auth/kubernetes-auth/login` endpoint. For information on how to configure sevice accounts for pods, refer to the guide [here](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/). We provide a code example below of how you might retrieve the JWT token and use it to authenticate with Infisical to gain access to the [Infisical API](/api-reference/overview/introduction). The shown example uses Node.js but you can use any other language to retrieve the service account JWT token and use it to authenticate with Infisical. ```javascript theme={"dark"} const fs = require("fs"); try { const tokenPath = "/var/run/secrets/kubernetes.io/serviceaccount/token"; const jwtToken = fs.readFileSync(tokenPath, "utf8"); const infisicalUrl = "https://app.infisical.com"; // or your self-hosted Infisical URL const identityId = ""; const { data } = await axios.post( `{infisicalUrl}/api/v1/auth/kubernetes-auth/login`, { identityId, jwt, } ); console.log("result data: ", data); // access token here } catch(err) { console.error(err); } ``` We recommend using one of Infisical's clients like SDKs or the Infisical Agent to authenticate with Infisical using Kubernetes Auth as they handle the authentication process including service account credential retrieval for you. Each identity access token has a time-to-live (TTL) which you can infer from the response of the login operation; the default TTL is `7200` seconds which can be adjusted. If an identity access token exceeds its max ttl, it can no longer authenticate with the Infisical API. In this case, a new access token should be obtained by performing another login operation. **FAQ** There are a few reasons for why this might happen: * The Kubernetes Auth authentication method configuration is invalid. * The service account JWT token has expired is malformed or invalid. * The service account associated with the JWT token does not meet the criteria set forth in the Kubernetes Auth authentication method configuration such as **Allowed Service Account Names** and **Allowed Namespaces**. There are a few reasons for why this might happen: * The access token has expired. * The identity is insufficiently permissioned to interact with the resources you wish to access. * The client access token is being used from an untrusted IP. A identity access token can have a time-to-live (TTL) or incremental lifetime after which it expires. In certain cases, you may want to extend the lifespan of an access token; to do so, you must set a max TTL parameter. A token can be renewed any number of times where each call to renew it can extend the token's lifetime by increments of the access token's TTL. Regardless of how frequently an access token is renewed, its lifespan remains bound to the maximum TTL determined at its creation. # General Source: https://infisical.com/docs/documentation/platform/identities/ldap-auth/general Learn how to authenticate with Infisical using LDAP. **LDAP Auth** is an LDAP based authentication method that allows you to authenticate with Infisical using a machine identity configured with an [LDAP](https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol) directory. ## Templates You can create reusable LDAP authentication templates to standardize configurations across multiple machine identities. Templates help ensure consistency, reduce configuration errors, and simplify identity management at scale. To create and manage LDAP auth templates, see our [Machine Identity Auth Templates documentation](/documentation/platform/identities/auth-templates). Once you've created a template, you can apply it when configuring LDAP auth for your identities in the guide below. ## Guide To create an identity, head to your Organization Settings > Access Control > Identities and press **Create identity**. Create identity When creating an identity, you specify an organization level role for it to assume; you can configure roles in Organization Settings > Access Control > Organization Roles. Create identity modal Now input a few details for your new identity. Here's some guidance for each field: * Name (required): A friendly name for the identity. * Role (required): A role from the Organization Roles tab for the identity to assume. The organization role assigned will determine what organization level resources this identity can have access to. Once you've created an identity, you'll be redirected to a page where you can manage the identity. To configure LDAP auth for your identity, press the **Add Auth Method** button on the identity's page. Add auth method Now select **LDAP Auth** from the list of available auth methods for the identity. Select LDAP auth After selecting **LDAP Auth**, you'll see the form you need to fill out to configure LDAP auth for your identity. The following fields are available: **Configuration Tab** * `URL`: The LDAP server to connect to such as `ldap://ldap.your-org.com`, `ldaps://ldap.myorg.com:636` *(for connection over SSL/TLS)*, etc. * `Bind DN`: The DN to bind to the LDAP server with. * `Bind Pass`: The password to bind to the LDAP server with. * `Search Base / DN`: Base DN under which to perform user search such as `ou=Users,dc=acme,dc=com`. * `User Search Filter`: Template used to construct the LDAP user search filter such as `(uid={{username}})`; use literal `{{username}}` to have the given username used in the search. The default is `(uid={{username}})` which is compatible with several common directory schemas. * `Required Attributes`: A key/value pair of attributes that must be present in the LDAP user entry for them to be authenticated. As an example, if you set key `uid` to value `user1,user2,user3`, then only users with `uid` of `user1`, `user2`, or `user3` will be able to login with this identity. Each value is a comma separated list of attributes. * `Access Token TTL` *(default is 2592000 equivalent to 30 days)*: The lifetime for an access token in seconds. This value will be referenced at renewal time. * `Access Token Max TTL` *(default is 2592000 equivalent to 30 days)*: The maximum lifetime for an access token in seconds. This value will be referenced at renewal time. * `Access Token Max Number of Uses` *(default is 0)*: The maximum number of times that an access token can be used; a value of 0 implies infinite number of uses. **Lockout Tab** * `Lockout` *(enabled by default)*: The lockout feature will temporarily block login attempts after X consecutive login failures. * `Lockout Threshold` *(default is 3)*: The amount of times login must fail before locking the identity auth method. * `Lockout Duration` *(default is 5 minutes)*: How long an identity auth method lockout lasts. * `Lockout Counter Reset` *(default is 30 seconds)*: How long to wait from the most recent failed login until resetting the lockout counter. **Advanced Tab** * `CA Certificate`: The CA certificate to use when verifying the LDAP server certificate. This field is optional but recommended. * `Access Token Trusted IPs`: The IPs or CIDR ranges that access tokens can be used from. By default, each token is given the 0.0.0.0/0, allowing usage from any network address. Once you've filled out the form, press **Add** to save your changes. Configure LDAP auth After configuring LDAP auth for your identity, you can authenticate with the identity and obtain an access token using your LDAP credentials. ```bash theme={"dark"} curl --request POST \ --url https://app.infisical.com/api/v1/auth/ldap-auth/login \ --header 'Content-Type: application/json' \ --data '{ "identityId": "", "username": "", "password": "" }' ``` For EU Cloud and Self-Hosted users, make sure to replace `https://app.infisical.com` with `https://eu.infisical.com` or your self-hosted instance's URL in the request URL. If successful, you'll receive an access token in the response body. ```json theme={"dark"} { "accessToken": "your-access-token", "expiresIn": 2592000, "accessTokenMaxTTL": 2592000, "tokenType": "Bearer" } ``` You can read more about the login API endpoint [here](/api-reference/endpoints/ldap-auth/login). **FAQ** You can reset (remove) all lockouts for an identity auth method by clicking into the auth method and pressing **Reset All Lockouts**. ldap reset lockouts # JumpCloud Source: https://infisical.com/docs/documentation/platform/identities/ldap-auth/jumpcloud Learn how to authenticate with Infisical using LDAP with JumpCloud. **LDAP Auth** is an LDAP based authentication method that allows you to authenticate with Infisical using a machine identity configured with an [LDAP](https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol) directory. ## Guide In JumpCloud, head to USER MANAGEMENT > Users and create a new user via the Manual user entry option. This user will be used as a privileged service account to facilitate Infisical's ability to bind/search the LDAP directory. Next after creating the user, under User Security Settings and Permissions > Permission Settings, check the box next to Enable as LDAP Bind DN. User management To create an identity, head to your Organization Settings > Access Control > Identities and press **Create identity**. Create identity When creating an identity, you specify an organization level role for it to assume; you can configure roles in Organization Settings > Access Control > Organization Roles. Create identity modal Now input a few details for your new identity. Here's some guidance for each field: * Name (required): A friendly name for the identity. * Role (required): A role from the Organization Roles tab for the identity to assume. The organization role assigned will determine what organization level resources this identity can have access to. Once you've created an identity, you'll be redirected to a page where you can manage the identity. To configure LDAP auth for your identity, press the **Add Auth Method** button on the identity's page. Add auth method Now select **LDAP Auth** from the list of available auth methods for the identity. Select LDAP auth After selecting **LDAP Auth**, you'll see the form you need to fill out to configure LDAP auth for your identity. The following fields are available: * `URL`: The LDAP server to connect to (`ldaps://ldap.jumpcloud.com:636`). * `Bind DN`: The distinguished name of object to bind when performing the user search (`uid=,ou=Users,o=,dc=jumpcloud,dc=com`). * `Bind Pass`: The password to use along with Bind DN when performing the user search. This is the password for the user created in the previous step. * `Search Base / DN`: Base DN under which to perform user search (`ou=Users,o=,dc=jumpcloud,dc=com`). * `User Search Filter`: Template used to construct the LDAP user search filter (`(uid={{username}})`). * `Required Attributes`: A key/value pair of attributes that must be present in the LDAP user entry for them to be authenticated. As an example, if you set key `uid` to value `user1,user2,user3`, then only users with `uid` of `user1`, `user2`, or `user3` will be able to login with this identity. Each value is a comma separated list of attributes. * `CA Certificate`: The CA certificate to use when verifying the LDAP server certificate (instructions to obtain the certificate for JumpCloud [here](https://jumpcloud.com/support/connect-to-ldap-with-tls-ssl)). * `Access Token TTL` *(default is 2592000 equivalent to 30 days)*: The lifetime for an access token in seconds. This value will be referenced at renewal time. * `Access Token Max TTL` *(default is 2592000 equivalent to 30 days)*: The maximum lifetime for an access token in seconds. This value will be referenced at renewal time. * `Access Token Max Number of Uses` *(default is 0)*: The maximum number of times that an access token can be used; a value of 0 implies infinite number of uses. * `Access Token Trusted IPs`: The IPs or CIDR ranges that access tokens can be used from. By default, each token is given the 0.0.0.0/0, allowing usage from any network address. Once you've filled out the form, press **Add** to save your changes. Configure LDAP auth After configuring LDAP auth for your identity, you can authenticate with the identity and obtain an access token using your LDAP credentials. ```bash theme={"dark"} curl --request POST \ --url https://app.infisical.com/api/v1/auth/ldap-auth/login \ --header 'Content-Type: application/json' \ --data '{ "identityId": "", "username": "", "password": "" }' ``` For EU Cloud and Self-Hosted users, make sure to replace `https://app.infisical.com` with `https://eu.infisical.com` or your self-hosted instance's URL in the request URL. If successful, you'll receive an access token in the response body. ```json theme={"dark"} { "accessToken": "your-access-token", "expiresIn": 2592000, "accessTokenMaxTTL": 2592000, "tokenType": "Bearer" } ``` You can read more about the login API endpoint [here](/api-reference/endpoints/ldap-auth/login). # Machine Identities Source: https://infisical.com/docs/documentation/platform/identities/machine-identities Learn how to use Machine Identities to programmatically interact with Infisical. ## Concept An Infisical machine identity is an entity that represents a workload or application that require access to various resources in Infisical. This is conceptually similar to an IAM user in AWS or service account in Google Cloud Platform (GCP). Each identity must authenticate with the Infisical API using a supported authentication method like [Token Auth](/documentation/platform/identities/token-auth), [Universal Auth](/documentation/platform/identities/universal-auth), [Kubernetes Auth](/documentation/platform/identities/kubernetes-auth), [AWS Auth](/documentation/platform/identities/aws-auth), [Azure Auth](/documentation/platform/identities/azure-auth), or [GCP Auth](/documentation/platform/identities/gcp-auth) to get back a short-lived access token to be used in subsequent requests. Organization Identities Key Features: * Role Assignment: Identities must be assigned [roles](/documentation/platform/access-controls/role-based-access-controls). These roles determine the scope of access to resources, either at the organization level or project level. * Auth/Token Configuration: Identities must be configured with corresponding authentication methods and access token properties to securely interact with the Infisical API. ## Scopes Identities can be created either at the organization-level or the project-level. Outside of identity management and scope of operation, organization and project identities are functionally identical. * Project identities are managed at the project-level and can only operate within their respective project. Project-level identities are useful for organizations that delegate responsibility to autonomous teams via projects. * Organization identities are managed at the organization-level and can be assigned to one or more projects, as well as perform organization-level operations. Organization-level identities are useful for organizations that have cross-project operations. ## Workflow A typical workflow for using project identities consists of three steps: 1. Creating the identity with a name and [role](/documentation/platform/access-controls/role-based-access-controls) in Project > Access Control > Machine Identities. This step also involves configuring an authentication method for it. 2. Authenticating the identity with the Infisical API based on the configured authentication method on it and receiving a short-lived access token back. 3. Authenticating subsequent requests with the Infisical API using the short-lived access token. A typical workflow for using organization identities consists of four steps: 1. Creating the identity with a name and [role](/documentation/platform/access-controls/role-based-access-controls) in Organization > Access Control > Machine Identities. This step also involves configuring an authentication method for it. 2. Adding the identity to the project(s) you want it to have access to. 3. Authenticating the identity with the Infisical API based on the configured authentication method on it and receiving a short-lived access token back. 4. Authenticating subsequent requests with the Infisical API using the short-lived access token. ## Authentication Methods To interact with various resources in Infisical, Machine Identities can authenticate with the Infisical API using: * [Token Auth](/documentation/platform/identities/token-auth): A platform-agnostic, simple authentication method suitable to authenticate with Infisical using a token. * [Universal Auth](/documentation/platform/identities/universal-auth): A platform-agnostic authentication method suitable to authenticate with Infisical using a Client ID and Client Secret. * [Kubernetes Auth](/documentation/platform/identities/kubernetes-auth): A Kubernetes-native authentication method for applications (e.g. pods). * [AWS Auth](/documentation/platform/identities/aws-auth): An AWS-native authentication method for AWS services (e.g. EC2, Lambda functions, etc.). * [Azure Auth](/documentation/platform/identities/azure-auth): An Azure-native authentication method for Azure resources (e.g. Azure VMs, Azure App Services, Azure Functions, Azure Kubernetes Service, etc.). * [GCP Auth](/documentation/platform/identities/gcp-auth): A GCP-native authentication method for GCP resources (e.g. Compute Engine, App Engine, Cloud Run, Google Kubernetes Engine, IAM service accounts, etc.). * [OIDC Auth](/documentation/platform/identities/oidc-auth): A platform-agnostic, JWT-based authentication method for workloads using an OpenID Connect identity provider. ## Identity Lockout Lockout is a feature that prevents brute-force attacks on identity login endpoints. Auth methods that support lockout include: [Universal Auth](/documentation/platform/identities/universal-auth), [LDAP Auth](/documentation/platform/identities/ldap-auth/general). Supported auth methods have lockout enabled by default. If triggered, lockout temporarily disables the login endpoint for 5 minutes after 3 consecutive failed login attempts within a 30-second window. Lockout can be configured and disabled in the identity auth method settings. ## FAQ Yes - Identities can be used with the CLI. You can learn more about how to do this in the CLI quickstart [here](/cli/usage). A service token is a project-level authentication method that is being deprecated in favor of identities. The service token method will be removed in the future in accordance with the deprecation notice and timeline stated [here](https://infisical.com/blog/deprecating-api-keys). Amongst many differences, identities provide broader access over the Infisical API, utilizes the same permission system as user identities, and come with a significantly larger number of configurable authentication and security features. If you're looking for a simple authentication method, similar to service tokens, that can be bound onto an identity, we recommend checking out [Token Auth](/documentation/platform/identities/token-auth). There are a few reasons for why this might happen: * You have insufficient organization permissions to create, read, update, delete identities. * The identity you are trying to read, update, or delete is more privileged than yourself. * The role you are trying to create an identity for or update an identity to is more privileged than yours. # OCI Auth Source: https://infisical.com/docs/documentation/platform/identities/oci-auth Learn how to authenticate with Infisical using OCI user accounts. **OCI Auth** is an OCI-native authentication method that verifies Oracle Cloud Infrastructure users through signature validation, allowing secure access to Infisical resources. ## Diagram The following sequence diagram illustrates the OCI Auth workflow for authenticating OCI users with Infisical. ```mermaid theme={"dark"} sequenceDiagram participant Client participant Infisical participant OCI Note over Client,Client: Step 1: Sign user identity request Note over Client,Infisical: Step 2: Login Operation Client->>Infisical: Send signed request details to /api/v1/auth/oci-auth/login Note over Infisical,OCI: Step 3: Request verification Infisical->>OCI: Forward signed request OCI-->>Infisical: Return user details Note over Infisical: Step 4: Identity property validation Infisical->>Client: Return short-lived access token Note over Client,Infisical: Step 5: Access Infisical API with token Client->>Infisical: Make authenticated requests using the short-lived access token ``` ## Concept At a high level, Infisical authenticates an OCI user by verifying its identity and checking that it meets specific requirements (e.g., its username is authorized, its part of a tenancy) at the `/api/v1/auth/oci-auth/login` endpoint. If successful, then Infisical returns a short-lived access token that can be used to make authenticated requests to the Infisical API. To be more specific: 1. The client [signs](https://docs.oracle.com/en-us/iaas/Content/API/Concepts/signingrequests.htm) a `/20160918/users/{userId}` request using an OCI user's [private key](https://docs.oracle.com/en-us/iaas/Content/API/Concepts/apisigningkey.htm#Required_Keys_and_OCIDs); this is done using the [OCI SDK](https://infisical.com/docs/documentation/platform/identities/oci-auth#accessing-the-infisical-api-with-the-identity) or API. 2. The client sends the signed request's headers and their user OCID to Infisical at the `/api/v1/auth/oci-auth/login` endpoint. 3. Infisical reconstructs the request and sends it to OCI via the [Get User](https://docs.oracle.com/en/engineered-systems/private-cloud-appliance/3.0-latest/ceapi/op-20160918-users-user_id-get.html) endpoint for verification and obtains the identity associated with the OCI user. 4. Infisical checks the user's properties against set criteria such as **Allowed Usernames** and **Tenancy OCID**. 5. If all checks pass, Infisical returns a short-lived access token that the client can use to make authenticated requests to the Infisical API. ## Prerequisite In order to sign requests, you must have an OCI user with credentials such as the private key. If you're unaware of how to create a user and obtain the needed credentials, expand the menu below. Search Domains Select the domain in which you want to create the Infisical user account. Select Domain Select Users Click Create User The name, email, and username can be anything. Create User After you've created a user, you'll be redirected to the user's page. Navigate to 'API keys'. Select API Keys Click on 'Add API key' and then download or import the private key. After you've obtained the private key, click 'Add'. Add API Key At the end of the downloaded private key file, you'll see `OCI_API_KEY`. This is not apart of the private key, and should not be included when you use the private key to sign requests. After creating the API key, you'll be shown a modal with relevant information. Save the highlighted values (and the private key) for later steps. User Info ## Guide In the following steps, we explore how to create and use identities for your workloads and applications on OCI to access the Infisical API using the OCI request signing authentication method. ### Creating an identity To create an identity, head to your Organization Settings > Access Control > [Identities](https://app.infisical.com/organization/access-management?selectedTab=identities) and press **Create identity**. identities organization When creating an identity, you specify an organization-level [role](/documentation/platform/access-controls/role-based-access-controls) for it to assume; you can configure roles in Organization Settings > Access Control > [Organization Roles](https://app.infisical.com/organization/access-management?selectedTab=roles). identities organization create Input some details for your new identity: * **Name (required):** A friendly name for the identity. * **Role (required):** A role from the [**Organization Roles**](https://app.infisical.com/organization/access-management?selectedTab=roles) tab for the identity to assume. The organization role assigned will determine what organization-level resources this identity can have access to. Once you've created an identity, you'll be redirected to a page where you can manage the identity. identities page Since the identity has been configured with [Universal Auth](https://infisical.com/docs/documentation/platform/identities/universal-auth) by default, you should reconfigure it to use OCI Auth instead. To do this, click the cog next to **Universal Auth** and then select **Delete** in the options dropdown. identities press cog identities page remove default auth Now create a new OCI Auth Method. identities create oci auth method Here's some information about each field: * **Tenancy OCID:** The OCID of your tenancy. All users authenticating must be part of this Tenancy. * **Allowed Usernames:** A comma-separated list of trusted OCI users that are allowed to authenticate with Infisical. * **Access Token TTL (default is `2592000` equivalent to 30 days):** The lifetime for an access token in seconds. This value will be referenced at renewal time. * **Access Token Max TTL (default is `2592000` equivalent to 30 days):** The maximum lifetime for an access token in seconds. This value will be referenced at renewal time. * **Access Token Max Number of Uses (default is `0`):** The maximum number of times that an access token can be used; a value of `0` implies an infinite number of uses. * **Access Token Trusted IPs:** The IPs or CIDR ranges that access tokens can be used from. By default, each token is given the `0.0.0.0/0`, allowing usage from any network address. ### Adding an identity to a project In order to allow an identity to access project-level resources such as secrets, you must add it to the relevant projects. To do this, head over to the project you want to add the identity to and navigate to Project Settings > Access Control > Machine Identities and press **Add Identity**. identities project Select the identity you want to add to the project and the project-level role you want it to assume. The project role given to the identity will determine what project-level resources this identity can access. identities project create ### Accessing the Infisical API with the identity To access the Infisical API as the identity, you need to construct a signed [Get User](https://docs.oracle.com/en/engineered-systems/private-cloud-appliance/3.0-latest/ceapi/op-20160918-users-user_id-get.html) request using [OCI Signature v1](https://docs.oracle.com/en-us/iaas/Content/API/Concepts/signingrequests.htm#Request_Signatures) and then make a request to the `/api/v1/auth/oci-auth/login` endpoint passing the signed header data and user OCID. Below is an example of how you can authenticate with Infisical using the `oci-sdk` for NodeJS. ```typescript theme={"dark"} import { common } from "oci-sdk"; // Change these credentials to match your OCI user const tenancyId = "ocid1.tenancy.oc1..example"; const userId = "ocid1.user.oc1..example"; const fingerprint = "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00"; const region = "us-ashburn-1"; const privateKey = "..."; // Must be PEM format const provider = new common.SimpleAuthenticationDetailsProvider( tenancyId, userId, fingerprint, privateKey, null, common.Region.fromRegionId(region), ); // Build request const headers = new Headers({ host: `identity.${region}.oraclecloud.com`, }); const request: common.HttpRequest = { method: "GET", uri: `/20160918/users/${userId}`, headers, body: null, }; // Sign request const signer = new common.DefaultRequestSigner(provider); await signer.signHttpRequest(request); // Forward signed request to Infisical const requestAsJson = { identityId: "2dd11664-68e3-471d-b366-907206ab1bff", userOcid: userId, headers: Object.fromEntries(request.headers.entries()), }; const res = await fetch("https://app.infisical.com/api/v1/auth/oci-auth/login", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(requestAsJson), }); const json = await res.json(); console.log("Infisical Response:", json); ``` Each identity access token has a time-to-live (TTL) which you can infer from the response of the login operation; the default TTL is `7200` seconds, which can be adjusted. If an identity access token expires, it can no longer access the Infisical API. A new access token should be obtained by performing another login operation. # Azure Source: https://infisical.com/docs/documentation/platform/identities/oidc-auth/azure Learn how to authenticate Azure pipelines with Infisical using OpenID Connect (OIDC). **OIDC Auth** is a platform-agnostic JWT-based authentication method that can be used to authenticate from any platform or environment using an identity provider with OpenID Connect. ## Diagram The following sequence diagram illustrates the OIDC Auth workflow for authenticating Azure pipelines with Infisical. ```mermaid theme={"dark"} sequenceDiagram participant Client as Azure Pipeline participant Idp as Identity Provider participant Infis as Infisical Client->>Idp: Step 1: Request identity token Idp-->>Client: Return JWT with verifiable claims Note over Client,Infis: Step 2: Login Operation Client->>Infis: Send signed JWT to /api/v1/auth/oidc-auth/login Note over Infis,Idp: Step 3: Query verification Infis->>Idp: Request JWT public key using OIDC Discovery Idp-->>Infis: Return public key Note over Infis: Step 4: JWT validation Infis->>Client: Return short-lived access token Note over Client,Infis: Step 5: Access Infisical API with Token Client->>Infis: Make authenticated requests using the short-lived access token ``` ## Concept At a high-level, Infisical authenticates a client by verifying the JWT and checking that it meets specific requirements (e.g. it is issued by a trusted identity provider) at the `/api/v1/auth/oidc-auth/login` endpoint. If successful, then Infisical returns a short-lived access token that can be used to make authenticated requests to the Infisical API. To be more specific: 1. The Azure pipeline requests an identity token from Azure's identity provider. 2. The fetched identity token is sent to Infisical at the `/api/v1/auth/oidc-auth/login` endpoint. 3. Infisical fetches the public key that was used to sign the identity token from Azure's identity provider using OIDC Discovery. 4. Infisical validates the JWT using the public key provided by the identity provider and checks that the subject, audience, and claims of the token matches with the set criteria. 5. If all is well, Infisical returns a short-lived access token that the Azure pipeline can use to make authenticated requests to the Infisical API. Infisical needs network-level access to Azure's identity provider endpoints. ## Guide In the following steps, we explore how to create and use identities to access the Infisical API using the OIDC Auth authentication method. To create an identity, head to your Organization Settings > Access Control > Identities and press **Create identity**. identities organization When creating an identity, you specify an organization level [role](/documentation/platform/access-controls/role-based-access-controls) for it to assume; you can configure roles in Organization Settings > Access Control > Organization Roles. identities organization create Now input a few details for your new identity. Here's some guidance for each field: * Name (required): A friendly name for the identity. * Role (required): A role from the **Organization Roles** tab for the identity to assume. The organization role assigned will determine what organization level resources this identity can have access to. Once you've created an identity, you'll be redirected to a page where you can manage the identity. identities page Since the identity has been configured with Universal Auth by default, you should re-configure it to use OIDC Auth instead. To do this, press to edit the **Authentication** section, remove the existing Universal Auth configuration, and add a new OIDC Auth configuration onto the identity. identities page remove default auth identities create oidc auth method Restrict access by configuring the Subject, Audiences, and Claims fields Here's some more guidance on each field: *
**OIDC Discovery URL**: The URL used to retrieve the OpenID Connect configuration from the identity provider. This is used to fetch the public keys needed to verify the JWT. For Azure, set this to `https://login.microsoftonline.com/{tenant-id}/v2.0` (replace `{tenant-id}` with your Azure AD tenant ID).
*
**Issuer**: The value of the `iss` claim that the token must match. For Azure, this should be `https://login.microsoftonline.com/{tenant-id}/v2.0`.
* **Subject**: This must match the `sub` claim in the JWT. * **Audiences**: Values that must match the `aud` claim. * **Claims**: Additional claims that must be present. Refer to [Azure DevOps docs](https://learn.microsoft.com/en-us/azure/devops/pipelines/library/connect-to-azure?view=azure-devops#workload-identity-federation) for available claims. * **Access Token TTL**: Lifetime of the issued token (in seconds), e.g., `2592000` (30 days) * **Access Token Max TTL**: Maximum allowed lifetime of the token * **Access Token Max Number of Uses**: Max times the token can be used (`0` = unlimited) * **Access Token Trusted IPs**: List of allowed IP ranges (defaults to `0.0.0.0/0`) If you are unsure about what to configure for the subject, audience, and claims fields, you can inspect the JWT token from your Azure DevOps pipeline by adding a debug step that outputs the token claims. The `subject`, `audiences`, and `claims` fields support glob pattern matching; however, we highly recommend using hardcoded values whenever possible.
To enable the identity to access project-level resources such as secrets within a specific project, you should add it to that project. To do this, head over to the project you want to add the identity to and go to Project Settings > Access Control > Machine Identities and press **Add identity**. Next, select the identity you want to add to the project and the project level role you want to allow it to assume. The project role assigned will determine what project level resources this identity can have access to. identities project identities project create In Azure DevOps, to authenticate with Infisical using OIDC, you must configure a service connection that enables workload identity federation. Once set up, the OIDC token can be fetched automatically within the pipeline job context. Here's an example: ```yaml theme={"dark"} trigger: - main pool: vmImage: ubuntu-latest steps: - task: AzureCLI@2 displayName: 'Retrieve secrets from Infisical using OIDC' inputs: azureSubscription: 'your-azure-service-connection-name' scriptType: 'bash' scriptLocation: 'inlineScript' addSpnToEnvironment: true inlineScript: | # Get OIDC access token OIDC_TOKEN=$(az account get-access-token --resource "api://AzureADTokenExchange" --query accessToken -o tsv) [ -z "$OIDC_TOKEN" ] && { echo "Failed to get access token"; exit 1; } # Exchange for Infisical access token ACCESS_TOKEN=$(curl -s -X POST "/api/v1/auth/oidc-auth/login" \ -H "Content-Type: application/json" \ -d "{\"identityId\":\"{your-identity-id}\",\"jwt\":\"$OIDC_TOKEN\"}" \ | jq -r '.accessToken') # Fetch secrets curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \ "/api/v3/secrets/raw?environment={your-environment-slug}&workspaceSlug={your-workspace-slug}" ``` Make sure the service connection is properly configured for workload identity federation and linked to your Azure AD app registration with appropriate claims. Each identity access token has a time-to-live (TTL) which you can infer from the response of the login operation; the default TTL is `7200` seconds which can be adjusted. If an identity access token expires, it can no longer authenticate with the Infisical API. In this case, a new access token should be obtained by performing another login operation.
# CircleCI Source: https://infisical.com/docs/documentation/platform/identities/oidc-auth/circleci Learn how to authenticate CircleCI jobs with Infisical using OpenID Connect (OIDC). **OIDC Auth** is a platform-agnostic JWT-based authentication method that can be used to authenticate from any platform or environment using an identity provider with OpenID Connect. ## Diagram The following sequence diagram illustrates the OIDC Auth workflow for authenticating CircleCI jobs with Infisical. ```mermaid theme={"dark"} sequenceDiagram participant Client as CircleCI Job participant Idp as CircleCI Identity Provider participant Infis as Infisical Idp->>Client: Step 1: Inject JWT with verifiable claims Note over Client,Infis: Step 2: Login Operation Client->>Infis: Send signed JWT to /api/v1/auth/oidc-auth/login Note over Infis,Idp: Step 3: Query verification Infis->>Idp: Request JWT public key using OIDC Discovery Idp-->>Infis: Return public key Note over Infis: Step 4: JWT validation Infis->>Client: Return short-lived access token Note over Client,Infis: Step 5: Access Infisical API with Token Client->>Infis: Make authenticated requests using the short-lived access token ``` ## Concept At a high-level, Infisical authenticates a client by verifying the JWT and checking that it meets specific requirements (e.g. it is issued by a trusted identity provider) at the `/api/v1/auth/oidc-auth/login` endpoint. If successful, then Infisical returns a short-lived access token that can be used to make authenticated requests to the Infisical API. To be more specific: 1. CircleCI provides the running job with a valid OIDC token specific to the execution. 2. The CircleCI OIDC token is sent to Infisical at the `/api/v1/auth/oidc-auth/login` endpoint. 3. Infisical fetches the public key that was used to sign the identity token provided by CircleCI. 4. Infisical validates the JWT using the public key provided by the identity provider and checks that the subject, audience, and claims of the token matches with the set criteria. 5. If all is well, Infisical returns a short-lived access token that CircleCI jobs can use to make authenticated requests to the Infisical API. Infisical needs network-level access to the CircleCI servers. ## Guide In the following steps, we explore how to create and use identities to access the Infisical API using the OIDC Auth authentication method. To create an identity, head to your Organization Settings > Access Control > Identities and press **Create identity**. identities organization When creating an identity, you specify an organization level [role](/documentation/platform/access-controls/role-based-access-controls) for it to assume; you can configure roles in Organization Settings > Access Control > Organization Roles. identities organization create Now input a few details for your new identity. Here's some guidance for each field: * Name (required): A friendly name for the identity. * Role (required): A role from the **Organization Roles** tab for the identity to assume. The organization role assigned will determine what organization level resources this identity can have access to. Once you've created an identity, you'll be redirected to a page where you can manage the identity. identities page Since the identity has been configured with Universal Auth by default, you should re-configure it to use OIDC Auth instead. To do this, press to edit the **Authentication** section, remove the existing Universal Auth configuration, and add a new OIDC Auth configuration onto the identity. identities page remove default auth identities create oidc auth method Restrict access by configuring the Subject, Audiences, and Claims fields Here's some more guidance on each field: * OIDC Discovery URL: The URL used to retrieve the OpenID Connect configuration from the identity provider. This will be used to fetch the public key needed for verifying the provided JWT. This should be set to `https://oidc.circleci.com/org/` where `organization_id` refers to the CircleCI organization where the job is being run. * Issuer: The unique identifier of the identity provider issuing the JWT. This value is used to verify the iss (issuer) claim in the JWT to ensure the token is issued by a trusted provider. This should be set to `https://oidc.circleci.com/org/` as well. * CA Certificate: The PEM-encoded CA cert for establishing secure communication with the Identity Provider endpoints. This can be left as blank. * Subject: The expected principal that is the subject of the JWT. The format of the sub field for CircleCI OIDC tokens is `org//project//user/` where organization\_id, project\_id, and user\_id are UUIDs that identify the CircleCI organization, project, and user, respectively. The user is the CircleCI user that caused this job to run. * Audiences: A list of intended recipients. This value is checked against the aud (audience) claim in the token. Set this to the CircleCI `organization_id` corresponding to where the job is running. * Claims: Additional information or attributes that should be present in the JWT for it to be valid. Refer to CircleCI's [documentation](https://circleci.com/docs/openid-connect-tokens) for the complete list of supported claims. * Access Token TTL (default is `2592000` equivalent to 30 days): The lifetime for an acccess token in seconds. This value will be referenced at renewal time. * Access Token Max TTL (default is `2592000` equivalent to 30 days): The maximum lifetime for an acccess token in seconds. This value will be referenced at renewal time. * Access Token Max Number of Uses (default is `0`): The maximum number of times that an access token can be used; a value of `0` implies infinite number of uses. * Access Token Trusted IPs: The IPs or CIDR ranges that access tokens can be used from. By default, each token is given the `0.0.0.0/0`, allowing usage from any network address. For more details on the appropriate values for the OIDC fields, refer to CircleCI's [documentation](https://circleci.com/docs/openid-connect-tokens). The `subject`, `audiences`, and `claims` fields support glob pattern matching; however, we highly recommend using hardcoded values whenever possible. To enable the identity to access project-level resources such as secrets within a specific project, you should add it to that project. To do this, head over to the project you want to add the identity to and go to Project Settings > Access Control > Machine Identities and press **Add identity**. Next, select the identity you want to add to the project and the project level role you want to allow it to assume. The project role assigned will determine what project level resources this identity can have access to. identities project identities project create The following is an example of how to use the `$CIRCLE_OIDC_TOKEN` with the Infisical [terraform provider](https://registry.terraform.io/providers/Infisical/infisical/latest/docs) to manage resources in a CircleCI pipeline. ```yml config.yml theme={"dark"} version: 2.1 jobs: terraform-apply: docker: - image: hashicorp/terraform:latest steps: - checkout - run: command: | export INFISICAL_AUTH_JWT="$CIRCLE_OIDC_TOKEN" terraform init terraform apply -auto-approve workflows: version: 2 build-and-test: jobs: - terraform-apply ``` The Infisical terraform provider expects the `INFISICAL_AUTH_JWT` environment variable to be set to the CircleCI OIDC token. ```hcl main.tf theme={"dark"} terraform { required_providers { infisical = { source = "infisical/infisical" } } } provider "infisical" { host = "https://app.infisical.com" auth = { oidc = { identity_id = "f2f5ee4c-6223-461a-87c3-406a6b481462" } } } resource "infisical_access_approval_policy" "prod-access-approval" { project_id = "09eda1f8-85a3-47a9-8a6f-e27f133b2a36" name = "my-approval-policy" environment_slug = "prod" secret_path = "/" approvers = [ { type = "user" username = "sheen+200@infisical.com" }, ] required_approvals = 1 enforcement_level = "soft" } ``` Each identity access token has a time-to-live (TTL) which you can infer from the response of the login operation; the default TTL is `7200` seconds which can be adjusted. If an identity access token expires, it can no longer authenticate with the Infisical API. In this case, a new access token should be obtained by performing another login operation. # General Source: https://infisical.com/docs/documentation/platform/identities/oidc-auth/general Learn how to authenticate with Infisical from any platform or environment using OpenID Connect (OIDC). **OIDC Auth** is a platform-agnostic JWT-based authentication method that can be used to authenticate from any platform or environment using an identity provider with OpenID Connect. ## Diagram The following sequence diagram illustrates the OIDC Auth workflow for authenticating clients with Infisical. ```mermaid theme={"dark"} sequenceDiagram participant Client as Client participant Idp as Identity Provider participant Infis as Infisical Client->>Idp: Step 1: Request identity token Idp-->>Client: Return JWT with verifiable claims Note over Client,Infis: Step 2: Login Operation Client->>Infis: Send signed JWT to /api/v1/auth/oidc-auth/login Note over Infis,Idp: Step 3: Query verification Infis->>Idp: Request JWT public key using OIDC Discovery Idp-->>Infis: Return public key Note over Infis: Step 4: JWT validation Infis->>Client: Return short-lived access token Note over Client,Infis: Step 5: Access Infisical API with Token Client->>Infis: Make authenticated requests using the short-lived access token ``` ## Concept At a high-level, Infisical authenticates a client by verifying the JWT and checking that it meets specific requirements (e.g. it is issued by a trusted identity provider) at the `/api/v1/auth/oidc-auth/login` endpoint. If successful, then Infisical returns a short-lived access token that can be used to make authenticated requests to the Infisical API. To be more specific: 1. The client requests an identity token from its identity provider. 2. The client sends the identity token to Infisical at the `/api/v1/auth/oidc-auth/login` endpoint. 3. Infisical fetches the public key that was used to sign the identity token from the identity provider using OIDC Discovery. 4. Infisical validates the JWT using the public key provided by the identity provider and checks that the subject, audience, and claims of the token matches with the set criteria. 5. If all is well, Infisical returns a short-lived access token that the client can use to make authenticated requests to the Infisical API. Infisical needs network-level access to the identity provider configuration endpoints. ## Guide In the following steps, we explore how to create and use identities to access the Infisical API using the OIDC Auth authentication method. To create an identity, head to your Organization Settings > Access Control > Identities and press **Create identity**. identities organization When creating an identity, you specify an organization level [role](/documentation/platform/access-controls/role-based-access-controls) for it to assume; you can configure roles in Organization Settings > Access Control > Organization Roles. identities organization create Now input a few details for your new identity. Here's some guidance for each field: * Name (required): A friendly name for the identity. * Role (required): A role from the **Organization Roles** tab for the identity to assume. The organization role assigned will determine what organization level resources this identity can have access to. Once you've created an identity, you'll be redirected to a page where you can manage the identity. identities page Since the identity has been configured with Universal Auth by default, you should re-configure it to use OIDC Auth instead. To do this, press to edit the **Authentication** section, remove the existing Universal Auth configuration, and add a new OIDC Auth configuration onto the identity. identities page remove default auth identities create oidc auth method Restrict access by configuring the Subject, Audiences, and Claims fields Here's some more guidance on each field: * OIDC Discovery URL: The URL used to retrieve the OpenID Connect configuration from the identity provider. This will be used to fetch the public key needed for verifying the provided JWT. * Issuer: The unique identifier of the identity provider issuing the JWT. This value is used to verify the iss (issuer) claim in the JWT to ensure the token is issued by a trusted provider. * CA Certificate: The PEM-encoded CA cert for establishing secure communication with the Identity Provider endpoints. * Subject: The expected principal that is the subject of the JWT. The `sub` (subject) claim in the JWT should match this value. * Audiences: A list of intended recipients. This value is checked against the aud (audience) claim in the token. The token's aud claim should match at least one of the audiences for it to be valid. * Claims: Additional information or attributes that should be present in the JWT for it to be valid. * Access Token TTL (default is `2592000` equivalent to 30 days): The lifetime for an acccess token in seconds. This value will be referenced at renewal time. * Access Token Max TTL (default is `2592000` equivalent to 30 days): The maximum lifetime for an acccess token in seconds. This value will be referenced at renewal time. * Access Token Max Number of Uses (default is `0`): The maximum number of times that an access token can be used; a value of `0` implies infinite number of uses. * Access Token Trusted IPs: The IPs or CIDR ranges that access tokens can be used from. By default, each token is given the `0.0.0.0/0`, allowing usage from any network address. The `subject`, `audiences`, and `claims` fields support glob pattern matching; however, we highly recommend using hardcoded values whenever possible. To enable the identity to access project-level resources such as secrets within a specific project, you should add it to that project. To do this, head over to the project you want to add the identity to and go to Project Settings > Access Control > Machine Identities and press **Add identity**. Next, select the identity you want to add to the project and the project level role you want to allow it to assume. The project role assigned will determine what project level resources this identity can have access to. identities project identities project create To access the Infisical API as the identity, you need to fetch an identity token from an identity provider and make a request to the `/api/v1/auth/oidc-auth/login` endpoint in exchange for an access token. We provide an example below of how authentication is done with Infisical using OIDC. It is a snippet from the [official Github secrets action](https://github.com/Infisical/secrets-action). #### Sample usage ```javascript theme={"dark"} export const oidcLogin = async ({ identityId, domain, oidcAudience }) => { const idToken = await core.getIDToken(oidcAudience); const loginData = querystring.stringify({ identityId, jwt: idToken, }); try { const response = await axios({ method: "post", url: `${domain}/api/v1/auth/oidc-auth/login`, headers: { "Content-Type": "application/x-www-form-urlencoded", }, data: loginData, }); return response.data.accessToken; } catch (err) { core.error("Error:", err.message); throw err; } }; ``` #### Sample OIDC login response ```bash Response theme={"dark"} { "accessToken": "...", "expiresIn": 7200, "accessTokenMaxTTL": 43244 "tokenType": "Bearer" } ``` We recommend using one of Infisical's clients like SDKs or the Infisical Agent to authenticate with Infisical using OIDC Auth as they handle the authentication process including the fetching of identity tokens for you. Each identity access token has a time-to-live (TTL) which you can infer from the response of the login operation; the default TTL is `7200` seconds which can be adjusted. If an identity access token expires, it can no longer authenticate with the Infisical API. In this case, a new access token should be obtained by performing another login operation. # Github Source: https://infisical.com/docs/documentation/platform/identities/oidc-auth/github Learn how to authenticate Github workflows with Infisical using OpenID Connect (OIDC). **OIDC Auth** is a platform-agnostic JWT-based authentication method that can be used to authenticate from any platform or environment using an identity provider with OpenID Connect. ## Diagram The following sequence diagram illustrates the OIDC Auth workflow for authenticating Github workflows with Infisical. ```mermaid theme={"dark"} sequenceDiagram participant Client as Github Workflow participant Idp as Identity Provider participant Infis as Infisical Client->>Idp: Step 1: Request identity token Idp-->>Client: Return JWT with verifiable claims Note over Client,Infis: Step 2: Login Operation Client->>Infis: Send signed JWT to /api/v1/auth/oidc-auth/login Note over Infis,Idp: Step 3: Query verification Infis->>Idp: Request JWT public key using OIDC Discovery Idp-->>Infis: Return public key Note over Infis: Step 4: JWT validation Infis->>Client: Return short-lived access token Note over Client,Infis: Step 5: Access Infisical API with Token Client->>Infis: Make authenticated requests using the short-lived access token ``` ## Concept At a high-level, Infisical authenticates a client by verifying the JWT and checking that it meets specific requirements (e.g. it is issued by a trusted identity provider) at the `/api/v1/auth/oidc-auth/login` endpoint. If successful, then Infisical returns a short-lived access token that can be used to make authenticated requests to the Infisical API. To be more specific: 1. The Github workflow requests an identity token from Github's identity provider. 2. The fetched identity token is sent to Infisical at the `/api/v1/auth/oidc-auth/login` endpoint. 3. Infisical fetches the public key that was used to sign the identity token from Github's identity provider using OIDC Discovery. 4. Infisical validates the JWT using the public key provided by the identity provider and checks that the subject, audience, and claims of the token matches with the set criteria. 5. If all is well, Infisical returns a short-lived access token that the Github workflow can use to make authenticated requests to the Infisical API. Infisical needs network-level access to Github's identity provider endpoints. ## Guide In the following steps, we explore how to create and use identities to access the Infisical API using the OIDC Auth authentication method. To create an identity, head to your Organization Settings > Access Control > Identities and press **Create identity**. identities organization When creating an identity, you specify an organization level [role](/documentation/platform/access-controls/role-based-access-controls) for it to assume; you can configure roles in Organization Settings > Access Control > Organization Roles. identities organization create Now input a few details for your new identity. Here's some guidance for each field: * Name (required): A friendly name for the identity. * Role (required): A role from the **Organization Roles** tab for the identity to assume. The organization role assigned will determine what organization level resources this identity can have access to. Once you've created an identity, you'll be redirected to a page where you can manage the identity. identities page Since the identity has been configured with Universal Auth by default, you should re-configure it to use OIDC Auth instead. To do this, press to edit the **Authentication** section, remove the existing Universal Auth configuration, and add a new OIDC Auth configuration onto the identity. identities page remove default auth identities create oidc auth method Restrict access by configuring the Subject, Audiences, and Claims fields Here's some more guidance on each field: * OIDC Discovery URL: The URL used to retrieve the OpenID Connect configuration from the identity provider. This will be used to fetch the public key needed for verifying the provided JWT. This should be set to `https://token.actions.githubusercontent.com` * Issuer: The unique identifier of the identity provider issuing the JWT. This value is used to verify the iss (issuer) claim in the JWT to ensure the token is issued by a trusted provider. This should be set to `https://token.actions.githubusercontent.com` * CA Certificate: The PEM-encoded CA cert for establishing secure communication with the Identity Provider endpoints. For Github workflows, this can be left as blank. * Subject: The expected principal that is the subject of the JWT. The format of the sub field for GitHub workflow OIDC tokens is as follows: `"repo:/:"`. The environment can be where the GitHub workflow is running, such as `environment`, `ref`, or `job_workflow_ref`. For example, if you have a repository owned by octocat named example-repo, and the GitHub workflow is running on the main branch, the subject field might look like this: `repo:octocat/example-repo:ref:refs/heads/main` * Audiences: A list of intended recipients. This value is checked against the aud (audience) claim in the token. By default, set this to the URL of the repository owner, such as the organization that owns the repository (e.g. `https://github.com/octo-org`). * Claims: Additional information or attributes that should be present in the JWT for it to be valid. You can refer to Github's [documentation](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#understanding-the-oidc-token) for the complete list of supported claims. * Access Token TTL (default is `2592000` equivalent to 30 days): The lifetime for an acccess token in seconds. This value will be referenced at renewal time. * Access Token Max TTL (default is `2592000` equivalent to 30 days): The maximum lifetime for an acccess token in seconds. This value will be referenced at renewal time. * Access Token Max Number of Uses (default is `0`): The maximum number of times that an access token can be used; a value of `0` implies infinite number of uses. * Access Token Trusted IPs: The IPs or CIDR ranges that access tokens can be used from. By default, each token is given the `0.0.0.0/0`, allowing usage from any network address. If you are unsure about what to configure for the subject, audience, and claims fields you can use [github/actions-oidc-debugger](https://github.com/github/actions-oidc-debugger) to get the appropriate values. Alternatively, you can fetch the JWT from the workflow and inspect the fields manually. The `subject`, `audiences`, and `claims` fields support glob pattern matching; however, we highly recommend using hardcoded values whenever possible. To enable the identity to access project-level resources such as secrets within a specific project, you should add it to that project. To do this, head over to the project you want to add the identity to and go to Project Settings > Access Control > Machine Identities and press **Add identity**. Next, select the identity you want to add to the project and the project level role you want to allow it to assume. The project role assigned will determine what project level resources this identity can have access to. identities project identities project create As a prerequisite, you will need to set `id-token:write` permissions for the Github workflow. This setting allows the JWT to be requested from Github's OIDC provider. ```yaml theme={"dark"} permissions: id-token: write # This is required for requesting the JWT ... ``` To access the Infisical API as the identity, you need to fetch an identity token from Github's identity provider and make a request to the `/api/v1/auth/oidc-auth/login` endpoint in exchange for an access token. The identity token can be fetched using either of the following approaches: * Using environment variables on the runner (`ACTIONS_ID_TOKEN_REQUEST_URL` and `ACTIONS_ID_TOKEN_REQUEST_TOKEN`). ```yaml theme={"dark"} steps: - name: Request OIDC Token run: | echo "Requesting OIDC token..." TOKEN=$(curl -s -H "Authorization: Bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" "$ACTIONS_ID_TOKEN_REQUEST_URL" | jq -r '.value') echo "TOKEN=$TOKEN" >> $GITHUB_ENV ``` * Using `getIDToken()` from the Github Actions toolkit. Below is an example of how a Github workflow can be configured to fetch secrets from Infisical using the [Infisical Secrets Action](https://github.com/Infisical/secrets-action) with OIDC Auth. ```yaml theme={"dark"} name: Manual workflow on: workflow_dispatch: permissions: id-token: write # This is required for requesting the JWT jobs: build: runs-on: ubuntu-latest steps: - uses: Infisical/secrets-action@v1.0.7 with: method: "oidc" env-slug: "dev" project-slug: "ggggg-9-des" identity-id: "6b579c00-5c85-4b44-aabe-f8a ... ``` Preceding steps can then use the secret values injected onto the workflow's environment. We recommend using [Infisical Secrets Action](https://github.com/Infisical/secrets-action) to authenticate with Infisical using OIDC Auth as it handles the authentication process including the fetching of identity tokens for you. Each identity access token has a time-to-live (TTL) which you can infer from the response of the login operation; the default TTL is `7200` seconds which can be adjusted. If an identity access token expires, it can no longer authenticate with the Infisical API. In this case, a new access token should be obtained by performing another login operation. # GitLab Source: https://infisical.com/docs/documentation/platform/identities/oidc-auth/gitlab Learn how to authenticate GitLab pipelines with Infisical using OpenID Connect (OIDC). **OIDC Auth** is a platform-agnostic JWT-based authentication method that can be used to authenticate from any platform or environment using an identity provider with OpenID Connect. ## Diagram The following sequence diagram illustrates the OIDC Auth workflow for authenticating GitLab pipelines with Infisical. ```mermaid theme={"dark"} sequenceDiagram participant Client as GitLab Pipeline participant Idp as GitLab Identity Provider participant Infis as Infisical Client->>Idp: Step 1: Request identity token Idp-->>Client: Return JWT with verifiable claims Note over Client,Infis: Step 2: Login Operation Client->>Infis: Send signed JWT to /api/v1/auth/oidc-auth/login Note over Infis,Idp: Step 3: Query verification Infis->>Idp: Request JWT public key using OIDC Discovery Idp-->>Infis: Return public key Note over Infis: Step 4: JWT validation Infis->>Client: Return short-lived access token Note over Client,Infis: Step 5: Access Infisical API with Token Client->>Infis: Make authenticated requests using the short-lived access token ``` ## Concept At a high-level, Infisical authenticates a client by verifying the JWT and checking that it meets specific requirements (e.g. it is issued by a trusted identity provider) at the `/api/v1/auth/oidc-auth/login` endpoint. If successful, then Infisical returns a short-lived access token that can be used to make authenticated requests to the Infisical API. To be more specific: 1. The GitLab pipeline requests an identity token from GitLab's identity provider. 2. The fetched identity token is sent to Infisical at the `/api/v1/auth/oidc-auth/login` endpoint. 3. Infisical fetches the public key that was used to sign the identity token from GitLab's identity provider using OIDC Discovery. 4. Infisical validates the JWT using the public key provided by the identity provider and checks that the subject, audience, and claims of the token matches with the set criteria. 5. If all is well, Infisical returns a short-lived access token that the GitLab pipeline can use to make authenticated requests to the Infisical API. Infisical needs network-level access to GitLab's identity provider endpoints. ## Guide In the following steps, we explore how to create and use identities to access the Infisical API using the OIDC Auth authentication method. To create an identity, head to your Organization Settings > Access Control > Identities and press **Create identity**. identities organization When creating an identity, you specify an organization level [role](/documentation/platform/access-controls/role-based-access-controls) for it to assume; you can configure roles in Organization Settings > Access Control > Organization Roles. identities organization create Now input a few details for your new identity. Here's some guidance for each field: * Name (required): A friendly name for the identity. * Role (required): A role from the **Organization Roles** tab for the identity to assume. The organization role assigned will determine what organization level resources this identity can have access to. Once you've created an identity, you'll be redirected to a page where you can manage the identity. identities page Since the identity has been configured with Universal Auth by default, you should re-configure it to use OIDC Auth instead. To do this, press to edit the **Authentication** section, remove the existing Universal Auth configuration, and add a new OIDC Auth configuration onto the identity. identities page remove default auth identities create oidc auth method Restrict access by configuring the Subject, Audiences, and Claims fields Here's some more guidance on each field: * OIDC Discovery URL: The URL used to retrieve the OpenID Connect configuration from the identity provider. This will be used to fetch the public key needed for verifying the provided JWT. For GitLab SaaS (GitLab.com), this should be set to `https://gitlab.com`. For self-hosted GitLab instances, use the domain of your GitLab instance. * Issuer: The unique identifier of the identity provider issuing the JWT. This value is used to verify the iss (issuer) claim in the JWT to ensure the token is issued by a trusted provider. This should also be set to the domain of the Gitlab instance. * CA Certificate: The PEM-encoded CA cert for establishing secure communication with the Identity Provider endpoints. For GitLab.com, this can be left blank. * Subject: The expected principal that is the subject of the JWT. For GitLab pipelines, this should be set to a string that uniquely identifies the pipeline and its context, in the format `project_path:{group}/{project}:ref_type:{type}:ref:{branch_name}` (e.g., `project_path:example-group/example-project:ref_type:branch:ref:main`). * Claims: Additional information or attributes that should be present in the JWT for it to be valid. You can refer to GitLab's [documentation](https://docs.gitlab.com/ee/ci/secrets/id_token_authentication.html#token-payload) for the list of supported claims. * Access Token TTL (default is `2592000` equivalent to 30 days): The lifetime for an acccess token in seconds. This value will be referenced at renewal time. * Access Token Max TTL (default is `2592000` equivalent to 30 days): The maximum lifetime for an acccess token in seconds. This value will be referenced at renewal time. * Access Token Max Number of Uses (default is `0`): The maximum number of times that an access token can be used; a value of `0` implies infinite number of uses. * Access Token Trusted IPs: The IPs or CIDR ranges that access tokens can be used from. By default, each token is given the `0.0.0.0/0`, allowing usage from any network address. For more details on the appropriate values for the OIDC fields, refer to GitLab's [documentation](https://docs.gitlab.com/ee/ci/secrets/id_token_authentication.html#token-payload). The `subject`, `audiences`, and `claims` fields support glob pattern matching; however, we highly recommend using hardcoded values whenever possible. To enable the identity to access project-level resources such as secrets within a specific project, you should add it to that project. To do this, head over to the project you want to add the identity to and go to Project Settings > Access Control > Machine Identities and press **Add identity**. Next, select the identity you want to add to the project and the project level role you want to allow it to assume. The project role assigned will determine what project level resources this identity can have access to. identities project identities project create As demonstration, we will be using the Infisical CLI to fetch Infisical secrets and utilize them within a GitLab pipeline. To access Infisical secrets as the identity, you need to use an identity token from GitLab which matches the OIDC configuration defined for the machine identity. This can be done by defining the `id_tokens` property. The resulting token would then be used to login with OIDC like the following: `infisical login --method=oidc-auth --oidc-jwt=$GITLAB_TOKEN` Below is a complete example of how a GitLab pipeline can be configured to work with secrets from Infisical using the Infisical CLI with OIDC Auth: ```yaml theme={"dark"} image: ubuntu stages: - build build-job: stage: build id_tokens: INFISICAL_ID_TOKEN: aud: infisical-aud-test script: - apt update && apt install -y curl - curl -1sLf 'https://dl.cloudsmith.io/public/infisical/infisical-cli/setup.deb.sh' | bash - apt-get update && apt-get install -y infisical - export INFISICAL_TOKEN=$(infisical login --method=oidc-auth --machine-identity-id=4e807a78-1b1c-4bd6-9609-ef2b0cf4fd54 --oidc-jwt=$INFISICAL_ID_TOKEN --silent --plain) - infisical run --projectId=1d0443c1-cd43-4b3a-91a3-9d5f81254a89 --env=dev -- npm run build ``` The `id_tokens` keyword is used to request an ID token for the job. In this example, an ID token named `INFISICAL_ID_TOKEN` is requested with the audience (`aud`) claim set to "infisical-aud-test". This ID token will be used to authenticate with Infisical. Each identity access token has a time-to-live (TTL) which you can infer from the response of the login operation; the default TTL is `7200` seconds, which can be adjusted. If an identity access token expires, it can no longer authenticate with the Infisical API. In this case, a new access token should be obtained by performing another login operation. # SPIFFE/SPIRE Source: https://infisical.com/docs/documentation/platform/identities/oidc-auth/spire Learn how to authenticate SPIRE workloads with Infisical using OpenID Connect (OIDC). **OIDC Auth** is a platform-agnostic JWT-based authentication method that can be used to authenticate from any platform or environment using an identity provider with OpenID Connect. ## Diagram The following sequence diagram illustrates the OIDC Auth workflow for authenticating SPIRE workloads with Infisical. ```mermaid theme={"dark"} sequenceDiagram participant Client as SPIRE Workload participant Agent as SPIRE Agent participant Server as SPIRE Server participant Infis as Infisical Client->>Agent: Step 1: Request JWT-SVID Agent->>Server: Validate workload and fetch signing key Server-->>Agent: Return signing material Agent-->>Client: Return JWT-SVID with verifiable claims Note over Client,Infis: Step 2: Login Operation Client->>Infis: Send JWT-SVID to /api/v1/auth/oidc-auth/login Note over Infis,Server: Step 3: Query verification Infis->>Server: Request JWT public key using OIDC Discovery Server-->>Infis: Return public key Note over Infis: Step 4: JWT validation Infis->>Client: Return short-lived access token Note over Client,Infis: Step 5: Access Infisical API with Token Client->>Infis: Make authenticated requests using the short-lived access token ``` ## Concept At a high-level, Infisical authenticates a SPIRE workload by verifying the JWT-SVID and checking that it meets specific requirements (e.g. it is issued by a trusted SPIRE server) at the `/api/v1/auth/oidc-auth/login` endpoint. If successful, then Infisical returns a short-lived access token that can be used to make authenticated requests to the Infisical API. To be more specific: 1. The SPIRE workload requests a JWT-SVID from the local SPIRE Agent. 2. The SPIRE Agent validates the workload's identity and requests signing material from the SPIRE Server. 3. The SPIRE Agent returns a JWT-SVID containing the workload's SPIFFE ID and other claims. 4. The JWT-SVID is sent to Infisical at the `/api/v1/auth/oidc-auth/login` endpoint. 5. Infisical fetches the public key that was used to sign the JWT-SVID from the SPIRE Server using OIDC Discovery. 6. Infisical validates the JWT-SVID using the public key provided by the SPIRE Server and checks that the subject, audience, and claims of the token matches with the set criteria. 7. If all is well, Infisical returns a short-lived access token that the workload can use to make authenticated requests to the Infisical API. Infisical needs network-level access to the SPIRE Server's OIDC Discovery endpoint. ## Prerequisites Before following this guide, ensure you have: * A running SPIRE deployment with both SPIRE Server and SPIRE Agent configured * OIDC Discovery Provider deployed alongside your SPIRE Server * Workload registration entries created in SPIRE for the workloads that need to access Infisical * Network connectivity between Infisical and your OIDC Discovery Provider endpoint For detailed SPIRE setup instructions, refer to the [SPIRE documentation](https://spiffe.io/docs/latest/spire-about/). ## OIDC Discovery Provider Setup To enable JWT-SVID verification with Infisical, you need to deploy the OIDC Discovery Provider alongside your SPIRE Server. The OIDC Discovery Provider runs as a separate service that exposes the necessary OIDC endpoints. In Kubernetes deployments, this is typically done by adding an `oidc-discovery-provider` container to your SPIRE Server StatefulSet: ```yaml theme={"dark"} - name: spire-oidc image: ghcr.io/spiffe/oidc-discovery-provider:1.12.2 args: - -config - /run/spire/oidc/config/oidc-discovery-provider.conf ports: - containerPort: 443 name: spire-oidc-port ``` The OIDC Discovery Provider will expose the OIDC Discovery endpoint at `https:///.well-known/openid_configuration`, which Infisical will use to fetch the public keys for JWT-SVID verification. For detailed setup instructions, refer to the [SPIRE OIDC Discovery Provider documentation](https://github.com/spiffe/spire/tree/main/support/oidc-discovery-provider). ## Guide In the following steps, we explore how to create and use identities to access the Infisical API using the OIDC Auth authentication method with SPIFFE/SPIRE. To create an identity, head to your Organization Settings > Access Control > Identities and press **Create identity**. identities organization When creating an identity, you specify an organization level [role](/documentation/platform/access-controls/role-based-access-controls) for it to assume; you can configure roles in Organization Settings > Access Control > Organization Roles. identities organization create Now input a few details for your new identity. Here's some guidance for each field: * Name (required): A friendly name for the identity. * Role (required): A role from the **Organization Roles** tab for the identity to assume. The organization role assigned will determine what organization level resources this identity can have access to. Once you've created an identity, you'll be redirected to a page where you can manage the identity. identities page Since the identity has been configured with Universal Auth by default, you should re-configure it to use OIDC Auth instead. To do this, press to edit the **Authentication** section, remove the existing Universal Auth configuration, and add a new OIDC Auth configuration onto the identity. identities page remove default auth identities create oidc auth method Restrict access by configuring the Subject, Audiences, and Claims fields Here's some more guidance on each field: * OIDC Discovery URL: The URL used to retrieve the OpenID Connect configuration from the SPIRE Server. This will be used to fetch the public key needed for verifying the provided JWT-SVID. This should be set to your SPIRE Server's OIDC Discovery endpoint, typically `https://:/.well-known/openid_configuration` * Issuer: The unique identifier of the SPIRE Server issuing the JWT-SVID. This value is used to verify the iss (issuer) claim in the JWT-SVID to ensure the token is issued by a trusted SPIRE Server. This should match your SPIRE Server's configured issuer, typically `https://:` * CA Certificate: The PEM-encoded CA certificate for establishing secure communication with the SPIRE Server endpoints. This should contain the CA certificate that signed your SPIRE Server's TLS certificate. * Subject: The expected SPIFFE ID that is the subject of the JWT-SVID. The format of the sub field for SPIRE JWT-SVIDs follows the SPIFFE ID format: `spiffe:///`. For example: `spiffe://example.org/workload/api-server` * Audiences: A list of intended recipients for the JWT-SVID. This value is checked against the aud (audience) claim in the token. When workloads request JWT-SVIDs from SPIRE, they specify an audience (e.g., `infisical` or your service name). Configure this to match what your workloads use. * Claims: Additional information or attributes that should be present in the JWT-SVID for it to be valid. Standard SPIRE JWT-SVID claims include `sub` (SPIFFE ID), `aud` (audience), `exp` (expiration), and `iat` (issued at). You can also configure custom claims if your SPIRE Server includes additional metadata. * Access Token TTL (default is `2592000` equivalent to 30 days): The lifetime for an access token in seconds. This value will be referenced at renewal time. * Access Token Max TTL (default is `2592000` equivalent to 30 days): The maximum lifetime for an access token in seconds. This value will be referenced at renewal time. * Access Token Max Number of Uses (default is `0`): The maximum number of times that an access token can be used; a value of `0` implies infinite number of uses. * Access Token Trusted IPs: The IPs or CIDR ranges that access tokens can be used from. By default, each token is given the `0.0.0.0/0`, allowing usage from any network address. SPIRE JWT-SVIDs contain standard claims like `sub` (SPIFFE ID), `aud` (audience), `exp`, and `iat`. The audience is typically specified when requesting the JWT-SVID (e.g., `spire-agent api fetch jwt -audience infisical`). The `subject`, `audiences`, and `claims` fields support glob pattern matching; however, we highly recommend using hardcoded SPIFFE IDs whenever possible for better security. To enable the identity to access project-level resources such as secrets within a specific project, you should add it to that project. To do this, head over to the project you want to add the identity to and go to Project Settings > Access Control > Machine Identities and press **Add identity**. Next, select the identity you want to add to the project and the project level role you want to allow it to assume. The project role assigned will determine what project level resources this identity can have access to. identities project identities project create Here's an example of how a workload can use its JWT-SVID to authenticate with Infisical and retrieve secrets: ```bash theme={"dark"} #!/bin/bash # Obtain JWT-SVID from SPIRE Agent JWT_SVID=$(spire-agent api fetch jwt -audience infisical -socketPath /run/spire/sockets/agent.sock | grep -A1 "token(" | tail -1) # Authenticate with Infisical using the JWT-SVID ACCESS_TOKEN=$(curl -s -X POST \ -H "Content-Type: application/json" \ -d "{\"identityId\":\"\",\"jwt\":\"$JWT_SVID\"}" \ https://app.infisical.com/api/v1/auth/oidc-auth/login | jq -r '.accessToken') # Use the access token to retrieve secrets curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \ "https://app.infisical.com/api/v3/secrets/raw?workspaceSlug=&environment=&secretPath=/" ``` Each identity access token has a time-to-live (TTL) which you can infer from the response of the login operation; the default TTL is `7200` seconds which can be adjusted. If an identity access token expires, it can no longer authenticate with the Infisical API. In this case, a new access token should be obtained by performing another login operation. JWT-SVIDs from SPIRE have their own expiration time (typically short-lived). Ensure your application handles both JWT-SVID renewal from SPIRE and access token renewal from Infisical appropriately. # Terraform Cloud Source: https://infisical.com/docs/documentation/platform/identities/oidc-auth/terraform-cloud How to authenticate with Infisical from Terraform Cloud using OIDC. This guide will walk you through setting up Terraform Cloud to inject a [workload identity token](https://developer.hashicorp.com/terraform/cloud-docs/workspaces/dynamic-provider-credentials/workload-identity-tokens) and use it for OIDC-based authentication with the Infisical Terraform provider. You'll start by creating a machine identity in Infisical, then configure Terraform Cloud to pass the injected token into your Terraform runs. Follow the instructions [in this documentation](/documentation/platform/identities/oidc-auth/general) to create a machine identity with OIDC auth. Infisical OIDC configuration values for Terraform Cloud: 1. Set the OIDC Discovery URL to [https://app.terraform.io](https://app.terraform.io). 2. Set the Issuer to [https://app.terraform.io](https://app.terraform.io). 3. Configure the Audience to match the value you will use for **TFC\_WORKLOAD\_IDENTITY\_AUDIENCE** in Terraform Cloud for the next step. To view all possible claims available from Terraform cloud, visit [HashiCorp’s documentation](https://developer.hashicorp.com/terraform/cloud-docs/workspaces/dynamic-provider-credentials/workload-identity-tokens#token-structure). 1. **Navigate to your workspace** in Terraform Cloud. 2. **Add a workspace variable** named `TFC_WORKLOAD_IDENTITY_AUDIENCE`: * **Key**: `TFC_WORKLOAD_IDENTITY_AUDIENCE` * **Value**: For example, `my-infisical-audience` * **Category**: Environment > **Important**: > > * The presence of `TFC_WORKLOAD_IDENTITY_AUDIENCE` is required for Terraform Cloud to inject a token. > * If you are self-hosting HCP Terraform agents, ensure they are **v1.7.0 or above**. Once set, Terraform Cloud will inject a workload identity token into the run environment as `TFC_WORKLOAD_IDENTITY_TOKEN`. If you need multiple tokens (each with a different audience), create additional variables: ``` TFC_WORKLOAD_IDENTITY_AUDIENCE_[YOUR_TAG_HERE] ``` For example: * `TFC_WORKLOAD_IDENTITY_AUDIENCE_INFISICAL` * `TFC_WORKLOAD_IDENTITY_AUDIENCE_OTHER_SERVICE` Terraform Cloud will then inject: * `TFC_WORKLOAD_IDENTITY_TOKEN_INFISICAL` * `TFC_WORKLOAD_IDENTITY_TOKEN_OTHER_SERVICE` > **Note**: > > * The `[YOUR_TAG_HERE]` can only contain letters, numbers, and underscores. > * You **cannot** use the reserved keyword `TYPE`. > * Generating multiple tokens requires **v1.12.0 or later** if you are self-hosting agents. If you are running on self-hosted HCP Terraform agents, you must use v1.7.0 or later to enable token injection. If you need to generate multiple tokens, you must use v1.12.0 or later. In your Terraform configuration, reference the injected token by name. For example: ```hcl theme={"dark"} provider "infisical" { host = "https://app.infisical.com" auth = { oidc = { identity_id = "" # This must match the environment variable Terraform injects: token_environment_variable_name = "TFC_WORKLOAD_IDENTITY_TOKEN" } } } ``` * **`host`**: Defaults to `https://app.infisical.com`. Override if using a self-hosted Infisical instance. * **`identity_id`**: The OIDC identity ID from Infisical. * **`token_environment_variable_name`**: Must match the injected variable name from Terraform Cloud. If using single token, use `TFC_WORKLOAD_IDENTITY_TOKEN`. If using multiple tokens, choose the one you want to use (e.g., `TFC_WORKLOAD_IDENTITY_TOKEN_INFISICAL`). 1. Run a plan and apply in Terraform Cloud. 2. Verify the Infisical provider authenticates successfully without issues. If you run into authentication errors, double-check the Infisical identity has the correct roles/permissions in Infisical. # User and Machine Identities Source: https://infisical.com/docs/documentation/platform/identities/overview Learn more about identities to interact with resources in Infisical. To interact with secrets and resource with Infisical, it is important to understand the concept of identities. Identities can be of two types: * **People** (e.g., developers, platform engineers, administrators) * **Machines** (e.g., machine entities for managing secrets in CI/CD pipelines, production applications, and more) Both people and machines are able to utilize corresponding clients (e.g., Dashboard UI, CLI, SDKs, API, Kubernetes Operator) together with allowed authentication methods (e.g., email & password, SAML SSO, LDAP, OIDC, Universal Auth). Learn more about the concept on user identities in Infisical. Understand the concept of machine identities in Infisical. # TLS Certificate Auth Source: https://infisical.com/docs/documentation/platform/identities/tls-cert-auth Learn how to authenticate with Infisical using TLS Certificate. **TLS Certificate Auth** is an authentication method that verifies a user's TLS Client certificate using the provided CA Certificate, allowing secure access to Infisical resources. ## Diagram The following sequence diagram illustrates the TLS Certificate Auth workflow for authenticating users with Infisical. ```mermaid theme={"dark"} sequenceDiagram participant Client participant Infisical Note over Client,Client: Step 1: Setup your TLS request with the client certificate Note over Client,Infisical: Step 2: Login Operation Client->>Infisical: Send request to /api/v1/auth/tls-cert-auth/login Note over Infisical: Step 3: Request verification using CA Certificate Infisical->>Client: Return short-lived access token Note over Client,Infisical: Step 5: Access Infisical API with token Client->>Infisical: Make authenticated requests using the short-lived access token ``` ## Concept At a high level, Infisical authenticates the client's TLS Certificate by verifying its identity and checking that it meets specific requirements (e.g., it is bound to the allowed common names) at the `/api/v1/auth/tls-cert-auth/login` endpoint. If successful, Infisical returns a short-lived access token that can be used to make authenticated requests to the Infisical API. To be more specific: 1. The client sends a TLS request with the client certificate to Infisical at the `/api/v1/auth/tls-cert-auth/login` endpoint. 2. Infisical verifies the incoming request using the provided CA certificate. 3. Infisical checks the user's properties against set criteria such as Allowed Common Names. 4. If all checks pass, Infisical returns a short-lived access token that the client can use to make authenticated requests to the Infisical API. Most of the time, the Infisical server will be behind a load balancer or proxy. To propagate the TLS certificate from the load balancer to the instance, you can configure the TLS to send the client certificate as a header that is set as an [environment variable](/self-hosting/configuration/envars#param-identity-tls-cert-auth-client-certificate-header-key). Infisical US/EU and dedicated instances are deployed with AWS ALB. TLS Certificate Auth must flow through our ALB mTLS pass-through in order to authenticate. When you are authenticating with TLS Certificate Auth, you must use the port `8443` instead of the default `443`. Example: `https://app.infisical.com:8443/api/v1/auth/tls-cert-auth/login` ## Guide In the following steps, we explore how to create and use identities for your workloads and applications on TLS Certificate to access the Infisical API using request signing. **Self-Hosted Users:** Before using TLS Certificate Auth, please review the [Security Requirements for Self-Hosted Deployments](#security-requirements-for-self-hosted-deployments) section below to ensure proper configuration and avoid security vulnerabilities. ### Creating an identity To create an identity, head to your Organization Settings > Access Control > [Identities](https://app.infisical.com/organization/access-management?selectedTab=identities) and press **Create identity**. identities organization When creating an identity, you specify an organization-level [role](/documentation/platform/access-controls/role-based-access-controls) for it to assume; you can configure roles in Organization Settings > Access Control > [Organization Roles](https://app.infisical.com/organization/access-management?selectedTab=roles). identities organization create Input some details for your new identity: * **Name (required):** A friendly name for the identity. * **Role (required):** A role from the [**Organization Roles**](https://app.infisical.com/organization/access-management?selectedTab=roles) tab for the identity to assume. The organization role assigned will determine what organization-level resources this identity can have access to. Once you've created an identity, you'll be redirected to a page where you can manage the identity. identities page Since the identity has been configured with [Universal Auth](https://infisical.com/docs/documentation/platform/identities/universal-auth) by default, you should reconfigure it to use TLS Certificate Auth instead. To do this, click the cog next to **Universal Auth** and then select **Delete** in the options dropdown. identities press cog identities page remove default auth Now create a new TLS Certificate Auth Method. identities create tls cert auth method Here's some information about each field: * **CA Certificate:** A PEM encoded CA Certificate used to validate incoming TLS request client certificate. * **Allowed Common Names:** A comma separated list of client certificate common names allowed. * **Access Token TTL (default is `2592000` equivalent to 30 days):** The lifetime for an access token in seconds. This value will be referenced at renewal time. * **Access Token Max TTL (default is `2592000` equivalent to 30 days):** The maximum lifetime for an access token in seconds. This value will be referenced at renewal time. * **Access Token Max Number of Uses (default is `0`):** The maximum number of times that an access token can be used; a value of `0` implies an infinite number of uses. * **Access Token Trusted IPs:** The IPs or CIDR ranges that access tokens can be used from. By default, each token is given the `0.0.0.0/0`, allowing usage from any network address. ### Adding an identity to a project In order to allow an identity to access project-level resources such as secrets, you must add it to the relevant projects. To do this, head over to the project you want to add the identity to and navigate to Project Settings > Access Control > Machine Identities and press **Add Identity**. identities project Select the identity you want to add to the project and the project-level role you want it to assume. The project role given to the identity will determine what project-level resources this identity can access. identities project create ### Accessing the Infisical API with the identity To access the Infisical API as the identity, you need to send a TLS request to `/api/v1/auth/tls-cert-auth/login` endpoint. Below is an example of how you can authenticate with Infisical using NodeJS. ```javascript theme={"dark"} const fs = require("fs"); const https = require("https"); const axios = require("axios"); try { const clientCertificate = fs.readFileSync("client-cert.pem", "utf8"); const clientKeyCertificate = fs.readFileSync("client-key.pem", "utf8"); const infisicalUrl = "https://app.infisical.com:8443"; // or your self-hosted Infisical URL const identityId = ""; // Create HTTPS agent with client certificate and key const httpsAgent = new https.Agent({ cert: clientCertificate, key: clientKeyCertificate, }); const { data } = await axios.post( `${infisicalUrl}/api/v1/auth/tls-cert-auth/login`, { identityId, }, { httpsAgent: httpsAgent, // Pass the HTTPS agent with client cert } ); console.log("result data: ", data); // access token here } catch (err) { console.error(err); } ``` Each identity access token has a time-to-live (TTL) which you can infer from the response of the login operation; the default TTL is `7200` seconds, which can be adjusted. If an identity access token expires, it can no longer access the Infisical API. A new access token should be obtained by performing another login operation. ## Security Requirements for Self-Hosted Deployments ALL TLS cert [login](/api-reference/endpoints/tls-cert-auth/login) requests **MUST** go through a load balancer/proxy that verifies certificate ownership: * **REQUIRED:** Configure your load balancer/proxy to **require a proper TLS handshake with client certificate presentation** * **REQUIRED:** Ensure the load balancer **verifies the client possesses the private key** corresponding to the certificate (standard TLS behavior) * **NEVER** allow direct connections to Infisical for TLS cert auth - this enables header injection attacks * **NEVER** forward certificate headers without requiring proper TLS certificate presentation ### Load Balancer Configuration Examples * **AWS ALB:** Use mTLS listeners which require client certificate presentation during the TLS handshake * **NGINX/HAProxy:** Configure SSL client certificate requirement with proper TLS handshake verification Infisical will handle the actual certificate validation against the configured CA certificate and determine authentication permissions. The load balancer's role is to ensure certificate ownership, not certificate trust validation. # Token Auth Source: https://infisical.com/docs/documentation/platform/identities/token-auth Learn how to authenticate to Infisical from any platform or environment using an access token. **Token Auth** is a platform-agnostic, simple authentication method that can be configured for a [machine identity](/documentation/platform/identities/machine-identities) to authenticate from any platform/environment using a token. ## Diagram The following sequence diagram illustrates the Token Auth workflow for authenticating clients with Infisical. ```mermaid theme={"dark"} sequenceDiagram participant Client as Client participant Infis as Infisical Note over Client,Infis: Access Infisical API with Token Client->>Infis: Make authenticated requests using the token ``` ## Concept Token Auth is the simplest authentication method that a client can use to authenticate with Infisical. Unlike other authentication methods where a client must exchange credential(s) for a short-lived access token to access the Infisical API, Token Auth allows a client to make authenticated requests to the Infisical API directly using a token. Conceptually, this is similar to using an API Key. To be more specific: 1. An operator creates an access token in the Infisical UI. 2. The operator shares the access token with the client which it can then use to make authenticated requests to the Infisical API. ## Guide In the following steps, we explore how to create and use identities for your workloads and applications to access the Infisical API using the Token Auth authentication method. To create an identity, head to your Organization Settings > Access Control > Identities and press **Create identity**. identities organization When creating an identity, you specify an organization level [role](/documentation/platform/access-controls/role-based-access-controls) for it to assume; you can configure roles in Organization Settings > Access Control > Organization Roles. identities organization create Now input a few details for your new identity. Here's some guidance for each field: * Name (required): A friendly name for the identity. * Role (required): A role from the **Organization Roles** tab for the identity to assume. The organization role assigned will determine what organization level resources this identity can have access to. Once you've created an identity, you'll be redirected to a page where you can manage the identity. identities page Since the identity has been configured with Universal Auth by default, you should re-configure it to use Token Auth instead. To do this, press to edit the **Authentication** section, remove the existing Universal Auth configuration, and add a new Token Auth configuration onto the identity. identities page remove default auth identities organization create token auth method Here's some more guidance on each field: * Access Token TTL (default is `2592000` equivalent to 30 days): The lifetime for an acccess token in seconds. This value will be referenced at renewal time. * Access Token Max TTL (default is `2592000` equivalent to 30 days): The maximum lifetime for an acccess token in seconds. This value will be referenced at renewal time. * Access Token Max Number of Uses (default is `0`): The maximum number of times that an access token can be used; a value of `0` implies infinite number of uses. * Access Token Trusted IPs: The IPs or CIDR ranges that access tokens can be used from. By default, each token is given the `0.0.0.0/0`, allowing usage from any network address. Restricting access token usage to specific trusted IPs is a paid feature. If you’re using Infisical Cloud, then it is available under the Pro Tier. If you’re self-hosting Infisical, then you should contact [sales@infisical.com](mailto:sales@infisical.com) to purchase an enterprise license to use it. In order to use the identity with Token Auth, you'll need to create an (access) token; you can think of this token akin to an API Key used to authenticate with the Infisical API. With that, press **Create Token**. identities client secret create identities client secret create identities client secret create Copy the token and keep it handy as you'll need it to authenticate with the Infisical API. To enable the identity to access project-level resources such as secrets within a specific project, you should add it to that project. To do this, head over to the project you want to add the identity to and go to Project Settings > Access Control > Machine Identities and press **Add identity**. Next, select the identity you want to add to the project and the project level role you want to allow it to assume. The project role assigned will determine what project level resources this identity can have access to. identities project identities project create To access the Infisical API as the identity, you can use the generated access token from step 2 to authenticate with the [Infisical API](/api-reference/overview/introduction). Each identity access token has a time-to-live (TTL) which you can infer from the response of the login operation; the default TTL is `7200` seconds which can be adjusted in the Token Auth configuration. If an identity access token expires, it can no longer authenticate with the Infisical API. In this case, a new access token should be obtained. **FAQ** There are a few reasons for why this might happen: * The access token has expired. If this is the case, you should obtain a new access token or consider extending the token's TTL. * The identity is insufficiently permissioned to interact with the resources you wish to access. * The access token is being used from an untrusted IP. A identity access token can have a time-to-live (TTL) or incremental lifetime after which it expires. In certain cases, you may want to extend the lifespan of an access token; to do so, you must set a max TTL parameter. A token can be renewed any number of times where each call to renew it can extend the token's lifetime by increments of the access token's TTL. Regardless of how frequently an access token is renewed, its lifespan remains bound to the maximum TTL determined at its creation. # Universal Auth Source: https://infisical.com/docs/documentation/platform/identities/universal-auth Learn how to authenticate to Infisical from any platform or environment. **Universal Auth** is a platform-agnostic authentication method that can be configured for a [machine identity](/documentation/platform/identities/machine-identities) to authenticate from any platform/environment using a Client ID and Client Secret. This authentication method supports setting token periods, which can help [overcome secret zero](#solving-secret-zero-with-periodic-tokens). ## Diagram The following sequence diagram illustrates the Universal Auth workflow for authenticating clients with Infisical. ```mermaid theme={"dark"} sequenceDiagram participant Client as Client participant Infis as Infisical Note over Client,Infis: Step 1: Login Operation Client->>Infis: Send Client ID and Client Secret Note over Infis: Step 2: Client ID and Client Secret validation Infis->>Client: Return short-lived access token Note over Client,Infis: Step 3: Access Infisical API with Token Client->>Infis: Make authenticated requests using the short-lived access token ``` ## Concept In this method, Infisical authenticates a client by verifying the credentials issued for it at the `/api/v1/auth/universal-auth/login` endpoint. If successful, then Infisical returns a short-lived access token that can be used to make authenticated requests to the Infisical API. To be more specific: 1. The client submits a **Client ID** and **Client Secret** to Infisical at the `/api/v1/auth/universal-auth/login` endpoint. 2. Infisical verifies the credential pair. 3. If all is well, Infisical returns a short-lived access token that the client can use to make authenticated requests to the Infisical API. ## Guide In the following steps, we explore how to create and use identities for your workloads and applications to access the Infisical API using the Universal Auth authentication method. To create an identity, head to your Organization Settings > Access Control > Identities and press **Create identity**. identities organization When creating an identity, you specify an organization level [role](/documentation/platform/access-controls/role-based-access-controls) for it to assume; you can configure roles in Organization Settings > Access Control > Organization Roles. identities organization create Now input a few details for your new identity. Here's some guidance for each field: * Name (required): A friendly name for the identity. * Role (required): A role from the **Organization Roles** tab for the identity to assume. The organization role assigned will determine what organization level resources this identity can have access to. Once you've created an identity, you'll be redirected to a page where you can manage the identity. identities page Once you've created an identity, you'll be prompted to configure the **Universal Auth** authentication method for it. By default, the identity has been configured with Universal Auth. If you wish, you can edit the Universal Auth configuration details by pressing to edit the **Authentication** section. Here's some guidance on each field: **Configuration Tab** identities organization create universal auth method 1 * Access Token TTL (default is `2592000` equivalent to 30 days): The lifetime for an access token in seconds. This value will be referenced at renewal time. * Access Token Max TTL (default is `2592000` equivalent to 30 days): The maximum lifetime for an access token in seconds. This value will be referenced at renewal time. * Access Token Max Number of Uses (default is `0`): The maximum number of times that an access token can be used; a value of `0` implies infinite number of uses. * Access Token Period (optional, default is `0`): If set, the access token becomes a renewable, non-expiring token for the specified period (in seconds). TTL and Max TTL are ignored when this is set. This is ideal for "secret zero" scenarios, where a workload needs to bootstrap itself securely without hard-coded static secrets. **Lockout Tab** identities organization create universal auth method 2 * Lockout (enabled by default): The lockout feature will temporarily block login attempts after X consecutive login failures. * Lockout Threshold (default is `3`): The amount of times login must fail before locking the identity auth method. * Lockout Duration (default is `5 minutes`): How long an identity auth method lockout lasts. * Lockout Counter Reset (default is `30 seconds`): How long to wait from the most recent failed login until resetting the lockout counter. **Advanced Tab** identities organization create universal auth method 3 * Client Secret Trusted IPs: The IPs or CIDR ranges that the **Client Secret** can be used from together with the **Client ID** to get back an access token. By default, **Client Secrets** are given the `0.0.0.0/0`, allowing usage from any network address. * Access Token Trusted IPs: The IPs or CIDR ranges that access tokens can be used from. By default, each token is given the `0.0.0.0/0`, allowing usage from any network address. Restricting **Client Secret** and access token usage to specific trusted IPs is a paid feature. If you're using Infisical Cloud, then it is available under the Pro Tier. If you're self-hosting Infisical, then you should contact [sales@infisical.com](mailto:sales@infisical.com) to purchase an enterprise license to use it. In order to use the identity, you'll need the non-sensitive **Client ID** of the identity and a **Client Secret** for it; you can think of these credentials akin to a username and password used to authenticate with the Infisical API. With that, press **Create Client Secret**. identities client secret create identities client secret create identities client secret create Feel free to input any (optional) details for the **Client Secret** configuration: * Description: A description for the **Client Secret**. * TTL (default is `0`): The time-to-live for the **Client Secret**. By default, the TTL will be set to 0 which implies that the **Client Secret** will never expire; a value of `0` implies an infinite lifetime. * Max Number of Uses (default is `0`): The maximum number of times that the **Client Secret** can be used together with the **Client ID** to get back an access token; a value of `0` implies infinite number of uses. To enable the identity to access project-level resources such as secrets within a specific project, you should add it to that project. To do this, head over to the project you want to add the identity to and go to Project Settings > Access Control > Machine Identities and press **Add identity**. Next, select the identity you want to add to the project and the project level role you want to allow it to assume. The project role assigned will determine what project level resources this identity can have access to. identities project identities project create To access the Infisical API as the identity, you should first perform a login operation that is to exchange the **Client ID** and **Client Secret** of the identity for an access token by making a request to the `/api/v1/auth/universal-auth/login` endpoint. Choose the correct base URL based on your region: * For Infisical Cloud US users: `https://app.infisical.com` * For Infisical Cloud EU users: `https://eu.infisical.com` #### Sample request ```bash Request theme={"dark"} curl --location --request POST 'https://app.infisical.com/api/v1/auth/universal-auth/login' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'clientId=...' \ --data-urlencode 'clientSecret=...' ``` #### Sample response ```bash Response theme={"dark"} { "accessToken": "...", "expiresIn": 7200, "accessTokenMaxTTL": 43244 "tokenType": "Bearer" } ``` Next, you can use the access token to authenticate with the [Infisical API](/api-reference/overview/introduction) Each identity access token has a time-to-live (TTL) which you can infer from the response of the login operation; the default TTL is `7200` seconds which can be adjusted in the Universal Auth configuration. If an identity access token expires, it can no longer authenticate with the Infisical API. In this case, a new access token should be obtained by performing another login operation. ## Solving Secret Zero with Periodic Tokens In many automated, cloud-native, or ephemeral environments (such as VMs, containers, or serverless functions), it is often unsafe or impractical to hard-code long-lived credentials for bootstrapping access to secrets management systems. The "secret zero" problem refers to the challenge of securely providing a workload with its initial credential, without manual intervention or static secrets that could be leaked or reused. Periodic tokens in Universal Auth are designed to solve this problem by enabling secure, automated bootstrapping and ongoing access renewal, even in dynamic or short-lived environments. A common challenge in cloud-native and automated environments is the "secret zero" problem: how to securely bootstrap a workload (such as a VM, container, or serverless function) with its first credential, without hard-coding static secrets or requiring manual intervention. **Periodic tokens** in Universal Auth solve this by allowing you to issue an access token that can be continuously renewed by your workload before it expires (i.e., a client-initiated rotation mechanism): * When you set the **Access Token Period** in the Universal Auth configuration, the issued access token can be renewed by your workload for the specified period (in seconds). * The token can be renewed any number of times, each time for the same period, with no maximum lifetime (unless you set a use limit). * As long as the token is renewed before its period expires, it remains valid, so you do not need to re-issue static credentials. * TTL and Max TTL are ignored when Access Token Period is set. ### Example: Bootstrapping with a Periodic Token 1. Configure Universal Auth for your identity and set **Access Token Period** (e.g., `3600` for 1 hour). 2. For improved security, configure the Client Secret with a low number of uses (e.g., `1`) or a short TTL. This ensures that after the initial login, the Client Secret cannot be reused, and any disruption in token renewal will require manual intervention. 3. Deploy your workload with the **Client Secret** and **Client ID**. 4. The workload authenticates with Infisical using the Client Secret and Client ID to obtain the initial access token (JWT). 5. The workload uses the access token to authenticate and continuously renews it before expiration: ```bash theme={"dark"} curl --location --request POST 'https://app.infisical.com/api/v1/auth/universal-auth/renew' \ --header 'Authorization: Bearer ' ``` This approach allows your workload to securely bootstrap and maintain access to Infisical without hard-coded secrets, solving the secret zero problem. **FAQ** There are a few reasons for why this might happen: * The client secret or access token has expired. * The identity is insufficiently permissioned to interact with the resources you wish to access. * The client secret/access token is being used from an untrusted IP. A identity access token can have a time-to-live (TTL) or incremental lifetime after which it expires. In certain cases, you may want to extend the lifespan of an access token; to do so, you must set a max TTL parameter. A token can be renewed any number of times where each call to renew it can extend the token's lifetime by increments of the access token's TTL. Regardless of how frequently an access token is renewed, its lifespan remains bound to the maximum TTL determined at its creation. You can reset (remove) all lockouts for an identity auth method by clicking into the auth method and pressing **Reset All Lockouts**. ua reset lockouts # User Identities Source: https://infisical.com/docs/documentation/platform/identities/user-identities Read more about the concept of user identities in Infisical. ## Concept A **user identity** (also known as **user**) represents a developer, admin, or any other human entity interacting with resources in Infisical. Users can be added manually (through Web UI) or programmatically (e.g., API) to [organizations](../organization) and [projects](../project). Upon being added to an organization and projects, users assume a certain set of roles and permissions that represents their identity. organization users ## Authentication methods To interact with various resources in Infisical, users are able to utilize a number of authentication methods: * **Email & Password**: the most common authentication method that is used for authentication into Web Dashboard and Infisical CLI. It is recommended to utilize [Multi-factor Authentication](/documentation/platform/mfa) in addition to it. * **SSO**: Infisical natively integrates with a number of SSO identity providers like [Google](/documentation/platform/sso/google), [GitHub](/documentation/platform/sso/github), and [GitLab](/documentation/platform/sso/gitlab). * **SAML SSO**: It is also possible to set up SAML SSO integration with identity providers like [Okta](/documentation/platform/sso/okta), [Microsoft Entra ID](/documentation/platform/sso/azure) (formerly known as Azure AD), [JumpCloud](/documentation/platform/sso/jumpcloud), [Google](/documentation/platform/sso/google-saml), and more. * **LDAP**: For organizations with more advanced needs, Infisical also provides user authentication with [LDAP](/documentation/platform/ldap/overview) that includes a number of LDAP providers. # AWS CloudHSM Source: https://infisical.com/docs/documentation/platform/kms-configuration/aws-hsm Learn how to manage encryption using AWS CloudHSM This guide provides instructions on securing Infisical project secrets using AWS CloudHSM. Integration with AWS CloudHSM is achieved by configuring it as a custom key store for AWS KMS. Follow the steps below to set up AWS KMS with AWS CloudHSM as the custom key store. ## Prepare AWS CloudHSM Cluster Before you get started, you'll need to configure a AWS CloudHSM cluster which meets the following criteria: * The cluster must be active. * The cluster must not be associated with any other AWS KMS custom key store. * The cluster must be configured with private subnets in at least two Availability Zones in the Region. * The security group for the cluster must include inbound and outbound rules that allow TCP traffic on ports 2223-2225. * The cluster must contain at least two active HSMs in different Availability Zones. For more details on setting up your cluster, refer to the following [AWS documentation](https://docs.aws.amazon.com/kms/latest/developerguide/create-keystore.html#before-keystore). ## Set Up AWS KMS Custom Key Store To set up an AWS KMS custom key store with AWS CloudHSM, you will need the following: * The trust anchor certificate of your AWS CloudHSM cluster. * A `kmsuser` user in the AWS CloudHSM cluster with the crypto-user role. In the AWS console, head over to `AWS KMS` > `AWS CloudHSM key stores` and click **Create key store**. Input the custom key store name. Set key store name Select the AWS CloudHSM cluster. You should be able to select the cluster if it meets the required criteria mentioned above. Set key store cluster Upload your CloudHSM's cluster trust anchor certificate file. Set key store cert Input the password of the `kmsuser` crypto-user in your cluster. Set key store password Proceed with creating the AWS CloudHSM key store. For more details, refer to the following [AWS documentation](https://docs.aws.amazon.com/kms/latest/developerguide/create-keystore.html#create-keystore-console). ## Create AWS KMS Key Next, you'll need to create a AWS KMS key where you will set the key store you created previously. In your AWS console, proceed to `AWS KMS` > `Customer managed keys` and click **Create**. Set Key type to `Symmetric` and Key usage to `Encrypt and decrypt`. Set key options 1 In the advanced options, for the Key material origin field, select `AWS CloudHSM key store`. Then, click next. Set key options 2 Select the AWS CloudHSM key store you created earlier. Select HSM 1 Proceed with creating the AWS KMS Key. ## Connect Infisical to AWS KMS Key You should now have an AWS KMS that has a custom key store set to AWS CloudHSM. To secure project resources, you will need to add this AWS KMS to your Infisical organization. To learn how, refer to the documentation [here](./aws-kms). # AWS Key Management Service Source: https://infisical.com/docs/documentation/platform/kms-configuration/aws-kms Learn how to manage encryption using AWS KMS To enhance the security of your Infisical projects, you can now encrypt your secrets using an external Key Management Service (KMS). When external KMS is configured for your project, all encryption and decryption operations will be handled by the chosen KMS. This guide will walk you through the steps needed to configure external KMS support with AWS KMS. ## Prerequisites * An AWS KMS Key configured as a `Symmetric` key and with `Encrypt and Decrypt` key usage. Create AWS KMS Key Before you begin, you'll first need to choose a method of authentication with AWS from below. 1. Navigate to the [Create IAM Role](https://console.aws.amazon.com/iamv2/home#/roles/create?step=selectEntities) page in your AWS Console. IAM Role Creation 2. Select **AWS Account** as the **Trusted Entity Type**. 3. Select **Another AWS Account** and provide the appropriate Infisical AWS Account ID: use **381492033652** for the **US region**, and **345594589636** for the **EU region**. This restricts the role to be assumed only by Infisical. If you are self-hosting, provide the AWS account number where Infisical is hosted. **For Dedicated Instances**: Your AWS account ID differs from the one provided above. Please reach out to Infisical support to obtain your AWS account ID. 4. Optionally, enable **Require external ID** and enter your Infisical **project ID** to further enhance security. Use the following custom policy to grant the minimum permissions required by Infisical to integrate with AWS KMS ```json theme={"dark"} { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowKMSAccess", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:DescribeKey" ], "Resource": "*" } ] } ``` Navigate to your IAM user and add a policy to grant the following permissions: ```json theme={"dark"} { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowKMSAccess", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:DescribeKey" ], "Resource": "*" } ] } ``` ## Setup AWS KMS in the Organization Settings Next, you will need to follow the steps listed below to add AWS KMS for your organization. Open encryption org settings Add encryption org settings Click the 'Add' button to begin adding a new external KMS. Select Encryption Provider Choose 'AWS KMS' from the list of encryption providers. Selecting AWS as the provider will require you input the following fields. Name for referencing the AWS KMS key within the organization. Short description of the AWS KMS key. Authentication mode for AWS, either "AWS Assume Role" or "Access Key". ARN of the AWS role to assume for providing Infisical access to the AWS KMS Key (required if Authentication Mode is "AWS Assume Role") Custom identifier for additional validation during role assumption. AWS IAM Access Key ID for authentication (required if Authentication Mode is "Access Key"). AWS IAM Secret Access Key for authentication (required if Authentication Mode is "Access Key"). AWS region where the AWS KMS Key is located. Key ID of the AWS KMS Key. If left blank, Infisical will generate and use a new AWS KMS Key in the specified region. AWS KMS key ID Save your configuration to apply the settings. You now have an AWS KMS Key configured at the organization level. You can assign these AWS KMS keys to existing Infisical projects by visiting the 'Project Settings' page. ## Assign AWS KMS Key to an Existing Project To assign the AWS KMS key you added to your organization, follow the steps below. Open encryption project
    settings Select encryption project
    settings Choose the AWS KMS key you configured earlier. Once you have selected the KMS of choice, click save. # GCP Key Management Service Source: https://infisical.com/docs/documentation/platform/kms-configuration/gcp-kms Learn how to manage encryption using GCP KMS To enhance the security of your Infisical projects, you can now encrypt your secrets using an external Key Management Service (KMS). When external KMS is configured for your project, all encryption and decryption operations will be handled by the chosen KMS. This guide will walk you through the steps needed to configure external KMS support with Google Cloud KMS. ## Prerequisites Before you begin, you'll first need to set up a GCP Service Account, add a KMS key and set the required permissions. 1. Navigate to the [Create Service Account](https://console.cloud.google.com/iam-admin/serviceaccounts/create) page in your GCP Console. GCP Service Account Creation 2. Give the service account a suitable **name** and **description**. Then click **Create and Continue**. 3. Under **Grant this service account access to project**, click **Select a role** and select the **Cloud KMS Viewer** and **Cloud KMS CryptoKey Encrypter/Decrypter**\* roles, then click **Continue**. GCP Service Account Permissions 4. You can skip the **Grant users access to this service account** options. 5. Click Done. 6. You should see the service account in the list of service accounts. Click it to view the service account details. 7. Select the **Keys** tab, click **Add Key**, select **Create new key**, select **JSON** as the key type, then click **Create**. 8. You will be prompted to download a JSON file that we will need later on. Remember to keep the JSON file in a secure location. It will be used to authenticate your GCP service account. Once you have successfully set up GCP KMS with Infisical, you should permanently delete the JSON file. 1. Navigate to the [KMS](https://console.cloud.google.com/security/kms) page in your GCP Console. If you have not used GCP KMS before, you will be redirected to the **Cloud Key Management Service (KMS) API** page. Click **Enable** to enable the KMS API, then continue the steps below. It may take a few minutes for the API to be enabled and KMS section of the Cloud Console to become viewable. 2. In the KMS section, click **Create Key Ring**. GCP Create Key Ring 3. Give the key ring a **Name** and select a **Region**, then click **Create**. We don't currently support multi-region key rings. 4. On the "Create Key" page, give the key a **Name** and set the **Protection Level** based on your requirements (or use default *Software*), then click **Continue**. 5. Under **Key Material**, select **Generated Key**, then click **Continue**. 6. Under **Purpose**, select **Symmetric encrypt/decrypt**, then click **Continue**. 7. For **Key Rotation Period**, select **Never (manual rotation)**, then click **Continue** followed by **Create**. 8. You should see the key in the list of keys. We're now ready to set it up in Infisical. ## Setup GCP KMS in the Organization Settings Next, you will need to follow the steps listed below to add GCP KMS for your organization. Open encryption org settings Add encryption org settings Click the 'Add' button to begin adding a new external KMS. Select Encryption Provider Choose 'GCP KMS' from the list of encryption providers. GCP Create KMS Modal Selecting GCP as the provider will require you input the following fields. Name for referencing the GCP KMS key within the organization. Short description of the GCP KMS key. The GCP region where the GCP KMS key ring is located. Upload the JSON file you downloaded earlier when creating the GCP service account. This field will be populated with the list of GCP KMS keys in the selected region. Select the key you created earlier. Save your configuration to apply the settings. You now have a GCP KMS Key configured at the organization level. You can assign these GCP KMS keys to existing Infisical projects by visiting the 'Project Settings' page. ## Assign GCP KMS Key to an Existing Project To assign the GCP KMS key you added to your organization, follow the steps below. Open encryption project
    settings Select encryption project
    settings Choose the GCP KMS key you configured earlier. Once you have selected the KMS of choice, click save. # Key Management Service (KMS) Configuration Source: https://infisical.com/docs/documentation/platform/kms-configuration/overview Learn how to configure your project's encryption ## Introduction Infisical leverages a Key Management Service (KMS) to securely encrypt and decrypt secrets in your projects. ## Overview Infisical's KMS ensures the security of your project's secrets through the following mechanisms: * Each project is assigned a unique workspace key, which is responsible for encrypting and decrypting secret values. * The workspace key itself is encrypted using the project's configured KMS. * When secrets are requested, the workspace key is derived from the configured KMS. This key is then used to decrypt the secret values on-demand before sending them to the requesting client. ## Configuration You can set the KMS for new projects during project creation. Configure KMS new For existing projects, you can configure the KMS from the Project Settings page. Configure KMS existing ## External KMS Infisical supports the use of external KMS solutions to enhance security and compliance. You can configure your project to use services like [AWS Key Management Service](./aws-kms) or [GCP Key Management Service](./gcp-kms) for managing encryption. # HSM Integration Source: https://infisical.com/docs/documentation/platform/kms/hsm-integration Learn more about integrating an HSM with Infisical KMS. Changing the encryption strategy for your instance is an Enterprise-only feature. This section is intended for users who have obtained an Enterprise license and are on-premise. Please reach out to [sales@infisical.com](mailto:sales@infisical.com) if you have any questions. ## Overview Infisical KMS currently supports two encryption strategies: 1. **Standard Encryption**: This is the default encryption strategy used by Infisical KMS. It uses a software-protected encryption key to encrypt KMS keys within your Infisical instance. The root encryption key is defined by setting the `ENCRYPTION_KEY` environment variable. 2. **Hardware Security Module (HSM)**: This encryption strategy uses a Hardware Security Module (HSM) to create a root encryption key that is stored on a physical device to encrypt the KMS keys within your instance. ## Hardware Security Module (HSM) HSM Illustration Using a hardware security module comes with the added benefit of having a secure and tamper-proof device to store your encryption keys. This ensures that your data is protected from unauthorized access. All encryption keys used for cryptographic operations are stored within the HSM. This means that if the HSM is lost or destroyed, you will no longer be able to decrypt your data stored within Infisical. Most providers offer recovery options for HSM devices, which you should consider when setting up an HSM device. Enabling HSM encryption has a set of key benefits: 1. **Root Key Wrapping**: The root KMS encryption key that is used to secure your Infisical instance will be encrypted using the HSM device rather than the standard software-protected key. #### Caveats * **Performance**: Using an HSM device can have a performance impact on your Infisical instance. This is due to the additional latency introduced by the HSM device. This is however only noticeable when your instance(s) start up or when the encryption strategy is changed. * **Key Recovery**: If the HSM device is lost or destroyed, you will no longer be able to decrypt your data stored within Infisical. Most HSM providers offer recovery options, which you should consider when setting up an HSM device. ## Requirements * An HSM device *(PKCS#11 compatible library)* from a compatible provider such as [Thales Luna HSM](https://cpl.thalesgroup.com/encryption/data-protection-on-demand/services/luna-cloud-hsm), [AWS CloudHSM](https://aws.amazon.com/cloudhsm/), [Fortanix HSM](https://www.fortanix.com/platform/data-security-manager), or others. Infisical is validated to work with PKCS#11 2.30 and newer. If your HSM device doesn't follow the >=2.30 PKCS#11 standard you may see degraded performance. ## Environment Variable Configuration To configure your Infisical instance to use an HSM, you must set the required environment variables. Below you'll find an example of the required environment variables. For further instructions on how to configure the HSM device for your Infisical instance, please see the [Setup Instructions](#setup-instructions) section. ```dotenv theme={"dark"} HSM_LIB_PATH=/usr/local/lib/cloudhsm/cloudhsm.so HSM_SLOT=1 HSM_KEY_LABEL=infisical-key HSM_PIN=your:pin ``` * `HSM_LIB_PATH`: The path to the PKCS#11 library provided by the HSM provider. This usually comes in the form of a `.so` for Linux and MacOS, or a `.dll` file for Windows. For Docker, you need to mount the library path as a volume. Further instructions can be found below. If you are using Docker, make sure to set the HSM\_LIB\_PATH environment variable to the path where the library is mounted in the container. * `HSM_PIN`: The PKCS#11 PIN to use for authentication with the HSM device. * `HSM_SLOT`: The slot number to use for the HSM device. This is typically between `0` and `5` for most HSM devices. * `HSM_KEY_LABEL`: The label of the key to use for encryption. **Please note that if no key is found with the provided label, the HSM will create a new key with the provided label.** You can read more about the [default instance configurations](/self-hosting/configuration/envars) here. ## PKCS#11 Key Attributes If no AES key or HMAC key already exists with the label you defined on the `HSM_KEY_LABEL` environment variable, then Infisical will create one for you automatically using the label specified on `HSM_KEY_LABEL`. Below you'll find a list of the attributes each key will be created with. ### AES Key If you bring your own AES key and don't let Infisical create it for you it must have at least the following attributes: * `CKA_CLASS`: `CKO_SECRET_KEY` — Defines the key class *(secret key)*. * `CKA_KEY_TYPE`: `CKO_AES` — Defines the key type *(AES key)*. * `CKA_VALUE_LEN`: `32` — 256-bit key size. * `CKA_ENCRYPT`: `true` — Encryption capabilities enabled. * `CKA_DECRYPT`: `true` — Decryption capabilities enabled. * `CKA_TOKEN`: `true` — The key material will persist in your HSM so it can be reused. Note that for security reasons it is highly recommended to create an AES key with the full set of key attributes seen below if you're going to bring your own key. * `CKA_CLASS`: `CKO_SECRET_KEY` — Defines the key class *(secret key)*. * `CKA_KEY_TYPE`: `CKO_AES` — Defines the key type *(AES key)*. * `CKA_VALUE_LEN`: `32` — 256-bit key size. * `CKA_LABEL`: Your specified label in the `HSM_KEY_LABEL` environment variable. * `CKA_ENCRYPT`: `true` — Encryption capabilities enabled. * `CKA_DECRYPT`: `true` — Decryption capabilities enabled. * `CKA_TOKEN`: `true` — The key material will persist in your HSM so it can be reused. * `CKA_EXTRACTABLE`: `false` — The key material is not extractable from the HSM. * `CKA_SENSITIVE`: `true` — The key material is marked as sensitive. * `CKA_PRIVATE`: `true` — The key material is marked as private to the slot and can't be accessed from other slots. ### HMAC Key If you bring your own HMAC key and don't let Infisical create it for you it must have at least the following attributes: * `CKA_CLASS`: `CKO_SECRET_KEY` — Defines the key class *(secret key)*. * `CKA_KEY_TYPE`: `CKO_GENERIC_SECRET` — Defines the key class *(generic secret key)*. * `CKA_VALUE_LEN`: `32` — 256-bit key size * `CKA_SIGN`: `true` — Signing capabilities enabled * `CKA_VERIFY`: `true` — Verifying capabilities enabled. * `CKA_TOKEN`: `true` — The key material will persist in your HSM so it can be reused. Note that for security reasons it is highly recommended to create an HMAC key with the full set of key attributes seen below if you're going to bring your own key. * `CKA_CLASS`: `CKO_SECRET_KEY` — Defines the key class *(secret key)*. * `CKA_KEY_TYPE`: `CKO_GENERIC_SECRET` — Defines the key class *(generic secret key)*. * `CKA_VALUE_LEN`: `32` — 256-bit key size. * `CKA_LABEL`: Your specified label in the `HSM_KEY_LABEL` environment variable, suffixed with `_HMAC`. If you specify `infisical-key-v1`, then the HMAC key label will become `infisical-key-v1_HMAC`. * `CKA_SIGN`: `true` — Signing capabilities enabled * `CKA_VERIFY`: `true` — Verifying capabilities enabled. * `CKA_TOKEN`: `true` — The key material will persist in your HSM so it can be reused. * `CKA_EXTRACTABLE`: `false` — The key material is not extractable from the HSM. * `CKA_SENSITIVE`: `true` — The key material is marked as sensitive. * `CKA_PRIVATE`: `true` — The key material is marked as private to the slot and can't be accessed from other slots. ## Setup Instructions To set up HSM encryption, you need to configure an HSM provider and HSM key. The HSM provider is used to connect to the HSM device, and the HSM key is used to encrypt Infisical's KMS keys. We recommend using a Cloud HSM provider such as [Thales Luna HSM](https://cpl.thalesgroup.com/encryption/data-protection-on-demand/services/luna-cloud-hsm), [AWS CloudHSM](https://aws.amazon.com/cloudhsm/), or [Fortanix HSM](https://www.fortanix.com/platform/data-security-manager). You need to follow the instructions provided by the HSM provider to set up the HSM device. Once the HSM device is set up, the HSM device can be used within Infisical. After setting up the HSM from your provider, you will have a set of files that you can use to access the HSM. These files need to be present on the machine where Infisical is running. If you are using containers, you will need to mount the folder where these files are stored as a volume in the container. The setup process for an HSM device varies depending on the provider. We have created guides for Thales Luna Cloud HSM and Fortanix HSM, which you can find below. Are you using Docker or Kubernetes for your deployment? If you are using Docker or Kubernetes, please follow the instructions in the [Using HSM's in your Deployment](#using-hsms-in-your-deployment) section. Configuring the HSM on Infisical requires setting a set of environment variables: * `HSM_LIB_PATH`: The path to the PKCS#11 library provided by the HSM provider. This usually comes in the form of a `.so` for Linux and MacOS, or a `.dll` file for Windows. For Docker, you need to mount the library path as a volume. Further instructions can be found below. If you are using Docker, make sure to set the HSM\_LIB\_PATH environment variable to the path where the library is mounted in the container. * `HSM_PIN`: The PKCS#11 PIN to use for authentication with the HSM device. * `HSM_SLOT`: The slot number to use for the HSM device. This is typically between `0` and `5` for most HSM devices. * `HSM_KEY_LABEL`: The label of the key to use for encryption. **Please note that if no key is found with the provided label, the HSM will create a new key with the provided label.** You can read more about the [default instance configurations](/self-hosting/configuration/envars) here. After setting up the HSM, you need to restart the Infisical instance for the changes to take effect. Server Admin Console Set Encryption Strategy Once you press the 'Save' button, your Infisical instance will immediately switch to the HSM encryption strategy. This will re-encrypt your KMS key with keys from the HSM device. To verify that the HSM was correctly configured, you can try creating a new secret in one of your projects. If the secret is created successfully, the HSM is now being used for encryption. ## Using HSMs In Your Deployment When using Docker, you need to mount the path containing the HSM client files. This section covers how to configure your Infisical instance to use an HSM with Docker. When using Docker, you are able to set your HSM library path to any location on your machine. In this example, we are going to be using `/etc/luna-docker`. ```bash theme={"dark"} mkdir /etc/luna-docker ``` After [setting up your Luna Cloud HSM client](https://thalesdocs.com/gphsm/luna/7/docs/network/Content/install/client_install/add_dpod.htm), you should have a set of files, referred to as the HSM client. You don't need all the files, but for simplicity we recommend copying all the files from the client. A folder structure of a client folder will often look like this: ``` partition-ca-certificate.pem partition-certificate.pem server-certificate.pem Chrystoki.conf /plugins libcloud.plugin /lock /libs /64 libCryptoki2.so /jsp LunaProvider.jar /64 libLunaAPI.so /etc openssl.cnf /bin /64 ckdemo lunacm multitoken vtl ``` The most important parts of the client folder is the `Chrystoki.conf` file, and the `libs`, `plugins`, and `jsp` folders. You need to copy these files to the folder you created in the first step. ```bash theme={"dark"} cp -r / /etc/luna-docker ``` The `Chrystoki.conf` file is used to configure the HSM client. You need to update the `Chrystoki.conf` file to point to the correct file paths. In this example, we will be mounting the `/etc/luna-docker` folder to the Docker container under a different path. The path we will use in this example is `/usr/safenet/lunaclient`. This means `/etc/luna-docker` will be mounted to `/usr/safenet/lunaclient` in the Docker container. An example config file will look like this: ```Chrystoki.conf theme={"dark"} Chrystoki2 = { # This path points to the mounted path, /usr/safenet/lunaclient LibUNIX64 = /usr/safenet/lunaclient/libs/64/libCryptoki2.so; } Luna = { DefaultTimeOut = 500000; PEDTimeout1 = 100000; PEDTimeout2 = 200000; PEDTimeout3 = 20000; KeypairGenTimeOut = 2700000; CloningCommandTimeOut = 300000; CommandTimeOutPedSet = 720000; } CardReader = { LunaG5Slots = 0; RemoteCommand = 1; } Misc = { # Update the paths to point to the mounted path if your folder structure is different from the one mentioned in the previous step. PluginModuleDir = /usr/safenet/lunaclient/plugins; MutexFolder = /usr/safenet/lunaclient/lock; PE1746Enabled = 1; ToolsDir = /usr/bin; } Presentation = { ShowEmptySlots = no; } LunaSA Client = { ReceiveTimeout = 20000; # Update the paths to point to the mounted path if your folder structure is different from the one mentioned in the previous step. SSLConfigFile = /usr/safenet/lunaclient/etc/openssl.cnf; ClientPrivKeyFile = ./etc/ClientNameKey.pem; ClientCertFile = ./etc/ClientNameCert.pem; ServerCAFile = ./etc/CAFile.pem; NetClient = 1; TCPKeepAlive = 1; } REST = { AppLogLevel = error ServerName = ; ServerPort = 443; AuthTokenConfigURI = ; AuthTokenClientId = ; AuthTokenClientSecret = ; RestClient = 1; ClientTimeoutSec = 120; ClientPoolSize = 32; ClientEofRetryCount = 15; ClientConnectRetryCount = 900; ClientConnectIntervalMs = 1000; } XTC = { Enabled = 1; TimeoutSec = 600; } ``` Save the file after updating the paths. Running Docker with HSM encryption requires setting the HSM-related environment variables as mentioned previously in the [HSM setup instructions](#setup-instructions). You can set these environment variables in your Docker run command. We are setting the environment variables for Docker via the command line in this example, but you can also pass in a `.env` file to set these environment variables. If no key is found with the provided key label, the HSM will create a new key with the provided label. Infisical depends on an AES and HMAC key to be present in the HSM. If these keys are not present, Infisical will create them. The AES key label will be the value of the `HSM_KEY_LABEL` environment variable, and the HMAC key label will be the value of the `HSM_KEY_LABEL` environment variable with the suffix `_HMAC`. ```bash theme={"dark"} docker run -p 80:8080 \ -v /etc/luna-docker:/usr/safenet/lunaclient \ -e HSM_LIB_PATH="/usr/safenet/lunaclient/libs/64/libCryptoki2.so" \ -e HSM_PIN="" \ -e HSM_SLOT= \ -e HSM_KEY_LABEL="" \ # The rest are unrelated to HSM setup... -e ENCRYPTION_KEY="<>" \ -e AUTH_SECRET="<>" \ -e DB_CONNECTION_URI="<>" \ -e REDIS_URL="<>" \ -e SITE_URL="<>" \ infisical/infisical: # Replace with the version you want to use ``` We recommend reading further about [using Infisical with Docker](/self-hosting/deployment-options/standalone-infisical). After following these steps, your Docker setup will be ready to use HSM encryption. To use Fortanix HSM with Infisical, you need to: 1. Create an App in Fortanix: * Set Interface value to be PKCS#11 * Select API key as authentication method * Assign app to a group Fortanix HSM Setup 2. Take note of the domain (e.g., apac.smartkey.io). You will need this to set up the configuration file for the Fortanix client. The easiest approach would be to download the `.so` file for Linux directly from the [Fortanix PKCS#11 installation page](https://fortanix.zendesk.com/hc/en-us/sections/4408769080724-PKCS-11). Create a configuration file named `pkcs11.conf` with the following content: ``` api_endpoint = "https://apac.smartkey.io" prevent_duplicate_opaque_objects = true retry_timeout_millis = 60000 ``` Note: Replace `apac.smartkey.io` with your actual Fortanix domain if different. For more details about the configuration file format and additional options, refer to the [Fortanix PKCS#11 Configuration File Documentation](https://support.fortanix.com/docs/clients-pkcs11-library#511-configuration-file-format). Create a directory to store the Fortanix library and configuration file: ```bash theme={"dark"} mkdir -p /etc/fortanix-hsm ``` Copy the downloaded `.so` file and the `pkcs11.conf` file to this directory: ```bash theme={"dark"} cp /path/to/fortanix_pkcs11_4.37.2554.so /etc/fortanix-hsm/ cp /path/to/pkcs11.conf /etc/fortanix-hsm/ ``` Run Docker with Fortanix HSM by mounting the directory and setting the required environment variables: ```bash theme={"dark"} docker run -p 80:8080 \ -v /etc/fortanix-hsm:/etc/fortanix-hsm \ -e HSM_LIB_PATH="/etc/fortanix-hsm/fortanix_pkcs11_4.37.2554.so" \ # Path to the PKCS#11 library -e HSM_PIN="MDE3YWUxO..." \ # Your Fortanix app API key used for authentication -e HSM_SLOT=0 \ # Slot value (arbitrary for Fortanix HSM) -e HSM_KEY_LABEL="hsm-key-label" \ # Label to identify the encryption key in the HSM -e FORTANIX_PKCS11_CONFIG_PATH="/etc/fortanix-hsm/pkcs11.conf" \ # Path to Fortanix configuration file # The rest are unrelated to HSM setup... -e ENCRYPTION_KEY="<>" \ -e AUTH_SECRET="<>" \ -e DB_CONNECTION_URI="<>" \ -e REDIS_URL="<>" \ -e SITE_URL="<>" \ infisical/infisical: # Replace with the version you want to use ``` Note: Fortanix HSM integration only works for AMD64 CPU architectures. After following these steps, your Docker setup will be ready to use Fortanix HSM encryption. ### Prerequisites * An [activated AWS CloudHSM cluster](https://docs.aws.amazon.com/cloudhsm/latest/userguide/activate-cluster.html) with at least 1 HSM device. * A [HSM user with the `Crypto User` role](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-user-create.html). In this guide we are using a user with the username `testUser` and the password `testPassword`. Before using the CloudHSM client, it must be configured properly so Infisical can use it for cryptographic operations. **1. Download the AWS CloudHSM client** You can download the AWS CloudHSM client from [the AWS documentation](https://docs.aws.amazon.com/cloudhsm/latest/userguide/pkcs11-library-install.html). Note that the AWS CloudHSM client is only available for Linux and Windows. If you're on a different operating system, you'll need to access a Linux machine to configure the client, such as an AWS EC2 Debian instance. **2. Configure the CloudHSM client** After installing the CloudHSM client, you should see all related files in the `/opt/cloudhsm/` directory on your machine. You need to run the `configure-pkcs11` binary which will configure the client to connect with your AWS CloudHSM cluster. Depending on if you have multiple HSM's inside your cluster, you'll need to run the command with different arguments. Below you'll find the appropriate command for your use case: ```bash theme={"dark"} sudo /opt/cloudhsm/bin/configure-pkcs11 -a --disable-key-availability-check ``` To use a single HSM, you must first manage client key durability settings by setting `disable_key_availability_check` to true by passing the `--disable-key-availability-check` flag. For more information read the [Key Synchronization](https://docs.aws.amazon.com/cloudhsm/latest/userguide/manage-key-sync.html) section in the AWS CloudHSM documentation. ```bash theme={"dark"} sudo /opt/cloudhsm/bin/configure-pkcs11 -a ... --disable-key-availability-check ``` At this point you should have: 1. [Activated the CloudHSM cluster](https://docs.aws.amazon.com/cloudhsm/latest/userguide/activate-cluster.html) 2. [Created a Crypto User HSM user](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-user-create.html) 3. Downloaded and configured the CloudHSM client as described in the previous steps. **3. Download the configured HSM client files** After configuring the CloudHSM client, you should notice that the PKCS11 configuration file has been updated to include the HSM's ENI IP address. You can find this file in the `/opt/cloudhsm/etc/cloudhsm-pkcs11.cfg` directory, and it should look like this: ```json cloudhsm-pkcs11.cfg theme={"dark"} { "clusters": [ { "type": "hsm1", "cluster": { // Your issuing CA certificate. // As per AWS documentation, this defaults to `/opt/cloudhsm/etc/customerCA.crt`. "hsm_ca_file": "/opt/cloudhsm/etc/customerCA.crt", "servers": [ { "hostname": "", "port": 2223, "enable": true }, { "hostname": "", "port": 2223, "enable": true } ], // Only relevant if you passed the --disable-key-availability-check flag "options": { "disable_key_availability_check": true } } } ], "logging": { "log_type": "file", "log_file": "/opt/cloudhsm/run/cloudhsm-pkcs11.log", "log_level": "info", "log_interval": "daily" } } ``` Save the entire `/opt/cloudhsm` folder, as you will need to mount this to your Infisical Docker container in the later steps. In this guide we will be saving all the files from the folder as `/etc/cloudhsm` and mounting it to the `/etc/cloudhsm` directory in the Docker container. On the same machine that you configured the CloudHSM client, you can use `pkcs11-tool` to find the HSM slot number and to verify that the client is working correctly. First, install the `pkcs11-tool` package: ```bash theme={"dark"} sudo apt-get install opensc -y ``` Then, run the following command to find the HSM slot number: ```bash theme={"dark"} pkcs11-tool --module /opt/cloudhsm/lib/libcloudhsm_pkcs11.so --list-slots --login ``` It'll prompt you to log in with your PIN, which is your username and password separated by a colon. Example: `testUser:testPassword`. This will output the HSM slot number like so: ```bash theme={"dark"} ubuntu@ec-2:~$ pkcs11-tool --module /opt/cloudhsm/lib/libcloudhsm_pkcs11.so --list-slots Available slots: Slot 0 (0x2000000000000001): hsm1 token label : hsm1 token manufacturer : Marvell Semiconductors, Inc. token model : LS2 token flags : login required, rng, token initialized hardware version : 66.48 firmware version : 10.2 serial num : pin min/max : 8/32 ``` In this case we see that the HSM has a slot in the position of `0`. This slot number will be used in the later steps to set the `HSM_SLOT` environment variable. When you initialized your HSM, you were prompted to download the cluster CSR and sign it. In order to use the HSM with Infisical, you need to obtain the issuer CA certificate that was used to sign the cluster CSR. If you followed [the official AWS documentation](https://docs.aws.amazon.com/cloudhsm/latest/userguide/initialize-cluster.html), you should have a CA certificate called `customerCA.crt`. Save the CA certificate to a path, as this will need to be mounted as a Docker volume in the next step. For this example, we'll save it to `/aws-files/customerCA.crt`. Running Docker with HSM encryption requires setting the HSM-related environment variables as mentioned previously in the [HSM setup instructions](#setup-instructions). You can set these environment variables in your Docker run command. We are setting the environment variables for Docker via the command line in this example, but you can also pass in a `.env` file to set these environment variables. If no key is found with the provided key label, the HSM will create a new key with the provided label. Infisical depends on an AES and HMAC key to be present in the HSM. If these keys are not present, Infisical will create them. The AES key label will be the value of the `HSM_KEY_LABEL` environment variable, and the HMAC key label will be the value of the `HSM_KEY_LABEL` environment variable with the suffix `_HMAC`. ```bash theme={"dark"} docker run -p 80:8080 \ # Mount the HSM client files to "/opt/cloudhsm" -v /etc/cloudhsm:/opt/cloudhsm \ # Mount the issuer CA certificate to "/opt/cloudhsm/etc/customerCA.crt" -v /aws-files/customerCA.crt:/opt/cloudhsm/etc/customerCA.crt \ # Set the HSM library path to whats expected within Docker (/opt/cloudhsm/lib/libcloudhsm_pkcs11.so) -e HSM_LIB_PATH="/opt/cloudhsm/lib/libcloudhsm_pkcs11.so" \ # Set the HSM PIN to the username and password of the HSM user, separated by a colon -e HSM_PIN=CryptoUserUsername:CryptoUserPassword \ # Set the HSM slot number to the slot number of the HSM device as found in the previous step -e HSM_SLOT= \ # Set the HSM key label to a label that will be used to identify the encryption key in the HSM. This key label does not need to exist before hand. -e HSM_KEY_LABEL=infisical-crypto-key \ # The rest of your environment variables ... # -e ... infisical/infisical: # Replace with the version you want to use ``` We recommend reading further about [using Infisical with Docker](/self-hosting/deployment-options/standalone-infisical). After following these steps, your Docker setup will be ready to use HSM encryption. When you are deploying Infisical with the [Kubernetes self-hosting option](/self-hosting/deployment-options/kubernetes-helm), you can still use HSM encryption, but you need to ensure that the HSM client files are present in the container. This is only supported on helm chart version `1.7.1` and above. Please see the [Helm Chart Changelog](https://github.com/Infisical/infisical/blob/main/helm-charts/infisical-standalone-postgres/CHANGELOG.md#141-march-19-2025) for more information. When using Kubernetes, you need to mount the path containing the HSM client files. This section covers how to configure your Infisical instance to use an HSM with Kubernetes. In this example, we are going to be using `/etc/luna-docker`. ```bash theme={"dark"} mkdir /etc/luna-docker ``` After [setting up your Luna Cloud HSM client](https://thalesdocs.com/gphsm/luna/7/docs/network/Content/install/client_install/add_dpod.htm), you should have a set of files, referred to as the HSM client. You don't need all the files, but for simplicity we recommend copying all the files from the client. A folder structure of a client folder will often look like this: ``` partition-ca-certificate.pem partition-certificate.pem server-certificate.pem Chrystoki.conf /plugins libcloud.plugin /lock /libs /64 libCryptoki2.so /jsp LunaProvider.jar /64 libLunaAPI.so /etc openssl.cnf /bin /64 ckdemo lunacm multitoken vtl ``` The most important parts of the client folder is the `Chrystoki.conf` file, and the `libs`, `plugins`, and `jsp` folders. You need to copy these files to the folder you created in the first step. ```bash theme={"dark"} cp -r //* /etc/luna-docker ``` The `/*` wildcard will copy all files and folders within the HSM client. The wildcard is important to ensure that the file structure is inline with the rest of this guide. After copying the files, the `/etc/luna-docker` directory should have the following file structure: ```bash theme={"dark"} $ ls -R /etc/luna-docker Chrystoki.conf etc lock server-certificate.pem Chrystoki.conf.tmp2E jsp partition-ca-certificate.pem setenv lch-support-linux-64bit partition-certificate.pem bin libs plugins /etc/luna-docker/bin: 64 /etc/luna-docker/bin/64: ckdemo cmu lunacm multitoken vtl /etc/luna-docker/etc: openssl.cnf /etc/luna-docker/jsp: 64 LunaProvider.jar /etc/luna-docker/jsp/64: libLunaAPI.so /etc/luna-docker/libs: 64 /etc/luna-docker/libs/64: libCryptoki2.so /etc/luna-docker/lock: /etc/luna-docker/plugins: libcloud.plugin ``` The `Chrystoki.conf` file is used to configure the HSM client. You need to update the `Chrystoki.conf` file to point to the correct file paths. In this example, we will be mounting the `/etc/luna-docker` folder from the host to containers in our deployment's pods at the path `/usr/safenet/lunaclient`. This means the contents of `/etc/luna-docker` on the host will be accessible at `/usr/safenet/lunaclient` within the containers. An example config file will look like this: ```Chrystoki.conf theme={"dark"} Chrystoki2 = { # This path points to the mounted path, /usr/safenet/lunaclient LibUNIX64 = /usr/safenet/lunaclient/libs/64/libCryptoki2.so; } Luna = { DefaultTimeOut = 500000; PEDTimeout1 = 100000; PEDTimeout2 = 200000; PEDTimeout3 = 20000; KeypairGenTimeOut = 2700000; CloningCommandTimeOut = 300000; CommandTimeOutPedSet = 720000; } CardReader = { LunaG5Slots = 0; RemoteCommand = 1; } Misc = { # Update the paths to point to the mounted path if your folder structure is different from the one mentioned in the previous step. PluginModuleDir = /usr/safenet/lunaclient/plugins; MutexFolder = /usr/safenet/lunaclient/lock; PE1746Enabled = 1; ToolsDir = /usr/bin; } Presentation = { ShowEmptySlots = no; } LunaSA Client = { ReceiveTimeout = 20000; # Update the paths to point to the mounted path if your folder structure is different from the one mentioned in the previous step. SSLConfigFile = /usr/safenet/lunaclient/etc/openssl.cnf; ClientPrivKeyFile = ./etc/ClientNameKey.pem; ClientCertFile = ./etc/ClientNameCert.pem; ServerCAFile = ./etc/CAFile.pem; NetClient = 1; TCPKeepAlive = 1; } REST = { AppLogLevel = error ServerName = ; ServerPort = 443; AuthTokenConfigURI = ; AuthTokenClientId = ; AuthTokenClientSecret = ; RestClient = 1; ClientTimeoutSec = 120; ClientPoolSize = 32; ClientEofRetryCount = 15; ClientConnectRetryCount = 900; ClientConnectIntervalMs = 1000; } XTC = { Enabled = 1; TimeoutSec = 600; } ``` Save the file after updating the paths. You need to create a Persistent Volume Claim (PVC) to mount the HSM client files to the Infisical deployment. ```bash theme={"dark"} kubectl apply -f - < Next we need to update the environment variables used for the deployment. If you followed the [setup instructions for Kubernetes deployments](/self-hosting/deployment-options/kubernetes-helm), you should have a Kubernetes secret called `infisical-secrets`. We need to update the secret with the following environment variables: * `HSM_LIB_PATH` - The path to the HSM client library *(mapped to `/usr/safenet/lunaclient/libs/64/libCryptoki2.so`)* * `HSM_PIN` - The PIN for the HSM device that you created when setting up your Luna Cloud HSM client * `HSM_SLOT` - The slot number for the HSM device that you selected when setting up your Luna Cloud HSM client * `HSM_KEY_LABEL` - The label for the HSM key. If no key is found with the provided key label, the HSM will create a new key with the provided label. The following is an example of the secret that you should update: ```yaml theme={"dark"} apiVersion: v1 kind: Secret metadata: name: infisical-secrets type: Opaque stringData: # ... Other environment variables ... HSM_LIB_PATH: "/usr/safenet/lunaclient/libs/64/libCryptoki2.so" # If you followed this guide, this will be the path of the Luna Cloud HSM client HSM_PIN: "" HSM_SLOT: "" HSM_KEY_LABEL: "" ``` Save the file after updating the environment variables, and apply the secret changes ```bash theme={"dark"} kubectl apply -f ./secret-file-name.yaml ``` After we've successfully configured the PVC and updated our environment variables, we are ready to update the deployment configuration so that the pods it creates can access the HSM client files. ```yaml theme={"dark"} # ... The rest of the values.yaml file ... image: repository: infisical/infisical tag: "v0.117.1-postgres" pullPolicy: IfNotPresent extraVolumeMounts: - name: hsm-data mountPath: /usr/safenet/lunaclient # The path we will mount the HSM client files to extraVolumes: - name: hsm-data persistentVolumeClaim: claimName: infisical-data-pvc # The PVC we created in the previous step # ... The rest of the values.yaml file ... ``` After updating the values.yaml file, you need to upgrade the Helm chart in order for the changes to take effect. ```bash theme={"dark"} helm upgrade --install infisical infisical-helm-charts/infisical-standalone --values /path/to/values.yaml ``` After upgrading the Helm chart, you need to restart the deployment in order for the changes to take effect. ```bash theme={"dark"} kubectl rollout restart deployment/infisical-infisical ``` After following these steps, your Kubernetes setup will be ready to use HSM encryption. First, you need to set up Fortanix HSM by: 1. Creating an App in Fortanix: * Set Interface value to be PKCS#11 * Select API key as authentication method * Assign app to a group Fortanix HSM Setup 2. Take note of the domain (e.g., apac.smartkey.io). You will need this when setting up the configuration file. Create a directory to store the Fortanix configuration files: ```bash theme={"dark"} mkdir -p /etc/fortanix-hsm ``` Download the Fortanix PKCS#11 library for Linux from the [Fortanix PKCS#11 installation page](https://fortanix.zendesk.com/hc/en-us/sections/4408769080724-PKCS-11). Create a configuration file named `pkcs11.conf` with the following content: ``` api_endpoint = "https://apac.smartkey.io" prevent_duplicate_opaque_objects = true retry_timeout_millis = 60000 ``` Note: Replace `apac.smartkey.io` with your actual Fortanix domain if different. Create a Persistent Volume Claim to store the Fortanix files: ```bash theme={"dark"} kubectl apply -f - < Update your Kubernetes secret with the Fortanix HSM environment variables: ```yaml theme={"dark"} apiVersion: v1 kind: Secret metadata: name: infisical-secrets type: Opaque stringData: # ... Other environment variables ... HSM_LIB_PATH: "/etc/fortanix-hsm/fortanix_pkcs11_4.37.2554.so" # Path to the PKCS#11 library in the container HSM_PIN: "" # Your Fortanix app API key used for authentication HSM_SLOT: "0" # Slot value (can be set to 0 for Fortanix HSM as it's arbitrary) HSM_KEY_LABEL: "hsm-key-label" # Label to identify the encryption key in the HSM FORTANIX_PKCS11_CONFIG_PATH: "/etc/fortanix-hsm/pkcs11.conf" # Path to Fortanix configuration file ``` Apply the updated secret: ```bash theme={"dark"} kubectl apply -f ./secret-file-name.yaml ``` Update your Helm values to mount the Fortanix HSM files: ```yaml theme={"dark"} # ... The rest of the values.yaml file ... image: repository: infisical/infisical tag: "v0.117.1-postgres" pullPolicy: IfNotPresent extraVolumeMounts: - name: fortanix-data mountPath: /etc/fortanix-hsm # The path where Fortanix files will be available extraVolumes: - name: fortanix-data persistentVolumeClaim: claimName: fortanix-hsm-pvc # ... The rest of the values.yaml file ... ``` Note: Fortanix HSM integration only works for AMD64 CPU architectures. Upgrade the Helm chart with the new values: ```bash theme={"dark"} helm upgrade --install infisical infisical-helm-charts/infisical-standalone --values /path/to/values.yaml ``` Restart the deployment: ```bash theme={"dark"} kubectl rollout restart deployment/infisical-infisical ``` After following these steps, your Kubernetes setup will be ready to use Fortanix HSM encryption. ### Prerequisites * An [activated AWS CloudHSM cluster](https://docs.aws.amazon.com/cloudhsm/latest/userguide/activate-cluster.html) with at least 1 HSM device. * A [HSM user with the `Crypto User` role](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-user-create.html). In this guide we are using a user with the username `testUser` and the password `testPassword`. * A Kubernetes cluster AWS CloudHSM is supported on helm chart version `1.7.1` and above. Please see the [Helm Chart Changelog](https://github.com/Infisical/infisical/blob/main/helm-charts/infisical-standalone-postgres/CHANGELOG.md#141-march-19-2025) for more information. If you're using AWS EKS, you need to specify a storage class for the PVC and ensure that the EBS CSI Driver is installed and running. By default, EKS exposes `gp2` as the default storage class. Below are the steps required for setting the default storage class and ensuring the EBS CSI Driver is installed and running: Enable OIDC authentication for the EKS cluster: ```bash theme={"dark"} eksctl utils associate-iam-oidc-provider \ --region \ --cluster \ --approve ``` * Replace `` with your AWS region. * Replace `` with your cluster name. 1. Check if EBS CSI Driver is installed and running by running the following command: ```bash theme={"dark"} kubectl get pods -n kube-system | grep ebs-csi ``` If you see no pods, you need to install the EBS CSI Driver as seen in the next step. Create a new IAM service account for the EBS CSI Driver: ```bash theme={"dark"} eksctl create iamserviceaccount \ --name ebs-csi-controller-sa \ --namespace kube-system \ --region \ --cluster \ --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \ --approve \ --role-name AmazonEKS_EBS_CSI_DriverRole ``` * Replace `` with your cluster name. * Replace `` with your AWS region. Install the EBS CSI Driver: ```bash theme={"dark"} eksctl create addon \ --name aws-ebs-csi-driver \ --cluster \ --region \ --service-account-role-arn arn:aws:iam:::role/AmazonEKS_EBS_CSI_DriverRole \ --force ``` * Replace `` with your cluster name. * Replace `` with your AWS region. * Replace `` with your actual account ID. Can be obtained by running `aws sts get-caller-identity --query Account --output text`. Verify the EBS CSI Driver is installed and running by running the following command: ```bash theme={"dark"} kubectl get pods -n kube-system | grep ebs-csi ``` You should see an output like this: ```bash theme={"dark"} kubectl get pods -n kube-system | grep ebs-csi ebs-csi-controller-6b6bbf996-rvf8r 6/6 Running 0 21s ebs-csi-controller-6b6bbf996-vk4ng 6/6 Running 0 21s ebs-csi-node-c6vbb 3/3 Running 0 21s ebs-csi-node-s9zlr 3/3 Running 0 21s ``` You can find the enabled storage class by running the following command: ```bash theme={"dark"} kubectl get storageclass ``` You should see an output like this: ```bash theme={"dark"} $ kubectl get storageclass NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE gp2 kubernetes.io/aws-ebs Delete WaitForFirstConsumer false 65m ``` In this case, the enabled storage class is `gp2`. You can set the default PVC storage class by patching the storage class with the following command: ```bash theme={"dark"} kubectl patch storageclass gp2 -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' ``` This will set the `gp2` storage class as the default storage class. Now when you run `kubectl get storageclass`, you should see that `gp2` is the default storage class. ```bash theme={"dark"} $ kubectl get storageclass NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE gp2 (default) kubernetes.io/aws-ebs Delete WaitForFirstConsumer false 68m ``` Notice the `(default)` next to the `gp2` storage class. You need to create a Persistent Volume Claim (PVC) to mount the HSM client files to the Infisical deployment. ```bash theme={"dark"} kubectl apply -f - < We need to configure the PVC to work with the CloudHSM, so Infisical can consume the HSM client files. **2.1. Start a shell in the PVC pod:** This will allow us to run commands directly within the setup pod. We'll use this to configure the CloudHSM client and to validate that it's working correctly. ```bash theme={"dark"} kubectl exec -it cloudhsm-setup-pod -- /bin/sh ``` **2.2. Install the necessary packages:** This will install the necessary packages to allow us to test and install the CloudHSM client. ```bash theme={"dark"} apt-get update -y apt-get install opensc telnet wget -y ``` **2.3. Try to reach the HSM device:** We need to validate that we're able to reach the HSM device from within Kubernetes. You can use telnet to ping the HSM device like so: ```bash theme={"dark"} telnet 2223 ``` You should see an output like this: ```bash theme={"dark"} $ telnet 2223 Trying ... Connected to . ``` If it gets stuck on `Trying ....`, you may have configured your HSM client's security group incorrectly. Make sure you configure the security group to allow traffic from EKS on port 2223-2225. **2.4. Install the AWS CloudHSM client:** The Infisical images run on Debian, so we need to install a Debian-compatible version of the AWS CloudHSM client. ```bash theme={"dark"} wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Jammy/cloudhsm-pkcs11_latest_u22.04_amd64.deb apt-get install ./cloudhsm-pkcs11_latest_u22.04_amd64.deb -y ``` **2.5. Configure the CloudHSM client:** After installing the CloudHSM client, you should see all related files in the `/opt/cloudhsm/` directory on the CloudHSM setup pod. You need to run the `configure-pkcs11` binary which will configure the client to connect with your AWS CloudHSM cluster. Depending on if you have multiple HSM's inside your cluster, you'll need to run the command with different arguments. Below you'll find the appropriate command for your use case: ```bash theme={"dark"} /opt/cloudhsm/bin/configure-pkcs11 -a --disable-key-availability-check ``` To use a single HSM, you must first manage client key durability settings by setting `disable_key_availability_check` to true by passing the `--disable-key-availability-check` flag. For more information read the [Key Synchronization](https://docs.aws.amazon.com/cloudhsm/latest/userguide/manage-key-sync.html) section in the AWS CloudHSM documentation. ```bash theme={"dark"} /opt/cloudhsm/bin/configure-pkcs11 -a ... --disable-key-availability-check ``` **2.6. Verify the CloudHSM client is configured correctly:** You can verify the CloudHSM client is configured correctly by running the following command: ```bash theme={"dark"} cat /opt/cloudhsm/etc/cloudhsm-pkcs11.cfg ``` You should see an output like this: ```json theme={"dark"} { "clusters": [ { "type": "hsm1", "cluster": { "hsm_ca_file": "/opt/cloudhsm/etc/customerCA.crt", "servers": [ { "hostname": "172.31.39.155", "port": 2223, "enable": true } ], "options": { "disable_key_availability_check": true } } } ], "logging": { "log_type": "file", "log_file": "/opt/cloudhsm/run/cloudhsm-pkcs11.log", "log_level": "info", "log_interval": "daily" } } ``` **2.7. Exit the pod:** Exit the pod by running the following command: ```bash theme={"dark"} exit ``` **2.8. Copy your issuer CA certificate to the PVC:** When you initialized your HSM, you were prompted to download the cluster CSR and sign it. In order to use the HSM with Infisical, you need to obtain the issuer CA certificate that was used to sign the cluster CSR. If you followed [the official AWS documentation](https://docs.aws.amazon.com/cloudhsm/latest/userguide/initialize-cluster.html), you should have a CA certificate called `customerCA.crt`. Copy the CA certificate from your local machine to the setup pod: ```bash theme={"dark"} kubectl cp /path/to/customerCA.crt cloudhsm-setup-pod:/opt/cloudhsm/etc/customerCA.crt ``` Ensure that the file is at `/opt/cloudhsm/etc/customerCA.crt` inside the setup pod by running the following command: ```bash theme={"dark"} kubectl exec -it cloudhsm-setup-pod -- cat /opt/cloudhsm/etc/customerCA.crt ``` **2.9. Test the HSM client:** Finally, after we're done configuring the HSM client, we need to test it to ensure that it's working correctly. First, start a new shell into the setup pod by running the same shell command as before: ```bash theme={"dark"} kubectl exec -it cloudhsm-setup-pod -- /bin/sh ``` Next, try generating a random 32 bytes long string by running the following command: ```bash theme={"dark"} pkcs11-tool --module /opt/cloudhsm/lib/libcloudhsm_pkcs11.so \ --login --pin : \ --generate-random 32 | base64 ``` You should see an output like this: ```bash theme={"dark"} Using slot 0 with a present token (0x2000000000000001) av1dlhVEsssjpcTNS+ysGUoKWH6+/PCaEDIdal5oQc0= ``` Replace the `:` with your username and password combination of the Crypto user you have created that you want to use to perform cryptographic operations. In AWS CloudHSM, the PIN is always the username and password separated by a colon. **2.10. Copy the configured client to the PVC:** Copy from the HSM files into the `/data` directory in the PVC, which is what will be mounted for the Infisical deployment. ```bash theme={"dark"} cp -r /opt/cloudhsm/. /data/ ``` Verify the files were copied correctly by running the following command: ```bash theme={"dark"} ls -la /data/ ``` You should see an output like this: ```bash theme={"dark"} drwxr-xr-x. 8 root root 4096 Oct 13 18:50 . drwxr-xr-x. 1 root root 131 Oct 13 18:29 .. drwxr-xr-x. 2 root root 4096 Oct 13 18:50 bin drwxr-xr-x. 3 root root 4096 Oct 13 18:50 doc drwxr-xr-x. 2 root root 4096 Oct 13 18:50 etc drwxr-xr-x. 3 root root 4096 Oct 13 18:50 include drwxr-xr-x. 2 root root 4096 Oct 13 18:50 lib drwxr-xr-t. 2 root root 4096 Oct 13 18:50 run ``` **2.11. Set the correct permissions for the HSM client files:** ```bash theme={"dark"} chmod -R 755 /data/ ``` **2.12. Exit the pod:** Exit the pod by running the following command: ```bash theme={"dark"} exit ``` **2.13. Delete the setup pod:** Delete the setup pod by running the following command: ```bash theme={"dark"} kubectl delete pod cloudhsm-setup-pod ``` Next we need to update the environment variables used for the deployment. If you followed the [setup instructions for Kubernetes deployments](/self-hosting/deployment-options/kubernetes-helm), you should have a Kubernetes secret called `infisical-secrets`. We need to update the secret with the following environment variables: * `HSM_LIB_PATH` - The path to the CloudHSM PKCS#11 library *(mapped to `/opt/cloudhsm/lib/libcloudhsm_pkcs11.so`)* * `HSM_PIN` - The PIN for the HSM device, which is the username and password of your Crypto User separated by a colon (e.g., `testUser:testPassword`) * `HSM_SLOT` - The slot number for the HSM device that you found in the previous step * `HSM_KEY_LABEL` - The label for the HSM key. If no key is found with the provided key label, the HSM will create a new key with the provided label. The following is an example of the secret that you should update: ```yaml theme={"dark"} apiVersion: v1 kind: Secret metadata: name: infisical-secrets type: Opaque stringData: # ... Other environment variables ... HSM_LIB_PATH: "/opt/cloudhsm/lib/libcloudhsm_pkcs11.so" HSM_PIN: "testUser:testPassword" # Replace with your actual Crypto User credentials HSM_SLOT: "0" # Replace with your actual slot number HSM_KEY_LABEL: "infisical-crypto-key" ``` Save the file after updating the environment variables, and apply the secret changes ```bash theme={"dark"} kubectl apply -f ./secret-file-name.yaml ``` After we've successfully configured the PVC and updated our environment variables, we are ready to update the deployment configuration so that the pods it creates can access the HSM client files. ```yaml theme={"dark"} # ... The rest of the values.yaml file ... infisical: image: repository: infisical/infisical tag: "v0.151.0" pullPolicy: IfNotPresent extraVolumeMounts: - name: cloudhsm-data mountPath: /opt/cloudhsm # The path we will mount the HSM client files to extraVolumes: - name: cloudhsm-data persistentVolumeClaim: claimName: cloudhsm-data-pvc # The PVC we created in the previous step # ... The rest of the values.yaml file ... ``` Make sure to set the `tag` to **`v0.151.0-nightly-20251013.1` or above**, as this is the minimum Infisical version that supports AWS CloudHSM. Ensure that the configuration file at `/opt/cloudhsm/etc/cloudhsm-pkcs11.cfg` references the correct path for the issuer CA certificate (`/opt/cloudhsm/etc/customerCA.crt`). This should already be configured correctly if you followed the previous steps. After updating the values.yaml file, you need to upgrade the Helm chart in order for the changes to take effect. ```bash theme={"dark"} helm repo update helm upgrade --install infisical infisical-helm-charts/infisical-standalone --values /path/to/values.yaml ``` After upgrading the Helm chart, you need to restart the deployment in order for the changes to take effect. ```bash theme={"dark"} kubectl rollout restart deployment/infisical-infisical-standalone-infisical ``` After following these steps, your Kubernetes setup will be ready to use AWS CloudHSM encryption. ## Disabling HSM Encryption To disable HSM encryption, navigate to Infisical's Server Admin Console and set the KMS encryption strategy to `Software-based Encryption`. This will revert the encryption strategy back to the default software-based encryption. In order to disable HSM encryption, the Infisical instance must be able to access the HSM device. If the HSM device is no longer accessible, you will not be able to disable HSM encryption. # KMIP Integration Source: https://infisical.com/docs/documentation/platform/kms/kmip Learn more about integrating with Infisical KMS using KMIP (Key Management Interoperability Protocol). KMIP integration is an Enterprise-only feature. Please reach out to [sales@infisical.com](mailto:sales@infisical.com) if you have any questions. Infisical KMS provides Key Management Interoperability Protocol (KMIP) support for integration with KMIP-compatible clients. This allows for enhanced key management across various applications that support the KMIP 1.4 protocol. ## How KMIP Works with Infisical At a high level, the KMIP integration follows this architecture: KMIP Architecture Diagram At a high level, the KMIP integration works as follows: 1. KMIP clients (your applications or tools) communicate with the KMIP server 2. The KMIP server acts as a proxy and forwards requests to Infisical KMS 3. The KMIP server authenticates to Infisical using a machine identity The KMIP server itself is deployed using the Infisical CLI (`infisical kmip start` command) and serves as an intermediary between your KMIP clients and Infisical's key management system. ### Supported Operations The Infisical KMIP server supports the following operations for symmetric keys: * **Create** - Generate symmetric keys * **Register** - Register externally created keys * **Locate** - Find keys using attributes * **Get** - Retrieve keys securely * **Activate** - Enable keys for usage * **Revoke** - Revoke existing keys * **Destroy** - Permanently remove keys * **Get Attributes** - Retrieve metadata associated with keys * **Query** - Query server capabilities and supported operations ### Compatibility Infisical KMIP supports KMIP versions 1.0 to 1.4, ensuring compatibility with a wide range of clients and security tools. ### Network Requirements Ensure the following network connectivity is in place: * **KMIP Client → KMIP Server**: KMIP clients must be able to reach the KMIP server on port 5696 (or your configured port). Ensure firewalls allow this traffic and DNS resolution works if using hostnames. * **KMIP Server → Infisical Platform**: The KMIP server needs outbound HTTP access to Infisical. For self-hosted instances, ensure connectivity to your custom domain. ## Configure and Deploy the KMIP Server Follow these steps in order to set up KMIP integration with Infisical: First, you need to enable KMIP for your entire Infisical organization and set up its PKI infrastructure. Navigate to **Organization Settings > KMIP** and click **Setup KMIP**. KMIP org navigate In the modal, select the desired key algorithm to use for the KMIP PKI of your organization, then click **Continue**. KMIP org PKI setup This generates the KMIP PKI for your organization, creating the cryptographic foundation that will be used for secure KMIP communications. You do not need to manage these certificates yourself; Infisical handles the PKI infrastructure for you. The KMIP server needs a machine identity to authenticate with Infisical and proxy requests on behalf of clients. Configure a [machine identity](/documentation/platform/identities/machine-identities#machine-identities) by heading to your organization's **Access Control** and switching over to the **identities** tab. From there you can click **Create Identity**. This guide assumes you'll be using the [Universal Auth](/documentation/platform/identities/universal-auth) method for the machine identity but you can choose any supported authentication method. KMIP create machine identity This machine identity will be used by the KMIP server to authenticate and forward client requests to Infisical KMS. The machine identity needs permission to proxy KMIP requests. Create a custom organization role and give it the **Proxy KMIP** permission. KMIP create custom role KMIP assign proxy to role This permission allows the KMIP server to act as an intermediary between KMIP clients and Infisical. Now connect the machine identity to the role you just created. Assign the machine identity to the custom organization role. KMIP assign role to machine identity This grants the machine identity the ability to serve KMIP client requests and forward them from your KMIP server to Infisical. Now you're ready to deploy the KMIP server. You can run the KMIP server on any infrastructure that can reach the Infisical platform, such as a VM or container. Once you have your infrastructure ready, you'll need to install the Infisical CLI on the server where you want to run the KMIP server. To install the latest Infisical CLI visit [Infisical CLI instructions](https://infisical.com/docs/cli/overview). If you need to install specific versions of the CLI, you can find them on the [Infisical CLI GitHub Releases](https://github.com/Infisical/cli/releases). Then, launch the KMIP server with the following command: ```bash theme={"dark"} infisical kmip start \ --identity-client-id=example-client-id \ --identity-client-secret=example-client-secret \ --domain=https://my-infisical-instance.com \ --listen-address="0.0.0.0:5696" \ --hostnames-or-ips="my-kmip-server.com" ``` **Available flags:** * **listen-address** (default: localhost:5696): The address the KMIP server listens on. In most cases you'll want to listen on all interfaces (0.0.0.0:5696) * **identity-auth-method** (default: universal-auth): The authentication method for the machine identity * **identity-client-id**: The client ID of the machine identity (can be set via `INFISICAL_UNIVERSAL_AUTH_CLIENT_ID` env var) * **identity-client-secret**: The client secret of the machine identity (can be set via `INFISICAL_UNIVERSAL_AUTH_CLIENT_SECRET` env var) * **server-name** (default: "kmip-server"): The name of the KMIP server * **certificate-ttl** (default: "1y"): The duration for which the server certificate is valid * **hostnames-or-ips**: The IP address or the hostname of the server where you have deployed the KMIP server. Once started, your KMIP server is now running and ready to accept client connections. It will authenticate to Infisical using the machine identity and proxy all KMIP operations. Now that the KMIP server is running, you need to register KMIP clients that will connect to it. Navigate to the desired KMS project if you already have one or create a new project of type KMS, then select **KMIP** once inside the project, and click **Add KMIP Client**. KMIP client overview Define the client and its permissions. In the modal, provide the details of your client. The selected permissions determine what KMIP operations (Create, Get, Revoke, etc.) can be performed in your KMS project. KMIP client modal This creates a KMIP client entity in Infisical that will be authenticated via mTLS certificates. Each KMIP client needs its own certificate for mTLS authentication. Click **Generate Certificate** for your newly created client. KMIP generate client cert Provide the desired TTL (time-to-live) and key algorithm, then click **Generate Client Certificate**. KMIP client cert config Download the generated client certificate, certificate chain, and private key. KMIP client cert modal Configure your KMIP-compatible applications or tools to use these credentials when connecting to the KMIP server. The client will now authenticate via mTLS and perform authorized key management operations through the KMIP server, which proxies requests to Infisical KMS. ## Connecting your KMIP Client to Infisical After completing the setup, configure your KMIP compatible application to connect to the KMIP server. While exact configuration steps vary by application, you'll generally need to provide: 1. **KMIP Server Address**: The hostname or IP and port where your KMIP server is listening (e.g., `my-kmip-server.com:5696`) 2. **Client Certificates**: The certificate credentials generated from your Infisical KMS project: * **Client Certificate** (`client-cert.pem`) - Identifies your KMIP client * **Client Private Key** (`client-key.pem`) - Used for mTLS authentication * **Certificate Chain** (`cert-chain.pem`) - Verifies the KMIP server ### General Configuration Steps Determine the address where your KMIP server is accessible. This should match one of the hostnames or IPs you specified when starting the KMIP server with the `--hostnames-or-ips` flag. **Example endpoints:** * `my-kmip-server.com:5696` * `10.0.1.50:5696` * `kmip.example.com:5696` The default port is `5696`, but this can be changed using the `--listen-address` flag when starting the server. Organize the certificate materials you downloaded when generating the client certificate from the Infisical KMS project. You should have three files: * **client-cert.pem** - The client certificate * **cert-chain.pem** - The certificate chain (includes intermediate and root CA certificates) * **client-key.pem** - The private key Most KMIP clients require these files in PEM format, which is what Infisical provides by default. The exact configuration steps vary depending on your KMIP client application. Generally, you'll need to specify: **Common configuration parameters:** * **Server hostname/IP**: Your KMIP server address (e.g., `my-kmip-server.com`) * **Server port**: Default is `5696` * **Client certificate**: Path to `client-cert.pem` * **Client private key**: Path to `client-key.pem` * **CA certificate**: Path to `cert-chain.pem` (used to verify the server) * **Protocol version**: KMIP 1.0 through 1.4 are supported **Example configuration for PyKMIP:** ```ini theme={"dark"} [client] host=my-kmip-server.com port=5696 certfile=/path/to/client-cert.pem keyfile=/path/to/client-key.pem ca_certs=/path/to/cert-chain.pem ``` Once configured, test the connection by performing a simple KMIP operation, such as: * Querying server capabilities * Creating a test key * Listing available keys If the connection is successful, your KMIP client is now integrated with Infisical KMS and can perform key management operations according to the permissions you assigned. **Troubleshooting connection issues:** * Verify network connectivity between your KMIP client and the KMIP server * Check that certificate files are readable and in the correct format * Ensure the KMIP server is running and accessible * Review KMIP server logs for authentication errors * Confirm the client certificate has not expired If you require further verification of your certificate details and connectivity to the KMIP server from your KMIP client, you can use the following command from your client machine: ```bash theme={"dark"} openssl s_client -connect kmip-server-ip-here:5696 --cert /path/to/client-cert.pem --key /path/to/client-cert.pem --CAfile /path/to/cert-chain.pem --tls1_2 --showcerts --state --debug ``` This command attempts to establish a TLS connection to the KMIP server using your client certificate and key, displaying detailed information about the handshake process. If the connection is successful, you'll see the server's certificate chain and a message indicating that the handshake was completed. # Kubernetes Encryption with KMS Source: https://infisical.com/docs/documentation/platform/kms/kubernetes-encryption # Key Management Service (KMS) Source: https://infisical.com/docs/documentation/platform/kms/overview Learn how to manage and use cryptographic keys with Infisical. ## Concept Infisical can be used as a Key Management System (KMS), referred to as Infisical KMS, to centralize management of keys to be used for cryptographic operations like encryption/decryption. By default your Infisical data such as projects and the data within them are encrypted at rest using Infisical's own KMS. This ensures that your data is secure and protected from unauthorized access. If you are on-premise, your KMS root key will be created at random with the `ROOT_ENCRYPTION_KEY` environment variable. You can also use a Hardware Security Module (HSM), to create the root key. Read more about [HSM](/documentation/platform/kms/hsm-integration). Keys managed in KMS are not extractable from the platform. Additionally, data is never stored when performing cryptographic operations. ## Workflow The typical workflow for using Infisical KMS consists of the following steps: 1. Creating a KMS key. As part of this step, you specify a name for the key and the encryption algorithm meant to be used for it (e.g. `AES-GCM-128`, `AES-GCM-256`). 2. Encryption: To encrypt data, you would make a request to the Infisical KMS API endpoint, specifying the base64-encoded plaintext and the intended key to use for encryption; the API would return the base64-encoded ciphertext. 3. Decryption: To decrypt data, you would make a request to the Infisical KMS API endpoint, specifying the base64-encoded ciphertext and the intended key to use for decryption; the API would return the base64-encoded plaintext. Note that this workflow can be executed via the Infisical UI or manually such as via API. ## Encryption ### Guide to Encrypting Data In the following steps, we explore how to generate a key and use it to encrypt data. Navigate to Project > Key Management and tap on the **Add Key** button. kms add key button Specify your key details. Here's some guidance on each field: * Name: A slug-friendly name for the key. * Key Usage: The type of key to create (e.g `Encrypt/Decrypt` for encryption, and `Sign/Verify` for signing). * Algorithm: The encryption algorithm associated with the key (e.g. `AES-GCM-256`). * Description: An optional description of what the intended usage is for the key. kms add key modal Once your key is generated, open the options menu for the newly created key and select encrypt data. kms key options Populate the text area with your data and tap on the Encrypt button. kms encrypt data If your data is already Base64 encoded make sure to toggle the respective switch on to avoid redundant encoding. Copy and store the encrypted data. kms encrypted data To create a cryptographic key, make an API request to the [Create KMS Key](/api-reference/endpoints/kms/keys/create) API endpoint. ### Sample request ```bash Request theme={"dark"} curl --request POST \ --url https://app.infisical.com/api/v1/kms/keys \ --header 'Content-Type: application/json' \ --data '{ "projectId": "", "name": "my-secret-key", "description": "...", "encryptionAlgorithm": "aes-256-gcm" }' ``` ### Sample response ```bash Response theme={"dark"} { "key": { "id": "", "description": "...", "isDisabled": false, "isReserved": false, "orgId": "", "name": "my-secret-key", "createdAt": "2023-11-07T05:31:56Z", "updatedAt": "2023-11-07T05:31:56Z", "projectId": "" } } ``` To encrypt data, make an API request to the [Encrypt Data](/api-reference/endpoints/kms/encryption/encrypt) API endpoint, specifying the key to use. Make sure your data is Base64 encoded ### Sample request ```bash Request theme={"dark"} curl --request POST \ --url https://app.infisical.com/api/v1/kms/keys//encrypt \ --header 'Content-Type: application/json' \ --data '{ "plaintext": "lUFHM5Ggwo6TOfpuN1S==" // base64 encoded plaintext }' ``` ### Sample response ```bash Response theme={"dark"} { "ciphertext": "HwFHwSFHwlMF6TOfp==" // base64 encoded ciphertext } ``` ### Guide to Decrypting Data In the following steps, we explore how to use decrypt data using an existing key in Infisical KMS. Navigate to Project > Key Management and open the options menu for the key used to encrypt the data you want to decrypt. kms key options Paste your encrypted data into the text area and tap on the Decrypt button. Optionally, if your data was originally plain text, enable the decode Base64 switch. kms decrypt data Your decrypted data will be displayed and can be copied for use. kms decrypted data To decrypt data, make an API request to the [Decrypt Data](/api-reference/endpoints/kms/encryption/decrypt) API endpoint, specifying the key to use. ### Sample request ```bash Request theme={"dark"} curl --request POST \ --url https://app.infisical.com/api/v1/kms/keys//decrypt \ --header 'Content-Type: application/json' \ --data '{ "ciphertext": "HwFHwSFHwlMF6TOfp==" // base64 encoded ciphertext }' ``` ### Sample response ```bash Response theme={"dark"} { "plaintext": "lUFHM5Ggwo6TOfpuN1S==" // base64 encoded plaintext } ``` ## Signing ### Guide to Signing Data In the following steps, we explore how to generate a key and use it to sign data. Navigate to Project > Key Management and tap on the **Add Key** button. kms add key button Specify your key details. Here's some guidance on each field: * Name: A slug-friendly name for the key. * Key Usage: The type of key to create (e.g `Encrypt/Decrypt` for encryption, and `Sign/Verify` for signing). * Algorithm: The signing algorithm associated with the key (e.g. `RSA_4096`). * Description: An optional description of what the intended usage is for the key. kms add key modal Once your key is generated, open the options menu for the newly created key and select sign data. kms key options Populate the text area with your data and tap on the Sign button. kms sign data Make sure to select the appropriate signing algorithm that will be used to sign the data. Supported signing algorithms are: **For RSA keys:** * `RSASSA PSS SHA 512`: Not deterministic, and includes random salt. * `RSASSA PSS SHA 384`: Not deterministic, and includes random salt. * `RSASSA PSS SHA 256`: Not deterministic, and includes random salt. * `RSASSA PKCS1 V1.5 SHA 512`: Deterministic, and does not include randomness. * `RSASSA PKCS1 V1.5 SHA 384`: Deterministic, and does not include randomness. * `RSASSA PKCS1 V1.5 SHA 256`: Deterministic, and does not include randomness. **For ECC keys:** * `ECDSA SHA 512`: Not deterministic, and includes randomness. * `ECDSA SHA 384`: Not deterministic, and includes randomness. * `ECDSA SHA 256`: Not deterministic, and includes randomness. In this example, we'll use the `RSASSA PSS SHA 512` signing algorithm. If your data is already Base64 encoded make sure to toggle the respective switch on to avoid redundant encoding. Copy and store the signature of your data. kms signed data To sign data, make an API request to the [Sign Data](/api-reference/endpoints/kms/signing/sign) API endpoint, specifying the key to use. ### Sample request ```bash Request theme={"dark"} curl --request POST \ --url https://app.infisical.com/api/v1/kms/keys//sign \ --header 'Content-Type: application/json' \ --data '{ "data": "SGVsbG8sIFdvcmxkIQ==", // base64 encoded data "signingAlgorithm": "RSASSA_PKCS1_V1_5_SHA_512", }' ``` ### Sample response ```bash Response theme={"dark"} { "signature": "JYuiBt1Ta9pbqFIW9Ou6qzBsFhjYbMJp9k4dP87ILrO+F2MPnp85g3nOlXK1ttZmRoGWsWnLNDRn9W3rf5VtkeaixPqUW/KvY/fM3CxdMyIV3BuxlGgDksjL8X34Eqkrz4CCPo9hjB5uT+rBCOxCgZqRbOdATPipAneUapI9npseNquEeh3jPklwviBix83PJHV9PW2t03AGGUXuMY55ZaFEIMv+IrI1WYdnPVIXDyIitYsS3y+/6KRfhVeTcPNJ5Rw+FE9y1eZzDEZtTNpxOfUT3QIoXmpZlYL4HbhRuJBZ+Yx54C7uPiUIN9U69XbyXt+Kkynykw2HPaagwuCZxiqCU5sFfLnrVbc3dmZxQcX2yRrs2gmFamzBx+uVbi648H4mb7WuE5UPTBjjA11jRsBjCY0YS2T4Vgfe1RlzlPQkZgjP/bnCCGDqXa3/VZAlZX1nTI51X995bPHBQI0rq2sNDlIXenwiAy1wJSITbSI8DbUx09Cr83xCEaYAE6R6PUfog/tbIUXi0VbrYsCVkAGCK446Wb1vW6q7HR8jrjXNwmXlqN9eLbSVWqdWj7N7fieeTYSrECtUaAjxtUYTIVsH2bfT6FOEM9gMWKffOpFowVzzr3B9bNQLIhnEEwebxBw947i4OcxyVIcEUuumWxoKvcbSPxzJ8v1M3SoBBh4=", // base64 encoded signature "keyId": "62b2c14e-58af-4199-9842-02995c63edf9", "signingAlgorithm": "RSASSA_PKCS1_V1_5_SHA_512", } ``` To sign predigested data, you can pass `"isDigest": true` in the request body. This requires the data to be a base64 encoded digest of the data you wish to sign. It's important that the digest is created using the same hashing algorithm as the signing algorithm. As an example, you would create the digest with `SHA512` if you are using the `RSASSA_PKCS1_V1_5_SHA_512` signing algorithm. ### Guide to Verifying Data In the following steps, we explore how to verify data using an existing key in Infisical KMS. Navigate to Project > Key Management and open the options menu for the key used to sign the data you want to verify. kms key options Paste your signature and data into the text areas and tap on the Verify button. kms verify data Your verification result will be displayed and can be copied for use. kms verified data If the signature is invalid, you'll see an error message indicating that the signature is invalid, and the "Signature Status" field will be `Invalid`. To verify data, make an API request to the [Verify Data](/api-reference/endpoints/kms/signing/verify) API endpoint, specifying the key to use. ### Sample request ```bash Request theme={"dark"} curl --request POST \ --url https://app.infisical.com/api/v1/kms/keys//verify \ --header 'Content-Type: application/json' \ --data '{ "data": "SGVsbG8sIFdvcmxkIQ==", // base64 encoded data "signature": "JYuiBt1Ta9pbqFIW9Ou6qzBsFhjYbMJp9k4dP87ILrO+F2MPnp85g3nOlXK1ttZmRoGWsWnLNDRn9W3rf5VtkeaixPqUW/KvY/fM3CxdMyIV3BuxlGgDksjL8X34Eqkrz4CCPo9hjB5uT+rBCOxCgZqRbOdATPipAneUapI9npseNquEeh3jPklwviBix83PJHV9PW2t03AGGUXuMY55ZaFEIMv+IrI1WYdnPVIXDyIitYsS3y+/6KRfhVeTcPNJ5Rw+FE9y1eZzDEZtTNpxOfUT3QIoXmpZlYL4HbhRuJBZ+Yx54C7uPiUIN9U69XbyXt+Kkynykw2HPaagwuCZxiqCU5sFfLnrVbc3dmZxQcX2yRrs2gmFamzBx+uVbi648H4mb7WuE5UPTBjjA11jRsBjCY0YS2T4Vgfe1RlzlPQkZgjP/bnCCGDqXa3/VZAlZX1nTI51X995bPHBQI0rq2sNDlIXenwiAy1wJSITbSI8DbUx09Cr83xCEaYAE6R6PUfog/tbIUXi0VbrYsCVkAGCK446Wb1vW6q7HR8jrjXNwmXlqN9eLbSVWqdWj7N7fieeTYSrECtUaAjxtUYTIVsH2bfT6FOEM9gMWKffOpFowVzzr3B9bNQLIhnEEwebxBw947i4OcxyVIcEUuumWxoKvcbSPxzJ8v1M3SoBBh4=", // base64 encoded signature "signingAlgorithm": "RSASSA_PKCS1_V1_5_SHA_512" }' ``` ### Sample response ```bash Response theme={"dark"} { "signatureValid": true, "keyId": "62b2c14e-58af-4199-9842-02995c63edf9", "signingAlgorithm": "RSASSA_PKCS1_V1_5_SHA_512" } ``` To verify predigested data, you can pass `"isDigest": true` in the request body. This requires the data to be a base64 encoded digest of the data you wish to verify. It's important that the digest is created using the same hashing algorithm as the signing algorithm. As an example, you would create the digest with `SHA512` if you are using the `RSASSA_PKCS1_V1_5_SHA_512` signing algorithm. ## FAQ No. Infisical's KMS only provides cryptographic services and does not store any encrypted or decrypted data. No. Infisical's KMS will never expose your keys, encrypted or decrypted, to external sources. Currently Infisical supports 4 different key algorithms with different purposes: * `RSA_4096`: For signing and verifying data. * `ECC_NIST_P256`: For signing and verifying data. * `AES-256-GCM`: For encryption and decryption operations. * `AES-128-GCM`: For encryption and decryption operations. We anticipate to further expand our supported algorithms and support cryptographic operations in the future. To sign and verify a digest using the Infisical KMS, you can use the `Sign` and `Verify` endpoints respectively. You will need to pass `"isDigest": true` in the request body to indicate that you are signing or verifying a digest. The data you are signing or verifying will need to be a base64 encoded digest of the data you wish to sign or verify. It's important that the digest is created using the same hashing algorithm as the signing algorithm. As an example, you would create the digest with `SHA512` if you are using the `RSASSA_PKCS1_V1_5_SHA_512` signing algorithm. To create a SHA512 digest of your data, you can use the following command with OpenSSL: ```bash theme={"dark"} echo -n "Hello, World" | openssl dgst -sha512 -binary | openssl base64 ``` ### Sample request for signing a digest ```bash Request theme={"dark"} curl --request POST \ --url https://app.infisical.com/api/v1/kms/keys//sign \ --header 'Content-Type: application/json' \ --data '{ "data": , "signingAlgorithm": "RSASSA_PKCS1_V1_5_SHA_512", "isDigest": true }' ``` ### Sample response for signing a digest ```bash Response theme={"dark"} { "signature": , "keyId": , "signingAlgorithm": "RSASSA_PKCS1_V1_5_SHA_512" } ``` ### Sample request for verifying a digest ```bash Request theme={"dark"} curl --request POST \ --url https://app.infisical.com/api/v1/kms/keys//verify \ --header 'Content-Type: application/json' \ --data '{ "data": , "signature": , "signingAlgorithm": "RSASSA_PKCS1_V1_5_SHA_512", "isDigest": true }' ``` ### Sample response for verifying a digest ```bash Response theme={"dark"} { "signatureValid": true, "keyId": , "signingAlgorithm": "RSASSA_PKCS1_V1_5_SHA_512" } ``` Please note that `RSA PSS` signing algorithms are not supported for digest signing and verification. Please use `RSA PKCS1 V1.5` signing algorithms for digest signing and verification, or `ECDSA` if you're using an ECC key. # General LDAP Source: https://infisical.com/docs/documentation/platform/ldap/general Learn how to log in to Infisical with LDAP. LDAP is a paid feature. If you're using Infisical Cloud, then it is available under the **Enterprise Tier**. If you're self-hosting Infisical, then you should contact [sales@infisical.com](mailto:sales@infisical.com) to purchase an enterprise license to use it. You can configure your organization in Infisical to have members authenticate with the platform via [LDAP](https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol) Prerequisites: * You must have an email address to use LDAP, regardless of whether or not you use that email address to sign in. In Infisical, head to the **Single Sign-On (SSO)** page and select the **General** tab. Select **Connect** for **LDAP**. LDAP SSO Connect Next, input your LDAP server settings. LDAP configuration Here's some guidance for each field: * URL: The LDAP server to connect to such as `ldap://ldap.your-org.com`, `ldaps://ldap.myorg.com:636` (for connection over SSL/TLS), etc. * Bind DN: The distinguished name of object to bind when performing the user search such as `cn=infisical,ou=Users,dc=acme,dc=com`. * Bind Pass: The password to use along with `Bind DN` when performing the user search. * User Search Base / User DN: Base DN under which to perform user search such as `ou=Users,dc=acme,dc=com`. * Unique User Attribute: The attribute to use as the unique identifier of LDAP users such as `sAMAccountName`, `cn`, `uid`, `objectGUID` ... If left blank, defaults to `uidNumber` * User Search Filter (optional): Template used to construct the LDAP user search filter such as `(uid={{username}})`; use literal `{{username}}` to have the given username used in the search. The default is `(uid={{username}})` which is compatible with several common directory schemas. * Group Search Base / Group DN (optional): LDAP search base to use for group membership search such as `ou=Groups,dc=acme,dc=com`. * Group Filter (optional): Template used when constructing the group membership query such as `(&(objectClass=posixGroup)(memberUid={{.Username}}))`. The template can access the following context variables: \[`UserDN`, `UserName`]. The default is `(|(memberUid={{.Username}})(member={{.UserDN}})(uniqueMember={{.UserDN}}))` which is compatible with several common directory schemas. * CA Certificate: The CA certificate to use when verifying the LDAP server certificate. The **Group Search Base / Group DN** and **Group Filter** fields are both required if you wish to sync LDAP groups to Infisical. Once you've filled out the LDAP configuration, you can test that part of the configuration is correct by pressing the **Test Connection** button. Infisical will attempt to bind to the LDAP server using the provided **URL**, **Bind DN**, and **Bind Pass**. If the operation is successful, then Infisical will display a success message; if not, then Infisical will display an error message and provide a fuller error in the server logs. LDAP test connection In order to sync LDAP groups to Infisical, head to the **LDAP Group Mappings** section to define mappings from LDAP groups to groups in Infisical. LDAP group mappings section Group mappings ensure that users who log into Infisical via LDAP are added to or removed from the Infisical group(s) that corresponds to the LDAP group(s) they are a member of. LDAP group mappings table Each group mapping consists of two parts: * LDAP Group CN: The common name of the LDAP group to map. * Infisical Group: The Infisical group to map the LDAP group to. For example, suppose you want to automatically add a user who is part of the LDAP group with CN `Engineers` to the Infisical group `Engineers` when the user sets up their account with Infisical. In this case, you would specify a mapping from the LDAP group with CN `Engineers` to the Infisical group `Engineers`. Now when the user logs into Infisical via LDAP, Infisical will check the LDAP groups that the user is a part of whilst referencing the group mappings you created earlier. Since the user is a member of the LDAP group with CN `Engineers`, they will be added to the Infisical group `Engineers`. In the future, if the user is no longer part of the LDAP group with CN `Engineers`, they will be removed from the Infisical group `Engineers` upon their next login. Prior to defining any group mappings, ensure that you've created the Infisical groups that you want to map the LDAP groups to. You can read more about creating (user) groups in Infisical [here](/documentation/platform/groups). Enabling LDAP allows members in your organization to log into Infisical via LDAP. LDAP toggle # JumpCloud LDAP Source: https://infisical.com/docs/documentation/platform/ldap/jumpcloud Learn how to configure JumpCloud LDAP for authenticating into Infisical. LDAP is a paid feature. If you're using Infisical Cloud, then it is available under the **Enterprise Tier**. If you're self-hosting Infisical, then you should contact [sales@infisical.com](mailto:sales@infisical.com) to purchase an enterprise license to use it. Prerequisites: * You must have an email address to use LDAP, regardless of whether or not you use that email address to sign in. In JumpCloud, head to USER MANAGEMENT > Users and create a new user via the **Manual user entry** option. This user will be used as a privileged service account to facilitate Infisical's ability to bind/search the LDAP directory. When creating the user, input their **First Name**, **Last Name**, **Username** (required), **Company Email** (required), and **Description**. Also, create a password for the user. Next, under User Security Settings and Permissions > Permission Settings, check the box next to **Enable as LDAP Bind DN**. LDAP JumpCloud In Infisical, head to the **Single Sign-On (SSO)** page and select the **General** tab. Select **Connect** for **LDAP**. LDAP SSO Connect Next, input your JumpCloud LDAP server settings. LDAP configuration Here's some guidance for each field: * URL: The LDAP server to connect to (`ldaps://ldap.jumpcloud.com:636`). * Bind DN: The distinguished name of object to bind when performing the user search (`uid=,ou=Users,o=,dc=jumpcloud,dc=com`). * Bind Pass: The password to use along with `Bind DN` when performing the user search. * User Search Base / User DN: Base DN under which to perform user search (`ou=Users,o=,dc=jumpcloud,dc=com`). * Unique User Attribute: The attribute to use as the unique identifier of LDAP users such as `sAMAccountName`, `cn`, `uid`, `objectGUID` ... If left blank, defaults to `uidNumber` * User Search Filter (optional): Template used to construct the LDAP user search filter (`(uid={{username}})`). * Group Search Base / Group DN (optional): LDAP search base to use for group membership search (`ou=Users,o=,dc=jumpcloud,dc=com`). * Group Filter (optional): Template used when constructing the group membership query (`(&(objectClass=groupOfNames)(member=uid={{.Username}},ou=Users,o=,dc=jumpcloud,dc=com))`) * CA Certificate: The CA certificate to use when verifying the LDAP server certificate (instructions to obtain the certificate for JumpCloud [here](https://jumpcloud.com/support/connect-to-ldap-with-tls-ssl)). When filling out the **Bind DN** and **Bind Pass** fields, refer to the username and password of the user created in Step 1. Also, for the **Bind DN** and **Search Base / User DN** fields, you'll want to use the organization ID that appears in your LDAP instance **ORG DN**. Once you've filled out the LDAP configuration, you can test that part of the configuration is correct by pressing the **Test Connection** button. Infisical will attempt to bind to the LDAP server using the provided **URL**, **Bind DN**, and **Bind Pass**. If the operation is successful, then Infisical will display a success message; if not, then Infisical will display an error message and provide a fuller error in the server logs. LDAP test connection In order to sync LDAP groups to Infisical, head to the **LDAP Group Mappings** section to define mappings from LDAP groups to groups in Infisical. LDAP group mappings section Group mappings ensure that users who log into Infisical via LDAP are added to or removed from the Infisical group(s) that corresponds to the LDAP group(s) they are a member of. LDAP group mappings table Each group mapping consists of two parts: * LDAP Group CN: The common name of the LDAP group to map. * Infisical Group: The Infisical group to map the LDAP group to. For example, suppose you want to automatically add a user who is part of the LDAP group with CN `Engineers` to the Infisical group `Engineers` when the user sets up their account with Infisical. In this case, you would specify a mapping from the LDAP group with CN `Engineers` to the Infisical group `Engineers`. Now when the user logs into Infisical via LDAP, Infisical will check the LDAP groups that the user is a part of whilst referencing the group mappings you created earlier. Since the user is a member of the LDAP group with CN `Engineers`, they will be added to the Infisical group `Engineers`. In the future, if the user is no longer part of the LDAP group with CN `Engineers`, they will be removed from the Infisical group `Engineers` upon their next login. Prior to defining any group mappings, ensure that you've created the Infisical groups that you want to map the LDAP groups to. You can read more about creating (user) groups in Infisical [here](/documentation/platform/groups). Enabling LDAP allows members in your organization to log into Infisical via LDAP. LDAP toggle Resources: * [JumpCloud Cloud LDAP Guide](https://jumpcloud.com/support/use-cloud-ldap) # LDAP Overview Source: https://infisical.com/docs/documentation/platform/ldap/overview Learn how to authenticate into Infisical with LDAP. LDAP is a paid feature. If you're using Infisical Cloud, then it is available under the **Enterprise Tier**. If you're self-hosting Infisical, then you should contact [sales@infisical.com](mailto:sales@infisical.com) to purchase an enterprise license to use it. You can configure your organization in Infisical to have members authenticate with the platform via [LDAP](https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol). LDAP providers: * Active Directory * [JumpCloud LDAP](/documentation/platform/ldap/jumpcloud) * AWS Directory Service * Foxpass Read the general instructions for configuring LDAP [here](/documentation/platform/ldap/general). If the documentation for your required identity provider is not shown in the list above, please reach out to [team@infisical.com](mailto:team@infisical.com) for assistance. ## FAQ By default, Infisical Cloud is configured to not trust emails from external identity providers to prevent any malicious account takeover attempts via email spoofing. Accordingly, Infisical creates a new user for anyone provisioned through an external identity provider and requires an additional email verification step upon their first login. If you're running a self-hosted instance of Infisical and would like it to trust emails from external identity providers, you can configure this behavior in the Server Admin Console. # Multi-factor Authentication Source: https://infisical.com/docs/documentation/platform/mfa Learn how to secure your Infisical account with MFA. MFA requires users to provide multiple forms of identification to access their account. ## Email 2FA If 2-factor authentication is enabled in the Personal settings page, email will be used for MFA by default. Email-based MFA ## Mobile Authenticator 2FA You can use any mobile authenticator app (Authy, Google Authenticator, Duo, etc.) to secure your account. After registration with an authenticator, select **Mobile Authenticator** as your 2FA method. Authenticator-based MFA ## Entra ID / Azure AD MFA Before proceeding make sure you've enabled [SAML SSO for Entra ID / Azure AD](./sso/azure). We also encourage you to have your team download and setup the [Microsoft Authenticator App](https://www.microsoft.com/en-us/security/mobile-authenticator-app) prior to enabling MFA. Entra Infisical
    app conditional
    access create policy require MFA and review
    policy By default all users except the configuring admin will be setup to require MFA. Microsoft encourages keeping at least one admin excluded from MFA to prevent accidental lockout. enable policy and
    confirm mfa login If users have not setup MFA for Entra / Azure they will be prompted to do so at this time. # Organizations Source: https://infisical.com/docs/documentation/platform/organization Learn more and understand the concept of Infisical organizations. Infisical is structured around organizations and [projects](/documentation/platform/project). ## Organizations An organization represents a company or high-level entity (e.g. Acme Corp) and acts as the root scope for managing members and machine identities, projects, usage and billing, global integrations and configuration (such as single sign-on, provisioning, etc), and more. Within an organization, you can create any number of projects—each tied to a specific product type such as Secrets Management or PKI that determines the functionality available. organization ## Projects The *Projects* tab shows a list of projects that you have access to. If you're an organization admin, you also have the option to view *All Projects*—a complete view of every project within the organization, including those you are not currently a member of— and gain access to any project. Admins can gain access to any project in the organization by opening the options menu (⋮) next to a project and selecting Access. This will add you to the project as an admin and allow full visibility and control. organization projects ## Roles and Access Control The *Access Control* tab lets you view and manage roles and permissions for users, machine identities, and groups across your organization. Users are invited to an organization and assigned organization-level roles such as `Admin` or `Member`. You can also define [custom roles](/documentation/platform/access-controls/role-based-access-controls#creating-custom-roles) at the organization level to fit your permission model. organization users Infisical supports [user identities](/documentation/platform/identities/user-identities) (representing people) and [machine identities](/documentation/platform/identities/machine-identities) (representing services, CI/CD pipelines, or agents). The same roles and permissions can be applied to either type of identity. To manage access at scale, Infisical also supports [user groups](/documentation/platform/groups) — roles assigned to a group apply to all of its members automatically. Note that Infisical distinguishes between organization-level and project-level access control: * [Organization-level access control](/documentation/platform/access-controls/role-based-access-controls#organization-level-access-controls): Roles and permissions governing access to organization-level resources and controls such as billing, member management, and identity provider configuration. * [Project-level access control](/documentation/platform/access-controls/role-based-access-controls#project-level-access-controls): Roles and permissions governing access to resources and workflows within a specific project (e.g., secrets, certificates, SSH hosts). organization roles To learn more about how permissions work in detail, refer to the [access control documentation](/documentation/platform/access-controls/overview). Infisical provides immutable roles such as `admin` and `member` for free. If you're using Infisical Cloud, the ability to create custom roles is available under the **Pro Tier**. If you're self-hosting Infisical, then you should contact [sales@infisical.com](mailto:sales@infisical.com) to purchase an enterprise license to use it. ## Usage & Billing The *Usage & Billing* tab provides an overview of your organization's billing information and platform usage. Infisical calculates usage at the organization level—aggregating activity across all projects and product types (e.g., Secrets Management, SSH, PKI). From this tab, you can track usage, view billing details, and manage your Infisical Cloud subscription. organization billing ## Audit Logs Infisical provides a unified view of [audit logs](/documentation/platform/audit-logs) at the organization level. All platform activity—including secret access, certificate issuance, platform logins across the organization —is recorded and searchable in a central log view. Audit logs are also viewable at the project level, where they are scoped to show only events relevant to that specific project. This allows project administrators to monitor activity and investigate changes without requiring organization-wide access. ## App Connections Infisical supports [app connections](/integrations/app-connections/overview) — integrations configured at the organization level with third-party platforms such as AWS, GCP, GitHub, and many others. Once configured, these connections can be reused across multiple projects as part of any feature that requires third-party integrations—such as [secret syncing](/integrations/secret-syncs/overview) or [dynamic credential generation](/documentation/platform/dynamic-secrets/overview). organization app connections To learn more, refer to the [app connections documentation](/integrations/app-connections/overview). ## Organization Settings The *Organization Settings* tab lets you configure global behavior and security controls for the organization. Key configuration areas include: * General: Manage the organization’s name, slug, and default role for newly invited members. * Single Sign-On (SSO): Enable [SAML](/documentation/platform/sso/overview), [LDAP](/documentation/platform/ldap/overview), or [OIDC-based](/documentation/platform/sso/general-oidc/overview) authentication for user login. * Provisioning: Enable [SCIM](/documentation/platform/scim/overview) to automatically provision and deprovision users and groups from an identity provider. * Security Policies: Enforce MFA and configure session duration limits. * Encryption: Integrate with external KMS systems or bring your own encryption keys (BYOK). * [Audit Log Streaming](/documentation/platform/audit-log-streams/audit-log-streams): Forward audit events to third-party logging tools like SIEMs or cloud storage. * Workflow Integrations: Trigger [Slack](/documentation/platform/workflow-integrations/slack-integration) or [Microsoft Teams](/documentation/platform/workflow-integrations/microsoft-teams-integration) notifications for events like access requests. * [Project Templates](/documentation/platform/project-templates): Define default environments, roles, and settings to standardize project creation. * KMIP (Enterprise): Connect to KMIP-compatible HSMs for hardware-backed key storage and operations. organization settings # Architecture Source: https://infisical.com/docs/documentation/platform/pam/architecture Learn about the architecture, components, and security model of Infisical PAM. Infisical PAM utilizes a secure, proxy-based architecture designed to provide access to private resources without exposing them directly to the internet. This system relies on a combination of the Infisical CLI, a Relay server, and a self-hosted Gateway. For more information on Gateways, refer to the [Gateway Overview](/documentation/platform/gateways/overview). ## Core Components The architecture consists of three main components working in unison: The client-side interface used to initiate access requests. It creates a local listener that forwards traffic securely to the Gateway. A lightweight service deployed within your private network (e.g., VPC, on-prem). It acts as a proxy, intercepting traffic to enforce policies and record sessions before forwarding requests to the target resource. The actual infrastructure being accessed, such as a PostgreSQL database, a Linux server, or a web application. ## Access Flow ```mermaid theme={"dark"} graph LR subgraph Client ["User Environment"] CLI["Infisical CLI"] end Relay["Relay Server"] subgraph Network ["Private Network (VPC)"] Gateway["Infisical Gateway"] DB[("Target Resource (Database/Server)")] end CLI <-->|Encrypted Tunnel| Relay Relay <-->|Reverse Tunnel| Gateway Gateway <-->|Native Protocol| DB ``` When a user accesses a resource (e.g., via `infisical access`), the following workflow occurs: 1. **Connection Initiation**: The Infisical CLI initiates a connection to the Relay server. 2. **Tunnel Establishment**: The Relay facilitates an end-to-end encrypted tunnel between the CLI and the Gateway. 3. **Proxy & Credential Injection**: The Gateway authenticates the request and connects to the target resource on the user's behalf. It automatically injects the necessary credentials (e.g., database passwords, SSH keys), ensuring the user never directly handles sensitive secrets. 4. **Traffic Forwarding**: Traffic flows securely from the user's machine, through the Relay, to the Gateway, and finally to the resource. ## Session Recording & Auditing Session Logging A key feature of the Gateway is its ability to act as a "middleman" for all session traffic. * **Interception**: Because the Gateway sits between the secure tunnel and the target resource, it intercepts all data flowing through the connection. * **Logging**: This traffic is logged as part of [Session Recording](/documentation/platform/pam/product-reference/session-recording). The Gateway temporarily stores encrypted session logs locally. * **Upload**: Once the session concludes, the logs are securely uploaded to the Infisical platform for storage and review. ## Security Architecture The PAM security model allows you to maintain a zero-trust environment while enabling convenient access. ### End-to-End Encryption The connection between the Infisical CLI (client) and the Gateway is end-to-end encrypted. The Relay server acts solely as a router for encrypted packets and **cannot decrypt or inspect** the traffic passing through it. ### Network Security The Gateway uses **SSH reverse tunnels** to connect to the Relay. This design offers significant security benefits: * **No Inbound Ports**: You do not need to open any inbound firewall ports (like 22 or 5432) to the internet. * **Outbound-Only**: The Gateway only requires outbound connectivity to the Relay server and Infisical API. For a deep dive into the underlying cryptography, certificate management, and isolation guarantees, refer to the [Gateway Security Architecture](/documentation/platform/gateways/security). ### Deployment For instructions on setting up the necessary infrastructure, see the [Gateway Deployment Guide](/documentation/platform/gateways/gateway-deployment). # PAM Account Source: https://infisical.com/docs/documentation/platform/pam/getting-started/accounts Learn how to create and manage accounts in PAM to control access to resources like databases and servers. An **Account** contains the credentials (such as a username and password) used to connect to a [Resource](/documentation/platform/pam/getting-started/resources). ## Relationship to Resources Accounts belong to Resources. A single Resource can have multiple Accounts associated with it, each with different permission levels. For example, your database would normally have multiple accounts. You might have a superuser account for admins, a standard read/write account for applications, and a read-only account for reporting. In PAM, these are represented as: * **Resource**: `Production Database` (PostgreSQL) * **Account 1**: `postgres` (Superuser) * **Account 2**: `app_user` (Read/Write) * **Account 3**: `analytics` (Read-only) When a user requests access in PAM, they request access to a specific **Account** on a **Resource**. ## Creating an Account **Prerequisite**: You must have at least one [Resource](/documentation/platform/pam/getting-started/resources) created before adding accounts. To add an account, navigate to the **Accounts** tab in your PAM project and click **Add Account**. Add Account Button Next, select the **Resource** that this account belongs to. Select Resource After selecting a resource, provide the credentials (username, password, etc.) for this account. The required fields vary depending on the resource type. For example, for a Linux server, you would enter the username and the corresponding password or SSH key. Create Account Clicking **Create Account** will trigger a validation check. Infisical will attempt to connect to the resource using the provided credentials to verify they are valid. ## Automated Credential Rotation Infisical supports automated credential rotation for some accounts on select resources, allowing you to automatically change passwords at set intervals to enhance security. To learn more about how to configure this, please refer to the [Credential Rotation guide](/documentation/platform/pam/product-reference/credential-rotation). # PAM Resource Source: https://infisical.com/docs/documentation/platform/pam/getting-started/resources Learn how to add and configure resources like databases and servers, and set up automated credential rotation. A resource represents a target system, such as a database, server, or application, that you want to manage access to. Some examples of resources are: * PostgreSQL Database * MCP Server * Linux Server * Web Application ## Prerequisites Before you can create a resource, you must have an **Infisical Gateway** deployed that is able to reach the target resource over the network. The Gateway acts as a secure bridge, allowing Infisical to reach your private infrastructure without exposing it to the public internet. When creating a resource, you will be asked to specify which Gateway should be used to connect to it. [Read the Gateway Deployment Guide](/documentation/platform/gateways/gateway-deployment) ## Creating a Resource To add a resource, navigate to the **Resources** tab in your PAM project and click **Add Resource**. Add Resource Button Next, select the type of resource you want to add. Select Resource Type After selecting a resource type, provide the necessary connection details. The required fields vary depending on the resource type. **Important**: You must select the **Gateway** that has network access to this resource. In this PostgreSQL example, you provide details such as host, port, gateway, and database name. Create Resource Clicking **Create Resource** will trigger a connection test from the selected Gateway to your target resource. If the connection fails, an error message will be displayed to help you troubleshoot (usually indicating a network firewall issue between the Gateway and the Resource). ## Automated Credential Rotation Some resources, such as PostgreSQL, support automated credential rotation to enhance your security posture. This feature requires configuring a privileged "Rotation Account" on the resource. To learn more about how to configure this, please refer to the [Credential Rotation guide](/documentation/platform/pam/product-reference/credential-rotation). # Setup Source: https://infisical.com/docs/documentation/platform/pam/getting-started/setup This guide provides a step-by-step walkthrough for configuring Infisical's Privileged Access Management (PAM). Learn how to deploy a gateway, define resources, and grant your team secure, audited access to critical infrastructure. Infisical's Privileged Access Management (PAM) solution enables you to provide developers with secure, just-in-time access to your critical infrastructure, such as databases, servers, and web applications. Instead of sharing static credentials, your team can request temporary access through Infisical, which is then brokered through a secure gateway with full auditing and session recording. Getting started involves a few key components: * **Gateways:** A lightweight service you deploy in your own infrastructure to act as a secure entry point to your private resources. * **Resources:** The specific systems you want to manage access to (e.g., a PostgreSQL database or an SSH server). * **Accounts:** The privileged credentials (e.g., a database user or an SSH user) that Infisical uses to connect to a resource on behalf of a user. The following steps will guide you through the entire setup process, from deploying your first gateway to establishing a secure connection. Before you can manage any resources, you must deploy an **Infisical Gateway** within your infrastructure. This component is responsible for brokering connections to your private resources. [Read the Gateway Deployment Guide](/documentation/platform/gateways/gateway-deployment) Once the Gateway is active, define a **Resource** in Infisical (e.g., "Production Database"). You will link this resource to your deployed Gateway so Infisical knows how to reach it. [Learn about Resources](/documentation/platform/pam/getting-started/resources) Add **Accounts** to your Resource (e.g., `postgres` or `read_only_user`). These represent the actual PAM users or privileged identities that are utilized when a user connects. [Learn about Accounts](/documentation/platform/pam/getting-started/accounts) Users can now use the Infisical CLI to securely connect to the resource using the defined accounts, with full auditing and session recording enabled. # Overview Source: https://infisical.com/docs/documentation/platform/pam/overview Manage and secure access to critical infrastructure like databases and servers with policy-based controls and approvals. Infisical Privileged Access Management (PAM) provides a centralized way to manage and secure access to your critical infrastructure. It allows you to enforce fine-grained, policy-based controls over resources like databases, servers, and more, ensuring that only authorized users can access sensitive systems, and only when they need to. ## The PAM Workflow At its core, Infisical PAM is designed to decouple **user identity** from **infrastructure credentials**. Instead of sharing static passwords or SSH keys, users authenticate with their SSO identity, and Infisical handles the rest. Here is how a typical access lifecycle looks: 1. **Discovery**: A user logs into Infisical and sees a catalog of resources (databases, servers) and accounts they are allowed to access. 2. **Connection**: The user selects a resource and an account (e.g., "Production DB" as `read_only`). They initiate the connection via the Infisical CLI. 3. **Credential Injection**: Infisical validates the request. If allowed, it establishes a secure tunnel and automatically injects the credentials for the target account. **The user never sees the underlying password or key.** 4. **Monitoring**: The session is established. All traffic is intercepted, logged, and recorded for audit purposes. ## Core Concepts To successfully implement Infisical PAM, it is essential to understand the relationship between the following components: A lightweight service deployed in your network that acts as a secure bridge to your private infrastructure. The specific target you are protecting (e.g., a PostgreSQL database or an Ubuntu server). The specific identity on the Resource that the user is trying to access. One Resource can have multiple Accounts. ### Relationship Model The hierarchy is structured as follows: ```mermaid theme={"dark"} graph TD GW[Gateway] --> |Provides Access| DB[Resource: Production DB] GW[Gateway] --> |Provides Access| SRV[Resource: Linux Server] DB --> A1[Account: admin] DB --> A2[Account: readonly] SRV --> A3[Account: ubuntu] ``` 1. **Gateway**: Deployed once per network/VPC. It provides connectivity to all resources in that environment. 2. **Resource**: Configured within Infisical. It points to a specific IP/Host accessible by the Gateway. 3. **Account**: Defined under a Resource. Users request access to a specific *Account* on a *Resource*. ## Network Architecture Infisical PAM uses a secure proxy-based architecture to connect users to resources without direct network exposure. When a user accesses a resource, their connection is routed securely through a Relay to your self-hosted Gateway, which then connects to the target resource. This ensures zero-trust access without exposing your infrastructure to the public internet. For a deep dive into the technical architecture and security model, see [Architecture](/documentation/platform/pam/architecture). ## Core Capabilities * **[Auditing](/documentation/platform/pam/product-reference/auditing)**: Track and review a comprehensive log of all user actions and system events. * **[Session Recording](/documentation/platform/pam/product-reference/session-recording)**: Record and playback user sessions for security reviews, compliance, and troubleshooting. * **[Automated Credential Rotation](/documentation/platform/pam/product-reference/credential-rotation)**: Automatically rotate credentials for supported resources to minimize the risk of compromised credentials. # Auditing Source: https://infisical.com/docs/documentation/platform/pam/product-reference/auditing Learn how Infisical audits all actions across your PAM project. ## What's Audited Infisical logs a wide range of actions to provide a complete audit trail for your PAM project. These actions include: * Session Start and End * Fetching session credentials * Creating, updating, or deleting resources, accounts, folders, and sessions Please note: Audit logs track metadata about sessions (e.g., start/end times), but not the specific commands executed *within* them. For detailed in-session activity, check out [Session Recording](/documentation/platform/pam/product-reference/session-recording). ## Viewing Audit Logs You can view, search, and filter all events from the **Audit Logs** page within your PAM project. Audit Logs # Credential Rotation Source: https://infisical.com/docs/documentation/platform/pam/product-reference/credential-rotation Learn how to automate credential rotation for your PAM resources. Automated Credential Rotation enhances your security posture by automatically changing the passwords of your accounts at set intervals. This minimizes the risk of compromised credentials by ensuring that even if a password is leaked, it remains valid only for a short period. ## How it Works When rotation is enabled, Infisical's Gateway connects to the target resource using a privileged "Rotation Account". It then executes the necessary commands to change the password for the target user account to a new, cryptographically secure random value. ## Configuration Setting up automated rotation requires a two-step configuration: first at the Resource level, and then at the individual Account level. A **Rotation Account** is a master or privileged account that has the necessary permissions to change the passwords of other users on the target system. When creating or editing a [Resource](/documentation/platform/pam/getting-started/resources), you must provide the credentials for this privileged account. *Example: For a PostgreSQL database, this would typically be the `postgres` superuser or another role with `ALTER ROLE` privileges.* Credential Rotation Account Once the resource has a rotation account configured, you can enable rotation for individual [Accounts](/documentation/platform/pam/getting-started/accounts) that belong to that resource. In the account settings: 1. Toggle **Enable Rotation**. 2. Set the **Rotation Interval** (e.g., every 7 days, 30 days). Rotate Credentials Account ## Supported Resources Automated rotation is currently supported for the following resource types: * **PostgreSQL**: Requires a user with `ALTER ROLE` permissions. We are constantly adding support for more resource types. # Session Recording Source: https://infisical.com/docs/documentation/platform/pam/product-reference/session-recording Learn how Infisical records and stores session activity for auditing and monitoring. Infisical PAM provides robust session recording capabilities to help you audit and monitor user activity across your infrastructure. ## How It Works When a user initiates a session by accessing an account, a recording of the session begins. The Gateway securely caches all recording data in temporary encrypted files on its local system. Once the session concludes, the gateway transmits the complete recording to the Infisical platform for long-term, centralized storage. This asynchronous process ensures that sessions remain operational even if the connection to the Infisical platform is temporarily lost. After the upload is complete, administrators can search and review the session logs on the Infisical platform. ## What's Captured The content captured during a session depends on the type of resource being accessed. Infisical captures all queries executed and their corresponding responses, including timestamps for each action. Infisical captures all commands executed and their corresponding responses, including timestamps for each action. ## Viewing Recordings To review session recordings: 1. Navigate to the **Sessions** page in your PAM project. 2. Click on a session from the list to view its details. PAM Sessions The session details page provides key information, including the complete session logs, connection status, the user who initiated it, and more. PAM Individual Session ### Searching Logs You can use the search bar to quickly find relevant information: **Sessions page:** Search across all session logs to locate specific queries or outputs. PAM Sessions Search **Individual session page:** Search within that specific session's logs to pinpoint activity. PAM Individual Session Search ## FAQ Yes. All session recordings are encrypted at rest by default, ensuring your data is always secure. Currently, Infisical uses an asynchronous approach where the gateway records the entire session locally before uploading it. This design makes your PAM sessions more resilient, as they don't depend on a constant, active connection to the Infisical platform. We may introduce live streaming capabilities in a future release. # Point-in-Time Recovery Source: https://infisical.com/docs/documentation/platform/pit-recovery Learn how to rollback secrets and configurations to any snapshot with Infisical. Point-in-Time Recovery is a paid feature. If you're using Infisical Cloud, then it is available under the **Pro Tier**. If you're self-hosting Infisical, then you should contact [sales@infisical.com](mailto:sales@infisical.com) to purchase an enterprise license to use it. Infisical's point-in-time recovery functionality allows secrets to be rolled back to any point in time for any given [folder](./folder) or [environment](/documentation/platform/project#project-environments). ## Understanding Commits Similar to Git, a commit in Infisical represents a snapshot of changes made to your project's resources at a specific point in time. Each commit is scoped to an environment and [folder](./folder) within it. Unlike the legacy snapshot system, the new commits interface provides granular tracking of individual changes, allowing you to see exactly what was modified, added, or removed in each commit. ### Accessing Commits From your secrets management interface, you can access the commits functionality by clicking the **Commits Button**. This button is located in the top-right area of your secrets view and shows the number of commits for the current folder (e.g., "4 Commits"). Commits Button ### Commits List View The commits page displays a comprehensive chronological history of all changes made to your environment and folders: Commits List View * **Chronological Sorting**: Commits are grouped by date * **Commit Information**: Each commit shows: * Commit message * Author information * Relative timestamp * Unique commit hash identifier * **Search Functionality**: Use the search bar to quickly find specific commits * **Sorting Options**: Sort commits by various criteria using the sort controls ### Detailed Commit Inspection Clicking on any commit from the list opens a detailed view showing the list of changes made in that commit. Detailed Commit Inspection #### Change Categories The commit changes details can be grouped into the following categories: **Folder Changes** * Shows folder additions, modifications, or deletions * Displays the folder properties changes in JSON format, including: * Folder name * Folder description **Secret Changes** * Lists all secrets that were added, updated, or removed * Shows the complete secret configuration including: * Secret key and value * Comments, tags and metadata * Encoding settings (e.g., skipMultilineEncoding) * Values are displayed with appropriate masking for security **Visual Indicators** * Green "+" indicators show additions * Red "-" indicators show deletions * Modified content shows both old and new states ### Restoration Options Each commit provides two distinct restoration methods accessible via the **Restore Options** dropdown: Restore Options #### Revert changes This option provides surgical precision for undoing specific modifications: * **Granular Control**: Reverts only the specific changes introduced in that individual commit * **Selective Restoration**: Preserves all other changes made after the commit * **Targeted Undo**: Perfect for reversing a specific problematic change without affecting other work * **Minimal Impact**: Only affects the resources that were modified in that particular commit * **Use Case**: Ideal when you want to undo a specific change while keeping all other modifications intact #### Roll back to this commit This option performs a complete restoration to the selected point in time: Rollback * **Complete State Restoration**: Returns the entire folder to its exact state at the time of this commit * **Restore All Child Folders**: If enabled, it'll also restore all nested folders to their exact state at the time of this commit. * **Destructive Operation**: Discards ALL changes made after the selected commit * **New Commit Creation**: Creates a new commit representing this rollback operation * **Use Case**: Ideal when you want to completely undo a series of changes and return to a known good state **Warning**: This operation will undo all modifications made after the selected commit, which may include multiple secrets and configuration changes. The snapshots interface is deprecated and will be removed in a future version. Please use the new Commits interface for more granular point-in-time recovery operations. ## Snapshots Similar to Git, a commit (also known as snapshot) in Infisical is the state of your project's secrets at a specific point in time scoped to an environment and [folder](./folder) within it. To view a list of snapshots for the current folder, press the **Commits** button. PIT commits This opens up a sidebar from which you can select to view a particular snapshot: PIT snapshots ## Rolling back After pressing on a snapshot from the sidebar, you can view it and roll back the state of the folder to that point in time by pressing the **Rollback** button. PIT snapshot Rolling back secrets to a past snapshot creates a snapshot at the top of the stack and updates secret versions. Rollbacks are localized to not affect other folders within the same environment. This means each [folder](./folder) maintains its own independent history of changes, offering precise and isolated control over rollback actions. Put differently, every [folder](./folder) possesses a distinct and separate timeline, providing granular control when managing your secrets. # Alerting Source: https://infisical.com/docs/documentation/platform/pki/alerting Learn how to set up alerting for expiring certificates with Infisical ## Concept In order to ensure that your certificates are always up-to-date and not expired, you can set up alerting in Infisical for expiring CA and leaf certificates based on customizable filters. ## Guide to Creating an Alert To create an alert, head to your Certificate Management Project > Alerting and press **Create Certificate Alert**. pki alerting pki alerting modal Here's some guidance for each field in the alert configuration sequence: * Alert Type: The type of alert to create such as **Certificate Expiration**. * Alert Name: A slug-friendly name for the alert such as `tls-expiry-alert`. * Description: An optional description for the alert. * Alert Before: The time before certificate expiration to trigger the alert such as 30 days denoted by `30d`. * Filters: A list of filters that determine which certificates the alert applies to. Each row includes a **Field**, **Operator**, and **Value** to match against. For example, you can filter for certificates with a common name containing `example.com` by setting the field to **Common Name**, the operator to **Contains**, and the value to `example.com`. * Channels / Email Recipients: A list of email addresses to notify when the alert triggers. # ACME-compatible CA Source: https://infisical.com/docs/documentation/platform/pki/ca/acme-ca Learn how to connect Infisical to an ACME-compatible CA to issue certificates. ## Concept Infisical can connect to any upstream ACME-compatible CA (e.g. Lets's Encrypt, DigiCert, etc.) supporting the [ACME protocol](https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment) to issue certificates back to your end-entities. This integration uses the [DNS-01 challenge](https://letsencrypt.org/docs/challenge-types/#dns-01-challenge) method as part of the ACME domain validation challenge workflow for a requested certificate. The upstream ACME-compatible CA integration lets you connect Infisical to providers by specifying their **ACME Directory URL** such as: * [Let's Encrypt](/documentation/platform/pki/ca/lets-encrypt): `https://acme-v02.api.letsencrypt.org/directory`. * [DigiCert](/documentation/platform/pki/ca/digicert): `https://acme.digicert.com/v2/acme/directory`. * Google GTS: `https://dv.acme-v02.api.pki.goog/directory`. * Buypass: `https://api.buypass.com/acme/directory`. * ZeroSSL: `https://acme.zerossl.com/v2/DV90`. * SSL.com: `https://acme.ssl.com/sslcom-dv-rsa`. When Infisical requests a certificate from an ACME-compatible CA, it creates a TXT record at `_acme-challenge.{your-domain}` in your configured DNS provider (e.g. Route53, Cloudflare, DNS Made Easy, etc.); this TXT record contains the challenge token issued by the ACME-compatible CA to validate domain control for the requested certificate. The ACME provider checks for the existence of this TXT record to verify domain control before issuing the certificate back to Infisical. After validation completes successfully, Infisical automatically removes the TXT record from your DNS provider.
```mermaid theme={"dark"} graph TD A[ACME-compatible CA] <-->|ACME v2 Protocol| B[Infisical] B -->|Creates TXT Records
via DNS Provider| C[DNS Validation] B -->|Manages Certificates| D[End-Entities] ```
We recommend reading about [ACME protocol](https://tools.ietf.org/html/rfc8555) and [DNS-01 challenges](https://letsencrypt.org/docs/challenge-types/#dns-01-challenge) for a fuller understanding of the underlying workflow. ## Workflow A typical workflow for using Infisical with an external ACME-compatible CA consists of the following steps: 1. Setting up your DNS provider (e.g. Route53, Cloudflare, etc.) with appropriate DNS permissions. 2. Creating an [App Connection](/integrations/app-connections/overview) in Infisical to store credentials for Infisical to connect to your DNS provider and create/remove DNS records as part of the DNS-01 challenge. 3. Registering an [External CA](/documentation/platform/pki/ca/external-ca) in Infisical with the ACME type and inputting required configuration including the **ACME Directory URL** of the upstream ACME-compatible CA and the **App Connection** for your DNS provider. Once this is complete, you can create a [certificate profile](/documentation/platform/pki/certificates/profiles) linked to the External CA proceed to request a certificate against it. ## Guide to Connecting Infisical to an ACME-compatible CA In the following steps, we explore how to connect Infisical to an ACME-compatible CA. Before registering an ACME-compatible CA with Infisical, you need to set up an [App Connection](/integrations/app-connections/overview) with the appropriate permissions for Infisical to perform the DNS-01 challenge with your DNS provider. If you don’t see a specific DNS provider listed below or need a dedicated one, please reach out to [sales@infisical.com](mailto:sales@infisical.com) and we’ll help get that enabled for you. 1. Navigate to your Certificate Management Project > App Connections and create a new AWS connection. 2. Ensure your AWS connection has the following minimum permissions for Route53 DNS validation: ```json theme={"dark"} { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "route53:GetChange", "Resource": "arn:aws:route53:::change/*" }, { "Effect": "Allow", "Action": "route53:ListHostedZonesByName", "Resource": "*" }, { "Effect": "Allow", "Action": [ "route53:ListResourceRecordSets" ], "Resource": [ "arn:aws:route53:::hostedzone/YOUR_HOSTED_ZONE_ID" ] }, { "Effect": "Allow", "Action": [ "route53:ChangeResourceRecordSets" ], "Resource": [ "arn:aws:route53:::hostedzone/YOUR_HOSTED_ZONE_ID" ], "Condition": { "ForAllValues:StringEquals": { "route53:ChangeResourceRecordSetsRecordTypes": [ "TXT" ] } } } ] } ``` Replace `YOUR_HOSTED_ZONE_ID` with your actual Route53 hosted zone ID. For detailed instructions on setting up an AWS connection, see the [AWS Connection](/integrations/app-connections/aws) documentation. 1. Navigate to your Certificate Management Project > App Connections and create a new Cloudflare connection. 2. Ensure your Cloudflare token has the following minimum permissions for DNS validation: ``` Account:Account Settings:Read Zone:DNS:Edit ``` For detailed instructions on setting up a Cloudflare connection, see the [Cloudflare Connection](/integrations/app-connections/cloudflare) documentation. Navigate to your Certificate Management Project > App Connections and create a new DNS Made Easy connection. For detailed instructions on setting up a DNS Made Easy connection, see the [DNS Made Easy Connection](/integrations/app-connections/dns-made-easy) documentation. To register an ACME-compatible CA, head to your Certificate Management Project > Certificate Authorities > External Certificate Authorities and press **Create CA**. pki register external ca Here, set the **CA Type** to **ACME** and fill out details for it. pki register external ca details Here's some guidance for each field: * Name: A slug-friendly name for the ACME-compatible CA such as `lets-encrypt-production`. * DNS App Connection: The App Connection from Step 1 used for Infisical to connect to your DNS provider and create/remove DNS records as part of the DNS-01 challenge in ACME. * Zone / Zone ID: Enter the Zone / Zone ID for the domain(s) you'll be requesting certificates for. * Directory URL: Enter the **ACME Directory URL** for your desired upstream ACME-compatible CA such as `https://acme-v02.api.letsencrypt.org/directory` for Let's Encrypt. * Account Email: The email address to associate with your ACME account. This email will receive important notifications about your certificates. * EAB Key Identifier (KID): (Optional) The Key Identifier (KID) provided by your ACME CA for External Account Binding (EAB). This is required by some ACME providers (e.g., ZeroSSL, DigiCert) to link your ACME account to an external account you've pre-registered with them. * EAB HMAC Key: (Optional) The HMAC Key provided by your ACME CA for External Account Binding (EAB). This key is used in conjunction with the KID to prove ownership of the external account during ACME account registration. Finally, press **Create** to register the ACME-compatible CA with Infisical. Great! You’ve successfully registered an external ACME-compatible CA with Infisical. Now check out the [Certificates](/documentation/platform/pki/certificates/overview) section to learn more about how to issue X.509 certificates using the ACME-compatible CA. To register an ACME CA with Infisical using the API, make a request to the [Create External CA](https://infisical.com/docs/api-reference/endpoints/certificate-authorities/acme/create) endpoint: ### Sample request ```bash Request theme={"dark"} curl 'https://app.infisical.com/api/v1/cert-manager/ca/acme' \ -H 'Authorization: Bearer ' \ -H 'Content-Type: application/json' \ --data-raw '{ "projectId": "0fccb6ee-1381-4ff1-8d5f-0cb93c6cc4d6", "name": "lets-encrypt-production", "type": "acme", "status": "active", "enableDirectIssuance": true, "configuration": { "dnsAppConnection": { "id": "1e5f8c0d-09d2-492c-9b28-469acd8e841b", "name": "acme-dns-test-connection" }, "dnsProviderConfig": { "provider": "route53", "hostedZoneId": "Z040441124N1GOOMCQYX1" }, "directoryUrl": "https://acme-v02.api.letsencrypt.org/directory", "accountEmail": "admin@example.com", "dnsAppConnectionId": "1e5f8c0d-09d2-492c-9b28-469acd8e841b" } }' ``` ### Sample response ```bash Response theme={"dark"} { "id": "c48b701e-a20c-4a9a-8119-68f54e5fbb05", "name": "lets-encrypt-production", "type": "acme", "status": "active", "projectId": "0fccb6ee-1381-4ff1-8d5f-0cb93c6cc4d6", "enableDirectIssuance": true, "configuration": { "accountEmail": "admin@example.com", "directoryUrl": "https://acme-v02.api.letsencrypt.org/directory", "dnsAppConnection": { "id": "1e5f8c0d-09d2-492c-9b28-469acd8e841b", "name": "acme-dns-test-connection" }, "dnsAppConnectionId": "1e5f8c0d-09d2-492c-9b28-469acd8e841b", "dnsProviderConfig": { "provider": "route53", "hostedZoneId": "Z040441124N1GOOMCQYX1" } } } ``` ## FAQ Currently, Infisical supports DNS-01 validation through AWS Route53 or Cloudflare. The DNS-01 challenge method is preferred for ACME integrations because it: * Works with wildcard certificates * Doesn't require your servers to be publicly accessible * Can be fully automated without manual intervention Support for additional DNS providers is planned for future releases. Yes! ACME CAs like Let's Encrypt support wildcard certificates (e.g., `*.example.com`) when using DNS-01 validation. Simply specify the wildcard domain in your subscriber configuration. Note that wildcard certificates still require DNS-01 validation - HTTP-01 validation cannot be used for wildcard certificates. Most ACME providers issue certificates with 90-day validity periods. This shorter validity period is designed to: * Encourage automation of certificate management * Reduce the impact of compromised certificates * Ensure systems stay up-to-date with certificate management practices Yes. You can register multiple ACME CAs in the same project. # Microsoft AD CS Source: https://infisical.com/docs/documentation/platform/pki/ca/azure-adcs Learn how to issue and manage certificates using Microsoft Active Directory Certificate Services (ADCS) with Infisical. Issue and manage certificates using Microsoft Active Directory Certificate Services (ADCS) for enterprise-grade certificate management integrated with your existing Windows infrastructure. ## Prerequisites Before setting up ADCS integration, ensure you have: * Microsoft Active Directory Certificate Services (ADCS) server running and accessible * Domain administrator account with certificate management permissions * ADCS web enrollment enabled on your server * Network connectivity from Infisical to the ADCS server * **IP whitelisting**: Your ADCS server must allow connections from Infisical's IP addresses * For Infisical Cloud instances, see [Networking Configuration](/documentation/setup/networking) for the list of IPs to whitelist * For self-hosted instances, whitelist your Infisical server's IP address * Azure ADCS app connection configured (see [Azure ADCS Connection](/integrations/app-connections/azure-adcs)) ## Complete Workflow: From Setup to Certificate Issuance This section walks you through the complete end-to-end process of setting up Azure ADCS integration and issuing your first certificate. In your Infisical project, go to your **Certificate Project** → **Certificate Authority** to access the external CAs page. External CA
    Page Click **Create CA** and configure: - **Type**: Choose **Active Directory Certificate Services (AD CS)** - **Name**: Friendly name for this CA (e.g., "Production ADCS CA") - **App Connection**: Choose your ADCS connection from the dropdown External CA
    Form Once created, your Azure ADCS Certificate Authority will appear in the list and be ready for use. External CA
    Created Go to **Subscribers** to access the subscribers page. Subscribers
    Page Click **Add Subscriber** and configure: - **Name**: Unique subscriber name (e.g., "web-server-certs") - **Certificate Authority**: Select your ADCS CA - **Common Name**: Certificate CN (e.g., "api.example.com") - **Certificate Template**: Select from dynamically loaded ADCS templates - **Subject Alternative Names**: DNS names, IP addresses, or email addresses - **TTL**: Certificate validity period (e.g., "1y" for 1 year) - **Additional Subject Fields**: Organization, OU, locality, state, country, email (if required by template) Subscribers
    Form Your subscriber is now created and ready to issue certificates. Subscriber
    Created Click into your subscriber and click **Order Certificate** to generate a new certificate using your ADCS template. Issue New
    Certificate Your certificate has been successfully issued by the ADCS server and is ready for use. Certificate
    Created Navigate to **Certificates** to view detailed information about all issued certificates, including expiration dates, serial numbers, and certificate chains. Certificates
    Page ## Certificate Templates Infisical automatically retrieves available certificate templates from your ADCS server, ensuring you can only select templates that are properly configured and accessible. The system dynamically discovers templates during the certificate authority setup and certificate issuance process. ### Common Template Types ADCS templates you might see include: * **Web Server**: For SSL/TLS certificates with server authentication * **Computer**: For machine authentication certificates * **User**: For client authentication certificates * **Basic EFS**: For Encrypting File System certificates * **EFS Recovery Agent**: For EFS data recovery * **Administrator**: For administrative certificates * **Subordinate Certification Authority**: For issuing CA certificates ### Template Requirements Ensure your ADCS templates are configured with: * **Enroll permissions** for your connection account * **Auto-enroll permissions** if using automated workflows * **Subject name requirements** matching your certificate requests * **Key usage extensions** appropriate for your use case **Dynamic Template Discovery**: Infisical queries your ADCS server in real-time to populate available templates. Only templates you have permission to use will be displayed during certificate issuance. ## Certificate Issuance Limitations ### Immediate Issuance Only **Manual Approval Not Supported**: Infisical currently supports only **immediate certificate issuance**. Certificates that require manual approval or are held by ADCS policies cannot be issued through Infisical yet. For successful certificate issuance, ensure your ADCS templates and policies are configured to: * **Auto-approve** certificate requests without manual intervention * **Not require** administrator approval for the templates you plan to use * **Allow** the connection account to request and receive certificates immediately ### What Happens with Manual Approval If a certificate request requires manual approval: 1. The request will be submitted to ADCS successfully 2. Infisical will attempt to retrieve the certificate with exponential backoff (up to 5 retries over \~1 minute) 3. If the certificate is not approved within this timeframe, the request will **fail** 4. **No background polling**: Currently, Infisical does not check for certificates that might be approved hours or days later **Future Enhancement**: Background polling for delayed certificate approvals is planned for future releases. ### Certificate Revocation Certificate revocation is **not supported** by the Azure ADCS connector due to security and complexity considerations. ## Advanced Configuration ### Custom Validity Periods Enable custom certificate validity periods on your ADCS server: ```cmd theme={"dark"} # Run on ADCS server as Administrator certutil -setreg policy\EditFlags +EDITF_ATTRIBUTEENDDATE net stop certsvc net start certsvc ``` This allows Infisical to control certificate expiration dates directly. ## Troubleshooting ### Common Issues **Certificate Request Denied** * Verify ADCS template permissions for your connection account * Check template subject name requirements * Ensure template allows the requested key algorithm and size **Revocation Service Unavailable** * Verify IIS is running and the revocation endpoint is accessible * Check IIS application pool permissions * Test endpoint connectivity from Infisical **Template Not Found** * Verify template exists on ADCS server and is published * Check that your connection account has enrollment permissions for the template * Ensure the template is properly configured and available in the ADCS web enrollment interface * Templates are dynamically loaded - refresh the PKI Subscriber form if templates don't appear **Certificate Request Pending/Timeout** * Check if your ADCS template requires manual approval - Infisical only supports immediate issuance * Verify the certificate template is configured for auto-approval * Ensure your connection account has sufficient permissions to request certificates without approval * Review ADCS server policies that might be holding the certificate request **Network Connectivity Issues** * Verify your ADCS server's firewall allows connections from Infisical * For Infisical Cloud: Ensure Infisical's IP addresses are whitelisted (see [Networking Configuration](/documentation/setup/networking)) * For self-hosted: Whitelist your Infisical server's IP address on the ADCS server * Test HTTPS connectivity to the ADCS web enrollment endpoint * Check for any network security appliances blocking the connection **Authentication Failures** * Verify ADCS connection credentials * Check domain account permissions * Ensure network connectivity to ADCS server **SSL/TLS Certificate Errors** * For ADCS servers with self-signed or private certificates: disable "Reject Unauthorized" in the SSL tab of your Azure ADCS app connection, or provide the certificate in PEM format * Common SSL errors: `UNABLE_TO_VERIFY_LEAF_SIGNATURE`, `SELF_SIGNED_CERT_IN_CHAIN`, `CERT_HAS_EXPIRED` * The SSL configuration applies to all HTTPS communications between Infisical and your ADCS server * Only HTTPS URLs are supported - HTTP connections are not allowed for security reasons # DigiCert Source: https://infisical.com/docs/documentation/platform/pki/ca/digicert Learn how to connect Infisical to DigiCert to issue certificates. ## Concept Infisical can connect to [DigiCert](https://www.digicert.com/) using the [ACME-compatible CA integration](/documentation/platform/pki/ca/acme-ca) to issue certificates back to your end-entities. ## Guide to Connecting Infisical to DigiCert CA To connect Infisical to DigiCert, follow the steps in the [ACME-compatible CA integration](/documentation/platform/pki/ca/acme-ca) guide but use the DigiCert **ACME Directory URL**: `https://acme.digicert.com/v2/acme/directory`. DigiCert requires **External Account Binding (EAB)** for all ACME registrations. You will need to obtain both a Key Identifier (KID) and an HMAC Key from your DigiCert account before registering the ACME CA in Infisical. DigiCert typically issues certificates with a 90-day validity period. # External CA Source: https://infisical.com/docs/documentation/platform/pki/ca/external-ca Learn how to connect External Certificate Authorities with Infisical. ## Concept Infisical lets you integrate with External Certificate Authorities (CAs), allowing you to use existing PKI infrastructure or connect to public CAs to issue certificates for your end-entities.
```mermaid theme={"dark"} graph TD A1[External Public CA
e.g. Let's Encrypt, ZeroSSL, ...] --> Infisical A2[External Private CA
e.g. AWS Private CA, HashiCorp Vault PKI, ...] --> Infisical ```
As shown above, these CAs commonly fall under two categories: * External Private CAs: CAs like AWS Private CA, HashiCorp Vault PKI, Azure ADCS, etc. that are privately owned and are used to issue certificates for internal services; these are often either cloud-hosted private CAs or on-prem / enterprise CAs. * External Public CAs: CAs like Let's Encrypt, DigiCert, GlobalSign, etc. that are publicly trusted and are used to issue certificates for public-facing services. Note that Infisical can act as an *ACME client*, allowing you to integrate upstream with any [ACME-compatible CA](/documentation/platform/pki/ca/acme-ca) to automate certificate issuance and renewal. ## Workflow A typical workflow for integrating an External CA with Infisical consists of choosing the desired External CA type and specifying the configuration or connection details necessary to connect to the CA. The specific steps and requirements vary depending on the External CA type you choose to integrate. ## Supported External CA Types Infisical currently supports the following External CA types out of the box: * [ACME CA](/documentation/platform/pki/ca/acme-ca): An ACME-compatible CA that supports the ACME protocol, such as Let's Encrypt, ZeroSSL, Buypass, Digicert, etc. * [Azure ADCS](/documentation/platform/pki/ca/azure-adcs): A Microsoft Active Directory Certificate Services (ADCS) that supports the ADCS protocol, such as AWS Private CA, Azure ADCS, etc. If you don’t see a specific external CA listed here or need a dedicated integration guide, please reach out to [sales@infisical.com](mailto:sales@infisical.com) and we’ll help you set up the integration for your external CA. ## FAQ Yes. You can have both Private and External CAs in the same project. # Let's Encrypt Source: https://infisical.com/docs/documentation/platform/pki/ca/lets-encrypt Learn how to connect Infisical to Let's Encrypt to issue certificates. ## Concept Infisical can connect to [Let's Encrypt](https://letsencrypt.org/) using the [ACME-compatible CA integration](/documentation/platform/pki/ca/acme-ca) to issue certificates back to your end-entities. ## Guide to Connecting Infisical to Let's Encrypt CA To connect Infisical to Let's Encrypt, follow the steps in the [ACME-compatible CA integration](/documentation/platform/pki/ca/acme-ca) guide but use the Let's Encrypt **ACME Directory URL**: `https://acme-v02.api.letsencrypt.org/directory`. Note that Let’s Encrypt issues 90-day certificates and enforces a limit of 50 certificates per registered domain per week. We strongly recommend testing your setup against the Let's Encrypt staging environment first at the **ACME Directory URL** `https://acme-staging-v02.api.letsencrypt.org/directory` prior to switching to the production environment. This allows you to verify your DNS configuration and certificate issuance process without consuming production rate limits. # Overview Source: https://infisical.com/docs/documentation/platform/pki/ca/overview Before issuing and managing certificates with Infisical, you'll need to configure a Certificate Authority (CA). This is the trusted entity that signs and validates the X.509 certificates used to secure your end-entities. Infisical supports two categories of CAs: * [Internal CA](/documentation/platform/pki/ca/private-ca): Internally operated root and intermediate CAs managed within Infisical. This is useful if you need complete control over your PKI and are issuing certificates for private networks, internal services, or managed devices. * [External CA](/documentation/platform/pki/ca/external-ca): Third-party public (e.g. Let's Encrypt, DigiCert) or private (e.g. AWS Private CA, HashiCorp Vault PKI, etc.) CAs that can be integrated with Infisical. This is useful if you want to leverage existing PKI infrastructure or issue publicly trusted certificates. # Internal CA Source: https://infisical.com/docs/documentation/platform/pki/ca/private-ca Learn how to create a Private CA hierarchy with Infisical. ## Concept Infisical lets you build your Internal PKI through a Private Certificate Authority (CA) hierarchy, enabling you to issue and manage digital certificates for your end-entities.
```mermaid theme={"dark"} graph TD A[Root CA] A --> B[Intermediate CA] A --> C[Intermediate CA] ```
## Workflow A typical workflow for setting up a Private CA hierarchy consists of the following steps: 1. Configuring an Infisical root CA with details like name, validity period, and path length — This step is optional if you wish to use an external root CA with Infisical only serving the intermediate CAs. 2. Configuring and chaining intermediate CA(s) with details like name, validity period, path length, and imported certificate to your Root CA. 3. Managing the CA lifecycle events such as CA succession. Note that this workflow can be executed via the Infisical UI or manually such as via API. If manually executing the workflow, you may have to create a Certificate Signing Request (CSR) for the intermediate CA, create an intermediate certificate using the root CA private key and CSR, and import the intermediate certificate back to the intermediate CA as part of Step 2. ## Guide to Creating a CA Hierarchy In the following steps, we explore how to create a simple Private CA hierarchy consisting of an (optional) root CA and an intermediate CA. If you wish to use an external root CA, you can skip this step and head to step 2 to create an intermediate CA. To create a root CA, head to your Certificate Management Project > Certificate Authorities > Internal Certificate Authorities and press **Create CA**. pki create ca Here, set the **CA Type** to **Root** and fill out details for the root CA. pki create root ca Here's some guidance for each field: * Valid Until: The date until which the CA is valid in the date time string format specified [here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#date_time_string_format). For example, the following formats would be valid: `YYYY`, `YYYY-MM`, `YYYY-MM-DD`, `YYYY-MM-DDTHH:mm:ss.sssZ`. * Path Length: The maximum number of intermediate CAs that can be chained to this CA. A path of `-1` implies no limit; a path of `0` implies no intermediate CAs can be chained. * Key Algorithm: The type of public key algorithm and size, in bits, of the key pair that the CA creates when it issues a certificate. Supported key algorithms are `RSA 2048`, `RSA 4096`, `ECDSA P-256`, and `ECDSA P-384` with the default being `RSA 2048`. * Name: A slug-friendly name for the CA. * Organization (O): The organization name. * Country (C): The country code. * State or Province Name: The state or province. * Locality Name: The city or locality. * Common Name: The name of the CA. The Organization, Country, State or Province Name, Locality Name, and Common Name make up the **Distinguished Name (DN)** or **subject** of the CA. At least one of these fields must be filled out. 2.1. To create an intermediate CA, press **Create CA** again but this time specifying the **CA Type** to be **Intermediate**. Fill out the details for the intermediate CA. pki create intermediate ca 2.2. Next, press the **Install Certificate** option on the intermediate CA from step 1.1. pki install cert opt 2.3a. If you created a root CA in step 1, select **Infisical CA** for the **Parent CA Type** field. Next, set the **Parent CA** to the root CA created in step 1 and configure the intended **Valid Until** and **Path Length** fields on the intermediate CA; feel free to use the prefilled values. pki install cert Here's some guidance on each field: * Parent CA: The parent CA to which this intermediate CA will be chained. In this case, it should be the root CA created in step 1. * Valid Until: The date until which the CA is valid in the date time string format specified [here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#date_time_string_format). The date must be within the validity period of the parent CA. * Path Length: The maximum number of intermediate CAs that can be chained to this CA. The path length must be less than the path length of the parent CA. Finally, press **Install** to chain the intermediate CA to the root CA; this creates a Certificate Signing Request (CSR) for the intermediate CA, creates an intermediate certificate using the root CA private key and CSR, and imports the signed certificate back to the intermediate CA. pki cas Great! You've successfully created a Private CA hierarchy with a root CA and an intermediate CA. Now check out the [Certificates section](/documentation/platform/pki/certificates/overview) to learn more about how to issue X.509 certificates using the intermediate CA. 2.3b. If you have an external root CA, select **External CA** for the **Parent CA Type** field. Next, use the provided intermediate CSR to generate a certificate from your external root CA and paste the PEM-encoded certificate back into the **Certificate Body** field; the PEM-encoded external root CA certificate should be pasted under the **Certificate Chain** field. pki ca csr Finally, press **Install** to import the certificate and certificate chain as part of the installation step for the intermediate CA Great! You've successfully created a Private CA hierarchy with an intermediate CA chained to an external root CA. Now check out the [Certificates section](/documentation/platform/pki/certificates/overview) to learn more about how to issue X.509 certificates using the intermediate CA. If you wish to use an external root CA, you can skip this step and head to step 2 to create an intermediate CA. To create a root CA, make an API request to the [Create CA](/api-reference/endpoints/certificate-authorities/create) API endpoint, specifying the `type` as `root`. ### Sample request ```bash Request theme={"dark"} curl --location --request POST 'https://app.infisical.com/api/v1/cert-manager/ca/internal' \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data-raw '{ "projectSlug": "", "type": "root", "commonName": "My Root CA" }' ``` ### Sample response ```bash Response theme={"dark"} { ca: { id: "", type: "root", commonName: "My Root CA", ... } } ``` By default, Infisical creates a root CA with the `RSA_2048` key algorithm, validity period of 10 years, with no restrictions on path length; you may override these defaults by specifying your own options when making the API request. 2.1. To create an intermediate CA, make an API request to the [Create CA](/api-reference/endpoints/certificate-authorities/create) API endpoint, specifying the `type` as `intermediate`. ### Sample request ```bash Request theme={"dark"} curl --location --request POST 'https://app.infisical.com/api/v1/cert-manager/ca/internal' \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data-raw '{ "projectSlug": "", "type": "intermediate", "commonName": "My Intermediate CA" }' ``` ### Sample response ```bash Response theme={"dark"} { ca: { id: "", type: "intermediate", commonName: "My Intermediate CA", ... } } ``` 2.2. Next, get a certificate signing request from the intermediate CA by making an API request to the [Get CSR](/api-reference/endpoints/certificate-authorities/csr) API endpoint. ### Sample request ```bash Request theme={"dark"} curl --location --request GET 'https://app.infisical.com/api/v1/cert-manager/ca/internal//csr' \ --header 'Authorization: Bearer ' \ --data-raw '' ``` ### Sample response ```bash Response theme={"dark"} { csr: "..." } ``` If using an external root CA, then use the CSR to generate a certificate for the intermediate CA using your external root CA and skip to step 2.4. 2.3. Next, create an intermediate certificate by making an API request to the [Sign Intermediate](/api-reference/endpoints/certificate-authorities/sign-intermediate) API endpoint containing the CSR from step 2.2, referencing the root CA created in step 1. ### Sample request ```bash Request theme={"dark"} curl --location --request POST 'https://app.infisical.com/api/v1/cert-manager/ca/internal//sign-intermediate' \ --header 'Content-Type: application/json' \ --data-raw '{ "csr": "", "notAfter": "2029-06-12" }' ``` ### Sample response ```bash Response theme={"dark"} { certificate: "...", certificateChain: "...", issuingCaCertificate: "...", serialNumber: "...", } ``` The `notAfter` value must be within the validity period of the root CA that is if the root CA is valid until `2029-06-12`, the intermediate CA must be valid until a date before `2029-06-12`. 2.4. Finally, import the intermediate certificate and certificate chain from step 2.3 back to the intermediate CA by making an API request to the [Import Certificate](/api-reference/endpoints/certificate-authorities/import-cert) API endpoint. If using an external root CA, then import the generated certificate and root CA certificate under certificate chain back into the intermediate CA. ### Sample request ```bash Request theme={"dark"} curl --location --request POST 'https://app.infisical.com/api/v1/cert-manager/ca/internal//import-certificate' \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data-raw '{ "certificate": "", "certificateChain": "" }' ``` ### Sample response ```bash Response theme={"dark"} { message: "Successfully imported certificate to CA", caId: "..." } ``` Great! You’ve successfully created a Private CA hierarchy with a root CA and an intermediate CA. Now check out the [Subscribers](/documentation/platform/pki/subscribers) page to learn more about how to issue X.509 certificates using the intermediate CA. ## Guide to CA Renewal In the following steps, we explore how to renew a CA certificate. If renewing an intermediate CA chained to an Infisical CA, then Infisical will automate the process of generating a new certificate for the intermediate CA for you. If renewing an intermediate CA chained to an external parent CA, you'll be required to generate a new certificate from the external parent CA and manually import the certificate back to the intermediate CA. Head to the CA Page of the CA you wish you renew and press **Renew CA** on the left side. pki ca renewal
    page Input a new **Valid Until** date to be used for the renewed CA certificate and press **Renew** to renew the CA. pki ca renewal. modal The new **Valid Until** date must be within the validity period of the parent CA. To renew a CA certificate, make an API request to the [Renew CA](/api-reference/endpoints/certificate-authorities/renew) API endpoint, specifying the new `notAfter` date for the CA. ### Sample request ```bash Request theme={"dark"} curl --location --request POST 'https://app.infisical.com/api/v1/cert-manager/ca/internal//renew' \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data-raw '{ "type": "existing", "notAfter": "2029-06-12" }' ``` ### Sample response ```bash Response theme={"dark"} { certificate: "...", certificateChain: "...", serialNumber: "..." } ``` ## FAQ Infisical supports `RSA 2048`, `RSA 4096`, `ECDSA P-256`, `ECDSA P-384` key algorithms specified at the time of creating a CA. At the moment, Infisical only supports CA renewal via same key pair. We anticipate supporting CA renewal via new key pair in the coming month. Yes. You may obtain a CSR from the Intermediate CA and use it to generate a certificate from your external CA. The certificate, along with the external CA certificate chain, can be imported back to the Intermediate CA as part of the CA installation step. # AWS Certificate Manager Source: https://infisical.com/docs/documentation/platform/pki/certificate-syncs/aws-certificate-manager Learn how to configure an AWS Certificate Manager Certificate Sync for Infisical PKI. **Prerequisites:** * Create an [AWS Connection](/integrations/app-connections/aws) The AWS Certificate Manager Certificate Sync requires the following ACM permissions to be set on the IAM user/role for Infisical to sync certificates to AWS Certificate Manager: `acm:ListCertificates`, `acm:DescribeCertificate`, `acm:ImportCertificate`, `acm:DeleteCertificate`, and `acm:ListTagsForCertificate`. These permissions allow Infisical to list, import, tag, and manage certificates in your AWS Certificate Manager service. Certificates synced to AWS Certificate Manager will be stored as imported certificates, preserving both the certificate and private key components. 1. Navigate to **Project** > **Integrations** > **Certificate Syncs** and press **Add Sync**. Certificate Syncs Tab 2. Select the **AWS Certificate Manager** option. Select ACM 3. Configure the **Destination** to where certificates should be deployed, then click **Next**. Configure Destination * **AWS Connection**: The AWS Connection to authenticate with. * **AWS Region**: The AWS region where certificates should be stored. 4. Configure the **Sync Options** to specify how certificates should be synced, then click **Next**. Configure Options * **Enable Removal of Expired/Revoked Certificates**: If enabled, Infisical will remove certificates from the destination if they are no longer active in Infisical. * **Preserve ARN on Renewal**: If enabled, Infisical will sync renewed certificates to the destination under the same ARN as the original synced certificate instead of creating a new certificate with a new ARN. * **Include Root CA**: If enabled, the Root CA certificate will be included in the certificate chain when syncing to AWS Certificate Manager. If disabled, only intermediate certificates will be included. * **Certificate Name Schema** (Optional): Customize how certificate tags are generated in AWS Certificate Manager. Must include `{{certificateId}}` as a placeholder for the certificate ID to ensure proper certificate identification and management. If not specified, defaults to `Infisical-{{certificateId}}`. * **Auto-Sync Enabled**: If enabled, certificates will automatically be synced when changes occur. Disable to enforce manual syncing only. 5. Configure the **Details** of your AWS Certificate Manager Certificate Sync, then click **Next**. Configure Details * **Name**: The name of your sync. Must be slug-friendly. * **Description**: An optional description for your sync. 6. Select which certificates should be synced to AWS Certificate Manager. Select Certificates 7. Review your AWS Certificate Manager Certificate Sync configuration, then click **Create Sync**. Confirm Configuration 8. If enabled, your AWS Certificate Manager Certificate Sync will begin syncing your certificates to the destination endpoint. Sync Certificates To create an **AWS Certificate Manager Certificate Sync**, make an API request to the [Create AWS Certificate Manager Certificate Sync](/api-reference/endpoints/pki/syncs/aws-certificate-manager/create) API endpoint. ### Sample request You can optionally specify `certificateIds` during sync creation to immediately add certificates to the sync. If not provided, you can add certificates later using the certificate management endpoints. ```bash Request theme={"dark"} curl --request POST \ --url https://app.infisical.com/api/v1/cert-manager/syncs/aws-certificate-manager \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "name": "my-acm-cert-sync", "projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "description": "an example certificate sync", "connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "destination": "aws-certificate-manager", "isAutoSyncEnabled": true, "certificateIds": [ "550e8400-e29b-41d4-a716-446655440000", "660f1234-e29b-41d4-a716-446655440001" ], "syncOptions": { "canRemoveCertificates": true, "preserveArnOnRenewal": true, "includeRootCa": false, "certificateNameSchema": "myapp-{{certificateId}}" }, "destinationConfig": { "region": "us-east-1" } }' ``` ### Sample response ```json Response theme={"dark"} { "pkiSync": { "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "name": "my-acm-cert-sync", "description": "an example certificate sync", "destination": "aws-certificate-manager", "isAutoSyncEnabled": true, "destinationConfig": { "region": "us-east-1" }, "syncOptions": { "canRemoveCertificates": true, "preserveArnOnRenewal": true, "includeRootCa": false, "certificateNameSchema": "myapp-{{certificateId}}" }, "projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "createdAt": "2023-01-01T00:00:00.000Z", "updatedAt": "2023-01-01T00:00:00.000Z" } } ``` ## Certificate Management Your AWS Certificate Manager Certificate Sync will: * **Automatic Deployment**: Deploy certificates in Infisical to AWS Certificate Manager. * **Certificate Updates**: Update certificates in AWS Certificate Manager when renewals occur. * **Expiration Handling**: Optionally remove expired certificates from AWS Certificate Manager (if enabled). * **Tagging**: Automatically tag certificates with an InfisicalCertificate tag for easy identification and management AWS Certificate Manager Certificate Syncs support both automatic and manual synchronization modes. When auto-sync is enabled, certificates are automatically deployed as they are issued or renewed. ## Manual Certificate Sync You can manually trigger certificate synchronization to AWS Certificate Manager using the sync certificates functionality. This is useful for: * Initial setup when you have existing certificates to deploy * One-time sync of specific certificates * Testing certificate sync configurations * Force sync after making changes To manually sync certificates, use the [Sync Certificates](/api-reference/endpoints/pki/syncs/aws-certificate-manager/sync-certificates) API endpoint or the manual sync option in the Infisical UI. AWS Certificate Manager does not support importing certificates back into Infisical due to security limitations where private keys cannot be extracted from AWS Certificate Manager. Only certificates imported into ACM (not AWS-issued certificates) can be managed by the sync. # AWS Secrets Manager Source: https://infisical.com/docs/documentation/platform/pki/certificate-syncs/aws-secrets-manager Learn how to configure an AWS Secrets Manager Certificate Sync for Infisical PKI. **Prerequisites:** * Create an [AWS Connection](/integrations/app-connections/aws) * Ensure your network security policies allow incoming requests from Infisical to this certificate sync provider, if network restrictions apply. The AWS Secrets Manager Certificate Sync requires the following permissions to be set on the AWS IAM user for Infisical to sync certificates to AWS Secrets Manager: `secretsmanager:CreateSecret`, `secretsmanager:UpdateSecret`, `secretsmanager:GetSecretValue`, `secretsmanager:DeleteSecret`, `secretsmanager:ListSecrets`. Any role with these permissions would work such as a custom policy with **SecretsManager** permissions. Certificates synced to AWS Secrets Manager will be stored as JSON secrets, preserving both the certificate and private key components as separate fields within the secret value. 1. Navigate to **Project** > **Integrations** > **Certificate Syncs** and press **Add Sync**. Certificate Syncs Tab 2. Select the **AWS Secrets Manager** option. Select AWS Secrets Manager 3. Configure the **Destination** to where certificates should be deployed, then click **Next**. Configure Destination * **AWS Connection**: The AWS Connection to authenticate with. * **Region**: The AWS region where secrets will be stored. 4. Configure the **Sync Options** to specify how certificates should be synced, then click **Next**. Configure Options * **Enable Removal of Expired/Revoked Certificates**: If enabled, Infisical will remove certificates from the destination if they are no longer active in Infisical. * **Preserve Secret on Renewal**: Only applies to certificate renewals. When a certificate is renewed in Infisical, this option controls how the renewed certificate is handled. If enabled, the renewed certificate will update the existing secret, preserving the same secret name. If disabled, the renewed certificate will be created as a new secret with a new name. * **Include Root CA**: If enabled, the Root CA certificate will be included in the certificate chain when syncing to AWS Secrets Manager. If disabled, only intermediate certificates will be included. * **Certificate Name Schema** (Optional): Customize how secret names are generated in AWS Secrets Manager. Use `{{certificateId}}` as a placeholder for the certificate ID. * **Auto-Sync Enabled**: If enabled, certificates will automatically be synced when changes occur. Disable to enforce manual syncing only. 5. Configure the **Field Mappings** to customize how certificate data is stored in AWS Secrets Manager secrets, then click **Next**. Configure Field Mappings * **Certificate Field**: The field name where the certificate will be stored in the secret value (default: `certificate`) * **Private Key Field**: The field name where the private key will be stored in the secret value (default: `private_key`) * **Certificate Chain Field**: The field name where the full certificate chain excluding the root CA certificate will be stored (default: `certificate_chain`) * **CA Certificate Field**: The field name where the root CA certificate will be stored (default: `ca_certificate`) **AWS Secrets Manager Secret Structure**: Certificates are stored in AWS Secrets Manager as JSON secrets with the following structure (field names can be customized via field mappings): ```json theme={"dark"} { "certificate": "-----BEGIN CERTIFICATE-----\n...", "private_key": "-----BEGIN PRIVATE KEY-----\n...", "certificate_chain": "-----BEGIN CERTIFICATE-----\n...", "ca_certificate": "-----BEGIN CERTIFICATE-----\n..." } ``` **Example with Custom Field Mappings**: ```json theme={"dark"} { "ssl_cert": "-----BEGIN CERTIFICATE-----\n...", "ssl_key": "-----BEGIN PRIVATE KEY-----\n...", "ssl_chain": "-----BEGIN CERTIFICATE-----\n...", "ssl_ca": "-----BEGIN CERTIFICATE-----\n..." } ``` 6. Configure the **Details** of your AWS Secrets Manager Certificate Sync, then click **Next**. Configure Details * **Name**: The name of your sync. Must be slug-friendly. * **Description**: An optional description for your sync. 7. Select which certificates should be synced to AWS Secrets Manager. Select Certificates 8. Review your AWS Secrets Manager Certificate Sync configuration, then click **Create Sync**. Confirm Configuration 9. If enabled, your AWS Secrets Manager Certificate Sync will begin syncing your certificates to the destination endpoint. Sync Certificates To create an **AWS Secrets Manager Certificate Sync**, make an API request to the [Create AWS Secrets Manager Certificate Sync](/api-reference/endpoints/pki/syncs/aws-secrets-manager/create) API endpoint. ### Sample request You can optionally specify `certificateIds` during sync creation to immediately add certificates to the sync. If not provided, you can add certificates later using the certificate management endpoints. ```bash Request theme={"dark"} curl --request POST \ --url https://app.infisical.com/api/v1/cert-manager/syncs/aws-secrets-manager \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "name": "my-aws-secrets-manager-cert-sync", "projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "description": "an example certificate sync", "connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "destination": "aws-secrets-manager", "isAutoSyncEnabled": true, "certificateIds": [ "550e8400-e29b-41d4-a716-446655440000", "660f1234-e29b-41d4-a716-446655440001" ], "syncOptions": { "canRemoveCertificates": true, "preserveSecretOnRenewal": true, "canImportCertificates": false, "includeRootCa": false, "certificateNameSchema": "myapp-{{certificateId}}", "fieldMappings": { "certificate": "ssl_cert", "privateKey": "ssl_key", "certificateChain": "ssl_chain", "caCertificate": "ssl_ca" } }, "destinationConfig": { "region": "us-east-1", "keyId": "alias/my-kms-key" } }' ``` ### Example with Default Field Mappings ```bash Request theme={"dark"} curl --request POST \ --url https://app.infisical.com/api/v1/cert-manager/syncs/aws-secrets-manager \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "name": "my-aws-secrets-manager-cert-sync-default", "projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "description": "AWS Secrets Manager sync with default field mappings", "connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "destination": "aws-secrets-manager", "isAutoSyncEnabled": true, "syncOptions": { "canRemoveCertificates": true, "preserveSecretOnRenewal": true, "canImportCertificates": false, "includeRootCa": false, "certificateNameSchema": "infisical-{{certificateId}}", "fieldMappings": { "certificate": "certificate", "privateKey": "private_key", "certificateChain": "certificate_chain", "caCertificate": "ca_certificate" } }, "destinationConfig": { "region": "us-west-2" } }' ``` ### Sample response ```json Response theme={"dark"} { "pkiSync": { "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "name": "my-aws-secrets-manager-cert-sync", "description": "an example certificate sync", "destination": "aws-secrets-manager", "isAutoSyncEnabled": true, "destinationConfig": { "region": "us-east-1", "keyId": "alias/my-kms-key" }, "syncOptions": { "canRemoveCertificates": true, "preserveSecretOnRenewal": true, "canImportCertificates": false, "includeRootCa": false, "certificateNameSchema": "myapp-{{certificateId}}", "fieldMappings": { "certificate": "ssl_cert", "privateKey": "ssl_key", "certificateChain": "ssl_chain", "caCertificate": "ssl_ca" } }, "projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "createdAt": "2023-01-01T00:00:00.000Z", "updatedAt": "2023-01-01T00:00:00.000Z" } } ``` ## Certificate Management Your AWS Secrets Manager Certificate Sync will: * **Automatic Deployment**: Deploy certificates in Infisical to AWS Secrets Manager as JSON secrets with customizable field names * **Certificate Updates**: Update certificates in AWS Secrets Manager when renewals occur * **Expiration Handling**: Optionally remove expired certificates from AWS Secrets Manager (if enabled) * **Format Preservation**: Maintain certificate format during sync operations * **Field Customization**: Map certificate data to custom field names that match your application requirements * **CA Certificate Support**: Include CA certificates in secrets for complete certificate chain management * **KMS Encryption**: Optionally use custom KMS keys for secret encryption * **Regional Deployment**: Deploy secrets to specific AWS regions AWS Secrets Manager Certificate Syncs support both automatic and manual synchronization modes. When auto-sync is enabled, certificates are automatically deployed as they are issued or renewed. ## Manual Certificate Sync You can manually trigger certificate synchronization to AWS Secrets Manager using the sync certificates functionality. This is useful for: * Initial setup when you have existing certificates to deploy * One-time sync of specific certificates * Testing certificate sync configurations * Force sync after making changes To manually sync certificates, use the [Sync Certificates](/api-reference/endpoints/pki/syncs/aws-secrets-manager/sync-certificates) API endpoint or the manual sync option in the Infisical UI. AWS Secrets Manager does not support importing certificates back into Infisical due to the nature of AWS Secrets Manager where certificates are stored as JSON secrets rather than managed certificate objects. ## Secret Naming Constraints AWS Secrets Manager has specific naming requirements for secrets: * **Allowed Characters**: Letters, numbers, hyphens (-), and underscores (\_) only * **Length**: 1-512 characters # Azure Key Vault Source: https://infisical.com/docs/documentation/platform/pki/certificate-syncs/azure-key-vault Learn how to configure an Azure Key Vault Certificate Sync for Infisical PKI. **Prerequisites:** * Create an [Azure Key Vault Connection](/integrations/app-connections/azure-key-vault) * Ensure your network security policies allow incoming requests from Infisical to this certificate sync provider, if network restrictions apply. The Azure Key Vault Certificate Sync requires the following certificate permissions to be set on the user / service principal for Infisical to sync certificates to Azure Key Vault: `certificates/list`, `certificates/get`, `certificates/import`, `certificates/delete`. Any role with these permissions would work such as the **Key Vault Certificates Officer** role. Certificates synced to Azure Key Vault will be stored as certificate objects, preserving both the certificate and private key components. 1. Navigate to **Project** > **Integrations** > **Certificate Syncs** and press **Add Sync**. Certificate Syncs Tab 2. Select the **Azure Key Vault** option. Select Key Vault 3. Configure the **Destination** to where certificates should be deployed, then click **Next**. Configure Destination * **Azure Connection**: The Azure Connection to authenticate with. * **Vault Base URL**: The URL of your Azure Key Vault. 4. Configure the **Sync Options** to specify how certificates should be synced, then click **Next**. Configure Options * **Enable Removal of Expired/Revoked Certificates**: If enabled, Infisical will remove certificates from the destination if they are no longer active in Infisical. * **Enable Versioning on Renewal**: If enabled, Infisical will sync renewed certificates to the destination under a new version of the original synced certificate instead of creating a new certificate. * **Include Root CA**: If enabled, the Root CA certificate will be included in the certificate chain when syncing to Azure Key Vault. If disabled, only intermediate certificates will be included. * **Certificate Name Schema** (Optional): Customize how certificate names are generated in Azure Key Vault. Use `{{certificateId}}` as a placeholder for the certificate ID. If not specified, defaults to `Infisical-{{certificateId}}`. * **Auto-Sync Enabled**: If enabled, certificates will automatically be synced when changes occur. Disable to enforce manual syncing only. **Azure Key Vault Soft Delete**: When certificates are removed from Azure Key Vault, they are placed in a soft-deleted state rather than being permanently deleted. This means: * Subsequent syncs will not re-add these soft-deleted certificates automatically * To resync removed certificates, you must either manually **purge** them from Azure Key Vault or **recover** them through the Azure portal/CLI 5. Configure the **Details** of your Azure Key Vault Certificate Sync, then click **Next**. Configure Details * **Name**: The name of your sync. Must be slug-friendly. * **Description**: An optional description for your sync. 6. Select which certificates should be synced to Azure Key Vault. Select Certificates 7. Review your Azure Key Vault Certificate Sync configuration, then click **Create Sync**. Confirm Configuration 8. If enabled, your Azure Key Vault Certificate Sync will begin syncing your certificates to the destination endpoint. Sync Certificates To create an **Azure Key Vault Certificate Sync**, make an API request to the [Create Azure Key Vault Certificate Sync](/api-reference/endpoints/pki/syncs/azure-key-vault/create) API endpoint. ### Sample request You can optionally specify `certificateIds` during sync creation to immediately add certificates to the sync. If not provided, you can add certificates later using the certificate management endpoints. ```bash Request theme={"dark"} curl --request POST \ --url https://app.infisical.com/api/v1/cert-manager/syncs/azure-key-vault \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "name": "my-key-vault-cert-sync", "projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "description": "an example certificate sync", "connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "destination": "azure-key-vault", "isAutoSyncEnabled": true, "certificateIds": [ "550e8400-e29b-41d4-a716-446655440000", "660f1234-e29b-41d4-a716-446655440001" ], "syncOptions": { "canRemoveCertificates": true, "enableVersioningOnRenewal": true, "includeRootCa": false, "certificateNameSchema": "myapp-{{certificateId}}" }, "destinationConfig": { "vaultBaseUrl": "https://my-key-vault.vault.azure.net" } }' ``` ### Sample response ```json Response theme={"dark"} { "pkiSync": { "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "name": "my-key-vault-cert-sync", "description": "an example certificate sync", "destination": "azure-key-vault", "isAutoSyncEnabled": true, "destinationConfig": { "vaultBaseUrl": "https://my-key-vault.vault.azure.net" }, "syncOptions": { "canRemoveCertificates": true, "enableVersioningOnRenewal": true, "includeRootCa": false, "certificateNameSchema": "myapp-{{certificateId}}" }, "projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "createdAt": "2023-01-01T00:00:00.000Z", "updatedAt": "2023-01-01T00:00:00.000Z" } } ``` ## Certificate Management Your Azure Key Vault Certificate Sync will: * **Automatic Deployment**: Deploy certificates in Infisical to Azure Key Vault. * **Certificate Updates**: Update certificates in Azure Key Vault when renewals occur * **Expiration Handling**: Optionally remove expired certificates from Azure Key Vault (if enabled) * **Format Preservation**: Maintain certificate format and metadata during sync operations Azure Key Vault Certificate Syncs support both automatic and manual synchronization modes. When auto-sync is enabled, certificates are automatically deployed as they are issued or renewed. ## Manual Certificate Sync You can manually trigger certificate synchronization to Azure Key Vault using the sync certificates functionality. This is useful for: * Initial setup when you have existing certificates to deploy * One-time sync of specific certificates * Testing certificate sync configurations * Force sync after making changes To manually sync certificates, use the [Sync Certificates](/api-reference/endpoints/pki/syncs/azure-key-vault/sync-certificates) API endpoint or the manual sync option in the Infisical UI. Azure Key Vault does not support importing certificates back into Infisical due to security limitations where private keys cannot be extracted from Azure Key Vault. # Chef Source: https://infisical.com/docs/documentation/platform/pki/certificate-syncs/chef Learn how to configure a Chef Certificate Sync for Infisical PKI. **Prerequisites:** * Create a [Chef Connection](/integrations/app-connections/chef) * Ensure your network security policies allow incoming requests from Infisical to this certificate sync provider, if network restrictions apply. The Chef Certificate Sync requires the following permissions to be set on the Chef user for Infisical to sync certificates to Chef: `data bag read`, `data bag create`, `data bag update`, `data bag delete`. Any role with these permissions would work such as a custom role with **Data Bag** permissions. Certificates synced to Chef will be stored as data bag items within the specified data bag, preserving both the certificate and private key components as separate fields. 1. Navigate to **Project** > **Integrations** > **Certificate Syncs** and press **Add Sync**. Certificate Syncs Tab 2. Select the **Chef** option. Select Chef 3. Configure the **Destination** to where certificates should be deployed, then click **Next**. Configure Destination * **Chef Connection**: The Chef Connection to authenticate with. * **Data Bag Name**: The name of the Chef data bag where certificates will be stored. 4. Configure the **Sync Options** to specify how certificates should be synced, then click **Next**. Configure Options * **Enable Removal of Expired/Revoked Certificates**: If enabled, Infisical will remove certificates from the destination if they are no longer active in Infisical. * **Preserve Data Bag Item on Renewal**: Only applies to certificate renewals. When a certificate is renewed in Infisical, this option controls how the renewed certificate is handled. If enabled, the renewed certificate will update the existing data bag item, preserving the same item name. If disabled, the renewed certificate will be created as a new data bag item with a new name. * **Include Root CA**: If enabled, the Root CA certificate will be included in the certificate chain when syncing to Chef data bags. If disabled, only intermediate certificates will be included. * **Certificate Name Schema** (Optional): Customize how certificate item names are generated in Chef data bags. Use `{{certificateId}}` as a placeholder for the certificate ID. * **Auto-Sync Enabled**: If enabled, certificates will automatically be synced when changes occur. Disable to enforce manual syncing only. 5. Configure the **Field Mappings** to customize how certificate data is stored in Chef data bag items, then click **Next**. Configure Field Mappings * **Certificate Field**: The field name where the certificate will be stored in the data bag item (default: `certificate`) * **Private Key Field**: The field name where the private key will be stored in the data bag item (default: `private_key`) * **Certificate Chain Field**: The field name where the full certificate chain excluding the root CA certificate will be stored (default: `certificate_chain`) * **CA Certificate Field**: The field name where the root CA certificate will be stored (default: `ca_certificate`) **Chef Data Bag Item Structure**: Certificates are stored in Chef data bags as items with the following structure (field names can be customized via field mappings): ```json theme={"dark"} { "id": "certificate-item-name", "certificate": "-----BEGIN CERTIFICATE-----\n...", "private_key": "-----BEGIN PRIVATE KEY-----\n...", "certificate_chain": "-----BEGIN CERTIFICATE-----\n...", "ca_certificate": "-----BEGIN CERTIFICATE-----\n..." } ``` **Example with Custom Field Mappings**: ```json theme={"dark"} { "id": "certificate-item-name", "ssl_cert": "-----BEGIN CERTIFICATE-----\n...", "ssl_key": "-----BEGIN PRIVATE KEY-----\n...", "ssl_chain": "-----BEGIN CERTIFICATE-----\n...", "ssl_ca": "-----BEGIN CERTIFICATE-----\n..." } ``` 6. Configure the **Details** of your Chef Certificate Sync, then click **Next**. Configure Details * **Name**: The name of your sync. Must be slug-friendly. * **Description**: An optional description for your sync. 7. Select which certificates should be synced to Chef. Select Certificates 8. Review your Chef Certificate Sync configuration, then click **Create Sync**. Confirm Configuration 9. If enabled, your Chef Certificate Sync will begin syncing your certificates to the destination endpoint. Sync Certificates To create a **Chef Certificate Sync**, make an API request to the [Create Chef Certificate Sync](/api-reference/endpoints/pki/syncs/chef/create) API endpoint. ### Sample request You can optionally specify `certificateIds` during sync creation to immediately add certificates to the sync. If not provided, you can add certificates later using the certificate management endpoints. ```bash Request theme={"dark"} curl --request POST \ --url https://app.infisical.com/api/v1/cert-manager/syncs/chef \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "name": "my-chef-cert-sync", "projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "description": "an example certificate sync", "connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "destination": "chef", "isAutoSyncEnabled": true, "certificateIds": [ "550e8400-e29b-41d4-a716-446655440000", "660f1234-e29b-41d4-a716-446655440001" ], "syncOptions": { "canRemoveCertificates": true, "preserveSecretOnRenewal": true, "canImportCertificates": false, "includeRootCa": false, "certificateNameSchema": "myapp-{{certificateId}}", "fieldMappings": { "certificate": "ssl_cert", "privateKey": "ssl_key", "certificateChain": "ssl_chain", "caCertificate": "ssl_ca" } }, "destinationConfig": { "dataBagName": "ssl_certificates" } }' ``` ### Example with Default Field Mappings ```bash Request theme={"dark"} curl --request POST \ --url https://app.infisical.com/api/v1/cert-manager/syncs/chef \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "name": "my-chef-cert-sync-default", "projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "description": "Chef sync with default field mappings", "connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "destination": "chef", "isAutoSyncEnabled": true, "syncOptions": { "canRemoveCertificates": true, "preserveSecretOnRenewal": true, "canImportCertificates": false, "includeRootCa": false, "certificateNameSchema": "{{commonName}}-{{certificateId}}", "fieldMappings": { "certificate": "certificate", "privateKey": "private_key", "certificateChain": "certificate_chain", "caCertificate": "ca_certificate" } }, "destinationConfig": { "dataBagName": "certificates" } }' ``` ### Sample response ```json Response theme={"dark"} { "pkiSync": { "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "name": "my-chef-cert-sync", "description": "an example certificate sync", "destination": "chef", "isAutoSyncEnabled": true, "destinationConfig": { "dataBagName": "ssl_certificates" }, "syncOptions": { "canRemoveCertificates": true, "preserveSecretOnRenewal": true, "canImportCertificates": false, "includeRootCa": false, "certificateNameSchema": "myapp-{{certificateId}}", "fieldMappings": { "certificate": "ssl_cert", "privateKey": "ssl_key", "certificateChain": "ssl_chain", "caCertificate": "ssl_ca" } }, "projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "createdAt": "2023-01-01T00:00:00.000Z", "updatedAt": "2023-01-01T00:00:00.000Z" } } ``` ## Certificate Management Your Chef Certificate Sync will: * **Automatic Deployment**: Deploy certificates in Infisical to Chef data bags with customizable field names * **Certificate Updates**: Update certificates in Chef data bags when renewals occur * **Expiration Handling**: Optionally remove expired certificates from Chef data bags (if enabled) * **Format Preservation**: Maintain certificate format during sync operations * **Field Customization**: Map certificate data to custom field names that match your Chef cookbook requirements * **CA Certificate Support**: Include CA certificates in data bag items for complete certificate chain management Chef Certificate Syncs support both automatic and manual synchronization modes. When auto-sync is enabled, certificates are automatically deployed as they are issued or renewed. ## Manual Certificate Sync You can manually trigger certificate synchronization to Chef using the sync certificates functionality. This is useful for: * Initial setup when you have existing certificates to deploy * One-time sync of specific certificates * Testing certificate sync configurations * Force sync after making changes To manually sync certificates, use the [Sync Certificates](/api-reference/endpoints/pki/syncs/chef/sync-certificates) API endpoint or the manual sync option in the Infisical UI. Chef does not support importing certificates back into Infisical due to the nature of Chef data bags where certificates are stored as data rather than managed certificate objects. # null Source: https://infisical.com/docs/documentation/platform/pki/certificate-syncs/overview Learn how to sync certificates from Infisical PKI to third-party services. Certificate Syncs enable you to push certificates from Infisical to third-party services using [App Connections](/integrations/app-connections/overview). Certificate Syncs are designed to automatically deploy certificates issued by your Certificate Authority to external services, ensuring your certificates are always up-to-date across your infrastructure. ## Concept Certificate Syncs are a project-level resource used to push certificates, via an [App Connection](/integrations/app-connections/overview), from Infisical to a third-party service (destination). When paired with [server-side auto-renewal](/documentation/platform/pki/certificates/certificates#server-driven-certificate-renewal), renewed certificates are automatically synced to the destination, ensuring your certificates stay current.
```mermaid theme={"dark"} %%{init: {'flowchart': {'curve': 'linear'} } }%% graph LR A[App Connection] B[Certificate Sync] C[Certificate 1] D[Certificate 2] E[Certificate 3] F[Third-Party Service] G[Certificate 1] H[Certificate 2] I[Certificate 3] B --> A C --> B D --> B E --> B A --> F F --> G F --> H F --> I classDef default fill:#ffffff,stroke:#666,stroke-width:2px,rx:10px,color:black classDef connection fill:#FFF2B2,stroke:#E6C34A,stroke-width:2px,color:black,rx:15px classDef certificate fill:#E6F4FF,stroke:#0096D6,stroke-width:2px,color:black,rx:15px classDef sync fill:#F4FFE6,stroke:#96D600,stroke-width:2px,color:black,rx:15px classDef service fill:#E6E6FF,stroke:#6B4E96,stroke-width:2px,color:black,rx:15px classDef subscriber fill:#FFE6E6,stroke:#D63F3F,stroke-width:2px,color:black,rx:15px class A connection class B sync class C,D,E,G,H,I certificate class F service class J subscriber ```
## Workflow Configuring a Certificate Sync requires three components: The certificates that you'd like to push, a destination endpoint to deploy certificates to, and configuration options to determine how your certificates should be synced. Follow these steps to start syncing: For step-by-step guides on syncing to a particular third-party service, refer to the Certificate Syncs section in the Navigation Bar. 1. Create App Connection: If you have not already done so, create an [App Connection](/integrations/app-connections/overview) via the UI or API for the third-party service you intend to sync certificates to. 2. Create Certificate Sync: Configure a Certificate Sync in the desired project by specifying the following parameters via the UI or API: * Destination: The App Connection to utilize and the destination endpoint to deploy certificates to such as [AWS Certificate Manager](/documentation/platform/pki/certificate-syncs/aws-certificate-manager) or [Azure Key Vault](/documentation/platform/pki/certificate-syncs/azure-key-vault). * Certificates: The certificates you wish to push to the destination. * Options: Customize how certificates should be synced, including: * Whether certificates should be removed from the destination when they expire. * Whether to include the Root CA certificate in the certificate chain. * Certificate naming schema to control how certificate names are generated in the destination. Only certificates managed by Infisical will be affected during sync operations. Certificates not created or managed by Infisical will remain untouched, and changes made to Infisical-managed certificates directly in the destination service may be overwritten by future syncs. Some third-party services do not support removing expired certificates automatically. 3. Utilize Sync: Selected certificates will now be pushed to the destination endpoint and automatically redeployed whenever they are renewed. Infisical is continuously expanding its Certificate Sync third-party service support. If the service you need isn't available, contact us at [team@infisical.com](mailto:team@infisical.com) to make a request. ## Certificate Naming Certificate Syncs support flexible certificate naming through configurable naming schemas. This allows you to customize how certificate names appear in your destination services. ### Default Naming By default, certificates are named using the pattern `Infisical-{certificateId}` where `{certificateId}` is the unique identifier of the certificate with hyphens removed for compatibility with services like Azure Key Vault. ### Custom Naming Schema You can customize certificate naming by providing a **Certificate Name Schema** when creating or updating a Certificate Sync. The schema supports the following placeholders: * `{{certificateId}}` - The unique certificate identifier (required) **Examples:** * `myapp-{{certificateId}}` → `myapp-abc123def456` * `ssl/{{certificateId}}` → `ssl/abc123def456` **Rules:** * Must include exactly one `{{certificateId}}` placeholder * Only alphanumeric characters, dashes (-), underscores (\_), and slashes (/) are allowed * Certificate names matching your schema will be managed by Infisical during sync operations # Certificates Source: https://infisical.com/docs/documentation/platform/pki/certificates/certificates PKI architecture is a complex topic and there are many ways to orchestrate certificate management including renewal operations. For specific guidance and access to enterprise features, we recommend reaching out to [sales@infisical.com](mailto:sales@infisical.com) to schedule a demo. ## Concept A certificate is the (X.509) leaf certificate issued for a certificate profile. Once issued, a certificate is kept track of in the certificate inventory where you can manage various aspects of its lifecycle including deployment to cloud key stores, server-side auto-renewal behavior, revocation, and more. ## Guide to Issuing Certificates To [issue a certificate](/documentation/platform/pki/concepts/certificate-lifecycle#enrollment-request-%2F-issuance), you must first create a [certificate profile](/documentation/platform/pki/certificates/profiles) and a [certificate template](/documentation/platform/pki/certificates/templates) to go along with it. * Self-Signed Certificates: To issue a [self-signed certificate](https://en.wikipedia.org/wiki/Self-signed_certificate), you must configure the certificate profile to use the `Self-Signed` issuer type. You can then use the [API enrollment method](/documentation/platform/pki/enrollment-methods/api) to request a self-signed certificate against it. * CA-Issued Certificates: To issue a certificate from a certificate authority, you must configure the certificate profile to use the `Certificate Authority` issuer type and select the [issuing CA](/documentation/platform/pki/ca/overview) to use. You can then use one of the [enrollment methods](/documentation/platform/pki/enrollment-methods/overview) to request a certificate against it. Refer to the documentation for each [enrollment method](/documentation/platform/pki/enrollment-methods/overview) to learn more about how to issue certificates using it. ## Guide to Renewing Certificates To [renew a certificate](/documentation/platform/pki/concepts/certificate-lifecycle#renewal), you can either request a new certificate from a certificate profile or have the platform automatically request a new one for you. Whether you pursue a client-driven or server-driven approach is totally dependent on the enrollment method configured on your certificate profile as well as your infrastructure use-case. ### Client-Driven Certificate Renewal Client-driven certificate renewal is when renewal is initiated client-side by the end-entity consuming the certificate. This is the most common approach to certificate renewal and is suitable for most use-cases. ### Server-Driven Certificate Renewal Server-driven certificate renewal is when renewal is initiated server-side by Infisical rather than by the end-entity consuming the certificate. When a certificate considered for auto-renewal meets a specified *renewal days before expiration* threshold, Infisical reaches out to the issuing CA bound to the [certificate profile](/documentation/platform/pki/certificates/profiles) of the expiring certificate to request for a new one. The resulting renewed certificate is stored in the platform and made available to be fetched back or pushed downstream to end-entities or external systems such as cloud key stores. Note that server-driven certificate renewal is only available for certificates issued via the [API enrollment method](/documentation/platform/pki/enrollment-methods/api) where key pairs are generated server-side. A certificate can be considered for auto-renewal at time of issuance if the **Enable Auto-Renewal By Default** option is selected on its [certificate profile](/documentation/platform/pki/certificates/profiles) or after issuance by toggling this option manually. For server-driven certificate renewal workflows, you can programmatically fetch the latest active certificate bundle for a certificate profile using the [Get Latest Active Certificate Bundle](/api-reference/endpoints/certificate-profiles/get-latest-active-bundle) API endpoint. This ensures you always retrieve the most current valid certificate, including any that have been automatically renewed, making it particularly useful for deployment pipelines and automation workflows where you don't want to track individual serial numbers. The following examples demonstrate different approaches to certificate renewal: * Using the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme), you may connect an ACME client like [certbot](https://certbot.eff.org/) to fetch back and renew certificates for [Apache](/documentation/platform/pki/integration-guides/apache-certbot), [Nginx](/documentation/platform/pki/integration-guides/nginx-certbot), or other server. The ACME client will pursue a client-driven approach and submit certificate requests upon certificate expiration for you, saving renewed certificates back to the server's configuration. * Using the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme), you may use [cert-manager](https://cert-manager.io/) with Infisical to issue and renew certificates for Kubernetes workloads; cert-manager will pursue a client-driven approach and submit certificate requests upon certificate expiration for you, saving renewed certificates back to Kubernetes secrets. * Using the [API enrollment method](/documentation/platform/pki/enrollment-methods/api), you may push and auto-renew certificates to AWS and Azure using [certificate syncs](/documentation/platform/pki/certificate-syncs/overview). Certificates issued over the API enrollment method, where key pairs are generated server-side, are also eligible for server-side auto-renewal; once renewed, certificates are automatically pushed back to their sync destination. ## Guide to Downloading Certificates In the following steps, we explore different options for exporting already-issued certificates from Infisical in different formats for use in your applications and infrastructure. ### Download Latest Profile Certificate You can download the latest certificate issued against a [certificate profile](/documentation/platform/pki/certificates/profiles) using the [latest certificate bundle](/api-reference/endpoints/certificate-profiles/get-latest-active-bundle) endpoint. ### Download Specific Certificate To export a specific certificate, first navigate to your project's certificate inventory and locate the certificate you want to export. Click on the **Export Certificate** option from the certificate's action menu. pki export certificate option In the export modal, choose **PEM** as the format and click **Export**. pki export certificate pem The PEM export modal will display the certificate details including: * **Serial Number**: The unique identifier for the certificate * **Certificate Body**: The X.509 certificate in PEM format * **Certificate Chain**: The intermediate and root CA certificates * **Private Key**: The private key associated with the certificate (if available) pki export certificate pem modal You can copy each component individually or use the **Copy All** button to copy the complete certificate bundle. PEM format certificates can be used directly with most web servers and applications: * **Apache HTTP Server**: Configure SSL certificates in your virtual host * **Nginx**: Use the certificate and private key files in your server configuration * **Docker containers**: Mount certificate files for TLS-enabled applications * **Load balancers**: Upload PEM certificates to AWS ALB, Azure Application Gateway, etc. Example Nginx configuration: ```nginx theme={"dark"} server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/certificate.pem; ssl_certificate_key /path/to/private-key.pem; } ``` In the export modal, choose **PKCS12** as the format and provide the required configuration: pki export certificate pkcs12 * **Password**: A secure password to protect the PKCS12 keystore * **Alias**: A friendly name for the certificate within the keystore Click **Export** to generate and download the `.p12` file containing the certificate, certificate chain, and private key. PKCS12 files (`.p12` extension) are binary keystore files that contain the certificate, certificate chain, and private key in a single encrypted file: * **Java applications**: Import directly into Java KeyStore (JKS) or use with SSL/TLS * **Windows IIS**: Import the PKCS12 file for web server SSL configuration * **Browser certificates**: Install client certificates for authentication * **Mobile applications**: Deploy certificates to iOS and Android applications To verify the contents of a PKCS12 file: ```bash theme={"dark"} openssl pkcs12 -in certificate.p12 -nokeys -clcerts ``` To extract the private key: ```bash theme={"dark"} openssl pkcs12 -in certificate.p12 -nocerts -out private-key.pem ``` If you need to convert the PKCS12 file to Java KeyStore (JKS) format for applications running on Java 8 or earlier, use the following keytool command: ```bash theme={"dark"} keytool -importkeystore \ -srckeystore certificate.p12 \ -srcstoretype PKCS12 \ -srcstorepass \ -destkeystore certificate.jks \ -deststoretype JKS \ -deststorepass ``` Replace `` with the password you used when exporting the PKCS12 file, and `` with your desired JKS keystore password. The resulting `.jks` file can then be used with Java applications that require JKS format keystores. ## Guide to Revoking Certificates In the following steps, we explore how to revoke a X.509 certificate and obtain a Certificate Revocation List (CRL) for a CA. Assuming that you've issued a certificate under a CA, you can revoke it by selecting the **Revoke Certificate** option for it and specifying the reason for revocation. pki revoke certificate pki revoke certificate modal In order to check the revocation status of a certificate, you can check it against the CRL of a CA by heading to its Issuing CA and downloading the CRL. pki view crl To verify a certificate against the downloaded CRL with OpenSSL, you can use the following command: ```bash theme={"dark"} openssl verify -crl_check -CAfile chain.pem -CRLfile crl.pem cert.pem ``` Note that you can also obtain the CRL from the certificate itself by referencing the CRL distribution point extension on the certificate. To check a certificate against the CRL distribution point specified within it with OpenSSL, you can use the following command: ```bash theme={"dark"} openssl verify -verbose -crl_check -crl_download -CAfile chain.pem cert.pem ``` Assuming that you've issued a certificate under a CA, you can revoke it by making an API request to the [Revoke Certificate](/api-reference/endpoints/certificates/revoke) API endpoint, specifying the serial number of the certificate and the reason for revocation. ### Sample request ```bash Request theme={"dark"} curl --location --request POST 'https://app.infisical.com/api/v1/cert-manager/certificates//revoke' \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data-raw '{ "revocationReason": "UNSPECIFIED" }' ``` ### Sample response ```bash Response theme={"dark"} { message: "Successfully revoked certificate", serialNumber: "...", revokedAt: "..." } ``` In order to check the revocation status of a certificate, you can check it against the CRL of the issuing CA. To obtain the CRLs of the CA, make an API request to the [List CRLs](/api-reference/endpoints/certificate-authorities/crl) API endpoint. ### Sample request ```bash Request theme={"dark"} curl --location --request GET 'https://app.infisical.com/api/v1/cert-manager/ca/internal//crls' \ --header 'Authorization: Bearer ' ``` ### Sample response ```bash Response theme={"dark"} [ { id: "...", crl: "..." }, ... ] ``` To verify a certificate against the CRL with OpenSSL, you can use the following command: ```bash theme={"dark"} openssl verify -crl_check -CAfile chain.pem -CRLfile crl.pem cert.pem ``` # Overview Source: https://infisical.com/docs/documentation/platform/pki/certificates/overview To issue a certificate with Infisical, you create a certificate profile and a certificate template to go along with it. You then issue a certificate against a specific profile depending on the enrollment method associated with it. There are three components to understand: * [Certificate Profile](/documentation/platform/pki/certificates/profiles): A configuration set specifying how certificates should be issued under that profile including the [issuing CA](/documentation/platform/pki/ca/overview), a certificate template, and the [enrollment method](/documentation/platform/pki/enrollment-methods/overview) (such as ACME, EST, API, etc.) used to enroll certificates. * [Certificate Template](/documentation/platform/pki/certificates/templates): A policy structure specifying the permitted attributes for requested certificates including subject naming conventions, SAN fields, key usages, and extended key usages. * [Certificate](/documentation/platform/pki/certificates/certificates): The actual X.509 certificate issued for a profile. Once issued, a certificate kept track of in the certificate inventory. # Certificate Profiles Source: https://infisical.com/docs/documentation/platform/pki/certificates/profiles ## Concept A certificate profile is a configuration set specifying how leaf certificates should be issued for a group of end-entities including the [issuing CA](/documentation/platform/pki/ca/overview), a [certificate template](/documentation/platform/pki/certificates/templates), and the [enrollment method](/documentation/platform/pki/enrollment-methods/overview) (e.g. ACME, EST, API, etc.) used to enroll certificates. You typically request certificates against a certificate profile through its associated enrollment method. Each method defines its own interaction flow which you can read more about in its respective documentation. ## Guide to Creating a Certificate Profile To create a certificate profile, head to your Certificate Management Project > Certificates > Certificate Profiles and press **Create Profile**. pki certificate profile pki certificate profile modal Here's some guidance on each field: * Name: A slug-friendly name for the profile such as `web-servers`. * Description: An optional description for the profile. * Issuer Type: The type of issuer that should be used to issue certificates for the profile; this can be either `Certificate Authority` or `Self-Signed`. If `Self-Signed` is selected, then the profile will only support the API enrollment method and be used to issue self-signed certificates over REST API. * Issuing CA: The [issuing CA](/documentation/platform/pki/ca/overview) that should be used to issue certificates for the profile when the **Issuer Type** is set to `Certificate Authority`. * Certificate Template: The [certificate template](/documentation/platform/pki/certificates/templates) that should be used to validate certificate requests for the profile. * Enrollment Method: The enrollment method that should be used to enroll certificates for the profile such as ACME, EST, API, etc. Depending on which enrollment method you choose, you may be presented with additional enrollment-specific configuration fields. # Certificate Templates Source: https://infisical.com/docs/documentation/platform/pki/certificates/templates ## Concept A certificate template is a policy structure specifying permitted attributes for requested certificates. This includes constraints around subject naming conventions, SAN fields, key usages, and extended key usages. Each certificate requested against a [certificate profile](/documentation/platform/pki/certificates/profiles) is validated against the template bound to that profile. If the request fails any criteria included in the template, the certificate is not issued. This helps administrators enforce uniformity and security standards across all issued certificates. ## Guide to Creating a Certificate Template To create a certificate template, head to your Certificate Management Project > Certificates > Certificate Templates and press **Create Template**. pki certificate template pki certificate template modal Here's some guidance on each field: * Template Name: A slug-friendly name for the template such as `tls-server`. * Description: An optional description for the template. * Subject Attributes: A list of common names that can be included in the certificate subject. Each row accepts a fixed value or pattern such as `example.com` or `*.example.com` and whether it is allowed or denied. * Subject Alternative Names (SANs): A list of SANs that can appear in the certificate. Each row accepts a SAN type (e.g. DNS, IP, Email, URI), a fixed value or pattern such as `example.com` or `*.example.com`, and an allow or deny flag. * Allowed Signature Algorithms: The set of signature algorithms permitted to sign certificates under this template such as `SHA256-RSA`, `SHA512-RSA`, etc. * Allowed Key Algorithms: The set of public key algorithms permitted for certificate requests such as `RSA-2048`, `RSA-4096`, etc. * Key Usages: The cryptographic purposes of the certificate such as Digital Signature, Key Encipherment, etc. * Extended Key Usages: The higher-level intended uses of the certificate such as Server Authentication, Client Authentication, etc. * Certificate Validity: The maximum lifetime of certificates that can be requested for certificates validated against this template. You can specify both a duration and unit (days, months, or years). # Certificate Lifecycle Source: https://infisical.com/docs/documentation/platform/pki/concepts/certificate-lifecycle Learn what is the certificate lifecycle and how it works. ## Certificate Lifecycle Typically, a certificate goes through a series of stages during its lifetime from creation to retirement. This is called the certificate lifecycle. The exact names of these stages may vary from vendor to vendor, but they typically include [discovery](/documentation/platform/pki/concepts/certificate-lifecycle#discovery), [enrollment](/documentation/platform/pki/concepts/certificate-lifecycle#enrollment), [deployment](/documentation/platform/pki/concepts/certificate-lifecycle#deployment), [renewal](/documentation/platform/pki/concepts/certificate-lifecycle#renewal), [revocation](/documentation/platform/pki/concepts/certificate-lifecycle#revocation), and [retirement](/documentation/platform/pki/concepts/certificate-lifecycle#retirement). Note that not every stage is needed. For instance: * You are not required to discover certificates in order to start issuing and managing them. * You may not need to revoke a certificate explicitly if it expires naturally and is replaced during routine renewal. ## Discovery Certificate discovery is the process of identifying all active and inactive certificates across an environment, including those found on web servers, load balancers, services, and devices. A complete inventory prevents outages from forgotten certificates and creates the foundation for automation and monitoring. ## Enrollment (Request / Issuance) Certificate enrollment is the process of requesting a certificate from a CA and can follow different approaches depending on the system or protocol in use. Common approaches to certificate enrollment include: * CSR-based enrollment: The client generates a key pair locally and submits a Certificate Signing Request (CSR) to a CA for certificate issuance. * CSR-less enrollment: The client requests a certificate directly from a CA which may handle key generation internally and return the key pair in the response. Enrollment can be manually completed via API or fully automated using protocols like EST or ACME. The choice of enrollment method depends on security requirements, operational constraints, and integration context. ## Deployment Certificate deployment involves installing the issued certificate on the appropriate systems and services, such as web servers, load balancers, or internal endpoints. It can also include distributing or [synchronizing certificates](/documentation/platform/pki/certificate-syncs/overview) to external systems like cloud key stores (e.g., AWS Secrets Manager, Google Secret Manager, Azure Key Vault) so they can be securely consumed by workloads running in the cloud. Deployment can happen manually or through automated mechanisms such as configuration pipelines, agents, or webhook integrations. ## Renewal Certificate renewal is the process of requesting a new certificate from a CA before it expires to maintain trust and availability; this process can involve reusing the same key pair or rotating to a new one. The renewal process can be server-driven or client-driven: * Server-driven: Infisical automatically renews the certificate on your behalf. The renewed certificate is stored in the platform and can be synchronized to external systems such as cloud key stores. * Client-driven: An external client, such as an agent or workload, initiates the renewal against Infisical. This is useful when key material needs to remain under client control or when rotation is tied to application-specific logic. This flexibility allows certificates to be renewed in a way that aligns with different security, automation, and infrastructure models. ## Revocation Certificate revocation is the process of invalidating a certificate to prevent it from being used. This is required when a certificate is compromised, misconfigured, or no longer needed. The CA signals this status to clients through CRLs or OCSP. A new certificate can be issued and deployed if needed. ## Retirement Certificate retirement is the process of removing a certificate from the system. This is typically done when a certificate is no longer needed or has expired. # Certificate Management Source: https://infisical.com/docs/documentation/platform/pki/concepts/certificate-mgmt Learn what is certificate management and why it matters for building secure systems. ## What is a Certificate? A (digital) *certificate* is a file that is tied to a cryptographic key pair and is used to verify the identity of a website, user, device, or service. It helps establish trust and secure, encrypted communication between systems. For example, when you visit a website over HTTPS, your browser checks the TLS certificate deployed on the web server or load balancer to make sure it’s really the site it claims to be. If the certificate is valid, your browser establishes an encrypted connection with the server. Certificates contain information about the subject (who it identifies), the public key, and a digital signature from the CA that issued the certificate. They also include additional fields such as key usages, validity periods, and extensions that define how and where the certificate can be used. When a certificate expires, the service presenting it is no longer trusted, and clients won't be able to establish a secure connection to the service. ## What is Certificate Management? As infrastructure scales and systems become more distributed, certificates sprawl. Without proper visibility and automation in place, certificates scatter across IT infrastructure, creating blind spots that can lead to service outages when certificates aren't renewed in time. To solve certificate sprawl and avoid outages, organizations rely on certificate management: the practice of centralizing and automating the certificate lifecycle from issuance through renewal and revocation. A consistent approach makes it easier to keep certificates valid and trusted, reduce operational risk, and maintain secure communication across environments. # Certificate Enrollment via ACME Source: https://infisical.com/docs/documentation/platform/pki/enrollment-methods/acme ## Concept The ACME enrollment method allows Infisical to act as an ACME server. It lets you request and manage certificates against a specific [certificate profile](/documentation/platform/pki/certificates/profiles) using the [ACME protocol](https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment). This method is suitable for web servers, load balancers, and other general-purpose servers that can run an [ACME client](https://letsencrypt.org/docs/client-options/) for automated certificate management. Infisical's ACME enrollment method is based on [RFC 8555](https://datatracker.ietf.org/doc/html/rfc8555/). ## Prerequisites Install an [ACME client](https://letsencrypt.org/docs/client-options/) onto your server. This client will handle [ACME challenges](https://letsencrypt.org/docs/challenge-types/) and request/renew certificates from Infisical. ## Guide to Certificate Enrollment via ACME In the following steps, we explore how to issue a X.509 certificate using the ACME enrollment method. Create a [certificate profile](/documentation/platform/pki/certificates/profiles) with **ACME** selected as the enrollment method. pki acme config Once you've created the certificate profile, you can obtain its ACME configuration details by clicking the **Reveal ACME EAB** option on the profile. pki acme eab config From the ACME configuration, gather the following values: * ACME Directory URL: The URL that the ACME client will use to communicate with Infisical's ACME server. * EAB Key Identifier (KID): A unique identifier that tells Infisical which ACME account is making the request. * EAB Secret: A secret key that authenticates your ACME client with Infisical. Provide the **ACME Directory URL**, **EAB KID**, and **EAB Secret** from Step 2 to your ACME client to authenticate with Infisical and request a certificate. For example, if using [Certbot](https://certbot.eff.org/) as an ACME client, you can configure and start requesting certificates with the following command: ```bash theme={"dark"} sudo certbot certonly \ --standalone \ --server "https://your-infisical-instance.com/api/v1/cert-manager/certificate-profiles/{profile-id}/acme/directory" \ --eab-kid "your-eab-kid" \ --eab-hmac-key "your-eab-secret" \ -d example.infisical.com \ --email admin@example.com \ --agree-tos \ --non-interactive ``` Certbot stores the private key and resulting leaf certificate and full certificate chain in `/etc/letsencrypt/live/{domain-name}/`. For client-specific setup and usage instructions, refer to the documentation for your ACME client. # Certificate Enrollment via API Source: https://infisical.com/docs/documentation/platform/pki/enrollment-methods/api ## Concept The API enrollment method allows you to issue certificates against a specific [certificate profile](/documentation/platform/pki/certificates/profiles) over Web UI or by making an API request to Infisical. ## Guide to Certificate Enrollment via API In the following steps, we explore how to issue a X.509 certificate using the API enrollment method. Create a [certificate profile](/documentation/platform/pki/certificates/profiles) with **API** selected as the enrollment method. Notice that the API enrollment method supports an option called **Enable Auto-Renewal By Default**. If selected, *eligible* certificates are automatically considered for server-side auto-renewal based on a specified renewal days before expiration threshold at the time of issuance; for more information about server-side auto-renewal, refer to the documentation [here](/documentation/platform/pki/certificates/certificates#guide-to-renewing-certificates). To create a certificate, head to your Project > Certificates > Certificates and press **Issue**. pki certificates Here, select the certificate profile from step 1 that will be used to issue the certificate and fill out the rest of the details for the certificate to be issued. pki certificate issue modal Once you have created the certificate from step 1, you'll be presented with the certificate details including the **Certificate Body**, **Certificate Chain**, and **Private Key**. pki certificate body Make sure to download and store the **Private Key** in a secure location as it will only be displayed once at the time of certificate issuance. The **Certificate Body** and **Certificate Chain** will remain accessible and can be copied at any time. To create a certificate [profile](/documentation/platform/pki/certificates/profiles), make an API request to the [Create Certificate Profile](/api-reference/endpoints/certificate-profiles/create) API endpoint. ### Sample request ```bash Request theme={"dark"} curl --location --request POST 'https://app.infisical.com/api/v1/cert-manager/certificate-profiles' \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data-raw '{ "projectId": "", "caId": "", "certificateTemplateId": "", "slug": "my-api-profile", "description": "Certificate profile for API enrollment", "enrollmentType": "API", "apiConfig": { "autoRenew": true, "renewBeforeDays": 7 } }' ``` ### Sample response ```bash Response theme={"dark"} { "certificateProfile": { "id": "550e8400-e29b-41d4-a716-446655440000", "projectId": "65f0a4b0-c123-4567-8901-23456789abcd", "caId": "550e8400-e29b-41d4-a716-446655440000", "certificateTemplateId": "660f1234-e29b-41d4-a716-446655440001", "slug": "my-api-profile", "description": "Certificate profile for API enrollment", "enrollmentType": "API", "apiConfigId": "770g2345-e29b-41d4-a716-446655440002", "createdAt": "2023-01-19T09:44:36.267Z", "updatedAt": "2023-01-19T09:44:36.267Z" } } ``` To issue a certificate against the certificate profile, make an API request to the [Issue Certificate](/api-reference/endpoints/certificates/issue-certificate) API endpoint. ### Sample request ```bash Request theme={"dark"} curl --location --request POST 'https://app.infisical.com/api/v1/cert-manager/certificates/issue-certificate' \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data-raw '{ "profileId": "", "commonName": "service.acme.com", "ttl": "1y", "signatureAlgorithm": "RSA-SHA256", "keyAlgorithm": "RSA_2048", "keyUsages": ["digital_signature", "key_encipherment"], "extendedKeyUsages": ["server_auth"], "altNames": [ { "type": "DNS", "value": "service.acme.com" }, { "type": "DNS", "value": "www.service.acme.com" } ] }' ``` ### Sample response ```bash Response theme={"dark"} { "certificate": "-----BEGIN CERTIFICATE-----\nMIIEpDCCAowCCQD...\n-----END CERTIFICATE-----", "certificateChain": "-----BEGIN CERTIFICATE-----\nMIIEpDCCAowCCQD...\n-----END CERTIFICATE-----", "issuingCaCertificate": "-----BEGIN CERTIFICATE-----\nMIIEpDCCAowCCQD...\n-----END CERTIFICATE-----", "privateKey": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC...\n-----END PRIVATE KEY-----", "serialNumber": "123456789012345678", "certificateId": "880h3456-e29b-41d4-a716-446655440003" } ``` Make sure to store the `privateKey` as it is only returned once here at the time of certificate issuance. The `certificate` and `certificateChain` will remain accessible and can be retrieved at any time. If you have an external private key, you can also issue a certificate by making an API request containing a pem-encoded CSR (Certificate Signing Request) to the [Sign Certificate](/api-reference/endpoints/certificates/sign-certificate) API endpoint. ### Sample request ```bash Request theme={"dark"} curl --location --request POST 'https://app.infisical.com/api/v1/cert-manager/certificates/sign-certificate' \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data-raw '{ "profileId": "", "csr": "-----BEGIN CERTIFICATE REQUEST-----\nMIICvDCCAaQCAQAwdzELMAkGA1UEBhMCVVMxDTALBgNVBAgMBE9oaW8...\n-----END CERTIFICATE REQUEST-----", "ttl": "1y" }' ``` ### Sample response ```bash Response theme={"dark"} { "certificate": "-----BEGIN CERTIFICATE-----\nMIIEpDCCAowCCQD...\n-----END CERTIFICATE-----", "certificateChain": "-----BEGIN CERTIFICATE-----\nMIIEpDCCAowCCQD...\n-----END CERTIFICATE-----", "issuingCaCertificate": "-----BEGIN CERTIFICATE-----\nMIIEpDCCAowCCQD...\n-----END CERTIFICATE-----", "serialNumber": "123456789012345679", "certificateId": "990i4567-e29b-41d4-a716-446655440004" } ``` # Certificate Enrollment via EST Source: https://infisical.com/docs/documentation/platform/pki/enrollment-methods/est ## Concept The EST enrollment method allows you to issue and manage certificates against a specific [certificate profile](/documentation/platform/pki/certificates/profiles) using the [EST protocol](https://en.wikipedia.org/wiki/Enrollment_over_Secure_Transport). This method is suitable for environments requiring strong authentication and encrypted communication, such as in IoT, enterprise networks, and secure web services. Infisical's EST service is based on [RFC 7030](https://datatracker.ietf.org/doc/html/rfc7030) and implements the following endpoints: * **cacerts** - provides the necessary CA chain for the client to validate certificates issued by the CA. * **simpleenroll** - allows an EST client to request a new certificate from Infisical's EST server * **simplereenroll** - similar to the /simpleenroll endpoint but is used for renewing an existing certificate. These EST endpoints are exposed on port 8443 under the .well-known/est path and structured under `https://app.infisical.com:8443/.well-known/est/{profile_id}/...` ## Prerequisites * Your client devices need to have a bootstrap/pre-installed certificate. * Your client devices must trust the server certificates used by Infisical's EST server. If the devices are new or lack existing trust configurations, you need to manually establish trust for the appropriate certificates. For Infisical Cloud users, the devices must be configured to trust the [Amazon root CA certificates](https://www.amazontrust.com/repository). ## Guide to Certificate Enrollment via EST In the following steps, we explore how to issue a X.509 certificate using the EST enrollment method. Create a [certificate profile](/documentation/platform/pki/certificates/profiles) with **EST** selected as the enrollment method and fill in EST-specific configuration. pki est config Here's some guidance on each EST-specific configuration field: * Disable Bootstrap CA Validation: Enable this if your devices are not configured with a bootstrap certificate. * EST Passphrase: This is also used to authenticate your devices with Infisical's EST server. When configuring the clients, use the value defined here as the EST password. * CA Chain Certificate: This is the certificate chain used to validate your devices' manufacturing/pre-installed certificates. This will be used to authenticate your devices with Infisical's EST server. Once the EST enrollment method configuration is complete, you can use the ID of the associated certificate profile `profile_id` as the EST label when enrolling EST clients with Infisical. pki est label The complete URL structure of the supported EST endpoints may look like the following: * [https://app.infisical.com:8443/.well-known/est/\{profile\_id}/cacerts](https://app.infisical.com:8443/.well-known/est/\{profile_id}/cacerts) * [https://app.infisical.com:8443/.well-known/est/\{profile\_id}/simpleenroll](https://app.infisical.com:8443/.well-known/est/\{profile_id}/simpleenroll) * [https://app.infisical.com:8443/.well-known/est/\{profile\_id}/simplereenroll](https://app.infisical.com:8443/.well-known/est/\{profile_id}/simplereenroll) To use the EST passphrase in your clients, configure it as the EST password. The EST username can be set to any arbitrary value. Use the appropriate client certificates for invoking the EST endpoints. * For `simpleenroll`, use the bootstrapped/manufacturer client certificate. * For `simplereenroll`, use a valid EST-issued client certificate. When configuring the PKCS#12 objects for the client certificates, only include the leaf certificate and the private key. # Overview Source: https://infisical.com/docs/documentation/platform/pki/enrollment-methods/overview Enrollment methods determine how certificates are issued and managed for a [certificate profile](/documentation/platform/pki/certificates/profiles). Refer to the documentation for each enrollment method below to learn more about how to enroll certificates using it. * [API](/documentation/platform/pki/enrollment-methods/api): Enroll certificates via API. * [ACME](/documentation/platform/pki/enrollment-methods/acme): Enroll certificates using the ACME protocol. * [EST](/documentation/platform/pki/enrollment-methods/est): Enroll certificates using the EST protocol. Note that beyond using an enrollment method, you can also deliver a certificate to a target destination using supported [certificate syncs](https://infisical.com/docs/documentation/platform/pki/certificate-syncs/overview). # Apache Server Source: https://infisical.com/docs/documentation/platform/pki/integration-guides/apache-certbot Learn how to issue TLS certificates from Infisical using ACME enrollment on Apache Server with Certbot This guide demonstrates how to use Infisical to issue TLS certificates for your [Apache HTTP Server](https://httpd.apache.org/). It uses [Certbot](https://certbot.eff.org/), an installable [ACME](https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment) client, to request and renew certificates from Infisical using the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme) configured on a [certificate profile](/documentation/platform/pki/certificates/profiles). Apache benefits from excellent Certbot integration, allowing both certificate-only mode and automatic SSL configuration. ## Prerequisites Before you begin, make sure you have: * An [Apache HTTP Server](https://httpd.apache.org/) running on a Linux system with administrative access. * A [certificate profile](/documentation/platform/pki/certificates/profiles) configured with the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme) in Infisical. * Network connectivity from your Apache server to Infisical. * Port 80 open and reachable for ACME [HTTP-01](https://letsencrypt.org/docs/challenge-types/#http-01-challenge) validation. ## Guide Navigate to your certificate management project in Infisical and locate your [certificate profile](/documentation/platform/pki/certificates/profiles) configured with the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme). Certificate profile with ACME enrollment option Click the **Reveal ACME EAB** option to view the ACME configuration details. ACME configuration modal showing directory URL and EAB credentials From the ACME configuration, gather the following values: * ACME Directory URL: The URL that Certbot will use to communicate with Infisical's ACME server. This takes the form `https://your-infisical-instance.com/api/v1/cert-manager/certificate-profiles/{profile-id}/acme/directory`. * EAB Key Identifier (KID): A unique identifier that tells Infisical which ACME account is making the request. * EAB Secret: A secret key that authenticates your ACME client with Infisical. Keep your EAB credentials secure as they authenticate your ACME client with Infisical PKI. These credentials are unique to each [certificate profile](/documentation/platform/pki/certificates/profiles) and should not be shared. Install Certbot with the Apache plugin on the server where Apache is running by following the official Certbot [installation guide](https://certbot.eff.org/instructions). The installation guide provides up-to-date instructions for various Linux distributions and package managers, ensuring you get the most current version and proper Apache plugin integration. After installation, you can verify that Certbot has been installed correctly by running: ```bash theme={"dark"} certbot --version ``` Run the following command to request a certificate from Infisical: ```bash theme={"dark"} sudo certbot certonly \ --apache \ --server "https://your-infisical-instance.com/api/v1/cert-manager/certificate-profiles/{profile-id}/acme/directory" \ --eab-kid "your-eab-key-identifier" \ --eab-hmac-key "your-eab-secret" \ -d example.infisical.com \ --email admin@example.com \ --agree-tos \ --non-interactive ``` For guidance on each parameter: * `certonly`: Instructs Certbot to request a certificate without modifying your Apache configuration files; this mode is recommended if you prefer to manage your Apache SSL configuration manually or have a complex setup. * `--apache`: Specifies the Apache plugin so Certbot can solve the [HTTP-01](https://letsencrypt.org/docs/challenge-types/#http-01-challenge) challenge by creating temporary files served by Apache. * `--server`: The Infisical ACME directory URL from Step 1. This instructs Certbot to communicate with Infisical's ACME server instead of Let's Encrypt. * `--eab-kid`: Your External Account Binding (EAB) Key Identifier from Step 1. * `--eab-hmac-key`: The EAB secret associated with the KID from Step 1. * `-d`: Specifies the domain name for which the certificate is being requested. * `--email`: The contact email for expiration notices and account recovery. * `--agree-tos`: Accepts the ACME server's Terms of Service. * `--non-interactive`: Runs Certbot without prompting for user input (recommended for automation). The Certbot command generates a private key on your server, creates a Certificate Signing Request (CSR) using that key, and sends the CSR to Infisical for certificate issuance. Certbot stores the private key and resulting leaf certificate and full certificate chain in `/etc/letsencrypt/live/{domain-name}/`. If `--certonly` is used: Certbot does **not** modify your Apache configuration, so you must manually update your Apache virtual host to reference the new certificate files and reload the server to apply the changes. Here's an example SSL virtual host configuration for Apache: ```apache theme={"dark"} ServerName example.infisical.com DocumentRoot /var/www/html SSLEngine on SSLCertificateFile /etc/letsencrypt/live/example.infisical.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.infisical.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/example.infisical.com/chain.pem # Your existing configuration... ``` After updating the virtual host configuration, test and reload Apache to apply the changes: ```bash theme={"dark"} sudo apache2ctl configtest sudo systemctl reload apache2 ``` If `--certonly` was **not** used: Certbot uses installer mode, which attempts to automatically configure HTTPS by updating your Apache virtual host configuration and reloading the server if needed. At this point, your Apache server should be successfully serving HTTPS using the certificate issued by Infisical. After configuring Apache SSL, verify that your certificate was issued correctly and Apache is serving it properly. Check that the certificate files were created by Certbot: ```bash theme={"dark"} sudo ls -la /etc/letsencrypt/live/example.infisical.com/ ``` You should see files like: * `cert.pem` (your certificate) * `chain.pem` (certificate chain) * `fullchain.pem` (certificate + chain) * `privkey.pem` (private key) Certbot automatically installs a `systemd` timer during installation. This timer runs twice per day and checks whether any certificates are due for renewal. Because Certbot stores the ACME server URL and EAB credentials from your initial request, renewal will automatically use the same Infisical ACME configuration—no additional settings are required. Note that Certbot automatically renews certificates when they are within 30 days of expiration; renewal settings can be adjusted in `/etc/letsencrypt/renewal/{domain-name}.conf`. ```ini theme={"dark"} # ... your existing configuration ... renew_before_expiry = 30 days ``` To test the renewal process, run the following command: ```bash theme={"dark"} sudo certbot renew --dry-run ``` This command simulates the full renewal process without modifying your active certificate. If the dry run succeeds, automatic renewal will work as expected. To trigger an actual renewal immediately, run the following command: ```bash theme={"dark"} sudo certbot renew --force-renewal ``` Note that after a certificate is renewed, Apache must be reloaded so it can begin using the new certificate. To do this, run the following command: ```bash theme={"dark"} sudo systemctl reload apache2 ``` To automate the process of renewing a certificate and reloading Apache, you can create a simple deploy hook that Certbot will run after every successful renewal. Inside `/etc/letsencrypt/renewal-hooks/deploy/reload-apache.sh`, add the following: ```bash theme={"dark"} #!/bin/sh systemctl reload apache2 ``` Then make the hook executable: ```bash theme={"dark"} sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-apache.sh ``` Alternatively, you can use the `--post-hook` option when manually renewing: ```bash theme={"dark"} sudo certbot renew --post-hook "systemctl reload apache2" ``` Certbot automatically renews certificates when they are within 30 days of expiration using its built-in systemd timer. The deploy hook above will run after each successful renewal, handling the Apache reload automatically. Apache has native Certbot plugin integration, so no additional configuration is typically needed. # Gloo Mesh Source: https://infisical.com/docs/documentation/platform/pki/integration-guides/gloo-mesh Learn how to automatically provision and manage Istio intermediate CA certificates for Gloo Mesh using Infisical This guide will provide a high level overview on how you can use Infisical and [cert-manager](https://cert-manager.io/) to issue Istio intermediate CA certificates for your Gloo Mesh workload clusters. For more background about Istio certificates, see the [Istio CA overview](https://istio.io/latest/docs/concepts/security/#pki). ## Overview In this setup, we will use Infisical to generate and store your root CA and subordinate CAs that are used to generate Istio intermediate CAs for your Gloo Mesh workload clusters. To manage the lifecycle of Istio intermediate CA certificates, you'll also install [cert-manager](https://cert-manager.io/). Cert-manager is a Kubernetes controller that helps you automate the process of obtaining and renewing certificates from various PKI providers. With this approach, you get the following benefits: * Securely store your root CA certificates and private keys. * Leverage Infisical subordinate CAs for an extra layer of protection beneath your root CA. * Use cert-manager to automatically issue and renew Istio intermediate CA certificates from the same root, ensuring cross-cluster workload communication. * Increased auditability of private key infrastructure. ## General Setup The certificate provisioning workflow begins with setting up your PKI hierarchy in Infisical, where you create root and subordinate certificate authorities. When you deploy a `Certificate` CRD in your workload cluster, `cert-manager` uses the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme) configured on a [certificate profile](/documentation/platform/pki/certificates/profiles) to authenticate using EAB credentials and request an intermediate CA certificate. Infisical verifies the request against your certificate templates and returns the signed certificate. From there, Istio's control plane will automatically use this intermediate CA to sign leaf certificates for workloads in the service mesh, enabling secure mTLS communication across your entire Gloo Mesh infrastructure. Follow the [Kubernetes cert-manager guide](/documentation/platform/pki/k8s-cert-manager) for detailed instructions on how to set up the Infisical and cert-manager for your Istio intermediate CA certificates in Gloo Mesh clusters. For Gloo Mesh-specific configuration, ensure that: * The Certificate resource targets the `istio-system` namespace with `secretName: cacerts` * Certificate profiles in Infisical are configured for intermediate CA usage with appropriate key usage and constraints * Multiple workload clusters use the same Infisical root to enable cross-cluster mTLS communication ## Using the certificates Once the `cacerts` Kubernetes secret is created in the `istio-system` namespace, Istio automatically uses the custom CA certificate instead of the default self-signed certificate. When you deploy applications to your Gloo Mesh service mesh, the workloads will receive leaf certificates signed by your Infisical intermediate CA, enabling secure mTLS communication across your entire mesh infrastructure. # JBoss/WildFly Source: https://infisical.com/docs/documentation/platform/pki/integration-guides/jboss-certbot Learn how to issue TLS certificates from Infisical using ACME enrollment on JBoss/WildFly with Certbot This guide demonstrates how to use Infisical to issue TLS certificates for your [JBoss](https://www.jboss.org/)/[WildFly](https://wildfly.org/) application server. It uses [Certbot](https://certbot.eff.org/), an installable [ACME](https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment) client, to request and renew certificates from Infisical using the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme) configured on a [certificate profile](/documentation/platform/pki/certificates/profiles). JBoss/WildFly requires certificates in Java keystore format, which this guide addresses through the certificate conversion process. ## Prerequisites Before you begin, make sure you have: * A [JBoss](https://www.jboss.org/)/[WildFly](https://wildfly.org/) application server running on a Linux system with administrative access. * A [certificate profile](/documentation/platform/pki/certificates/profiles) configured with the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme) in Infisical. * Network connectivity from your JBoss/WildFly server to Infisical. * Port 80 open and reachable for ACME [HTTP-01](https://letsencrypt.org/docs/challenge-types/#http-01-challenge) validation. * [Java Development Kit (JDK)](https://openjdk.org/) installed for keystore management tools. ## Guide Navigate to your certificate management project in Infisical and locate your [certificate profile](/documentation/platform/pki/certificates/profiles) configured with the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme). Certificate profile with ACME enrollment option Click the **Reveal ACME EAB** option to view the ACME configuration details. ACME configuration modal showing directory URL and EAB credentials From the ACME configuration, gather the following values: * ACME Directory URL: The URL that Certbot will use to communicate with Infisical's ACME server. This takes the form `https://your-infisical-instance.com/api/v1/cert-manager/certificate-profiles/{profile-id}/acme/directory`. * EAB Key Identifier (KID): A unique identifier that tells Infisical which ACME account is making the request. * EAB Secret: A secret key that authenticates your ACME client with Infisical. Keep your EAB credentials secure as they authenticate your ACME client with Infisical PKI. These credentials are unique to each [certificate profile](/documentation/platform/pki/certificates/profiles) and should not be shared. Install Certbot on the server where JBoss/WildFly is running by following the official Certbot [installation guide](https://certbot.eff.org/instructions). The installation guide provides up-to-date instructions for various Linux distributions and package managers, ensuring you get the most current version of Certbot. After installation, you can verify that Certbot has been installed correctly by running: ```bash theme={"dark"} certbot --version ``` Since JBoss/WildFly doesn't have a native Certbot plugin, use the standalone authenticator to obtain certificates. **Important**: You must stop JBoss/WildFly before running this command as Certbot needs to bind to port 80 for the [HTTP-01](https://letsencrypt.org/docs/challenge-types/#http-01-challenge) challenge. Stop your JBoss/WildFly server: ```bash theme={"dark"} sudo systemctl stop wildfly # or for older JBoss versions # sudo systemctl stop jboss ``` Run the following command to request a certificate from Infisical: ```bash theme={"dark"} sudo certbot certonly \ --standalone \ --server "https://your-infisical-instance.com/api/v1/cert-manager/certificate-profiles/{profile-id}/acme/directory" \ --eab-kid "your-eab-key-identifier" \ --eab-hmac-key "your-eab-secret" \ -d example.infisical.com \ --email admin@example.com \ --agree-tos \ --non-interactive ``` For guidance on each parameter: * `certonly`: Instructs Certbot to request a certificate without modifying your JBoss/WildFly configuration; this mode is recommended because JBoss/WildFly requires certificates in Java keystore format rather than the PEM format that Certbot provides. * `--standalone`: Uses Certbot's standalone authenticator to solve the [HTTP-01](https://letsencrypt.org/docs/challenge-types/#http-01-challenge) challenge by starting a temporary web server on port 80. * `--server`: The Infisical ACME directory URL from Step 1. This instructs Certbot to communicate with Infisical's ACME server instead of Let's Encrypt. * `--eab-kid`: Your External Account Binding (EAB) Key Identifier from Step 1. * `--eab-hmac-key`: The EAB secret associated with the KID from Step 1. * `-d`: Specifies the domain name for which the certificate is being requested. * `--email`: The contact email for expiration notices and account recovery. * `--agree-tos`: Accepts the ACME server's Terms of Service. * `--non-interactive`: Runs Certbot without prompting for user input (recommended for automation). The Certbot command generates a private key on your server, creates a Certificate Signing Request (CSR) using that key, and sends the CSR to Infisical for certificate issuance. Certbot stores the private key and resulting leaf certificate and full certificate chain in `/etc/letsencrypt/live/{domain-name}/`. Because JBoss/WildFly requires certificates in Java keystore format, you'll need to convert the PEM certificates provided by Certbot in the next step. JBoss/WildFly requires certificates in Java keystore format rather than the PEM format provided by Certbot. Convert the PEM certificates to PKCS#12 format, which is supported by modern JBoss/WildFly versions. Create a PKCS#12 keystore from the PEM files: ```bash theme={"dark"} sudo openssl pkcs12 -export \ -out /opt/wildfly/standalone/configuration/keystore.p12 \ -inkey /etc/letsencrypt/live/example.infisical.com/privkey.pem \ -in /etc/letsencrypt/live/example.infisical.com/cert.pem \ -certfile /etc/letsencrypt/live/example.infisical.com/chain.pem \ -passout pass:changeit ``` Set appropriate file permissions for security: ```bash theme={"dark"} sudo chown wildfly:wildfly /opt/wildfly/standalone/configuration/keystore.p12 sudo chmod 600 /opt/wildfly/standalone/configuration/keystore.p12 ``` You will need to configure JBoss/WildFly to use the new keystore. This process varies depending on your JBoss/WildFly version and security configuration (legacy security realms vs. Elytron subsystem). Refer to your [JBoss](https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform)/[WildFly](https://docs.wildfly.org/) administration guide for specific SSL/TLS configuration steps. Replace `changeit` with a strong password and adjust the WildFly installation path based on your environment. Modern WildFly versions support PKCS#12 keystores directly, while older versions may require conversion to JKS format using the [keytool](https://docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html) utility. After configuring JBoss/WildFly SSL, verify that your certificate was issued correctly and the keystore was created properly. Check that the certificate files were created by Certbot: ```bash theme={"dark"} sudo ls -la /etc/letsencrypt/live/example.infisical.com/ ``` You should see files like: * `cert.pem` (your certificate) * `chain.pem` (certificate chain) * `fullchain.pem` (certificate + chain) * `privkey.pem` (private key) Verify the PKCS#12 keystore was created: ```bash theme={"dark"} sudo ls -la /opt/wildfly/standalone/configuration/keystore.p12 ``` Test the keystore contents (optional): ```bash theme={"dark"} sudo keytool -list -storetype PKCS12 -keystore /opt/wildfly/standalone/configuration/keystore.p12 -storepass changeit ``` Once you've configured JBoss/WildFly to use the keystore and restarted the service, you can verify HTTPS is working by accessing your application over SSL. Unlike standard web servers, JBoss/WildFly certificate renewal requires additional steps because certificates must be converted to Java keystore format and the application server must be restarted to use the new certificates. To test the renewal process without affecting your live certificates, run the following command: ```bash theme={"dark"} sudo certbot renew --dry-run ``` This command simulates the full renewal process without modifying your active certificate. If the dry run succeeds, the renewal mechanism itself will work as expected. For actual renewal, since JBoss/WildFly requires the standalone authenticator, you'll need to stop the server, perform the renewal, convert the certificate, and restart: ```bash theme={"dark"} # Stop JBoss/WildFly sudo systemctl stop wildfly # Renew the certificate sudo certbot renew --quiet # Convert to keystore format sudo openssl pkcs12 -export \ -out /opt/wildfly/standalone/configuration/keystore.p12 \ -inkey /etc/letsencrypt/live/example.infisical.com/privkey.pem \ -in /etc/letsencrypt/live/example.infisical.com/cert.pem \ -certfile /etc/letsencrypt/live/example.infisical.com/chain.pem \ -passout pass:changeit # Set permissions sudo chown wildfly:wildfly /opt/wildfly/standalone/configuration/keystore.p12 sudo chmod 600 /opt/wildfly/standalone/configuration/keystore.p12 # Start JBoss/WildFly sudo systemctl start wildfly ``` To automate this process, you can create a renewal script. Create `/etc/letsencrypt/renewal-hooks/deploy/jboss-renewal.sh`: ```bash theme={"dark"} #!/bin/bash # JBoss/WildFly certificate renewal hook DOMAIN="example.infisical.com" KEYSTORE_PATH="/opt/wildfly/standalone/configuration/keystore.p12" KEYSTORE_PASSWORD="changeit" # Convert certificate to keystore format openssl pkcs12 -export \ -out "$KEYSTORE_PATH" \ -inkey "/etc/letsencrypt/live/$DOMAIN/privkey.pem" \ -in "/etc/letsencrypt/live/$DOMAIN/cert.pem" \ -certfile "/etc/letsencrypt/live/$DOMAIN/chain.pem" \ -passout "pass:$KEYSTORE_PASSWORD" # Set permissions chown wildfly:wildfly "$KEYSTORE_PATH" chmod 600 "$KEYSTORE_PATH" # Restart WildFly to load new certificate systemctl restart wildfly ``` Make the hook executable: ```bash theme={"dark"} sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/jboss-renewal.sh ``` Certbot automatically renews certificates when they are within 30 days of expiration using its built-in systemd timer. The deploy hook above will run after each successful renewal, handling the keystore conversion and service restart automatically. Because JBoss/WildFly requires the standalone authenticator (which stops the service temporarily), plan for brief service interruptions during renewal. # Nginx Source: https://infisical.com/docs/documentation/platform/pki/integration-guides/nginx-certbot Learn how to issue TLS certificates from Infisical using ACME enrollment on Nginx with Certbot This guide demonstrates how to use Infisical to issue TLS certificates for your [Nginx](https://nginx.org/) server. It uses [Certbot](https://certbot.eff.org/), an installable [ACME](https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment) client, to request and renew certificates from Infisical using the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme) configured on a [certificate profile](/documentation/platform/pki/certificates/profiles). ## Prerequisites Before you begin, make sure you have: * An [Nginx](https://nginx.org/) web server running on a Linux system with administrative access. * A [certificate profile](/documentation/platform/pki/certificates/profiles) configured with the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme) in Infisical. * Network connectivity from your Nginx server to Infisical. * Port 80 open and reachable for ACME [HTTP-01](https://letsencrypt.org/docs/challenge-types/#http-01-challenge) validation. ## Guide Navigate to your certificate management project in Infisical and locate your [certificate profile](/documentation/platform/pki/certificates/profiles) configured with the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme). Certificate profile with ACME enrollment option Click the **Reveal ACME EAB** option to view the ACME configuration details. ACME configuration modal showing directory URL and EAB credentials From the ACME configuration, gather the following values: * ACME Directory URL: The URL that Certbot will use to communicate with Infisical's ACME server. This takes the form `https://your-infisical-instance.com/api/v1/cert-manager/certificate-profiles/{profile-id}/acme/directory`. * EAB Key Identifier (KID): A unique identifier that tells Infisical which ACME account is making the request. * EAB Secret: A secret key that authenticates your ACME client with Infisical. Keep your EAB credentials secure as they authenticate your ACME client with Infisical PKI. These credentials are unique to each [certificate profile](/documentation/platform/pki/certificates/profiles) and should not be shared. Install Certbot on the server where Nginx is running by following the official Certbot [installation guide](https://certbot.eff.org/instructions). The installation guide provides up-to-date instructions for various Linux distributions and package managers, ensuring you get the most current version and proper Nginx plugin integration. After installation, you can verify that Certbot has been installed correctly by running: ```bash theme={"dark"} certbot --version ``` Run the following command to request a certificate from Infisical: ```bash theme={"dark"} sudo certbot certonly \ --nginx \ --server "https://your-infisical-instance.com/api/v1/cert-manager/certificate-profiles/{profile-id}/acme/directory" \ --eab-kid "your-eab-key-identifier" \ --eab-hmac-key "your-eab-secret" \ -d example.infisical.com \ --email admin@example.com \ --agree-tos \ --non-interactive ``` For guidance on each parameter: * `certonly`: Instructs Certbot to request a certificate without modifying and reloading your Nginx configuration file(s); this mode is recommended if you prefer to manage your Nginx TLS configuration manually, use automation tools, or integrate certificates into an existing deployment workflow. * `--nginx`: Specifies the Nginx plugin so Certbot can solve the [HTTP-01](https://letsencrypt.org/docs/challenge-types/#http-01-challenge) challenge by creating temporary files served by Nginx. * `--server`: The Infisical ACME directory URL from Step 1. This instructs Certbot to communicate with Infisical's ACME server instead of Let's Encrypt. * `--eab-kid`: Your External Account Binding (EAB) Key Identifier from Step 1. * `--eab-hmac-key`: The EAB secret associated with the KID from Step 1. * `-d`: Specifies the domain name for which the certificate is being requested. * `--email`: The contact email for expiration notices and account recovery. * `--agree-tos`: Accepts the ACME server’s Terms of Service. * `--non-interactive`: Runs Certbot without prompting for user input (recommended for automation). The Certbot command generates a private key on your server, creates a Certificate Signing Request (CSR) using that key, and sends the CSR to Infisical for certificate issuance. Certbot stores the private key and resulting leaf certificate and full certificate chain in `/etc/letsencrypt/live/{domain-name}/`. If `--certonly` is used: Certbot does **not** modify your Nginx configuration, so you must manually update your Nginx server block to reference the new certificate files and reload the server to apply the changes. Here's how you can configure your server block: ```nginx theme={"dark"} server { listen 443 ssl; server_name example.infisical.com; ssl_certificate /etc/letsencrypt/live/example.infisical.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.infisical.com/privkey.pem; # ...your existing configuration... } ``` After updating the server block, you should test and reload Nginx to apply the changes: ```bash theme={"dark"} sudo nginx -t sudo systemctl reload nginx ``` If `--certonly` was **not** used: Certbot uses Nginx installer mode, which attempts to automatically configure HTTPS by updating your Nginx server block and reloading the server if needed. At this point, your Nginx server should be successfully serving HTTPS using the certificate issued by Infisical. After configuring Nginx SSL, verify that your certificate was issued correctly and Nginx is serving it properly. Check that the certificate files were created by Certbot: ```bash theme={"dark"} sudo ls -la /etc/letsencrypt/live/example.infisical.com/ ``` You should see files like: * `cert.pem` (your certificate) * `chain.pem` (certificate chain) * `fullchain.pem` (certificate + chain) * `privkey.pem` (private key) Certbot automatically installs a `systemd` timer during installation. This timer runs twice per day and checks whether any certificates are due for renewal. Because Certbot stores the ACME server URL and EAB credentials from your initial request, renewal will automatically use the same Infisical ACME configuration—no additional settings are required. Note that Certbot automatically renews certificates when they are within 30 days of expiration; renewal settings can be adjusted in `/etc/letsencrypt/renewal/{domain-name}.conf`. ```ini theme={"dark"} # ... your existing configuration ... renew_before_expiry = 30 days ``` To test the renewal process, run the following command: ```bash theme={"dark"} sudo certbot renew --dry-run ``` This command simulates the full renewal process without modifying your active certificate. If the dry run succeeds, automatic renewal will work as expected. To trigger an actual renewal immediately, run the following command: ```bash theme={"dark"} sudo certbot renew --force-renewal ``` Note that after a certificate is renewed, Nginx must be reloaded so it can begin using the new certificate. To do this, run the following command: ```bash theme={"dark"} systemctl reload nginx ``` To automate the process of renewing a certificate and reloading Nginx, you can create a simple deploy hook that Certbot will run after every successful renewal. Inside `/etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh`, add the following: ```bash theme={"dark"} #!/bin/sh systemctl reload nginx ``` Then make the hook executable: ```bash theme={"dark"} sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh ``` # Tomcat Source: https://infisical.com/docs/documentation/platform/pki/integration-guides/tomcat-certbot Learn how to issue TLS certificates from Infisical using ACME enrollment on Tomcat with Certbot This guide demonstrates how to use Infisical to issue TLS certificates for your [Apache Tomcat](https://tomcat.apache.org/) application server. It uses [Certbot](https://certbot.eff.org/), an installable [ACME](https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment) client, to request and renew certificates from Infisical using the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme) configured on a [certificate profile](/documentation/platform/pki/certificates/profiles). Unlike web servers with native Certbot plugins, Tomcat requires certificates to be manually configured after issuance. ## Prerequisites Before you begin, make sure you have: * An [Apache Tomcat](https://tomcat.apache.org/) application server running on a Linux system with administrative access. * A [certificate profile](/documentation/platform/pki/certificates/profiles) configured with the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme) in Infisical. * Network connectivity from your Tomcat server to Infisical. * Port 80 open and reachable for ACME [HTTP-01](https://letsencrypt.org/docs/challenge-types/#http-01-challenge) validation. ## Guide Navigate to your certificate management project in Infisical and locate your [certificate profile](/documentation/platform/pki/certificates/profiles) configured with the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme). Certificate profile with ACME enrollment option Click the **Reveal ACME EAB** option to view the ACME configuration details. ACME configuration modal showing directory URL and EAB credentials From the ACME configuration, gather the following values: * ACME Directory URL: The URL that Certbot will use to communicate with Infisical's ACME server. This takes the form `https://your-infisical-instance.com/api/v1/cert-manager/certificate-profiles/{profile-id}/acme/directory`. * EAB Key Identifier (KID): A unique identifier that tells Infisical which ACME account is making the request. * EAB Secret: A secret key that authenticates your ACME client with Infisical. Keep your EAB credentials secure as they authenticate your ACME client with Infisical PKI. These credentials are unique to each [certificate profile](/documentation/platform/pki/certificates/profiles) and should not be shared. Install Certbot on the server where Tomcat is running by following the official Certbot [installation guide](https://certbot.eff.org/instructions). The installation guide provides up-to-date instructions for various Linux distributions and package managers, ensuring you get the most current version of Certbot. After installation, you can verify that Certbot has been installed correctly by running: ```bash theme={"dark"} certbot --version ``` Since Tomcat doesn't have a native Certbot plugin, use the standalone authenticator to obtain certificates. **Important**: You must stop Tomcat before running this command as Certbot needs to bind to port 80 for the [HTTP-01](https://letsencrypt.org/docs/challenge-types/#http-01-challenge) challenge. Stop your Tomcat server: ```bash theme={"dark"} sudo systemctl stop tomcat ``` Run the following command to request a certificate from Infisical: ```bash theme={"dark"} sudo certbot certonly \ --standalone \ --server "https://your-infisical-instance.com/api/v1/cert-manager/certificate-profiles/{profile-id}/acme/directory" \ --eab-kid "your-eab-key-identifier" \ --eab-hmac-key "your-eab-secret" \ -d example.infisical.com \ --email admin@example.com \ --agree-tos \ --non-interactive ``` For guidance on each parameter: * `certonly`: Instructs Certbot to request a certificate without modifying your Tomcat configuration; this mode is recommended because Tomcat requires manual SSL connector configuration in its server.xml file. * `--standalone`: Uses Certbot's standalone authenticator to solve the [HTTP-01](https://letsencrypt.org/docs/challenge-types/#http-01-challenge) challenge by starting a temporary web server on port 80. * `--server`: The Infisical ACME directory URL from Step 1. This instructs Certbot to communicate with Infisical's ACME server instead of Let's Encrypt. * `--eab-kid`: Your External Account Binding (EAB) Key Identifier from Step 1. * `--eab-hmac-key`: The EAB secret associated with the KID from Step 1. * `-d`: Specifies the domain name for which the certificate is being requested. * `--email`: The contact email for expiration notices and account recovery. * `--agree-tos`: Accepts the ACME server's Terms of Service. * `--non-interactive`: Runs Certbot without prompting for user input (recommended for automation). The Certbot command generates a private key on your server, creates a Certificate Signing Request (CSR) using that key, and sends the CSR to Infisical for certificate issuance. Certbot stores the private key and resulting leaf certificate and full certificate chain in `/etc/letsencrypt/live/{domain-name}/`. Because Tomcat requires manual SSL configuration, you'll need to configure the SSL connector in your Tomcat server.xml file to reference these certificate files. You can restart Tomcat after the certificate is issued, but SSL won't be enabled until you complete the server configuration. ```bash theme={"dark"} sudo systemctl start tomcat ``` To enable SSL/TLS in Tomcat, you need to configure an SSL connector in the server.xml configuration file. Tomcat can use the PEM certificates directly without conversion to Java keystore format (available in Tomcat 8.5+ with the NIO or NIO2 connector). Edit your Tomcat server.xml file (typically located at `/opt/tomcat/conf/server.xml` or `/usr/share/tomcat/conf/server.xml`): ```xml theme={"dark"} ``` Restart Tomcat to apply the SSL configuration: ```bash theme={"dark"} sudo systemctl restart tomcat ``` You can verify SSL is working by accessing your Tomcat application at `https://example.infisical.com:8443`. For production deployments, consider configuring a reverse proxy (like [Apache HTTP Server](https://httpd.apache.org/) or [Nginx](https://nginx.org/)) to handle SSL termination on standard port 443. The certificate paths must be readable by the Tomcat user. You may need to adjust file permissions or copy the certificates to a location accessible by Tomcat. For security, ensure the private key file has restricted permissions (600) and is owned by the Tomcat user. After configuring Tomcat SSL, verify that your certificate was issued correctly and Tomcat is serving it properly. Check that the certificate files were created by Certbot: ```bash theme={"dark"} sudo ls -la /etc/letsencrypt/live/example.infisical.com/ ``` You should see files like: * `cert.pem` (your certificate) * `chain.pem` (certificate chain) * `fullchain.pem` (certificate + chain) * `privkey.pem` (private key) Unlike web servers with native Certbot plugins, Tomcat certificate renewal requires stopping the server, renewing the certificate, and restarting to load the new certificates. To test the renewal process without affecting your live certificates, run the following command: ```bash theme={"dark"} sudo certbot renew --dry-run ``` This command simulates the full renewal process without modifying your active certificate. If the dry run succeeds, the renewal mechanism will work as expected. For actual renewal, since Tomcat requires the standalone authenticator, you'll need to stop the server, perform the renewal, and restart: ```bash theme={"dark"} # Stop Tomcat sudo systemctl stop tomcat # Renew the certificate sudo certbot renew --quiet # Start Tomcat sudo systemctl start tomcat ``` **Important considerations for Tomcat renewal:** Because Tomcat uses the standalone authenticator, the server must be stopped during renewal. This creates a service interruption that requires manual coordination: 1. **Plan maintenance windows** for certificate renewals (typically every 60-90 days) 2. **Monitor renewal dates** to schedule downtime appropriately 3. **Consider load balancers** or multiple instances for high availability during renewals Create a deploy hook to automate post-renewal tasks. Create `/etc/letsencrypt/renewal-hooks/deploy/tomcat-renewal.sh`: ```bash theme={"dark"} #!/bin/bash # Tomcat certificate renewal hook # This runs AFTER Certbot successfully renews certificates DOMAIN="example.infisical.com" TOMCAT_USER="tomcat" # Ensure certificate files are readable by Tomcat chown root:$TOMCAT_USER "/etc/letsencrypt/live/$DOMAIN/cert.pem" chown root:$TOMCAT_USER "/etc/letsencrypt/live/$DOMAIN/privkey.pem" chown root:$TOMCAT_USER "/etc/letsencrypt/live/$DOMAIN/chain.pem" chown root:$TOMCAT_USER "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" # Set appropriate permissions chmod 640 "/etc/letsencrypt/live/$DOMAIN/cert.pem" chmod 640 "/etc/letsencrypt/live/$DOMAIN/privkey.pem" chmod 640 "/etc/letsencrypt/live/$DOMAIN/chain.pem" chmod 640 "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" # Start Tomcat (it was stopped for renewal) systemctl start tomcat # Wait for startup and verify service is running sleep 10 if ! systemctl is-active --quiet tomcat; then echo "ERROR: Tomcat failed to start after certificate renewal" exit 1 fi echo "Tomcat certificate renewal completed successfully" ``` Make the hook executable: ```bash theme={"dark"} sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/tomcat-renewal.sh ``` Certbot automatically renews certificates when they are within 30 days of expiration using its built-in systemd timer. The deploy hook above will run after each successful renewal, handling the certificate permissions and service restart automatically. Because Tomcat requires the standalone authenticator (which stops the service temporarily), plan for brief service interruptions during renewal. If you need to manually apply renewed certificates to Tomcat (when the deploy hook isn't used), follow these steps: **Step 1: Set certificate file permissions** After Certbot renews your certificates, ensure they're readable by Tomcat: ```bash theme={"dark"} sudo chown root:tomcat /etc/letsencrypt/live/example.infisical.com/cert.pem sudo chown root:tomcat /etc/letsencrypt/live/example.infisical.com/privkey.pem sudo chown root:tomcat /etc/letsencrypt/live/example.infisical.com/chain.pem sudo chmod 640 /etc/letsencrypt/live/example.infisical.com/cert.pem sudo chmod 640 /etc/letsencrypt/live/example.infisical.com/privkey.pem sudo chmod 640 /etc/letsencrypt/live/example.infisical.com/chain.pem ``` **Step 2: Restart Tomcat to load new certificates** ```bash theme={"dark"} sudo systemctl restart tomcat ``` That's it! Tomcat will automatically use the renewed certificates since your `server.xml` already points to the Let's Encrypt certificate files. Since Tomcat reads certificates from the file system on startup, you only need to restart the service after certificate renewal. The certificate file paths in `/etc/letsencrypt/live/` are symbolic links that automatically point to the latest certificates. # Windows Server Source: https://infisical.com/docs/documentation/platform/pki/integration-guides/windows-server-acme Learn how to issue TLS certificates from Infisical using ACME enrollment on Windows Server with win-acme This guide demonstrates how to use Infisical to issue TLS certificates for your [Windows Server](https://www.microsoft.com/en-us/windows-server) environments. It uses [win-acme](https://www.win-acme.com/), a feature-rich [ACME](https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment) client designed specifically for Windows, to request and renew certificates from Infisical using the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme) configured on a [certificate profile](/documentation/platform/pki/certificates/profiles). Win-acme offers excellent integration with IIS, Windows Certificate Store, and various certificate storage options. ## Prerequisites Before you begin, make sure you have: * A [Windows Server](https://www.microsoft.com/en-us/windows-server) instance running with administrative access. * A [certificate profile](/documentation/platform/pki/certificates/profiles) configured with the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme) in Infisical. * Network connectivity from your Windows Server to Infisical. ## Guide Navigate to your certificate management project in Infisical and locate your [certificate profile](/documentation/platform/pki/certificates/profiles) configured with the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme). Certificate profile with ACME enrollment option Click the **Reveal ACME EAB** option to view the ACME configuration details. ACME configuration modal showing directory URL and EAB credentials From the ACME configuration, gather the following values: * ACME Directory URL: The URL that win-acme will use to communicate with Infisical's ACME server. This takes the form `https://your-infisical-instance.com/api/v1/cert-manager/certificate-profiles/{profile-id}/acme/directory`. * EAB Key Identifier (KID): A unique identifier that tells Infisical which ACME account is making the request. * EAB Secret: A secret key that authenticates your ACME client with Infisical. Keep your EAB credentials secure as they authenticate your ACME client with Infisical PKI. These credentials are unique to each [certificate profile](/documentation/platform/pki/certificates/profiles) and should not be shared. Install win-acme on your Windows Server using one of the following methods. 1. Visit the [win-acme releases page](https://github.com/win-acme/win-acme/releases). 2. Download the latest stable release ZIP file. 3. Extract the contents to a folder (e.g., `C:\win-acme`). 4. Open Command Prompt or PowerShell as Administrator. 5. Navigate to the win-acme folder. ```powershell theme={"dark"} cd C:\win-acme ``` If you have [.NET Core](https://dotnet.microsoft.com/en-us/download) installed, you can install win-acme as a global tool: ```powershell theme={"dark"} dotnet tool install win-acme --global ``` This makes the `wacs` command available system-wide. Run the following win-acme command to request a certificate from Infisical: ```powershell theme={"dark"} wacs.exe --target manual --host example.infisical.com --baseuri "https://your-infisical-instance.com/api/v1/cert-manager/certificate-profiles/{profile-id}/acme/directory" --eab-key-identifier "your-eab-key-identifier" --eab-key "your-eab-secret" --validation selfhosting --store pemfiles --pemfilespath "C:\certificates" --verbose ``` For guidance on each parameter: * `--target manual`: Specifies manual target configuration for domain specification. * `--host`: The domain name for which the certificate is being requested. * `--baseuri`: The Infisical ACME directory URL from Step 1. This instructs win-acme to communicate with Infisical's ACME server instead of other ACME providers. * `--eab-key-identifier`: Your External Account Binding (EAB) Key Identifier from Step 1. * `--eab-key`: The EAB secret associated with the KID from Step 1. * `--validation selfhosting`: Uses self-hosting validation method to solve the [HTTP-01](https://letsencrypt.org/docs/challenge-types/#http-01-challenge) challenge. * `--store pemfiles`: Stores certificates as PEM files in a specified directory. * `--pemfilespath`: Directory where certificates will be saved on your Windows Server. * `--verbose`: Enables detailed logging for troubleshooting and monitoring the certificate request process. The win-acme command generates a private key on your server, creates a Certificate Signing Request (CSR) using that key, and sends the CSR to Infisical for certificate issuance. Win-acme stores the private key and resulting leaf certificate and full certificate chain in the specified directory path. Replace the placeholder values with your actual configuration: * `example.infisical.com`: Your actual domain name * `https://your-infisical-instance.com/api/v1/cert-manager/certificate-profiles/{profile-id}/acme/directory`: Your Infisical ACME endpoint from Step 1 * `your-eab-key-identifier` and `your-eab-secret`: Your External Account Binding credentials from Step 1 * `C:\certificates`: Your desired certificate storage location Win-acme supports various certificate storage options beyond PEM files. Here are common alternatives for different deployment scenarios: Store certificates directly in the [Windows Certificate Store](https://docs.microsoft.com/en-us/windows-hardware/drivers/install/certificate-stores) for integration with IIS and other Windows services: ```powershell theme={"dark"} wacs.exe --target manual --host example.infisical.com --baseuri "https://your-infisical-instance.com/api/v1/cert-manager/certificate-profiles/{profile-id}/acme/directory" --eab-key-identifier "your-eab-key-identifier" --eab-key "your-eab-secret" --validation selfhosting --store certificatestore --verbose ``` Generate [PFX files](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/certutil) with password protection for easy deployment across Windows environments: ```powershell theme={"dark"} wacs.exe --target manual --host example.infisical.com --baseuri "https://your-infisical-instance.com/api/v1/cert-manager/certificate-profiles/{profile-id}/acme/directory" --eab-key-identifier "your-eab-key-identifier" --eab-key "your-eab-secret" --validation selfhosting --store pfxfile --pfxfilepath "C:\certificates" --pfxpassword "your-secure-password" --verbose ``` For IIS Central SSL store integration in high-scale environments: ```powershell theme={"dark"} wacs.exe --target manual --host example.infisical.com --baseuri "https://your-infisical-instance.com/api/v1/cert-manager/certificate-profiles/{profile-id}/acme/directory" --eab-key-identifier "your-eab-key-identifier" --eab-key "your-eab-secret" --validation selfhosting --store centralssl --centralsslstore "C:\CentralSSL" --verbose ``` Win-acme can automatically create a [Windows Scheduled Task](https://docs.microsoft.com/en-us/windows/win32/taskschd/about-the-task-scheduler) for certificate renewal. Because win-acme stores the ACME server URL and EAB credentials from your initial request, renewal will automatically use the same Infisical ACME configuration—no additional settings are required. **Option 1: Enable during initial certificate request** Include the `--setuptaskscheduler` parameter in your initial command to automatically create the renewal task: ```powershell theme={"dark"} wacs.exe --target manual --host example.infisical.com --baseuri "https://your-infisical-instance.com/api/v1/cert-manager/certificate-profiles/{profile-id}/acme/directory" --eab-key-identifier "your-eab-key-identifier" --eab-key "your-eab-secret" --validation selfhosting --store pemfiles --pemfilespath "C:\certificates" --setuptaskscheduler --verbose ``` **Option 2: Test manual renewal** You can test the renewal process manually before setting up automation to ensure the configuration works correctly: ```powershell theme={"dark"} wacs.exe --renew --force --verbose ``` This command simulates the full renewal process and verifies that win-acme can successfully contact Infisical and renew your certificate using the stored configuration. **Option 3: Verify scheduled task creation** Check that the scheduled task was created successfully: ```powershell theme={"dark"} Get-ScheduledTask -TaskName "*win-acme*" ``` The automatic renewal task will: * Run under the SYSTEM account for elevated privileges. * Check certificates daily for renewal eligibility. * Automatically renew certificates that are within the renewal threshold (typically 30 days before expiration). * Log renewal activities to Windows Event Viewer and win-acme log files for monitoring and troubleshooting. Win-acme stores renewal configurations automatically in its settings directory, so once a certificate is created, the renewal process will use the same parameters (ACME endpoint, EAB credentials, storage options) for future renewals. The renewal threshold can be adjusted in the win-acme configuration files if needed. After successful certificate issuance, verify that the certificate files have been created correctly based on your chosen storage method. Check your specified PEM files directory to ensure all certificate components are present: ```powershell theme={"dark"} Get-ChildItem "C:\certificates" -Filter "*.pem" ``` You should see files like: * `example.infisical.com-crt.pem` (certificate) * `example.infisical.com-key.pem` (private key) * `example.infisical.com-chain.pem` (complete certificate chain) * `example.infisical.com-chain-only.pem` (only certificate chain) Windows Server Generated PEM files If you used the certificate store option, check that the certificate was properly installed using PowerShell: ```powershell theme={"dark"} Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {$_.Subject -like "*example.infisical.com*"} ``` The certificate should appear in the [Local Computer Personal certificate store](https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/working-with-certificates#certificate-stores), making it available for use with IIS, other Windows services, and applications that integrate with the Windows Certificate Store. # Kubernetes cert-manager Source: https://infisical.com/docs/documentation/platform/pki/k8s-cert-manager Learn how to automatically provision and manage TLS certificates in Kubernetes using Infisical ## Concept This guide demonstrates how to use Infisical to issue TLS certificates back to your Kubernetes environment using [cert-manager](https://cert-manager.io/). It uses the [ACME issuer type](https://cert-manager.io/docs/configuration/acme/) to request and renew certificates automatically from Infisical using the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme) configured on a [certificate profile](/documentation/platform/pki/certificates/profiles). The issuer is perfect at obtaining X.509 certificates for Ingresses and other Kubernetes resources and can automatically renew them before expiration. The typical workflow involves installing `cert-manager` and configuring resources that represent the connection details to Infisical as well as the certificates you want to issue. Each issued certificate and its corresponding private key are stored in a Kubernetes `Secret`. We recommend reading the official [cert-manager documentation](https://cert-manager.io/docs/) for a complete overview. For the ACME-specific configuration, refer to the [ACME section](https://cert-manager.io/docs/configuration/acme/). ## Workflow A typical workflow for using cert-manager with Infisical via ACME consists of the following steps: 1. Create a [certificate profile](/documentation/platform/pki/certificates/profiles) in Infisical with the [ACME enrollment method](/documentation/platform/pki/enrollment-methods/acme) configured on it. 2. Install `cert-manager` in your Kubernetes cluster. 3. Create a Kubernetes `Secret` containing the EAB (External Account Binding) credentials for the ACME certificate profile. 4. Create an `Issuer` or `ClusterIssuer` resource that connects to the desired Infisical [certificate profile](/documentation/platform/pki/certificates/profiles). 5. Create a `Certificate` resource defining the certificate you wish to issue and the target `Secret` where the certificate and private key will be stored. 6. Use the resulting Kubernetes `Secret` in your Ingresses or other resources. ## Guide The following steps show how to install cert-manager (using `kubectl`) and obtain certificates from Infisical. Follow the instructions [here](/documentation/platform/pki/enrollment-methods/acme) to create a certificate profile that uses ACME enrollment. After completion, you will have the following values: * **ACME Directory URL** * **EAB Key ID (KID)** * **EAB Secret** These will be needed in later steps. Currently, the Infisical ACME enrollment method only supports authentication via dedicated EAB credentials generated per certificate profile. Support for [Kubernetes Auth](/documentation/platform/identities/kubernetes-auth) is planned for the near future. Install cert-manager in your Kubernetes cluster by following the official guide [here](https://cert-manager.io/docs/installation/) or by applying the manifest directly: ```bash theme={"dark"} kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.19.1/cert-manager.yaml ``` Create a Kubernetes `Secret` that contains the **EAB Secret (HMAC key)** obtained in step 1. The cert-manager uses this secret to authenticate with the Infisical ACME server. ```bash theme={"dark"} kubectl create secret generic infisical-acme-eab-secret \ --namespace \ --from-literal=eabSecret= ``` ```yaml acme-eab-secret.yaml theme={"dark"} apiVersion: v1 kind: Secret metadata: name: infisical-acme-eab-secret namespace: data: eabSecret: ``` ```bash theme={"dark"} kubectl apply -f acme-eab-secret.yaml ``` Next, create a cert-manager `Issuer` (or `ClusterIssuer`) by replacing the placeholders ``, ``, and `` in the configuration below and applying it. This resource configures cert-manager to use your Infisical PKI collection's ACME server for certificate issuance. ```yaml issuer-infisical.yaml theme={"dark"} apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: issuer-infisical namespace: spec: acme: # ACME server URL from your Infisical certificate profile (Step 1) server: # Email address for ACME account # (any valid email works; currently ignored by Infisical) email: externalAccountBinding: # EAB Key ID from Step 1 keyID: # Reference to the Kubernetes Secret containing the EAB # HMAC key (created in Step 3) keySecretRef: name: infisical-acme-eab-secret key: eabSecret privateKeySecretRef: name: issuer-infisical-account-key solvers: - http01: ingress: # Replace with your actual ingress class if different className: nginx ``` ``` kubectl apply -f issuer-infisical.yaml ``` You can check that the issuer was created successfully by running the following command: ```bash theme={"dark"} kubectl get issuers.cert-manager.io -n -o wide ``` ```bash theme={"dark"} NAME AGE issuer-infisical 21h ``` * Currently, the Infisical ACME server only supports the HTTP-01 challenge and requires successful challenge completion before issuing certificates. Support for optional challenges and DNS-01 is planned for a future release. * An `Issuer` is namespace-scoped. Certificates can only be issued using an `Issuer` that exists in the same namespace as the `Certificate` resource. * If you need to issue certificates across multiple namespaces with a single resource, create a `ClusterIssuer` instead. The configuration is identical except `kind: ClusterIssuer` and no `metadata.namespace`. * More details: [https://cert-manager.io/docs/configuration/acme/](https://cert-manager.io/docs/configuration/acme/) Finally, request a certificate from Infisical ACME server by creating a cert-manager `Certificate` resource. This configuration file specifies the details of the (end-entity/leaf) certificate to be issued. ```yaml certificate-issuer.yaml theme={"dark"} apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: certificate-by-issuer namespace: spec: dnsNames: - certificate-by-issuer.example.com # name of the resulting Kubernetes Secret secretName: certificate-by-issuer # total validity period of the certificate duration: 48h # cert-manager will attempt renewal 12 hours before expiry renewBefore: 12h privateKey: algorithm: ECDSA # uses NIST P-256 curve size: 256 issuerRef: name: issuer-infisical ``` The above sample configuration file specifies a certificate to be issued with the dns name `certificate-by-issuer.example.com` and ECDSA private key using the P-256 curve, valid for 48 hours; the certificate will be automatically renewed by `cert-manager` 12 hours before expiry. The certificate is issued by the issuer `issuer-infisical` created in the previous step and the resulting certificate and private key will be stored in a secret named `certificate-by-issuer`. Note that the full list of the fields supported on the `Certificate` resource can be found in the API reference documentation [here](https://cert-manager.io/docs/reference/api-docs/#cert-manager.io/v1.CertificateSpec). You can check that the certificate was created successfully by running the following command: ```bash theme={"dark"} kubectl get certificates -n -o wide ``` ```bash theme={"dark"} NAME READY SECRET ISSUER STATUS AGE certificate-by-issuer True certificate-by-issuer issuer-infisical Certificate is up to date and has not expired 20h ``` Since the actual certificate and private key are stored in a Kubernetes secret, we can check that the secret was created successfully by running the following command: ```bash theme={"dark"} kubectl get secret certificate-by-issuer -n ``` ```bash theme={"dark"} NAME TYPE DATA AGE certificate-by-issuer kubernetes.io/tls 2 26h ``` We can `describe` the secret to get more information about it: ```bash theme={"dark"} kubectl describe secret certificate-by-issuer -n default ``` ```bash theme={"dark"} Name: certificate-by-issuer Namespace: default Labels: controller.cert-manager.io/fao=true Annotations: cert-manager.io/alt-names: cert-manager.io/certificate-name: certificate-by-issuer cert-manager.io/common-name: cert-manager.io/alt-names: certificate-by-issuer.example.com cert-manager.io/ip-sans: cert-manager.io/issuer-group: cert-manager.io cert-manager.io/issuer-kind: Issuer cert-manager.io/issuer-name: issuer-infisical cert-manager.io/uri-sans: Type: kubernetes.io/tls Data ==== ca.crt: 1306 bytes tls.crt: 2380 bytes tls.key: 227 bytes ``` Here, `ca.crt` is the Root CA certificate, `tls.crt` is the requested certificate followed by the certificate chain, and `tls.key` is the private key for the certificate. We can decode the certificate and print it out using `openssl`: ```bash theme={"dark"} kubectl get secret certificate-by-issuer -n default -o jsonpath='{.data.tls\.crt}' | base64 --decode | openssl x509 -text -noout ``` In any case, the certificate is ready to be used as Kubernetes Secret by your Kubernetes resources. ## FAQ The full list of the fields supported on the `Certificate` resource can be found in the API reference documentation [here](https://cert-manager.io/docs/reference/api-docs/#cert-manager.io/v1.CertificateSpec). Currently, not all fields are supported by the Infisical PKI ACME server. Yes. `cert-manager` will automatically renew certificates according to the `renewBefore` threshold of expiry as specified in the corresponding `Certificate` resource. You can read more about the `renewBefore` field [here](https://cert-manager.io/docs/reference/api-docs/#cert-manager.io/v1.CertificateSpec). # Certificate Management Source: https://infisical.com/docs/documentation/platform/pki/overview Manage Certificate Authorities and automate X.509 certificate lifecycle management. Infisical can be used to create and manage Certificate Authorities (CAs) and issue digital X.509 certificates. This allows you to manage PKI infrastructure and issue certificates for end-entities such as load balancers, web servers, devices, and more. It helps teams automate certificate management including enrollment and renewal, and adopt secure workflows to ensure certificates remain valid, trusted, and synchronized across infrastructure. Core capabilities include: * [Private CA](/documentation/platform/pki/ca/private-ca): Create and manage your own private CA hierarchy including root and intermediate CAs. * [External CA integration](/documentation/platform/pki/ca/external-ca): Integrate with external public and private CAs including [Azure ADCS](/documentation/platform/pki/ca/azure-adcs) and [ACME-compatible CAs](/documentation/platform/pki/ca/acme-ca) like Let's Encrypt and DigiCert. * [Certificate Enrollment](/documentation/platform/pki/enrollment-methods/overview): Support enrollment methods including [API](/documentation/platform/pki/enrollment-methods/api), [ACME](/documentation/platform/pki/enrollment-methods/acme), [EST](/documentation/platform/pki/enrollment-methods/est), and more to automate certificate issuance for services, devices, and workloads. * Certificate Inventory: Track and monitor issued X.509 certificates, maintaining a comprehensive inventory of all active and expired certificates. * Certificate Lifecycle Automation: Automate issuance, [renewal](/documentation/platform/pki/certificates/certificates#guide-to-renewing-certificates), and [revocation](/documentation/platform/pki/certificates/certificates#guide-to-revoking-certificates) with policy-based workflows, ensuring certificates remain valid, compliant, and up to date across your infrastructure. * [Certificate Syncs](/documentation/platform/pki/certificate-syncs/overview): Push certificates to cloud certificate managers like [AWS Certificate Manager](/documentation/platform/pki/certificate-syncs/aws-certificate-manager) and [Azure Key Vault](/documentation/platform/pki/certificate-syncs/azure-key-vault). * [Certificate Alerts](/documentation/platform/pki/alerting): Receive alerts and webhook events for certificate lifecycle changes such as certificate expiration. # Approval Workflows Source: https://infisical.com/docs/documentation/platform/pr-workflows Learn how to enable a set of policies to manage changes to sensitive secrets and environments. Approval Workflows is a paid feature. If you're using Infisical Cloud, then it is available under the **Pro Tier** and **Enterprise Tier**. If you're self-hosting Infisical, then you should contact [sales@infisical.com](mailto:sales@infisical.com) to purchase an enterprise license to use it. ## Problem at hand Updating secrets in high-stakes environments (e.g., production) can have a number of problematic issues: * Most developers should not have access to secrets in production environments. Yet, they are the ones who often need to add new secrets or change the existing ones. Many organizations have in-house policies with regards to what person should be contacted in the case of needing to make changes to secrets. This slows down software development lifecycle and distracts engineers from working on things that matter the most. * As a general rule, before making changes in production environments, those changes have to be looked over by at least another person. An extra pair of eyes can help reduce the risk of human error and make sure that the change will not affect the application in an unintended way. * After making updates to secrets, the corresponding applications need to be redeployed with the right set of secrets and configurations. This process is often not automated and hence prone to human error. ## Solution As a wide-spread software engineering practice, developers have to submit their code as a PR that needs to be approved before the code is merged into the main branch. In a similar way, to solve the above-mentioned issues, Infisical provides a feature called `Approval Workflows` for secret management. This is a set of policies and workflows that help advance access controls, compliance procedures, and stability of a particular environment. In other words, **Approval Workflows** help you secure, stabilize, and streamline the change of secrets in high-stakes environments. ### Setting a policy First, you would need to create a set of policies for a certain environment. In the example below, a generic change policy for a production environment is shown. In this case, any user who submits a change to `prod` would first have to get an approval by a predefined approver (or multiple approvers). create secret update policy ### Policy enforcement levels The enforcement level determines how strict the policy is. A **Hard** enforcement level means that any change that matches the policy will need full approval prior merging. A **Soft** enforcement level allows for break glass functionality on the request. If a change request is bypassed, the approvers will be notified via email. Enabling the "Bypass Approvals" toggle during policy creation will create a **Soft** enforcement level. Disabling the toggle makes the enforcement level **Hard**. If you choose to allow approval bypasses (Soft Enforcement), you may select specific users or groups that can perform the bypass for that specific policy. Not choosing users or groups will allow anyone to bypass the policy. A policy bypasser cannot bypass requests from others; the bypass action can only be performed by the request creator. ### Self approvals If the **Self Approvals** option is enabled, users who are designated as approvers on the policy can approve requests that they themselves have submitted. ### Example of creating a change policy When creating a policy, you can choose the type of policy you want to create. In this case, we will be creating a `Change Policy`. Other types of policies include `Access Policy` that creates policies for **[Access Requests](/documentation/platform/access-controls/access-requests)**. create panel secret update policy ### Example of updating secrets with Approval workflows When a user submits a change to an environment that is under a particular policy, a corresponding change request will go to a predefined approver (or multiple approvers). secret update change requests Approvers are notified by email and/or Slack as soon as the request is initiated. In the Infisical Dashboard, they will be able to `approve` and `merge` (or `deny`) a request for a change in a particular environment. After that, depending on the workflows setup, the change will be automatically propagated to the right applications (e.g., using [Infisical Kubernetes Operator](https://infisical.com/docs/integrations/platforms/kubernetes)). secrets update pull request ## FAQ Yes, if you'd like to require an approval from an approver other than the one who created the request, then you can disable the **Self Approvals** feature inside of your target policy. # Overview Source: https://infisical.com/docs/documentation/platform/project Learn more and understand the concept of Infisical projects. ## Projects A project defines a specific scope of work for a given product line in Infisical. Projects are created within an [organization](/documentation/platform/organization), and an organization can contain multiple projects across different product types. ## Project Types Infisical supports project types, each representing a different security product with its own dashboard, workflows, and capabilities. project types The supported project types are: * [Secrets Management](/documentation/platform/secrets-mgmt/overview): Securely store, access, and distribute secrets across environments with fine-grained controls, automatic rotation, and audit logging. * [Secrets Scanning](/documentation/platform/secret-scanning/overview): Detect hardcoded secrets in code, CI pipelines, and infrastructure—integrated with GitHub, GitLab, Bitbucket, and more. * [Infisical PKI](/documentation/platform/pki/overview): Issue and manage X.509 certificates using protocols like EST, with support for internal and external CAs. * [Infisical SSH](/documentation/platform/ssh/overview): Provide short-lived SSH access to servers using certificate-based authentication, replacing static keys with policy-driven, time-bound control. * [Infisical KMS](/documentation/platform/kms/overview): Encrypt and decrypt data using centrally managed keys with enforced access policies and full audit visibility. * [Infisical PAM](/documentation/platform/pam/overview): Manage access to resources like databases, servers, and accounts with policy-based controls and approvals. ## Roles and Access Control [Users](/documentation/platform/identities/user-identities) and [machine identities](/documentation/platform/identities/machine-identities) must be added to a project to access its resources. Each identity is assigned a [project-level role](/documentation/platform/access-controls/role-based-access-controls#project-level-access-controls) that defines what they can manage—such as secrets, certificates, or SSH access. These roles apply to both individuals and [user groups](/documentation/platform/groups), enabling scalable access across teams and environments. Project access is strictly scoped: only members of a project can view or manage its resources. If someone needs access but isn’t part of the project, they can submit an access request. Each project in Infisical has its own [access control model](/documentation/platform/access-controls/role-based-access-controls#project-level-access-controls), distinct from [organization-level access control](/documentation/platform/access-controls/role-based-access-controls#organization-level-access-controls). While organization roles govern broader administrative access, project-level roles control what users, groups, and machine identities can do within the boundaries of a specific project—such as managing secrets, issuing certificates, or configuring SSH access. Depending on the project type (e.g. Secrets Management, PKI, SSH), project-level access control supports advanced features like [temporary access](/documentation/platform/access-controls/temporary-access), [access requests](/documentation/platform/access-controls/access-requests), and [additional privileges](/documentation/platform/access-controls/additional-privileges). project roles To learn more about how permissions work in detail, refer to the [access control documentation](/documentation/platform/access-controls/overview). ## Audit Logs Infisical provides [audit logging](/documentation/platform/audit-logs) at the project level to help teams monitor activity and maintain accountability within a specific project. These logs capture all relevant events—such as secret access, certificate issuance, and SSH activity—that occur within the boundaries of that project. Unlike the organization-level audit view, which aggregates logs across all projects in one centralized interface, the project-level audit view is scoped to a single project. This enables relevant project admins and contributors to review activity relevant to their work without having broader access to audit logs in other projects that they are not part of. ## Project Settings Each project has its own settings panel, with options that vary depending on the selected product type. These may include setup and configuration for environments, tags, behaviors, encryption strategies, and other options. Project settings are fully independent and reflect the capabilities of the associated product. # Project Templates Source: https://infisical.com/docs/documentation/platform/project-templates Learn how to manage and apply project templates ## Concept Project Templates streamline your ability to set up projects by providing customizable templates to configure projects quickly with a predefined set of environments and roles. Project Templates is a paid feature. If you're using Infisical Cloud, then it is available under the **Enterprise Tier**. If you're self-hosting Infisical, then you should contact [team@infisical.com](mailto:team@infisical.com) to purchase an enterprise license to use it. ## Workflow The typical workflow for using Project Templates consists of the following steps: 1. Creating a project template: As part of this step, you will configure a set of environments and roles to be created when applying this template to a project. 2. Using a project template: When creating new projects, optionally specify a project template to provision the project with the configured roles and environments. Note that this workflow can be executed via the Infisical UI or through the API. ## Guide to Creating a Project Template In the following steps, we'll explore how to set up a project template. Navigate to the **Project Templates** tab on the Feature Settings page for the project type you want to create a template for and tap on the **Add Template** button. project template add button Specify your template details. Here's some guidance on each field: * Name: A slug-friendly name for the template. * Description: An optional description of the intended usage of this template. project template create modal Once your template is created, you'll be directed to the configuration section. project template edit form Customize the environments and roles to your needs. project template customized Be sure to save your environment and role changes. To create a project template, make an API request to the [Create Project Template](/api-reference/endpoints/project-templates/create) API endpoint. ### Sample request ```bash Request theme={"dark"} curl --request POST \ --url https://app.infisical.com/api/v1/project-templates \ --header 'Content-Type: application/json' \ --data '{ "name": "my-project-template", "type": "secret-manager", "description": "...", "environments": "[...]", "roles": "[...]", }' ``` ### Sample response ```bash Response theme={"dark"} { "projectTemplate": { "id": "", "name": "my-project-template", "description": "...", "environments": "[...]", "roles": "[...]", "orgId": "", "createdAt": "2023-11-07T05:31:56Z", "updatedAt": "2023-11-07T05:31:56Z", } } ``` ## Guide to Using a Project Template In the following steps, we'll explore how to use a project template when creating a project. When creating a new project, select the desired template from the dropdown menu in the create project modal. kms key options Your project will be provisioned with the configured template roles and environments. To use a project template, make an API request to the [Create Project](/api-reference/endpoints/projects/create-project) API endpoint with the specified template name included. ### Sample request ```bash Request theme={"dark"} curl --request POST \ --url https://app.infisical.com/api/v1/projects \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "projectName": "My Project", "template": "", // defaults to "default" }' ``` ### Sample response ```bash Response theme={"dark"} { "project": { "id": "", "environments": "[...]", // configured environments ... } } ``` Note that configured roles are not included in the project response. ## FAQ No. Project templates only apply at the time of project creation. # Azure SCIM Source: https://infisical.com/docs/documentation/platform/scim/azure Learn how to configure SCIM provisioning with Azure for Infisical. Azure SCIM provisioning is a paid feature. If you're using Infisical Cloud, then it is available under the **Enterprise Tier**. If you're self-hosting Infisical, then you should contact [sales@infisical.com](mailto:sales@infisical.com) to purchase an enterprise license to use it. Prerequisites: * [Configure Azure SAML for Infisical](/documentation/platform/sso/azure) In Infisical, head to the **Single Sign-On (SSO)** page and select the **Provisioning** tab. Under SCIM Configuration, press the **Enable SCIM provisioning** toggle to allow Azure to provision/deprovision users for your organization. SCIM enable provisioning Next, press **Manage SCIM Tokens** and then **Create** to generate a SCIM token for Azure. SCIM create token Next, copy the **SCIM URL** and **New SCIM Token** to use when configuring SCIM in Azure. SCIM copy token In Azure, navigate to Enterprise Application > Users and Groups. Add any users and/or groups to your application that you would like to be provisioned over to Infisical. SCIM Azure Users and Groups In Azure, head to your Enterprise Application > Provisioning > Overview and press **Get started**. SCIM Azure Next, set the following fields: * Provisioning Mode: Select **Automatic**. * Tenant URL: Input **SCIM URL** from Step 1. * Secret Token: Input the **New SCIM Token** from Step 1. Afterwards, click **Enable SCIM** and press the **Test Connection** button to check that SCIM is configured properly. SCIM Azure After you hit **Save**, select **Provision Microsoft Entra ID Users** under the **Mappings** subsection. SCIM Azure Next, adjust the mappings so you have them configured as below: SCIM Azure Finally, head to your Enterprise Application > Provisioning and set the **Provisioning Status** to **On**. SCIM Azure Alternatively, you can go to **Overview** and press **Start provisioning** to have Azure start provisioning/deprovisioning users to Infisical. SCIM Azure Now Azure can provision/deprovision users to/from your organization in Infisical. **FAQ** Infisical's SCIM implmentation accounts for retaining the end-to-end encrypted architecture of Infisical because we decouple the **authentication** and **decryption** steps in the platform. For this reason, SCIM-provisioned users are initialized but must finish setting up their account when logging in the first time by creating a master encryption/decryption key. With this implementation, IdPs and SCIM providers cannot and will not have access to the decryption key needed to decrypt your secrets. # SCIM Group Mappings Source: https://infisical.com/docs/documentation/platform/scim/group-mappings Learn how to enhance your SCIM implementation using group mappings SCIM provisioning, and by extension group mapping, is a paid feature. If you're using Infisical Cloud, then it is available under the **Enterprise Tier**. If you're self-hosting Infisical, then you should contact [sales@infisical.com](mailto:sales@infisical.com) to purchase an enterprise license to use it. ## SCIM Group to Organization Role Mapping By default, when users are provisioned via SCIM, they will be assigned the default organization role configured in [Organization General Settings](/documentation/platform/organization#settings). For more precise control over membership roles, you can set up SCIM Group to Organization Role Mappings. This enables you to assign specific roles based on the group from which a user is provisioned. SCIM Group Mapping To configure a mapping, simply enter the SCIM group's name and select the role you would like users to be assigned from this group. Be sure to tap **Update Mappings** once complete. SCIM Group Mappings only apply when users are first provisioned. Previously provisioned users will not be affected, allowing you to customize user roles after they are added. # JumpCloud SCIM Source: https://infisical.com/docs/documentation/platform/scim/jumpcloud Learn how to configure SCIM provisioning with JumpCloud for Infisical. JumpCloud SCIM provisioning is a paid feature. If you're using Infisical Cloud, then it is available under the **Enterprise Tier**. If you're self-hosting Infisical, then you should contact [sales@infisical.com](mailto:sales@infisical.com) to purchase an enterprise license to use it. Prerequisites: * [Configure JumpCloud SAML for Infisical](/documentation/platform/sso/jumpcloud) In Infisical, head to the **Single Sign-On (SSO)** page and select the **Provisioning** tab. Under SCIM Configuration, press the **Enable SCIM provisioning** toggle to allow JumpCloud to provision/deprovision users and user groups for your organization. SCIM enable provisioning Next, press **Manage SCIM Tokens** and then **Create** to generate a SCIM token for JumpCloud. SCIM create token Next, copy the **SCIM URL** and **New SCIM Token** to use when configuring SCIM in JumpCloud. SCIM copy token In JumpCloud, head to your Application > Identity Management > Configuration settings and make sure that **API Type** is set to **SCIM API** and **SCIM Version** is set to **SCIM 2.0**. SCIM JumpCloud Next, set the following SCIM connection fields: * Base URL: Input the **SCIM URL** from Step 1. * Token Key: Input the **New SCIM Token** from Step 1. * Test User Email: Input a test user email to be used by JumpCloud for testing the SCIM connection. Alos, under HTTP Header > Authorization: Bearer, input the **New SCIM Token** from Step 1. SCIM JumpCloud Next, press **Test Connection** to check that SCIM is configured properly. Finally, press **Activate** to have JumpCloud start provisioning/deprovisioning users to Infisical. SCIM JumpCloud Now JumpCloud can provision/deprovision users and user groups to/from your organization in Infisical. **FAQ** Infisical's SCIM implmentation accounts for retaining the end-to-end encrypted architecture of Infisical because we decouple the **authentication** and **decryption** steps in the platform. For this reason, SCIM-provisioned users are initialized but must finish setting up their account when logging in the first time by creating a master encryption/decryption key. With this implementation, IdPs and SCIM providers cannot and will not have access to the decryption key needed to decrypt your secrets. # Okta SCIM Source: https://infisical.com/docs/documentation/platform/scim/okta Learn how to configure SCIM provisioning with Okta for Infisical. Okta SCIM provisioning is a paid feature. If you're using Infisical Cloud, then it is available under the **Enterprise Tier**. If you're self-hosting Infisical, then you should contact [sales@infisical.com](mailto:sales@infisical.com) to purchase an enterprise license to use it. Prerequisites: * [Configure Okta SAML for Infisical](/documentation/platform/sso/okta) In Infisical, head to the **Single Sign-On (SSO)** page and select the **Provisioning** tab. Under SCIM Configuration, press the **Enable SCIM provisioning** toggle to allow Okta to provision/deprovision users and user groups for your organization. SCIM enable provisioning Next, press **Manage SCIM Tokens** and then **Create** to generate a SCIM token for Okta. SCIM create token Next, copy the **SCIM URL** and **New SCIM Token** to use when configuring SCIM in Okta. SCIM copy token In Okta, head to your Application > General > App Settings. Next, select **Edit** and check the box labled **Enable SCIM provisioning**. SCIM Okta Next, head to Provisioning > Integration and set the following SCIM connection fields: * SCIM connector base URL: Input the **SCIM URL** from Step 1. * Unique identifier field for users: Input `email`. * Supported provisioning actions: Select **Push New Users**, **Push Profile Updates**, and **Push Groups**. * Authentication Mode: `HTTP Header`. SCIM Okta Under HTTP Header > Authorization: Bearer, input the **New SCIM Token** from Step 1. SCIM Okta Next, press **Test Connector Configuration** to check that SCIM is configured properly. SCIM Okta Next, head to Provisioning > To App and check the boxes labeled **Enable** for **Create Users**, **Update User Attributes**, and **Deactivate Users**. SCIM Okta Now Okta can provision/deprovision users and user groups to/from your organization in Infisical. **FAQ** Infisical's SCIM implmentation accounts for retaining the end-to-end encrypted architecture of Infisical because we decouple the **authentication** and **decryption** steps in the platform. For this reason, SCIM-provisioned users are initialized but must finish setting up their account when logging in the first time by creating a master encryption/decryption key. With this implementation, IdPs and SCIM providers cannot and will not have access to the decryption key needed to decrypt your secrets. # SCIM Overview Source: https://infisical.com/docs/documentation/platform/scim/overview Learn how to provision users for Infisical via SCIM. SCIM provisioning can only be enabled when either SAML or OIDC is setup for the organization. SCIM provisioning is a paid feature. If you're using Infisical Cloud, then it is available under the **Enterprise Tier**. If you're self-hosting Infisical, then you should contact [sales@infisical.com](mailto:sales@infisical.com) to purchase an enterprise license to use it. You can configure your organization in Infisical to have users and user groups be provisioned/deprovisioned using [SCIM](https://scim.cloud/#Implementations2) via providers like Okta, Azure, JumpCloud, etc. * Provisioning: The SCIM provider pushes user information to Infisical. If the user exists in Infisical, Infisical sends an email invitation to add them to the relevant organization in Infisical; if not, Infisical initializes a new user and sends them an email invitation to finish setting up their account in the organization. * Deprovisioning: The SCIM provider instructs Infisical to remove user(s) from an organization in Infisical. SCIM providers: * [Okta SCIM](/documentation/platform/scim/okta) * [Azure SCIM](/documentation/platform/scim/azure) * [JumpCloud SCIM](/documentation/platform/scim/jumpcloud) * [PingOne SCIM](/documentation/platform/scim/pingone) # PingOne SCIM Source: https://infisical.com/docs/documentation/platform/scim/pingone Learn how to configure SCIM provisioning with PingOne for Infisical. PingOne SCIM provisioning is a paid feature. If you're using Infisical Cloud, then it is available under the **Enterprise Tier**. If you're self-hosting Infisical, then you should contact [sales@infisical.com](mailto:sales@infisical.com) to purchase a self-hosted license to use it. Prerequisites: * [Configure PingOne OIDC for Infisical](/documentation/platform/sso/pingone-oidc) In Infisical, head to the **Single Sign-On (SSO)** page and select the **Provisioning** tab. Under SCIM Configuration, press the **Enable SCIM provisioning** toggle to allow PingOne to provision/deprovision users for your organization. SCIM enable provisioning Next, press **Manage SCIM Tokens** and then **Create** to generate a SCIM token for PingOne. SCIM create token Next, copy the **SCIM URL** and **New SCIM Token** to use when configuring SCIM in PingOne. SCIM copy token Inside your PingOne environment, navigate to Directory > Users. Add any users and/or groups to your application that you would like to be provisioned over to Infisical. SCIM PingOne Users and Groups **1. Create a new connection** In PingOne, head to Integrations > Provisioning, and inside provisioning, press the **Connections** tab. Here you'll see a plus icon to add a new connection. SCIM PingOne Connections SCIM PingOne Connections Select the "Identity Store" option. SCIM PingOne SCIM Outbound Search for the "SCIM Outbound" option to start the configuration process for SCIM. Finally, press the **Next** button. Give the connection a name and optionally add a description. **2. Configure the connection** Once you have selected the SCIM Outbound option, you'll be prompted to enter the authentication details that PingOne will use to authenticate with Infisical SCIM. This is the **SCIM URL** and **New SCIM Token** from the previous step. SCIM PingOne SCIM Outbound Set the following fields: * `SCIM BASE URL`: Input the **SCIM URL** from the previous step. * `Users Resource`: Leave as default, `/Users`. * `Groups Resource`: Leave as default, `/Groups`. * `SCIM Version`: Leave as default, `2.0`. * `Authentication Method`: Select `OAuth 2 Bearer Token`. * `Oauth Access Token`: Input the **New SCIM Token** from step 1. * `Auth Type Header`: Select `Bearer`. Once this is done, you can press the **Test Connection** button to check that SCIM is configured properly. You should see a success message saying "Connection Successful". If the connection is successful, press the "Next" button. In the final step, you'll be prompted to configure the mappings for the connection. Set the following fields: * `User Filter Expression`: `email.value Eq "%s"`. * `User Identifier`: `workEmail`. * `Deprovision on Rule Deletion:` Enabled. SCIM PingOne Connection Mappings Once this is configured, press the "Save" button. **3. Enable the connection** Finally, remember to enable the connection by pressing the enable toggle. SCIM PingOne Connection Enable **1. Create a new rule** After creating a connection, you can now access the "Rules" tab under the Provisioning section. Here you can configure the rules for the connection. SCIM PingOne Create New Rule 1 SCIM PingOne Create New Rule 2 Select the "New Rule" button and choose a name for the rule, then press the "Create Rule" button. **2. Configure the rule connection** Once you have created a rule, you now need to configure the connection to use for the rule. SCIM PingOne Create New Rule 3 Select the connection you created in the previous step and press the "Save" button. **3. Configure the rule user filter** SCIM PingOne Create New Rule 4 Select the Edit pencil icon to open the user filter configuration. This step dictates which users will be provisioned to Infisical. SCIM PingOne Create New Rule 5 In this case, we are provisioning all users that are enabled in PingOne. Configure your user filter to match your desired users, and then press the "Save" button. **4. Configure Groups** This step is optional and only relevant if you want to provision PingOne groups to Infisical. SCIM PingOne Create New Rule 6 Open the "Group Provisioning" tab and press the "Add Groups" button to select which groups will be provisioned to Infisical. SCIM PingOne Create New Rule 7 Select the groups you want to provision to Infisical and press the "Save" button. **5. Enable the rule** Once you have configured the rule, you can enable it by pressing the "Enable" toggle. SCIM PingOne Create New Rule 8 **FAQ** Infisical's SCIM implementation accounts for retaining the end-to-end encrypted architecture of Infisical because we decouple the **authentication** and **decryption** steps in the platform. For this reason, SCIM-provisioned users are initialized but must finish setting up their account when logging in the first time by creating a master encryption/decryption key. With this implementation, IdPs and SCIM providers cannot and will not have access to the decryption key needed to decrypt your secrets. # Secret Referencing and Importing Source: https://infisical.com/docs/documentation/platform/secret-reference Learn the fundamentals of secret referencing and importing in Infisical. ## Secret Referencing Infisical's secret referencing functionality makes it possible to reference the value of a "base" secret when defining the value of another secret. This means that updating the value of a base secret propagates directly to other secrets whose values depend on the base secret. secret referencing Since secret referencing reconstructs values on the client side, any client (user, service token, or machine identity) fetching secrets must have proper permissions to access all base and dependent secrets. Without sufficient permissions, secret references will not resolve to their appropriate values. For example, if secret A references values from secrets B and C located in different scopes, the client must have read access to all three scopes containing secrets A, B, and C. If permission to any referenced secret is missing, the reference will remain unresolved, potentially causing application errors or unexpected behavior. This is an important security consideration when planning your secret access strategy, especially when working with cross-environment or cross-folder references. You can hold the `Cmd` (Mac) or `Ctrl` (Windows/Linux) key and click the secret reference to be redirected to it. ### Syntax When defining a secret reference, interpolation syntax is used to define references to secrets in other environments and [folders](./folder). Suppose you have some secret `MY_SECRET` at the root of some environment and want to reference part of its value from another base secret `BASE_SECRET` located elsewhere. Then consider the following scenarios: * If `BASE_SECRET` is in the same environment and folder as `MY_SECRET`, then you'd reference it using `${BASE_SECRET}`. * If `BASE_SECRET` is at the root of another environment with the slug `dev`, then you'd reference it using `${dev.MY_SECRET}`. Here are a few more helpful examples for how to reference secrets in different contexts: | Reference syntax | Environment | Folder | Secret Key | | ----------------------- | ----------- | ----------------------------- | ---------- | | `${KEY1}` | same env | same folder | KEY1 | | `${dev.KEY2}` | `dev` | `/` (root of dev environment) | KEY2 | | `${prod.frontend.KEY2}` | `prod` | `/frontend` | KEY2 | ## Secret Imports Infisical's Secret Imports functionality makes it possible to import the secrets from another environment or folder into the current folder context. This can be useful if you have common secrets that need to be available across multiple environments/folders. To add a secret import, press the downward chevron to the right of the **Add Secret** button; then press on the **Add Import** button. add secret import Once added, a secret import will show up with a green import icon on the secrets dashboard. In the example below, you can see that the items in the path `/some-folder` are being imported into the current folder context. added secret import To delete a secret import, hover over it and press the **X** button that appears on the right side. delete secret import Lastly, note that the order of secret imports matters. If two secret imports contain secrets with the same name, then the secret value from the bottom-most secret import is taken — "the last one wins." To reorder a secret import, hover over it and drag the arrows handle to the position you want. reorder secret import