diff --git a/docs/documentation/getting-started/introduction.mdx b/docs/documentation/getting-started/introduction.mdx index 1f04e1763..84d34e871 100644 --- a/docs/documentation/getting-started/introduction.mdx +++ b/docs/documentation/getting-started/introduction.mdx @@ -2,7 +2,8 @@ title: "Introduction" --- -Infisical is an [open-source](https://opensource.com/resources/what-open-source), [end-to-end encrypted](https://en.wikipedia.org/wiki/End-to-end_encryption) secret management platform that enables teams to easily manage and sync their environment variables. +Infisical is an [open-source](https://opensource.com/resources/what-open-source), [end-to-end encrypted](https://en.wikipedia.org/wiki/End-to-end_encryption) secret management platform for storing, managing, and syncing +application configuration and secrets like API keys, database credentials, and environment variables across applications and infrastructure. Start syncing environment variables with [Infisical Cloud](https://app.infisical.com) or learn how to [host Infisical](/self-hosting/overview) yourself. diff --git a/docs/documentation/getting-started/platform.mdx b/docs/documentation/getting-started/platform.mdx index a21352a09..429524161 100644 --- a/docs/documentation/getting-started/platform.mdx +++ b/docs/documentation/getting-started/platform.mdx @@ -2,24 +2,47 @@ title: "Platform" --- -Infisical is an [open-source](https://opensource.com/resources/what-open-source), [end-to-end encrypted](https://en.wikipedia.org/wiki/End-to-end_encryption) secret management platform that enables teams to easily store, manage, and sync secrets like API keys, database credentials, and environment variables across their apps and infrastructure. +This quickstart provides an overview of functionalities offered by Infisical. -This quickstart provides an overview of the functionalities offered by Infisical. +## Managing your Organization -## Projects +When you first make an account with Infisical, you also create a new **organization** where you are assigned the `admin` role by default. +From there, you can invite external members to the organization and start creating **projects** to house secrets. -Projects hold secrets for applications, which are further organized into environments such as development, testing and production. +### Projects + +The **Projects** page shows you all the projects that you have access to within your organization. +Here, you can also create a new project. + +![organization overview](../../images/organization-overview.png) + +### Members + +The **Members** page lets you add or remove external members to your organization. +Note that you can configure your organization in Infisical to have members authenticate with the platform via protocols like SAML 2.0. + +![organization members](../../images/organization-members.png) + +## Managing your Projects + +As mentioned before, projects house secrets which are further organized into environments such as development, testing and production. +A project can be anything from a single application to a collection of micro-services that you wish to manage secrets for. ### Secrets Overview -The secrets overview provides a bird's-eye view of all the secrets in a project and is particularly useful for identifying missing secrets across environments. +The **Secrets Overview** screen provides a bird's-eye view of all the secrets in a project and is useful for comparing secrets and identifying missing ones across environments. ![dashboard secrets overview](../../images/dashboard-secrets-overview.png) -### Secrets Dashboard +In the above image, you can already see that: +- `STRIPE_API_KEY` is missing from the **Staging** environment. +- `JWT_SECRET` is missing from the **Production** environment. +- `BAR` is `EMPTY` in the **Production** environment. + +### Dashboard The secrets dashboard lets you manage secrets for a specific environment in a project. -Here, developers can [override secrets](//project#personal-overrides), [version secrets](/documentation/platform/secret-versioning), [rollback projects to any point in time](/documentation/platform/pit-recovery), and much more. +Here, developers can override secrets, version secrets, rollback projects to any point in time and much more. ![dashboard](../../images/dashboard.png) @@ -27,31 +50,15 @@ Here, developers can [override secrets](//project#personal-overrides), [version The integrations page provides native integrations to sync secrets from a project environment to a [host of ever-expanding integrations](/integrations/overview). - - Depending on your infrastructure setup and compliance requirements, you may or may not prefer to use these native integrations since they break end-to-end encryption (E2EE). - - You will learn about various ways to integrate with Infisical and maintain E2EE in subsequent quickstart sections. - - ![integrations](../../images/integrations.png) -### Access Control +### Members -The members page lets you add/remove members for a project and provision them access to environments (access levels include `No Access`, `Read Only`, and `Read and Write`). +The members page lets you add/remove members to/from a project and provision them access to environments via roles. By default, Infisical provides the `admin`, `developer`, and `viewer` roles +which you can assign to members. ![project members](../../images/project-members.png) -## Organizations - -Organizations house projects and members. - -### Organization Settings - -At the organization-level, you can add/remove members and manage their access to projects. - -![organization name modal open](../../images/dashboard-name-modal-organization.png) -![organization name modal open](../../images/organization.png) - That's it for the platform quickstart! — We encourage you to continue exploring the documentation to gain a deeper understanding of the extensive features and functionalities that Infisical has to offer. Next, head back to [Getting Started > Introduction](/documentation/getting-started/overview) to explore ways to fetch secrets from Infisical to your apps and infrastructure. \ No newline at end of file diff --git a/docs/documentation/getting-started/sdks.mdx b/docs/documentation/getting-started/sdks.mdx index 67608bb81..a406c3ae6 100644 --- a/docs/documentation/getting-started/sdks.mdx +++ b/docs/documentation/getting-started/sdks.mdx @@ -9,137 +9,11 @@ Prerequisites: - Have a project with secrets ready in [Infisical Cloud](https://app.infisical.com). - Create an [Infisical Token](/documentation/platform/token) scoped to an environment in your project in Infisical. -## Installation +## Usage -Follow the instructions for your language to install the SDK for it. +Follow the instructions for your language use the SDK for it: - - +- [Node SDK](https://github.com/Infisical/infisical-node) +- [Python SDK](https://github.com/Infisical/infisical-python) - Run `npm` to add [infisical-node](https://github.com/Infisical/infisical-node) to your project. - - ```console - $ npm install infisical-node --save - ``` - - ## Configuration - - Import the SDK and create a client instance with your [Infisical Token](/documentation/platform/token). - - - - ```js - import InfisicalClient from "infisical-node"; - - const client = new InfisicalClient({ - token: "your_infisical_token" - }); - ``` - - - - ```js - const InfisicalClient = require("infisical-node"); - - const client = new InfisicalClient({ - token: "your_infisical_token" - }); - ```` - - - ## Get a Secret - - ```js - const secret = await client.getSecret("API_KEY"); - const value = secret.secretValue; // get its value - ``` - - ## Basic Usage - - ```js - import express from "express"; - import InfisicalClient from "infisical-node"; - const app = express(); - const PORT = 3000; - - const client = new InfisicalClient({ - token: "YOUR_INFISICAL_TOKEN" - }); - - app.get("/", async (req, res) => { - // access value - const name = await client.getSecret("NAME"); - res.send(`Hello! My name is: ${name.secretValue}`); - }); - - app.listen(PORT, async () => { - console.log(`App listening on port ${port}`); - }); - ``` - - This example demonstrates how to use the Infisical Node SDK with an Express application. The application retrieves a secret named "NAME" and responds to requests with a greeting that includes the secret value. - - - - ## Installation - - Run `pip` to add [infisical-python](https://github.com/Astropilot/infisical-python) to your project - - ```console - $ pip install infisical - ``` - - Note: You need Python 3.7+. - - ## Configuration - - Import the SDK and create a client instance with your [Infisical Token](/documentation/platform/token). - - ```py - from infisical import InfisicalClient - - client = InfisicalClient(token="your_infisical_token") - ``` - - ## Get a Secret - - ```py - secret = client.get_secret("API_KEY") - value = secret.secret_value # get its value - ``` - - ## Basic Usage - - ```py - from flask import Flask - from infisical import InfisicalClient - - app = Flask(__name__) - - client = InfisicalClient(token="your_infisical_token") - - @app.route("/") - def hello_world(): - # access value - name = client.get_secret("NAME") - return f"Hello! My name is: {name.secret_value}" - ``` - - This example demonstrates how to use the Infisical Python SDK with a Flask application. The application retrieves a secret named "NAME" and responds to requests with a greeting that includes the secret value. - - - We're currently working on SDKs for other languages. Follow the GitHub issue for your needed language below: - - [Java](https://github.com/Infisical/infisical/issues/434) - - [Ruby](https://github.com/Infisical/infisical/issues/435) - - [Go](https://github.com/Infisical/infisical/issues/436) - - [Rust](https://github.com/Infisical/infisical/issues/437) - - [PHP](https://github.com/Infisical/infisical/issues/531) - - Missing a language? [Throw in a request](https://github.com/Infisical/infisical/issues). - - - -See also: - -- Explore the [Node SDK](https://github.com/Infisical/infisical-node) -- Explore the [Python SDK](https://github.com/Infisical/infisical-python) \ No newline at end of file +Missing a language? [Throw in a request](https://github.com/Infisical/infisical/issues). \ No newline at end of file diff --git a/docs/documentation/platform/audit-logs.mdx b/docs/documentation/platform/audit-logs.mdx index 4ec221f0c..5e6adb8e7 100644 --- a/docs/documentation/platform/audit-logs.mdx +++ b/docs/documentation/platform/audit-logs.mdx @@ -3,10 +3,25 @@ title: "Audit Logs" description: "See which events are triggered within your Infisical project." --- -Audit logs record all actions going through Infisical including who performed which CRUD operations on environment variables and from what IP address. They help answer questions like: + + Note that Audit Logs is a paid feature. -- Who added or updated environment variables recently? -- Did Bob read environment variables last week (if at all)? -- What IP address was used for that action? + If you're using Infisical Cloud, then it is available under the **Team Tier**, **Pro Tier**, + and **Enterprise Tier** with varying retention periods. If you're self-hosting Infisical, + then you should contact team@infisical.com to purchase an enterprise license to use it. + -![Audit logs](../../images/activity-logs.png) +Infisical provides audit logs for security and compliance teams to monitor information access. +With this feature, teams can track 25+ different events; +filter audit logs by event, actor, source, date or any combination of these filters; +and inspect extensive metadata in the event of any suspicious activity or incident review. + +![Audit logs](../../images/platform/audit-logs/audit-logs-table.png) + +Each log contains the following data: + +- Event: The underlying action such as create, list, read, update, or delete secret(s). +- Actor: The entity responsible for performing or causing the event; this can be a user or service. +- Timestamp: The date and time at which point the event occured. +- Source (User agent + IP): The software (user agent) and network address (IP) from which the event was initiated. +- Metadata: Additional data to provide context for each event. For example, this could be the path at which a secret was fetched from etc. \ No newline at end of file diff --git a/docs/documentation/platform/folder.mdx b/docs/documentation/platform/folder.mdx index 506b30da2..162cabfb9 100644 --- a/docs/documentation/platform/folder.mdx +++ b/docs/documentation/platform/folder.mdx @@ -3,28 +3,50 @@ title: "Folders" description: "Organize your secrets with folders" --- -Folders provide a powerful and intuitive way to structure your secrets. -They offer a system to keep your secrets organized and easily accessible, which becomes increasingly important as your collection of secrets grows. +Infisical's folder feature lets you store secrets at a specific folder; we also call this **path-based secret storage**. +This is great for organizing secrets around hierarchies when multiple services, types of secrets, etc. are involved at great quantities. +With folders that can go infinitely deep, you can mirror your application architecture (be it microservices or monorepos) +or any logical grouping that best suits your needs. -With folders in Infisical, you can now create a hierarchy of folders to organize your secrets, mirroring your application's architecture or any logical grouping that suits your needs. -Whether you follow a microservices architecture or work with monorepos, folders make it simpler to locate, manage and collaborate between teams. +Consider the following structure for a microservice architecture: +``` +| service1 +|---- envars +|---- users +|-------- tokens1 +|-------- tokens2 +| service2 +|---- envars +... +``` -## Creating a folder +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. -To create a folder, head over to the environment where you'd like to create the folder. Once there, click the `Add folder` button as shown below. -If you wish to create nested folders, simply click into the folder of choice and click `Add folder` button again. +## Folders -![dashboard add folders](../../images/dashboard-add-folder.png) +### 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 -## Compare folders across environments +![add folder](../../images/platform/folder/folders-add.png) -The overview screen provides a comprehensive view of all your secrets and folders, organized by environment. +To delete a folder, hover over it and press the **X** button that appears on the right side. -![dashboard secret overview with folders](../../images/dashboard-folder-overview.png) +![delete folder](../../images/platform/folder/folders-delete.png) -When you click on a folder, the overview will be updated to show only the secrets and folders in that folder. This allows you to compare secrets across environment regardless of how deeply nested your folders are. +### 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](../../images/platform/folder/folders-secrets-overview.png) \ No newline at end of file diff --git a/docs/documentation/platform/ip-allowlisting.mdx b/docs/documentation/platform/ip-allowlisting.mdx index b037d50d2..f0844e685 100644 --- a/docs/documentation/platform/ip-allowlisting.mdx +++ b/docs/documentation/platform/ip-allowlisting.mdx @@ -3,6 +3,20 @@ title: "IP Allowlisting" description: "Restrict access to your secrets in Infisical using trusted IPs" --- + + IP allowlisting at the project-level is being replaced with IP allowlisting at the token-level now available with the Service Token V3 authentication method. + + Instead of providing trusted IPs (specific IPs and CIDR ranges) to be applied across all service tokens, + you can now specify trusted IPs at the token-level. + + + + Note that IP Allowlisting 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 team@infisical.com to purchase an enterprise license to use it. + + Projects in Infisical can be configured to restrict client access to specific IP addresses or CIDR ranges. This applies to any client using service tokens and can be useful, for example, for limiting access to traffic coming from corporate networks. @@ -13,7 +27,7 @@ For enhanced security, we strongly recommend replacing the default entry with yo You must be a project `admin` to manage your project's IP whitelist. -![IP whitelist](../../images/project-ip-whitelist.png) +![IP whitelist](../../images/platform/ip-allowlisting/ip-allowlisting-table.png) ## Creating a trusted IP entry @@ -21,4 +35,4 @@ To create a trusted IP entry, head over to the **IP Whitelist** tab in your proj you can specify either a specific IP address like `192.0.2.1` or a CIDR range like `2001:db8::/32`; both IPv4 and IPv6 formats are accepted. -![IP whitelist add](../../images/project-ip-whitelist-add.png) +![IP whitelist add](../../images/platform/ip-allowlisting/ip-allowlisting-modal.png) diff --git a/docs/documentation/platform/organization.mdx b/docs/documentation/platform/organization.mdx index 161a79f14..82a4058a5 100644 --- a/docs/documentation/platform/organization.mdx +++ b/docs/documentation/platform/organization.mdx @@ -5,37 +5,63 @@ description: "How Infisical structures its organizations." An organization houses projects and members. -By default, Infisical creates an organization under your name. You can manage your organization in your organization settings. +## Projects -![organization name modal open](../../images/dashboard-name-modal-organization.png) -![organization name modal open](../../images/organization.png) +The **Projects** page is where you can view the projects that you have access to within your organization +as well as create a new project. + +![organization](../../images/platform/organization/organization-projects.png) + +## Settings + +The **Settings** page lets you manage information about your organization including: + +- Name: The name of your organization. +- Incident contacts: Emails that should be alerted if anything abnormal is detected within the organization. +- SAML Authentication: The SAML SSO configuration of the organization (if applicable); Infisical currently +supports Okta, Azure, and JumpCloud identity providers. + +![organization settings general](../../images/platform/organization/organization-settings-general.png) +![organization settings auth](../../images/platform/organization/organization-settings-auth.png) ## Members -Members of an organization can create and add other members to projects within that organization. - -To add a member to your organization, scroll down to the "Organization Members" section and invite the member via email. They'll receive an email to confirm their organization invitation. If the member is an existing user on the platform, they will be automatically added to the organization. +The **Members** page is where you can manage members and their permissions within the organization. +In the **Members** tab, you can add external members to your organization or remove them; you can also +change their role. ![organization members](../../images/organization-members.png) - - Note that access to projects must be provisioned to new members after they've - accepted their organization invitation, and they will not be added to any - projects by default. - +In the **Roles** tab, you can manage roles for members within the organization. -## Service Accounts + + Note that Role-Based Access Management (RBAC) is partly a paid feature. + + Infisical provides immutable roles like `admin`, `member`, etc. + at the organization and project level for free. -Service accounts represent machine identities such as VMs or application clients that can authenticate with Infisical. They can be provisioned read/write permissions for project(s) and environment(s). + 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 team@infisical.com to purchase an enterprise license to use it. + -To add a service account to your organization, scroll down to the "Service Accounts" section and create a service account. Afterwards, you can press on the edit button beside the service account to provision it permissions. +![organization roles](../../images/platform/organization/organization-members-roles.png) -![organization service accounts](../../images/organization-service-accounts.png) +As you can see next, Infisical supports granular permissions that you can tailor to each role. So, +if you need certain members to only be able to access billing details, for example, then you can +assign them that permission only. -## Incident contacts +![organization role permissions](../../images/platform/organization/organization-members-roles-add-perm.png) -Incident contacts of an organization are alerted if anything abnormal is detected within the operations of an organization. +## Usage & Billing -To add an incident contact to your organization, scroll down to the "Incident Contacts" section and add their email. +The **Usage & Billing** page applies only to [Infisical Cloud](https://app.infisical.com) and is where you can +manage your plan and billing information. -![organization incident contacts](../../images/organization-ic.png) +This includes the following items: + +- Current plan: The current plan information such as what tier your organization is on and what features/limits apply to this tier. +- Licenses: The license keys for self-hosted instances of Infisical (if applicable). +- Receipts: The receipts of monthly/annual invoices. +- Billing: The billing details of your organization including payment methods on file, tax IDs (if applicable), etc. + +![organization usage and billing](../../images/platform/organization/organization-usage-billing.png) \ No newline at end of file diff --git a/docs/documentation/platform/pit-recovery.mdx b/docs/documentation/platform/pit-recovery.mdx index 61f94f987..3cad5eff2 100644 --- a/docs/documentation/platform/pit-recovery.mdx +++ b/docs/documentation/platform/pit-recovery.mdx @@ -3,26 +3,37 @@ title: "Point-in-Time Recovery" description: "How to rollback secrets and configs to any commit with Infisical." --- -Point-in-time recovery allows secrets to be rolled back to any point in time. -It's powered by snapshots that get created after every mutations to a secret within a given [folder](./folder) and environment. + + Point-in-Time Recovery is a paid feature. + + If you're using Infisical Cloud, then it is available under the **Team Tier**. If you're self-hosting Infisical, + then you should contact team@infisical.com to purchase an enterprise license to use it. + -## Commits +Infisical's point-in-time recovery feature allows secrets to be rolled back to any point in time for any given [folder](./folder). +Under the hood, snapshots, capturing the state of the folder, get taken after any mutation an item within that folder. -Similar to Git, a commit in Infisical is a snapshot of your project's secrets at a specific point in time scoped to the environment and [folder](./folder) it is in. You can browse and view your project's snapshots via the "Point-in-Time Recovery" sidebar. +## Snapshots -![PIT commits](../../images/pit-commits.png) -![PIT snapshots](../../images/pit-snapshots.png) +Similar to Git, a commit (aka 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](../../images/platform/pit-recovery/pit-recovery-commits.png) + +This opens up a sidebar from which you can select to view a particular snapshot: + +![PIT snapshots](../../images/platform/pit-recovery/pit-recovery-commits-drawer.png) ## Rolling back -Secrets can be rolled back to any point in time via the "Rollback to this snapshot" button. This will roll back the changes within the given [folder](./folder) and environment to the chosen time. +After pressing on a snapshot from the sidebar, you can view it and even roll back the state +of the folder to that point in time by pressing the **Rollback** button. -It's important to note that this rollback action is localized and does 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. -In essence, every [folder](./folder) possesses a distinct and separate timeline, providing granular control when managing your secrets. +![PIT snapshot](../../images/platform/pit-recovery/pit-recovery-rollback.png) -![PIT snapshot](../../images/pit-snapshot.png) +Rolling back secrets to a past snapshot creates a creates a snapshot at the top of the stack and updates secret versions. - - Rolling back secrets to a past snapshot creates a new commit, - creates a snapshot at the top of the stack and updates secret versions. - +Note that 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. diff --git a/docs/documentation/platform/project.mdx b/docs/documentation/platform/project.mdx index 38a677ab0..19e5179a4 100644 --- a/docs/documentation/platform/project.mdx +++ b/docs/documentation/platform/project.mdx @@ -3,53 +3,101 @@ title: "Project" description: "How Infisical organizes secrets into projects." --- -A project houses environment variables for an application. +A project houses application configuration and secrets for an application. -## Dashboard +## Secrets Overview -The dashboard page is where you can manage environment variables for a given project. +The **Secrets Overview** page captures a birds-eye-view of secrets and folders across environments like development, staging, or production. +This is useful for comparing secrets, identifying if anything is missing, and making quick changes. + +![project secrets overview](../../images/platform/project/project-secrets-overview-open.png) + +## Secrets Dashboard + +The **Secrets Dashboard** page appears when you press to manage the secrets of a specific environment. ![project dashboard](../../images/dashboard.png) -### Environment variables +### Secrets -Environment variables can be added or removed from a project. By default, they are pre-populated in your first project for demonstration. For any subsequent project, it can be convenient to import existing environment variables by dragging and dropping a .env file containing them. +To add a secret, press **Add Secret** button at the top of the dashboard. -Here's what dragging and dropping a .env looks like: +![project add secret](../../images/platform/project/project-secrets-add.png) -![project drag and drop](../../images/project-drag-drop.png) +For a new project, it can be convenient to populate the dashboard by dropping a `.env` file into the provided pane as shown below: -### Environments +![project drop env file](../../images/platform/project/project-secrets-drop-env.png) -In most cases, environment variables belong to specific environments: development, staging, testing, and production. You can input environment variables for each environment that your project uses. +To delete a secret, hover over it and press the **X** button that appears on the right side. -![project environment](../../images/project-environment.png) +![project delete secret](../../images/platform/project/project-secrets-delete.png) -### Personal overrides +To delete multiple secrets at once, hover over and select the secrets you'd like to delete +and press the **Delete** button that appears at the top. -Every environment variable value can be overridden with a custom value. - -- An overridden value can only be read and accessed by the user that overrode the original shared value. -- A (default) shared value can be read and accessed by other users in a project. - -You can turn overrides on/off by toggling the override/branch icon: - -![project variable toggle open](../../images/project-envar-override.png) +![project delete secret batch](../../images/platform/project/project-secrets-delete-batch.png) ### Search -You can search for any environment variable by its key. +To search for specific secrets by their key name, you can use the search bar. -![project search](../../images/project-search.png) +![project search](../../images/platform/project/project-secrets-search.png) + +To assist you with finding secrets, you can also group them by similar prefixes and filter them by tags (if applicable). + +![project filter](../../images/platform/project/project-secrets-filter.png) ### Hide/Un-hide -You can hide or un-hide the values of your environment variables. By default, the values are hidden for your privacy. +To view/hide all secrets at once, toggle the hide or un-hide button. -![project hide](../../images/project-hide.png) +![project filter](../../images/platform/project/project-secrets-unhide.png) ### Download as .env -You can download your environment variables back in a .env file. +To download/export secrets back into a `.env` file, press the download button. + +![project download back env](../../images/platform/project/project-secrets-download-env.png) + +### Tags + +To better organize similar secrets, hover over them and label them with a tag. + +![project tag secret](../../images/platform/project/project-secrets-tag.png) + +### Comments + +To provide more context about a given secret, especially for your team, hover over it and press the comment button. + +![project comment secret](../../images/platform/project/project-secrets-comment.png) + +### Personal overrides + +Infisical employs the concept of **shared** and **personal** secrets to address the need +for common and custom secret values, or branching, amongst members of a team during software development. +To provide a helpful analogy: A shared value is to a `main` branch as a personal value is to a custom branch. + +Consider: + +- A team with users A, B, user C. +- A project with an environment containing a shared secret called D with the value E. + +Suppose user A overrides the value of secret D with the value F. + +Then: + +- If user A fetches the secret D back, they get the value F. +- If users B and C fetch the secret D back, they both get the value E. + +![project override secret](../../images/platform/project/project-secrets-override.png) + +### Drawer + +To view the full details of each secret, you can hover over it and press on the ellipses button. + +![project secrets ellipses](../../images/platform/project/project-secrets-ellipses.png) + +This opens up a side-drawer: + +![project secrets drawer](../../images/platform/project/project-secrets-drawer.png) -![project download](../../images/project-download.png) diff --git a/docs/documentation/platform/secret-reference.mdx b/docs/documentation/platform/secret-reference.mdx index d0d750330..940e7b263 100644 --- a/docs/documentation/platform/secret-reference.mdx +++ b/docs/documentation/platform/secret-reference.mdx @@ -1,23 +1,39 @@ --- -title: "Reference and Import Secrets" +title: "Secret Referencing / Importing" description: "How to use reference secrets in Infisical" --- -Secret referencing is a powerful feature that allows you to values of other secrets. This way, you just need to update the secret value once for it to be propagated to all the references. +## Secret Referencing -Consider a scenario where you have a database password. In order to utilize this password, you may need to incorporate it into a database connection string. -With secret referencing, you can easily construct these more intricate secrets by directly referencing the base secret. -This centralizes the management of your base secret, as any updates made to it will automatically propagate to all the secrets that depend on it. +Infisical's secret referencing feature lets you 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. -## Referencing syntax - + + Currently, the secret referencing feature is only supported by the + [Infisical CLI](/cli/overview) and [native integrations](/integrations/overview). -Secret referencing relies on interpolation syntax. This syntax allows you to reference a secret in any environment or [folder](./folder). + We intend to add support for it to the [Node SDK](https://github.com/Infisical/infisical-node) + and [Python SDK](https://github.com/Infisical/infisical-python) this quarter. + -To reference a secret named 'mysecret' in the same [folder](./folder) and environment, you'd use `${mysecret}`. -However, to reference the same secret at the root of a different environment, for instance `dev` environment, you'd use `${dev.mysecret}`. +![secret referencing](../../images/platform/secret-references-imports/secret-reference.png) -Here are a few more examples to help you understand how to reference secrets in different contexts: +Since secret referencing works by reconstructing values back on the client side, the client, be it a user or service token, fetching back secrets +must be permissioned access to all base and dependent secrets. + +For example, to access some secret `A` whose values depend on secrets `B` and `C` from different scopes, a client must have `read` access to the scopes of secrets `A`, `B`, and `C`. + +### 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 | | --------------------- | ----------- | ------------ | ---------- | @@ -25,29 +41,29 @@ Here are a few more examples to help you understand how to reference secrets in | `${dev.KEY2}` | `dev` | `/` (root of dev environment) | KEY2 | | `${prod.frontend.KEY2}` | `prod` | `/frontend` | KEY2 | -## Fetching fully constructed values +## Secret Imports -Secret referencing combines multiple secrets into one unified value, reconstructed only on the client side. To retrieve this value, you need access to read the environment and [folder](./folder) from where the secrets originate. -For instance, to access a secret 'A' composed of secrets 'B' and 'C' from different environments, you must have read access to both 'A' and 'B' +Infisical's secret imports feature lets you import the items of 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. -When using [service tokens](./token) to fetch referenced secrets, ensure the service token has read access to all referenced environments and folders. -Without proper permissions, the final secret value may be incomplete. +To add a secret import, press the downward chevron to the right of the **Add Secret** button; then press on the **Add Import** button. -## Import entire folders/environments +![add secret import](../../images/platform/secret-references-imports/secret-import-add.png) -While secret referencing effectively minimizes duplication, there might be instances where you need to import or replicate an entire folder's secrets into another. This can be achieved using the 'Import' feature. +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. -This feature allows you to link secrets from one environment/folder into another environment/folder. It proves beneficial when you have common secrets that need to be available across multiple environments/folders. +![added secret import](../../images/platform/secret-references-imports/secret-import-added.png) -To add an import, simply click on the `Add import` button and provide the environment and secret path from where the secrets should be imported. +To delete a secret import, hover over it and press the **X** button that appears on the right side. -![secret import change order](../../images/secret-import-add.png) +![delete secret import](../../images/platform/secret-references-imports/secret-import-delete.png) -The hierarchy of importing secrets is governed by a "last-one-wins" rule. This means the sequence in which you import matters - the final folder imported will override secrets from any prior folders. -Additionally, any secrets you define directly in your environment will override any secrets that are imported with the same name. +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." -You can modify the order of folders to control overrides using the `Change Order` drag handle. +To reorder a secret import, hover over it and drag the arrows handle to the position you want. -![secret import change order](../../images/secret-import-change-order.png) +![reorder secret import](../../images/platform/secret-references-imports/secret-import-reorder.png) diff --git a/docs/images/activity-logs.png b/docs/images/activity-logs.png deleted file mode 100644 index 29349c82b..000000000 Binary files a/docs/images/activity-logs.png and /dev/null differ diff --git a/docs/images/authentication-google-redirect.png b/docs/images/authentication-google-redirect.png deleted file mode 100644 index 7c4a2bff6..000000000 Binary files a/docs/images/authentication-google-redirect.png and /dev/null differ diff --git a/docs/images/dashboard-add-folder.png b/docs/images/dashboard-add-folder.png deleted file mode 100644 index 6040dcc3f..000000000 Binary files a/docs/images/dashboard-add-folder.png and /dev/null differ diff --git a/docs/images/dashboard-folder-overview.png b/docs/images/dashboard-folder-overview.png deleted file mode 100644 index 265f732fe..000000000 Binary files a/docs/images/dashboard-folder-overview.png and /dev/null differ diff --git a/docs/images/dashboard-folders.png b/docs/images/dashboard-folders.png deleted file mode 100644 index d3e92482f..000000000 Binary files a/docs/images/dashboard-folders.png and /dev/null differ diff --git a/docs/images/dashboard-name-modal-organization.png b/docs/images/dashboard-name-modal-organization.png deleted file mode 100644 index 59145d21b..000000000 Binary files a/docs/images/dashboard-name-modal-organization.png and /dev/null differ diff --git a/docs/images/dashboard-name-selected.png b/docs/images/dashboard-name-selected.png deleted file mode 100644 index 41b0c4eab..000000000 Binary files a/docs/images/dashboard-name-selected.png and /dev/null differ diff --git a/docs/images/dashboard-secrets-overview.png b/docs/images/dashboard-secrets-overview.png index 68b31de72..2d43e385e 100644 Binary files a/docs/images/dashboard-secrets-overview.png and b/docs/images/dashboard-secrets-overview.png differ diff --git a/docs/images/dashboard.png b/docs/images/dashboard.png index 2188debfc..506f0b0ed 100644 Binary files a/docs/images/dashboard.png and b/docs/images/dashboard.png differ diff --git a/docs/images/example-secret-referencing.png b/docs/images/example-secret-referencing.png deleted file mode 100644 index 031d343af..000000000 Binary files a/docs/images/example-secret-referencing.png and /dev/null differ diff --git a/docs/images/integrations-teamcity-auth.png b/docs/images/integrations-teamcity-auth.png deleted file mode 100644 index f0c95992f..000000000 Binary files a/docs/images/integrations-teamcity-auth.png and /dev/null differ diff --git a/docs/images/integrations-teamcity-create.png b/docs/images/integrations-teamcity-create.png deleted file mode 100644 index c5515581e..000000000 Binary files a/docs/images/integrations-teamcity-create.png and /dev/null differ diff --git a/docs/images/integrations-teamcity-dashboard.png b/docs/images/integrations-teamcity-dashboard.png deleted file mode 100644 index 40c8c5409..000000000 Binary files a/docs/images/integrations-teamcity-dashboard.png and /dev/null differ diff --git a/docs/images/integrations-teamcity-projects.png b/docs/images/integrations-teamcity-projects.png deleted file mode 100644 index 579c195a6..000000000 Binary files a/docs/images/integrations-teamcity-projects.png and /dev/null differ diff --git a/docs/images/integrations-teamcity-serverurl.png b/docs/images/integrations-teamcity-serverurl.png deleted file mode 100644 index 599e3205b..000000000 Binary files a/docs/images/integrations-teamcity-serverurl.png and /dev/null differ diff --git a/docs/images/integrations-teamcity-tokens.png b/docs/images/integrations-teamcity-tokens.png deleted file mode 100644 index 720ed90c6..000000000 Binary files a/docs/images/integrations-teamcity-tokens.png and /dev/null differ diff --git a/docs/images/integrations-teamcity.png b/docs/images/integrations-teamcity.png deleted file mode 100644 index 4fe92ac32..000000000 Binary files a/docs/images/integrations-teamcity.png and /dev/null differ diff --git a/docs/images/integrations-aws-access-key-1.png b/docs/images/integrations/aws/integrations-aws-access-key-1.png similarity index 100% rename from docs/images/integrations-aws-access-key-1.png rename to docs/images/integrations/aws/integrations-aws-access-key-1.png diff --git a/docs/images/integrations-aws-access-key-2.png b/docs/images/integrations/aws/integrations-aws-access-key-2.png similarity index 100% rename from docs/images/integrations-aws-access-key-2.png rename to docs/images/integrations/aws/integrations-aws-access-key-2.png diff --git a/docs/images/integrations-aws-access-key-3.png b/docs/images/integrations/aws/integrations-aws-access-key-3.png similarity index 100% rename from docs/images/integrations-aws-access-key-3.png rename to docs/images/integrations/aws/integrations-aws-access-key-3.png diff --git a/docs/images/integrations-aws-iam-1.png b/docs/images/integrations/aws/integrations-aws-iam-1.png similarity index 100% rename from docs/images/integrations-aws-iam-1.png rename to docs/images/integrations/aws/integrations-aws-iam-1.png diff --git a/docs/images/integrations-aws-parameter-store-auth.png b/docs/images/integrations/aws/integrations-aws-parameter-store-auth.png similarity index 100% rename from docs/images/integrations-aws-parameter-store-auth.png rename to docs/images/integrations/aws/integrations-aws-parameter-store-auth.png diff --git a/docs/images/integrations-aws-parameter-store-create.png b/docs/images/integrations/aws/integrations-aws-parameter-store-create.png similarity index 100% rename from docs/images/integrations-aws-parameter-store-create.png rename to docs/images/integrations/aws/integrations-aws-parameter-store-create.png diff --git a/docs/images/integrations-aws-parameter-store-iam-2.png b/docs/images/integrations/aws/integrations-aws-parameter-store-iam-2.png similarity index 100% rename from docs/images/integrations-aws-parameter-store-iam-2.png rename to docs/images/integrations/aws/integrations-aws-parameter-store-iam-2.png diff --git a/docs/images/integrations-aws-parameter-store-iam-3.png b/docs/images/integrations/aws/integrations-aws-parameter-store-iam-3.png similarity index 100% rename from docs/images/integrations-aws-parameter-store-iam-3.png rename to docs/images/integrations/aws/integrations-aws-parameter-store-iam-3.png diff --git a/docs/images/integrations-aws-parameter-store.png b/docs/images/integrations/aws/integrations-aws-parameter-store.png similarity index 100% rename from docs/images/integrations-aws-parameter-store.png rename to docs/images/integrations/aws/integrations-aws-parameter-store.png diff --git a/docs/images/integrations-aws-secret-manager-auth.png b/docs/images/integrations/aws/integrations-aws-secret-manager-auth.png similarity index 100% rename from docs/images/integrations-aws-secret-manager-auth.png rename to docs/images/integrations/aws/integrations-aws-secret-manager-auth.png diff --git a/docs/images/integrations-aws-secret-manager-create.png b/docs/images/integrations/aws/integrations-aws-secret-manager-create.png similarity index 100% rename from docs/images/integrations-aws-secret-manager-create.png rename to docs/images/integrations/aws/integrations-aws-secret-manager-create.png diff --git a/docs/images/integrations-aws-secret-manager-iam-2.png b/docs/images/integrations/aws/integrations-aws-secret-manager-iam-2.png similarity index 100% rename from docs/images/integrations-aws-secret-manager-iam-2.png rename to docs/images/integrations/aws/integrations-aws-secret-manager-iam-2.png diff --git a/docs/images/integrations-aws-secret-manager-iam-3.png b/docs/images/integrations/aws/integrations-aws-secret-manager-iam-3.png similarity index 100% rename from docs/images/integrations-aws-secret-manager-iam-3.png rename to docs/images/integrations/aws/integrations-aws-secret-manager-iam-3.png diff --git a/docs/images/integrations-aws-secret-manager.png b/docs/images/integrations/aws/integrations-aws-secret-manager.png similarity index 100% rename from docs/images/integrations-aws-secret-manager.png rename to docs/images/integrations/aws/integrations-aws-secret-manager.png diff --git a/docs/images/integrations-bitbucket-auth.png b/docs/images/integrations/bitbucket/integrations-bitbucket-auth.png similarity index 100% rename from docs/images/integrations-bitbucket-auth.png rename to docs/images/integrations/bitbucket/integrations-bitbucket-auth.png diff --git a/docs/images/integrations-bitbucket-create.png b/docs/images/integrations/bitbucket/integrations-bitbucket-create.png similarity index 100% rename from docs/images/integrations-bitbucket-create.png rename to docs/images/integrations/bitbucket/integrations-bitbucket-create.png diff --git a/docs/images/integrations-bitbucket.png b/docs/images/integrations/bitbucket/integrations-bitbucket.png similarity index 100% rename from docs/images/integrations-bitbucket.png rename to docs/images/integrations/bitbucket/integrations-bitbucket.png diff --git a/docs/images/integrations-checkly-auth.png b/docs/images/integrations/checkly/integrations-checkly-auth.png similarity index 100% rename from docs/images/integrations-checkly-auth.png rename to docs/images/integrations/checkly/integrations-checkly-auth.png diff --git a/docs/images/integrations-checkly-create.png b/docs/images/integrations/checkly/integrations-checkly-create.png similarity index 100% rename from docs/images/integrations-checkly-create.png rename to docs/images/integrations/checkly/integrations-checkly-create.png diff --git a/docs/images/integrations-checkly-dashboard.png b/docs/images/integrations/checkly/integrations-checkly-dashboard.png similarity index 100% rename from docs/images/integrations-checkly-dashboard.png rename to docs/images/integrations/checkly/integrations-checkly-dashboard.png diff --git a/docs/images/integrations-checkly-token.png b/docs/images/integrations/checkly/integrations-checkly-token.png similarity index 100% rename from docs/images/integrations-checkly-token.png rename to docs/images/integrations/checkly/integrations-checkly-token.png diff --git a/docs/images/integrations-checkly.png b/docs/images/integrations/checkly/integrations-checkly.png similarity index 100% rename from docs/images/integrations-checkly.png rename to docs/images/integrations/checkly/integrations-checkly.png diff --git a/docs/images/integrations-circleci-auth.png b/docs/images/integrations/circleci/integrations-circleci-auth.png similarity index 100% rename from docs/images/integrations-circleci-auth.png rename to docs/images/integrations/circleci/integrations-circleci-auth.png diff --git a/docs/images/integrations-circleci-create.png b/docs/images/integrations/circleci/integrations-circleci-create.png similarity index 100% rename from docs/images/integrations-circleci-create.png rename to docs/images/integrations/circleci/integrations-circleci-create.png diff --git a/docs/images/integrations-circleci-token.png b/docs/images/integrations/circleci/integrations-circleci-token.png similarity index 100% rename from docs/images/integrations-circleci-token.png rename to docs/images/integrations/circleci/integrations-circleci-token.png diff --git a/docs/images/integrations-circleci.png b/docs/images/integrations/circleci/integrations-circleci.png similarity index 100% rename from docs/images/integrations-circleci.png rename to docs/images/integrations/circleci/integrations-circleci.png diff --git a/docs/images/integrations-cloud-66-access-token.png b/docs/images/integrations/cloud-66/integrations-cloud-66-access-token.png similarity index 100% rename from docs/images/integrations-cloud-66-access-token.png rename to docs/images/integrations/cloud-66/integrations-cloud-66-access-token.png diff --git a/docs/images/integrations-cloud-66-copy-pat.png b/docs/images/integrations/cloud-66/integrations-cloud-66-copy-pat.png similarity index 100% rename from docs/images/integrations-cloud-66-copy-pat.png rename to docs/images/integrations/cloud-66/integrations-cloud-66-copy-pat.png diff --git a/docs/images/integrations-cloud-66-create.png b/docs/images/integrations/cloud-66/integrations-cloud-66-create.png similarity index 100% rename from docs/images/integrations-cloud-66-create.png rename to docs/images/integrations/cloud-66/integrations-cloud-66-create.png diff --git a/docs/images/integrations-cloud-66-dashboard.png b/docs/images/integrations/cloud-66/integrations-cloud-66-dashboard.png similarity index 100% rename from docs/images/integrations-cloud-66-dashboard.png rename to docs/images/integrations/cloud-66/integrations-cloud-66-dashboard.png diff --git a/docs/images/integrations-cloud-66-done.png b/docs/images/integrations/cloud-66/integrations-cloud-66-done.png similarity index 100% rename from docs/images/integrations-cloud-66-done.png rename to docs/images/integrations/cloud-66/integrations-cloud-66-done.png diff --git a/docs/images/integrations-cloud-66-infisical-dashboard.png b/docs/images/integrations/cloud-66/integrations-cloud-66-infisical-dashboard.png similarity index 100% rename from docs/images/integrations-cloud-66-infisical-dashboard.png rename to docs/images/integrations/cloud-66/integrations-cloud-66-infisical-dashboard.png diff --git a/docs/images/integrations-cloud-66-paste-pat.png b/docs/images/integrations/cloud-66/integrations-cloud-66-paste-pat.png similarity index 100% rename from docs/images/integrations-cloud-66-paste-pat.png rename to docs/images/integrations/cloud-66/integrations-cloud-66-paste-pat.png diff --git a/docs/images/integrations-cloud-66-pat-setup.png b/docs/images/integrations/cloud-66/integrations-cloud-66-pat-setup.png similarity index 100% rename from docs/images/integrations-cloud-66-pat-setup.png rename to docs/images/integrations/cloud-66/integrations-cloud-66-pat-setup.png diff --git a/docs/images/integrations-cloud-66-pat.png b/docs/images/integrations/cloud-66/integrations-cloud-66-pat.png similarity index 100% rename from docs/images/integrations-cloud-66-pat.png rename to docs/images/integrations/cloud-66/integrations-cloud-66-pat.png diff --git a/docs/images/integrations-cloudflare-auth.png b/docs/images/integrations/cloudflare/integrations-cloudflare-auth.png similarity index 100% rename from docs/images/integrations-cloudflare-auth.png rename to docs/images/integrations/cloudflare/integrations-cloudflare-auth.png diff --git a/docs/images/integrations-cloudflare-create.png b/docs/images/integrations/cloudflare/integrations-cloudflare-create.png similarity index 100% rename from docs/images/integrations-cloudflare-create.png rename to docs/images/integrations/cloudflare/integrations-cloudflare-create.png diff --git a/docs/images/integrations-cloudflare-credentials-1.png b/docs/images/integrations/cloudflare/integrations-cloudflare-credentials-1.png similarity index 100% rename from docs/images/integrations-cloudflare-credentials-1.png rename to docs/images/integrations/cloudflare/integrations-cloudflare-credentials-1.png diff --git a/docs/images/integrations-cloudflare-credentials-2.png b/docs/images/integrations/cloudflare/integrations-cloudflare-credentials-2.png similarity index 100% rename from docs/images/integrations-cloudflare-credentials-2.png rename to docs/images/integrations/cloudflare/integrations-cloudflare-credentials-2.png diff --git a/docs/images/integrations-cloudflare-credentials-3.png b/docs/images/integrations/cloudflare/integrations-cloudflare-credentials-3.png similarity index 100% rename from docs/images/integrations-cloudflare-credentials-3.png rename to docs/images/integrations/cloudflare/integrations-cloudflare-credentials-3.png diff --git a/docs/images/integrations-cloudflare-credentials-4.png b/docs/images/integrations/cloudflare/integrations-cloudflare-credentials-4.png similarity index 100% rename from docs/images/integrations-cloudflare-credentials-4.png rename to docs/images/integrations/cloudflare/integrations-cloudflare-credentials-4.png diff --git a/docs/images/integrations-cloudflare.png b/docs/images/integrations/cloudflare/integrations-cloudflare.png similarity index 100% rename from docs/images/integrations-cloudflare.png rename to docs/images/integrations/cloudflare/integrations-cloudflare.png diff --git a/docs/images/integrations-codefresh-auth.png b/docs/images/integrations/codefresh/integrations-codefresh-auth.png similarity index 100% rename from docs/images/integrations-codefresh-auth.png rename to docs/images/integrations/codefresh/integrations-codefresh-auth.png diff --git a/docs/images/integrations-codefresh-create.png b/docs/images/integrations/codefresh/integrations-codefresh-create.png similarity index 100% rename from docs/images/integrations-codefresh-create.png rename to docs/images/integrations/codefresh/integrations-codefresh-create.png diff --git a/docs/images/integrations-codefresh-dashboard.png b/docs/images/integrations/codefresh/integrations-codefresh-dashboard.png similarity index 100% rename from docs/images/integrations-codefresh-dashboard.png rename to docs/images/integrations/codefresh/integrations-codefresh-dashboard.png diff --git a/docs/images/integrations-codefresh-token.png b/docs/images/integrations/codefresh/integrations-codefresh-token.png similarity index 100% rename from docs/images/integrations-codefresh-token.png rename to docs/images/integrations/codefresh/integrations-codefresh-token.png diff --git a/docs/images/integrations-codefresh.png b/docs/images/integrations/codefresh/integrations-codefresh.png similarity index 100% rename from docs/images/integrations-codefresh.png rename to docs/images/integrations/codefresh/integrations-codefresh.png diff --git a/docs/images/integrations-do-dashboard.png b/docs/images/integrations/digital-ocean/integrations-do-dashboard.png similarity index 100% rename from docs/images/integrations-do-dashboard.png rename to docs/images/integrations/digital-ocean/integrations-do-dashboard.png diff --git a/docs/images/integrations-do-enter-token.png b/docs/images/integrations/digital-ocean/integrations-do-enter-token.png similarity index 100% rename from docs/images/integrations-do-enter-token.png rename to docs/images/integrations/digital-ocean/integrations-do-enter-token.png diff --git a/docs/images/integrations-do-select-projects.png b/docs/images/integrations/digital-ocean/integrations-do-select-projects.png similarity index 100% rename from docs/images/integrations-do-select-projects.png rename to docs/images/integrations/digital-ocean/integrations-do-select-projects.png diff --git a/docs/images/integrations-do-success.png b/docs/images/integrations/digital-ocean/integrations-do-success.png similarity index 100% rename from docs/images/integrations-do-success.png rename to docs/images/integrations/digital-ocean/integrations-do-success.png diff --git a/docs/images/integrations-do-token-modal.png b/docs/images/integrations/digital-ocean/integrations-do-token-modal.png similarity index 100% rename from docs/images/integrations-do-token-modal.png rename to docs/images/integrations/digital-ocean/integrations-do-token-modal.png diff --git a/docs/images/integrations-flyio-auth.png b/docs/images/integrations/flyio/integrations-flyio-auth.png similarity index 100% rename from docs/images/integrations-flyio-auth.png rename to docs/images/integrations/flyio/integrations-flyio-auth.png diff --git a/docs/images/integrations-flyio-create.png b/docs/images/integrations/flyio/integrations-flyio-create.png similarity index 100% rename from docs/images/integrations-flyio-create.png rename to docs/images/integrations/flyio/integrations-flyio-create.png diff --git a/docs/images/integrations-flyio-dashboard.png b/docs/images/integrations/flyio/integrations-flyio-dashboard.png similarity index 100% rename from docs/images/integrations-flyio-dashboard.png rename to docs/images/integrations/flyio/integrations-flyio-dashboard.png diff --git a/docs/images/integrations-flyio-token.png b/docs/images/integrations/flyio/integrations-flyio-token.png similarity index 100% rename from docs/images/integrations-flyio-token.png rename to docs/images/integrations/flyio/integrations-flyio-token.png diff --git a/docs/images/integrations-flyio.png b/docs/images/integrations/flyio/integrations-flyio.png similarity index 100% rename from docs/images/integrations-flyio.png rename to docs/images/integrations/flyio/integrations-flyio.png diff --git a/docs/images/integrations-hashicorp-vault-access-1.png b/docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-access-1.png similarity index 100% rename from docs/images/integrations-hashicorp-vault-access-1.png rename to docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-access-1.png diff --git a/docs/images/integrations-hashicorp-vault-access-2.png b/docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-access-2.png similarity index 100% rename from docs/images/integrations-hashicorp-vault-access-2.png rename to docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-access-2.png diff --git a/docs/images/integrations-hashicorp-vault-access-3.png b/docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-access-3.png similarity index 100% rename from docs/images/integrations-hashicorp-vault-access-3.png rename to docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-access-3.png diff --git a/docs/images/integrations-hashicorp-vault-auth.png b/docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-auth.png similarity index 100% rename from docs/images/integrations-hashicorp-vault-auth.png rename to docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-auth.png diff --git a/docs/images/integrations-hashicorp-vault-cluster-url.png b/docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-cluster-url.png similarity index 100% rename from docs/images/integrations-hashicorp-vault-cluster-url.png rename to docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-cluster-url.png diff --git a/docs/images/integrations-hashicorp-vault-create.png b/docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-create.png similarity index 100% rename from docs/images/integrations-hashicorp-vault-create.png rename to docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-create.png diff --git a/docs/images/integrations-hashicorp-vault-engine-1.png b/docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-engine-1.png similarity index 100% rename from docs/images/integrations-hashicorp-vault-engine-1.png rename to docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-engine-1.png diff --git a/docs/images/integrations-hashicorp-vault-engine-2.png b/docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-engine-2.png similarity index 100% rename from docs/images/integrations-hashicorp-vault-engine-2.png rename to docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-engine-2.png diff --git a/docs/images/integrations-hashicorp-vault-engine-3.png b/docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-engine-3.png similarity index 100% rename from docs/images/integrations-hashicorp-vault-engine-3.png rename to docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-engine-3.png diff --git a/docs/images/integrations-hashicorp-vault-policy-1.png b/docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-policy-1.png similarity index 100% rename from docs/images/integrations-hashicorp-vault-policy-1.png rename to docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-policy-1.png diff --git a/docs/images/integrations-hashicorp-vault-policy-2.png b/docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-policy-2.png similarity index 100% rename from docs/images/integrations-hashicorp-vault-policy-2.png rename to docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-policy-2.png diff --git a/docs/images/integrations-hashicorp-vault-policy-3.png b/docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-policy-3.png similarity index 100% rename from docs/images/integrations-hashicorp-vault-policy-3.png rename to docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-policy-3.png diff --git a/docs/images/integrations-hashicorp-vault-shell.png b/docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-shell.png similarity index 100% rename from docs/images/integrations-hashicorp-vault-shell.png rename to docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault-shell.png diff --git a/docs/images/integrations-hashicorp-vault.png b/docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault.png similarity index 100% rename from docs/images/integrations-hashicorp-vault.png rename to docs/images/integrations/hashicorp-vault/integrations-hashicorp-vault.png diff --git a/docs/images/integrations-laravelforge-api.png b/docs/images/integrations/laravel-forge/integrations-laravelforge-api.png similarity index 100% rename from docs/images/integrations-laravelforge-api.png rename to docs/images/integrations/laravel-forge/integrations-laravelforge-api.png diff --git a/docs/images/integrations-laravelforge-auth.png b/docs/images/integrations/laravel-forge/integrations-laravelforge-auth.png similarity index 100% rename from docs/images/integrations-laravelforge-auth.png rename to docs/images/integrations/laravel-forge/integrations-laravelforge-auth.png diff --git a/docs/images/integrations-laravelforge-create.png b/docs/images/integrations/laravel-forge/integrations-laravelforge-create.png similarity index 100% rename from docs/images/integrations-laravelforge-create.png rename to docs/images/integrations/laravel-forge/integrations-laravelforge-create.png diff --git a/docs/images/integrations-laravelforge-dashboard.png b/docs/images/integrations/laravel-forge/integrations-laravelforge-dashboard.png similarity index 100% rename from docs/images/integrations-laravelforge-dashboard.png rename to docs/images/integrations/laravel-forge/integrations-laravelforge-dashboard.png diff --git a/docs/images/integrations-laravelforge-serverid.png b/docs/images/integrations/laravel-forge/integrations-laravelforge-serverid.png similarity index 100% rename from docs/images/integrations-laravelforge-serverid.png rename to docs/images/integrations/laravel-forge/integrations-laravelforge-serverid.png diff --git a/docs/images/integrations-laravelforge-servers.png b/docs/images/integrations/laravel-forge/integrations-laravelforge-servers.png similarity index 100% rename from docs/images/integrations-laravelforge-servers.png rename to docs/images/integrations/laravel-forge/integrations-laravelforge-servers.png diff --git a/docs/images/integrations-laravelforge.png b/docs/images/integrations/laravel-forge/integrations-laravelforge.png similarity index 100% rename from docs/images/integrations-laravelforge.png rename to docs/images/integrations/laravel-forge/integrations-laravelforge.png diff --git a/docs/images/integrations-northflank-auth.png b/docs/images/integrations/northflank/integrations-northflank-auth.png similarity index 100% rename from docs/images/integrations-northflank-auth.png rename to docs/images/integrations/northflank/integrations-northflank-auth.png diff --git a/docs/images/integrations-northflank-create.png b/docs/images/integrations/northflank/integrations-northflank-create.png similarity index 100% rename from docs/images/integrations-northflank-create.png rename to docs/images/integrations/northflank/integrations-northflank-create.png diff --git a/docs/images/integrations-northflank-dashboard.png b/docs/images/integrations/northflank/integrations-northflank-dashboard.png similarity index 100% rename from docs/images/integrations-northflank-dashboard.png rename to docs/images/integrations/northflank/integrations-northflank-dashboard.png diff --git a/docs/images/integrations-northflank-token.png b/docs/images/integrations/northflank/integrations-northflank-token.png similarity index 100% rename from docs/images/integrations-northflank-token.png rename to docs/images/integrations/northflank/integrations-northflank-token.png diff --git a/docs/images/integrations-northflank.png b/docs/images/integrations/northflank/integrations-northflank.png similarity index 100% rename from docs/images/integrations-northflank.png rename to docs/images/integrations/northflank/integrations-northflank.png diff --git a/docs/images/integrations-railway-authorization.png b/docs/images/integrations/railway/integrations-railway-authorization.png similarity index 100% rename from docs/images/integrations-railway-authorization.png rename to docs/images/integrations/railway/integrations-railway-authorization.png diff --git a/docs/images/integrations-railway-create.png b/docs/images/integrations/railway/integrations-railway-create.png similarity index 100% rename from docs/images/integrations-railway-create.png rename to docs/images/integrations/railway/integrations-railway-create.png diff --git a/docs/images/integrations-railway-dashboard.png b/docs/images/integrations/railway/integrations-railway-dashboard.png similarity index 100% rename from docs/images/integrations-railway-dashboard.png rename to docs/images/integrations/railway/integrations-railway-dashboard.png diff --git a/docs/images/integrations-railway-token.png b/docs/images/integrations/railway/integrations-railway-token.png similarity index 100% rename from docs/images/integrations-railway-token.png rename to docs/images/integrations/railway/integrations-railway-token.png diff --git a/docs/images/integrations-railway.png b/docs/images/integrations/railway/integrations-railway.png similarity index 100% rename from docs/images/integrations-railway.png rename to docs/images/integrations/railway/integrations-railway.png diff --git a/docs/images/integrations-render-auth.png b/docs/images/integrations/render/integrations-render-auth.png similarity index 100% rename from docs/images/integrations-render-auth.png rename to docs/images/integrations/render/integrations-render-auth.png diff --git a/docs/images/integrations-render-create.png b/docs/images/integrations/render/integrations-render-create.png similarity index 100% rename from docs/images/integrations-render-create.png rename to docs/images/integrations/render/integrations-render-create.png diff --git a/docs/images/integrations-render-dashboard.png b/docs/images/integrations/render/integrations-render-dashboard.png similarity index 100% rename from docs/images/integrations-render-dashboard.png rename to docs/images/integrations/render/integrations-render-dashboard.png diff --git a/docs/images/integrations-render-token.png b/docs/images/integrations/render/integrations-render-token.png similarity index 100% rename from docs/images/integrations-render-token.png rename to docs/images/integrations/render/integrations-render-token.png diff --git a/docs/images/integrations-render.png b/docs/images/integrations/render/integrations-render.png similarity index 100% rename from docs/images/integrations-render.png rename to docs/images/integrations/render/integrations-render.png diff --git a/docs/images/integrations-supabase-authorization.png b/docs/images/integrations/supabase/integrations-supabase-authorization.png similarity index 100% rename from docs/images/integrations-supabase-authorization.png rename to docs/images/integrations/supabase/integrations-supabase-authorization.png diff --git a/docs/images/integrations-supabase-create.png b/docs/images/integrations/supabase/integrations-supabase-create.png similarity index 100% rename from docs/images/integrations-supabase-create.png rename to docs/images/integrations/supabase/integrations-supabase-create.png diff --git a/docs/images/integrations-supabase-dashboard.png b/docs/images/integrations/supabase/integrations-supabase-dashboard.png similarity index 100% rename from docs/images/integrations-supabase-dashboard.png rename to docs/images/integrations/supabase/integrations-supabase-dashboard.png diff --git a/docs/images/integrations-supabase-token.png b/docs/images/integrations/supabase/integrations-supabase-token.png similarity index 100% rename from docs/images/integrations-supabase-token.png rename to docs/images/integrations/supabase/integrations-supabase-token.png diff --git a/docs/images/integrations-supabase.png b/docs/images/integrations/supabase/integrations-supabase.png similarity index 100% rename from docs/images/integrations-supabase.png rename to docs/images/integrations/supabase/integrations-supabase.png diff --git a/docs/images/integrations-terraformcloud-auth.png b/docs/images/integrations/terraform/integrations-terraformcloud-auth.png similarity index 100% rename from docs/images/integrations-terraformcloud-auth.png rename to docs/images/integrations/terraform/integrations-terraformcloud-auth.png diff --git a/docs/images/integrations-terraformcloud-create.png b/docs/images/integrations/terraform/integrations-terraformcloud-create.png similarity index 100% rename from docs/images/integrations-terraformcloud-create.png rename to docs/images/integrations/terraform/integrations-terraformcloud-create.png diff --git a/docs/images/integrations-terraformcloud-dashboard.png b/docs/images/integrations/terraform/integrations-terraformcloud-dashboard.png similarity index 100% rename from docs/images/integrations-terraformcloud-dashboard.png rename to docs/images/integrations/terraform/integrations-terraformcloud-dashboard.png diff --git a/docs/images/integrations-terraformcloud-tokens.png b/docs/images/integrations/terraform/integrations-terraformcloud-tokens.png similarity index 100% rename from docs/images/integrations-terraformcloud-tokens.png rename to docs/images/integrations/terraform/integrations-terraformcloud-tokens.png diff --git a/docs/images/integrations-terraformcloud-workspaceid.png b/docs/images/integrations/terraform/integrations-terraformcloud-workspaceid.png similarity index 100% rename from docs/images/integrations-terraformcloud-workspaceid.png rename to docs/images/integrations/terraform/integrations-terraformcloud-workspaceid.png diff --git a/docs/images/integrations-terraformcloud-workspaces.png b/docs/images/integrations/terraform/integrations-terraformcloud-workspaces.png similarity index 100% rename from docs/images/integrations-terraformcloud-workspaces.png rename to docs/images/integrations/terraform/integrations-terraformcloud-workspaces.png diff --git a/docs/images/integrations-terraformcloud.png b/docs/images/integrations/terraform/integrations-terraformcloud.png similarity index 100% rename from docs/images/integrations-terraformcloud.png rename to docs/images/integrations/terraform/integrations-terraformcloud.png diff --git a/docs/images/integrations-travisci-auth.png b/docs/images/integrations/travis-ci/integrations-travisci-auth.png similarity index 100% rename from docs/images/integrations-travisci-auth.png rename to docs/images/integrations/travis-ci/integrations-travisci-auth.png diff --git a/docs/images/integrations-travisci-create.png b/docs/images/integrations/travis-ci/integrations-travisci-create.png similarity index 100% rename from docs/images/integrations-travisci-create.png rename to docs/images/integrations/travis-ci/integrations-travisci-create.png diff --git a/docs/images/integrations-travisci-token.png b/docs/images/integrations/travis-ci/integrations-travisci-token.png similarity index 100% rename from docs/images/integrations-travisci-token.png rename to docs/images/integrations/travis-ci/integrations-travisci-token.png diff --git a/docs/images/integrations-travisci.png b/docs/images/integrations/travis-ci/integrations-travisci.png similarity index 100% rename from docs/images/integrations-travisci.png rename to docs/images/integrations/travis-ci/integrations-travisci.png diff --git a/docs/images/integrations-windmill-auth.png b/docs/images/integrations/windmill/integrations-windmill-auth.png similarity index 100% rename from docs/images/integrations-windmill-auth.png rename to docs/images/integrations/windmill/integrations-windmill-auth.png diff --git a/docs/images/integrations-windmill-create.png b/docs/images/integrations/windmill/integrations-windmill-create.png similarity index 100% rename from docs/images/integrations-windmill-create.png rename to docs/images/integrations/windmill/integrations-windmill-create.png diff --git a/docs/images/integrations-windmill-dashboard.png b/docs/images/integrations/windmill/integrations-windmill-dashboard.png similarity index 100% rename from docs/images/integrations-windmill-dashboard.png rename to docs/images/integrations/windmill/integrations-windmill-dashboard.png diff --git a/docs/images/integrations-windmill-token.png b/docs/images/integrations/windmill/integrations-windmill-token.png similarity index 100% rename from docs/images/integrations-windmill-token.png rename to docs/images/integrations/windmill/integrations-windmill-token.png diff --git a/docs/images/integrations-windmill.png b/docs/images/integrations/windmill/integrations-windmill.png similarity index 100% rename from docs/images/integrations-windmill.png rename to docs/images/integrations/windmill/integrations-windmill.png diff --git a/docs/images/organization-ic-add.png b/docs/images/organization-ic-add.png deleted file mode 100644 index 4f526ae2c..000000000 Binary files a/docs/images/organization-ic-add.png and /dev/null differ diff --git a/docs/images/organization-ic.png b/docs/images/organization-ic.png deleted file mode 100644 index e45ad2d82..000000000 Binary files a/docs/images/organization-ic.png and /dev/null differ diff --git a/docs/images/organization-members-add.png b/docs/images/organization-members-add.png deleted file mode 100644 index 3349ad8f4..000000000 Binary files a/docs/images/organization-members-add.png and /dev/null differ diff --git a/docs/images/organization-members.png b/docs/images/organization-members.png index 90344b698..70190df0c 100644 Binary files a/docs/images/organization-members.png and b/docs/images/organization-members.png differ diff --git a/docs/images/organization-overview.png b/docs/images/organization-overview.png new file mode 100644 index 000000000..df4273b6f Binary files /dev/null and b/docs/images/organization-overview.png differ diff --git a/docs/images/organization-service-accounts.png b/docs/images/organization-service-accounts.png deleted file mode 100644 index f48e848d3..000000000 Binary files a/docs/images/organization-service-accounts.png and /dev/null differ diff --git a/docs/images/organization.png b/docs/images/organization.png deleted file mode 100644 index 488d6c4cf..000000000 Binary files a/docs/images/organization.png and /dev/null differ diff --git a/docs/images/pit-commits.png b/docs/images/pit-commits.png deleted file mode 100644 index 22599311a..000000000 Binary files a/docs/images/pit-commits.png and /dev/null differ diff --git a/docs/images/pit-snapshot.png b/docs/images/pit-snapshot.png deleted file mode 100644 index b7e913108..000000000 Binary files a/docs/images/pit-snapshot.png and /dev/null differ diff --git a/docs/images/pit-snapshots.png b/docs/images/pit-snapshots.png deleted file mode 100644 index aa1cd52d3..000000000 Binary files a/docs/images/pit-snapshots.png and /dev/null differ diff --git a/docs/images/platform/audit-logs/audit-logs-table.png b/docs/images/platform/audit-logs/audit-logs-table.png new file mode 100644 index 000000000..a24b02bc0 Binary files /dev/null and b/docs/images/platform/audit-logs/audit-logs-table.png differ diff --git a/docs/images/platform/folder/folders-add.png b/docs/images/platform/folder/folders-add.png new file mode 100644 index 000000000..e436c5015 Binary files /dev/null and b/docs/images/platform/folder/folders-add.png differ diff --git a/docs/images/platform/folder/folders-delete.png b/docs/images/platform/folder/folders-delete.png new file mode 100644 index 000000000..dff663be9 Binary files /dev/null and b/docs/images/platform/folder/folders-delete.png differ diff --git a/docs/images/platform/folder/folders-secrets-overview.png b/docs/images/platform/folder/folders-secrets-overview.png new file mode 100644 index 000000000..1b758ea0a Binary files /dev/null and b/docs/images/platform/folder/folders-secrets-overview.png differ diff --git a/docs/images/project-ip-whitelist-add.png b/docs/images/platform/ip-allowlisting/ip-allowlisting-modal.png similarity index 100% rename from docs/images/project-ip-whitelist-add.png rename to docs/images/platform/ip-allowlisting/ip-allowlisting-modal.png diff --git a/docs/images/project-ip-whitelist.png b/docs/images/platform/ip-allowlisting/ip-allowlisting-table.png similarity index 100% rename from docs/images/project-ip-whitelist.png rename to docs/images/platform/ip-allowlisting/ip-allowlisting-table.png diff --git a/docs/images/platform/organization/organization-members-roles-add-perm.png b/docs/images/platform/organization/organization-members-roles-add-perm.png new file mode 100644 index 000000000..0e87e3e5f Binary files /dev/null and b/docs/images/platform/organization/organization-members-roles-add-perm.png differ diff --git a/docs/images/platform/organization/organization-members-roles.png b/docs/images/platform/organization/organization-members-roles.png new file mode 100644 index 000000000..454af0809 Binary files /dev/null and b/docs/images/platform/organization/organization-members-roles.png differ diff --git a/docs/images/platform/organization/organization-projects.png b/docs/images/platform/organization/organization-projects.png new file mode 100644 index 000000000..82c0aee57 Binary files /dev/null and b/docs/images/platform/organization/organization-projects.png differ diff --git a/docs/images/platform/organization/organization-settings-auth.png b/docs/images/platform/organization/organization-settings-auth.png new file mode 100644 index 000000000..8643c44da Binary files /dev/null and b/docs/images/platform/organization/organization-settings-auth.png differ diff --git a/docs/images/platform/organization/organization-settings-general.png b/docs/images/platform/organization/organization-settings-general.png new file mode 100644 index 000000000..2c60090fe Binary files /dev/null and b/docs/images/platform/organization/organization-settings-general.png differ diff --git a/docs/images/platform/organization/organization-usage-billing.png b/docs/images/platform/organization/organization-usage-billing.png new file mode 100644 index 000000000..345a437f7 Binary files /dev/null and b/docs/images/platform/organization/organization-usage-billing.png differ diff --git a/docs/images/platform/pit-recovery/pit-recovery-commits-drawer.png b/docs/images/platform/pit-recovery/pit-recovery-commits-drawer.png new file mode 100644 index 000000000..032271f04 Binary files /dev/null and b/docs/images/platform/pit-recovery/pit-recovery-commits-drawer.png differ diff --git a/docs/images/platform/pit-recovery/pit-recovery-commits.png b/docs/images/platform/pit-recovery/pit-recovery-commits.png new file mode 100644 index 000000000..8dfc3397c Binary files /dev/null and b/docs/images/platform/pit-recovery/pit-recovery-commits.png differ diff --git a/docs/images/platform/pit-recovery/pit-recovery-rollback.png b/docs/images/platform/pit-recovery/pit-recovery-rollback.png new file mode 100644 index 000000000..5bee95103 Binary files /dev/null and b/docs/images/platform/pit-recovery/pit-recovery-rollback.png differ diff --git a/docs/images/platform/project/project-secrets-add.png b/docs/images/platform/project/project-secrets-add.png new file mode 100644 index 000000000..b208818d2 Binary files /dev/null and b/docs/images/platform/project/project-secrets-add.png differ diff --git a/docs/images/platform/project/project-secrets-comment.png b/docs/images/platform/project/project-secrets-comment.png new file mode 100644 index 000000000..f669e5e12 Binary files /dev/null and b/docs/images/platform/project/project-secrets-comment.png differ diff --git a/docs/images/platform/project/project-secrets-delete-batch.png b/docs/images/platform/project/project-secrets-delete-batch.png new file mode 100644 index 000000000..be0e02361 Binary files /dev/null and b/docs/images/platform/project/project-secrets-delete-batch.png differ diff --git a/docs/images/platform/project/project-secrets-delete.png b/docs/images/platform/project/project-secrets-delete.png new file mode 100644 index 000000000..6a5bca0cd Binary files /dev/null and b/docs/images/platform/project/project-secrets-delete.png differ diff --git a/docs/images/platform/project/project-secrets-download-env.png b/docs/images/platform/project/project-secrets-download-env.png new file mode 100644 index 000000000..aba2669d3 Binary files /dev/null and b/docs/images/platform/project/project-secrets-download-env.png differ diff --git a/docs/images/platform/project/project-secrets-drawer.png b/docs/images/platform/project/project-secrets-drawer.png new file mode 100644 index 000000000..1901b1dc7 Binary files /dev/null and b/docs/images/platform/project/project-secrets-drawer.png differ diff --git a/docs/images/platform/project/project-secrets-drop-env.png b/docs/images/platform/project/project-secrets-drop-env.png new file mode 100644 index 000000000..410d5b9d7 Binary files /dev/null and b/docs/images/platform/project/project-secrets-drop-env.png differ diff --git a/docs/images/platform/project/project-secrets-ellipses.png b/docs/images/platform/project/project-secrets-ellipses.png new file mode 100644 index 000000000..2bd34db89 Binary files /dev/null and b/docs/images/platform/project/project-secrets-ellipses.png differ diff --git a/docs/images/platform/project/project-secrets-filter.png b/docs/images/platform/project/project-secrets-filter.png new file mode 100644 index 000000000..3a9444e77 Binary files /dev/null and b/docs/images/platform/project/project-secrets-filter.png differ diff --git a/docs/images/platform/project/project-secrets-override.png b/docs/images/platform/project/project-secrets-override.png new file mode 100644 index 000000000..bf2a0d590 Binary files /dev/null and b/docs/images/platform/project/project-secrets-override.png differ diff --git a/docs/images/platform/project/project-secrets-overview-open.png b/docs/images/platform/project/project-secrets-overview-open.png new file mode 100644 index 000000000..b79339f70 Binary files /dev/null and b/docs/images/platform/project/project-secrets-overview-open.png differ diff --git a/docs/images/platform/project/project-secrets-overview.png b/docs/images/platform/project/project-secrets-overview.png new file mode 100644 index 000000000..9ff628bc0 Binary files /dev/null and b/docs/images/platform/project/project-secrets-overview.png differ diff --git a/docs/images/platform/project/project-secrets-search.png b/docs/images/platform/project/project-secrets-search.png new file mode 100644 index 000000000..50650e1f9 Binary files /dev/null and b/docs/images/platform/project/project-secrets-search.png differ diff --git a/docs/images/platform/project/project-secrets-tag.png b/docs/images/platform/project/project-secrets-tag.png new file mode 100644 index 000000000..3fc618731 Binary files /dev/null and b/docs/images/platform/project/project-secrets-tag.png differ diff --git a/docs/images/platform/project/project-secrets-unhide.png b/docs/images/platform/project/project-secrets-unhide.png new file mode 100644 index 000000000..55356d878 Binary files /dev/null and b/docs/images/platform/project/project-secrets-unhide.png differ diff --git a/docs/images/platform/secret-references-imports/secret-import-add.png b/docs/images/platform/secret-references-imports/secret-import-add.png new file mode 100644 index 000000000..0b4f4225c Binary files /dev/null and b/docs/images/platform/secret-references-imports/secret-import-add.png differ diff --git a/docs/images/platform/secret-references-imports/secret-import-added.png b/docs/images/platform/secret-references-imports/secret-import-added.png new file mode 100644 index 000000000..f69f56966 Binary files /dev/null and b/docs/images/platform/secret-references-imports/secret-import-added.png differ diff --git a/docs/images/platform/secret-references-imports/secret-import-delete.png b/docs/images/platform/secret-references-imports/secret-import-delete.png new file mode 100644 index 000000000..3e6edb2fb Binary files /dev/null and b/docs/images/platform/secret-references-imports/secret-import-delete.png differ diff --git a/docs/images/platform/secret-references-imports/secret-import-reorder.png b/docs/images/platform/secret-references-imports/secret-import-reorder.png new file mode 100644 index 000000000..f55bc55e4 Binary files /dev/null and b/docs/images/platform/secret-references-imports/secret-import-reorder.png differ diff --git a/docs/images/platform/secret-references-imports/secret-reference.png b/docs/images/platform/secret-references-imports/secret-reference.png new file mode 100644 index 000000000..aee1cd92e Binary files /dev/null and b/docs/images/platform/secret-references-imports/secret-reference.png differ diff --git a/docs/images/project-download.png b/docs/images/project-download.png deleted file mode 100644 index 00b02d9bf..000000000 Binary files a/docs/images/project-download.png and /dev/null differ diff --git a/docs/images/project-drag-drop.png b/docs/images/project-drag-drop.png deleted file mode 100644 index 7ae0ed718..000000000 Binary files a/docs/images/project-drag-drop.png and /dev/null differ diff --git a/docs/images/project-envar-override.png b/docs/images/project-envar-override.png deleted file mode 100644 index d9e01c8fd..000000000 Binary files a/docs/images/project-envar-override.png and /dev/null differ diff --git a/docs/images/project-envar-toggle-moved.png b/docs/images/project-envar-toggle-moved.png deleted file mode 100644 index 2c1517b9c..000000000 Binary files a/docs/images/project-envar-toggle-moved.png and /dev/null differ diff --git a/docs/images/project-envar-toggle.png b/docs/images/project-envar-toggle.png deleted file mode 100644 index b8ffa322a..000000000 Binary files a/docs/images/project-envar-toggle.png and /dev/null differ diff --git a/docs/images/project-environment.png b/docs/images/project-environment.png deleted file mode 100644 index e2e0d2959..000000000 Binary files a/docs/images/project-environment.png and /dev/null differ diff --git a/docs/images/project-folder-token.png b/docs/images/project-folder-token.png deleted file mode 100644 index 2402acdf2..000000000 Binary files a/docs/images/project-folder-token.png and /dev/null differ diff --git a/docs/images/project-hide.png b/docs/images/project-hide.png deleted file mode 100644 index 61aed0bee..000000000 Binary files a/docs/images/project-hide.png and /dev/null differ diff --git a/docs/images/project-integrations.png b/docs/images/project-integrations.png deleted file mode 100644 index 7c2c35bd4..000000000 Binary files a/docs/images/project-integrations.png and /dev/null differ diff --git a/docs/images/project-members.png b/docs/images/project-members.png index 87b2a7ee4..a166362de 100644 Binary files a/docs/images/project-members.png and b/docs/images/project-members.png differ diff --git a/docs/images/project-search-typed.png b/docs/images/project-search-typed.png deleted file mode 100644 index 09513ba4c..000000000 Binary files a/docs/images/project-search-typed.png and /dev/null differ diff --git a/docs/images/project-search.png b/docs/images/project-search.png deleted file mode 100644 index bafc0b2c3..000000000 Binary files a/docs/images/project-search.png and /dev/null differ diff --git a/docs/images/project_settings_page.png b/docs/images/project_settings_page.png deleted file mode 100644 index 6f1347f52..000000000 Binary files a/docs/images/project_settings_page.png and /dev/null differ diff --git a/docs/images/secret-import-add.png b/docs/images/secret-import-add.png deleted file mode 100644 index 67445dd16..000000000 Binary files a/docs/images/secret-import-add.png and /dev/null differ diff --git a/docs/images/secret-import-change-order.png b/docs/images/secret-import-change-order.png deleted file mode 100644 index 0fba240d1..000000000 Binary files a/docs/images/secret-import-change-order.png and /dev/null differ diff --git a/docs/images/secret-versioning.png b/docs/images/secret-versioning.png deleted file mode 100644 index 96dbfde41..000000000 Binary files a/docs/images/secret-versioning.png and /dev/null differ diff --git a/docs/images/email-aws-ses-console.png b/docs/images/self-hosting/configuration/email/email-aws-ses-console.png similarity index 100% rename from docs/images/email-aws-ses-console.png rename to docs/images/self-hosting/configuration/email/email-aws-ses-console.png diff --git a/docs/images/email-aws-ses-user.png b/docs/images/self-hosting/configuration/email/email-aws-ses-user.png similarity index 100% rename from docs/images/email-aws-ses-user.png rename to docs/images/self-hosting/configuration/email/email-aws-ses-user.png diff --git a/docs/images/email-gmail-app-access.png b/docs/images/self-hosting/configuration/email/email-gmail-app-access.png similarity index 100% rename from docs/images/email-gmail-app-access.png rename to docs/images/self-hosting/configuration/email/email-gmail-app-access.png diff --git a/docs/images/email-mailhog-credentials.png b/docs/images/self-hosting/configuration/email/email-mailhog-credentials.png similarity index 100% rename from docs/images/email-mailhog-credentials.png rename to docs/images/self-hosting/configuration/email/email-mailhog-credentials.png diff --git a/docs/images/email-resend-create-domain.png b/docs/images/self-hosting/configuration/email/email-resend-create-domain.png similarity index 100% rename from docs/images/email-resend-create-domain.png rename to docs/images/self-hosting/configuration/email/email-resend-create-domain.png diff --git a/docs/images/email-resend-create-key.png b/docs/images/self-hosting/configuration/email/email-resend-create-key.png similarity index 100% rename from docs/images/email-resend-create-key.png rename to docs/images/self-hosting/configuration/email/email-resend-create-key.png diff --git a/docs/images/email-resend-smtp-settings.png b/docs/images/self-hosting/configuration/email/email-resend-smtp-settings.png similarity index 100% rename from docs/images/email-resend-smtp-settings.png rename to docs/images/self-hosting/configuration/email/email-resend-smtp-settings.png diff --git a/docs/images/email-sendgrid-create-key.png b/docs/images/self-hosting/configuration/email/email-sendgrid-create-key.png similarity index 100% rename from docs/images/email-sendgrid-create-key.png rename to docs/images/self-hosting/configuration/email/email-sendgrid-create-key.png diff --git a/docs/images/email-sendgrid-restrictions.png b/docs/images/self-hosting/configuration/email/email-sendgrid-restrictions.png similarity index 100% rename from docs/images/email-sendgrid-restrictions.png rename to docs/images/self-hosting/configuration/email/email-sendgrid-restrictions.png diff --git a/docs/images/email-socketlabs-credentials.png b/docs/images/self-hosting/configuration/email/email-socketlabs-credentials.png similarity index 100% rename from docs/images/email-socketlabs-credentials.png rename to docs/images/self-hosting/configuration/email/email-socketlabs-credentials.png diff --git a/docs/images/email-socketlabs-dashboard.png b/docs/images/self-hosting/configuration/email/email-socketlabs-dashboard.png similarity index 100% rename from docs/images/email-socketlabs-dashboard.png rename to docs/images/self-hosting/configuration/email/email-socketlabs-dashboard.png diff --git a/docs/images/email-socketlabs-domains.png b/docs/images/self-hosting/configuration/email/email-socketlabs-domains.png similarity index 100% rename from docs/images/email-socketlabs-domains.png rename to docs/images/self-hosting/configuration/email/email-socketlabs-domains.png diff --git a/docs/integrations/cicd/bitbucket.mdx b/docs/integrations/cicd/bitbucket.mdx index ff33c9f9b..357de5ee5 100644 --- a/docs/integrations/cicd/bitbucket.mdx +++ b/docs/integrations/cicd/bitbucket.mdx @@ -15,7 +15,7 @@ Prerequisites: Press on the Bitbucket tile and grant Infisical access to your Bitbucket account. -![integrations bitbucket authorization](../../images/integrations-bitbucket-auth.png) +![integrations bitbucket authorization](../../images/integrations/bitbucket/integrations-bitbucket-auth.png) If this is your project's first cloud integration, then you'll have to grant @@ -28,4 +28,4 @@ Press on the Bitbucket tile and grant Infisical access to your Bitbucket account Select which Infisical environment secrets you want to sync to which Bitbucket repo and press start integration to start syncing secrets to the repo. -![integrations bitbucket](../../images/integrations-bitbucket.png) +![integrations bitbucket](../../images/integrations/bitbucket/integrations-bitbucket.png) diff --git a/docs/integrations/cicd/circleci.mdx b/docs/integrations/cicd/circleci.mdx index 58b8ae3ff..5310748ac 100644 --- a/docs/integrations/cicd/circleci.mdx +++ b/docs/integrations/cicd/circleci.mdx @@ -15,11 +15,11 @@ Prerequisites: Obtain an API token in User Settings > Personal API Tokens -![integrations circleci token](../../images/integrations-circleci-token.png) +![integrations circleci token](../../images/integrations/circleci/integrations-circleci-token.png) Press on the CircleCI tile and input your CircleCI API token to grant Infisical access to your CircleCI account. -![integrations circleci authorization](../../images/integrations-circleci-auth.png) +![integrations circleci authorization](../../images/integrations/circleci/integrations-circleci-auth.png) If this is your project's first cloud integration, then you'll have to grant @@ -32,5 +32,5 @@ Press on the CircleCI tile and input your CircleCI API token to grant Infisical Select which Infisical environment secrets you want to sync to which CircleCI project and press create integration to start syncing secrets to CircleCI. -![create integration circleci](../../images/integrations-circleci-create.png) -![integrations circleci](../../images/integrations-circleci.png) +![create integration circleci](../../images/integrations/circleci/integrations-circleci-create.png) +![integrations circleci](../../images/integrations/circleci/integrations-circleci.png) diff --git a/docs/integrations/cicd/codefresh.mdx b/docs/integrations/cicd/codefresh.mdx index e71552a09..4d0f78d33 100644 --- a/docs/integrations/cicd/codefresh.mdx +++ b/docs/integrations/cicd/codefresh.mdx @@ -15,12 +15,12 @@ Prerequisites: Obtain an API key in User Settings > API Keys -![integrations codefresh dashboard](../../images/integrations-codefresh-dashboard.png) -![integrations codefresh token](../../images/integrations-codefresh-token.png) +![integrations codefresh dashboard](../../images/integrations/codefresh/integrations-codefresh-dashboard.png) +![integrations codefresh token](../../images/integrations/codefresh/integrations-codefresh-token.png) Press on the Codefresh tile and input your Codefresh API key to grant Infisical access to your Codefresh account. -![integrations codefresh authorization](../../images/integrations-codefresh-auth.png) +![integrations codefresh authorization](../../images/integrations/codefresh/integrations-codefresh-auth.png) If this is your project's first cloud integration, then you'll have to grant @@ -33,5 +33,5 @@ Press on the Codefresh tile and input your Codefresh API key to grant Infisical Select which Infisical environment secrets you want to sync to which Codefresh service and press create integration to start syncing secrets to Codefresh. -![create integration codefresh](../../images/integrations-codefresh-create.png) -![integrations codefresh](../../images/integrations-codefresh.png) +![create integration codefresh](../../images/integrations/codefresh/integrations-codefresh-create.png) +![integrations codefresh](../../images/integrations/codefresh/integrations-codefresh.png) diff --git a/docs/integrations/cicd/travisci.mdx b/docs/integrations/cicd/travisci.mdx index 79737a2d8..c0f917d5f 100644 --- a/docs/integrations/cicd/travisci.mdx +++ b/docs/integrations/cicd/travisci.mdx @@ -15,11 +15,11 @@ Prerequisites: Obtain your API token in User Settings > API authentication > Token -![integrations travis ci token](../../images/integrations-travisci-token.png) +![integrations travis ci token](../../images/integrations/travis-ci/integrations-travisci-token.png) Press on the Travis CI tile and input your Travis CI API token to grant Infisical access to your Travis CI account. -![integrations travis ci authorization](../../images/integrations-travisci-auth.png) +![integrations travis ci authorization](../../images/integrations/travis-ci/integrations-travisci-auth.png) If this is your project's first cloud integration, then you'll have to grant @@ -32,5 +32,5 @@ Press on the Travis CI tile and input your Travis CI API token to grant Infisica Select which Infisical environment secrets you want to sync to which Travis CI repository and press create integration to start syncing secrets to Travis CI. -![create integration travis ci](../../images/integrations-travisci-create.png) -![integrations travis ci](../../images/integrations-travisci.png) +![create integration travis ci](../../images/integrations/travis-ci/integrations-travisci-create.png) +![integrations travis ci](../../images/integrations/travis-ci/integrations-travisci.png) diff --git a/docs/integrations/cloud/aws-parameter-store.mdx b/docs/integrations/cloud/aws-parameter-store.mdx index 42b41ac73..1ebb6d500 100644 --- a/docs/integrations/cloud/aws-parameter-store.mdx +++ b/docs/integrations/cloud/aws-parameter-store.mdx @@ -12,9 +12,9 @@ Prerequisites: Navigate to your IAM user permissions and add a permission policy to grant access to AWS Parameter Store. -![integration IAM 1](../../images/integrations-aws-iam-1.png) -![integration IAM 2](../../images/integrations-aws-parameter-store-iam-2.png) -![integrations IAM 3](../../images/integrations-aws-parameter-store-iam-3.png) +![integration IAM 1](../../images/integrations/aws/integrations-aws-iam-1.png) +![integration IAM 2](../../images/integrations/aws/integrations-aws-parameter-store-iam-2.png) +![integrations IAM 3](../../images/integrations/aws/integrations-aws-parameter-store-iam-3.png) For enhanced security, here's a custom policy containing the minimum permissions required by Infisical to sync secrets to AWS Parameter Store for the IAM user that you can use: @@ -45,13 +45,13 @@ For enhanced security, here's a custom policy containing the minimum permissions Obtain a AWS access key ID and secret access key for your IAM user in IAM > Users > User > Security credentials > Access keys -![access key 1](../../images/integrations-aws-access-key-1.png) -![access key 2](../../images/integrations-aws-access-key-2.png) -![access key 3](../../images/integrations-aws-access-key-3.png) +![access key 1](../../images/integrations/aws/integrations-aws-access-key-1.png) +![access key 2](../../images/integrations/aws/integrations-aws-access-key-2.png) +![access key 3](../../images/integrations/aws/integrations-aws-access-key-3.png) Press on the AWS Parameter Store tile and input your AWS access key ID and secret access key from the previous step. -![integration auth](../../images/integrations-aws-parameter-store-auth.png) +![integration auth](../../images/integrations/aws/integrations-aws-parameter-store-auth.png) If this is your project's first cloud integration, then you'll have to grant @@ -64,7 +64,7 @@ Press on the AWS Parameter Store tile and input your AWS access key ID and secre Select which Infisical environment secrets you want to sync to which AWS Parameter Store region and indicate the path for your secrets. Then, press create integration to start syncing secrets to AWS Parameter Store. -![integration create](../../images/integrations-aws-parameter-store-create.png) +![integration create](../../images/integrations/aws/integrations-aws-parameter-store-create.png) Infisical requires you to add a path for your secrets to be stored in AWS diff --git a/docs/integrations/cloud/aws-secret-manager.mdx b/docs/integrations/cloud/aws-secret-manager.mdx index 4df054077..eadb66d91 100644 --- a/docs/integrations/cloud/aws-secret-manager.mdx +++ b/docs/integrations/cloud/aws-secret-manager.mdx @@ -12,9 +12,9 @@ Prerequisites: Navigate to your IAM user permissions and add a permission policy to grant access to AWS Secrets Manager. -![integration IAM 1](../../images/integrations-aws-iam-1.png) -![integration IAM 2](../../images/integrations-aws-secret-manager-iam-2.png) -![integrations IAM 3](../../images/integrations-aws-secret-manager-iam-3.png) +![integration IAM 1](../../images/integrations/aws/integrations-aws-iam-1.png) +![integration IAM 2](../../images/integrations/aws/integrations-aws-secret-manager-iam-2.png) +![integrations IAM 3](../../images/integrations/aws/integrations-aws-secret-manager-iam-3.png) For better security, here's a custom policy containing the minimum permissions required by Infisical to sync secrets to AWS Secrets Manager for the IAM user that you can use: @@ -44,13 +44,13 @@ For better security, here's a custom policy containing the minimum permissions r Obtain a AWS access key ID and secret access key for your IAM user in IAM > Users > User > Security credentials > Access keys -![access key 1](../../images/integrations-aws-access-key-1.png) -![access key 2](../../images/integrations-aws-access-key-2.png) -![access key 3](../../images/integrations-aws-access-key-3.png) +![access key 1](../../images/integrations/aws/integrations-aws-access-key-1.png) +![access key 2](../../images/integrations/aws/integrations-aws-access-key-2.png) +![access key 3](../../images/integrations/aws/integrations-aws-access-key-3.png) Press on the AWS Secrets Manager tile and input your AWS access key ID and secret access key from the previous step. -![integration auth](../../images/integrations-aws-secret-manager-auth.png) +![integration auth](../../images/integrations/aws/integrations-aws-secret-manager-auth.png) If this is your project's first cloud integration, then you'll have to grant @@ -63,7 +63,7 @@ Press on the AWS Secrets Manager tile and input your AWS access key ID and secre Select which Infisical environment secrets you want to sync to which AWS Secrets Manager region and under which secret name. Then, press create integration to start syncing secrets to AWS Secrets Manager. -![integration create](../../images/integrations-aws-secret-manager-create.png) +![integration create](../../images/integrations/aws/integrations-aws-secret-manager-create.png) Infisical currently syncs environment variables to AWS Secrets Manager as diff --git a/docs/integrations/cloud/checkly.mdx b/docs/integrations/cloud/checkly.mdx index 315764ce8..711c8cec9 100644 --- a/docs/integrations/cloud/checkly.mdx +++ b/docs/integrations/cloud/checkly.mdx @@ -15,12 +15,12 @@ Prerequisites: Obtain a Checkly API Key in User Settings > API Keys. -![integrations checkly dashboard](../../images/integrations-checkly-dashboard.png) -![integrations checkly token](../../images/integrations-checkly-token.png) +![integrations checkly dashboard](../../images/integrations/checkly/integrations-checkly-dashboard.png) +![integrations checkly token](../../images/integrations/checkly/integrations-checkly-token.png) Press on the Checkly tile and input your Checkly API Key to grant Infisical access to your Checkly account. -![integrations checkly authorization](../../images/integrations-checkly-auth.png) +![integrations checkly authorization](../../images/integrations/checkly/integrations-checkly-auth.png) If this is your project's first cloud integration, then you'll have to grant @@ -33,8 +33,8 @@ Press on the Checkly tile and input your Checkly API Key to grant Infisical acce Select which Infisical environment secrets you want to sync to Checkly and press create integration to start syncing secrets. -![integrations checkly](../../images/integrations-checkly-create.png) -![integrations checkly](../../images/integrations-checkly.png) +![integrations checkly](../../images/integrations/checkly/integrations-checkly-create.png) +![integrations checkly](../../images/integrations/checkly/integrations-checkly.png) In the new version of the Checkly integration, you are able to specify suffixes that depend on the secrets' environment and path. diff --git a/docs/integrations/cloud/cloud-66.mdx b/docs/integrations/cloud/cloud-66.mdx index 86c28440e..ab362137c 100644 --- a/docs/integrations/cloud/cloud-66.mdx +++ b/docs/integrations/cloud/cloud-66.mdx @@ -14,22 +14,22 @@ Prerequisites: ## Enter your Cloud 66 Access Token In Cloud 66 Dashboard, click on the top right icon > Account Settings > Access Token -![integrations cloud 66 dashboard](../../images/integrations-cloud-66-dashboard.png) -![integrations cloud 66 access token](../../images/integrations-cloud-66-access-token.png) +![integrations cloud 66 dashboard](../../images/integrations/cloud-66/integrations-cloud-66-dashboard.png) +![integrations cloud 66 access token](../../images/integrations/cloud-66/integrations-cloud-66-access-token.png) Create new Personal Access Token. -![integrations cloud 66 personal access token](../../images/integrations-cloud-66-pat.png) +![integrations cloud 66 personal access token](../../images/integrations/cloud-66/integrations-cloud-66-pat.png) Name it **infisical** and check **Public** and **Admin**. Then click "Create Token" -![integrations cloud 66 personal access token setup](../../images/integrations-cloud-66-pat-setup.png) +![integrations cloud 66 personal access token setup](../../images/integrations/cloud-66/integrations-cloud-66-pat-setup.png) Copy and save your token. -![integrations cloud 66 copy API token](../../images/integrations-cloud-66-copy-pat.png) +![integrations cloud 66 copy API token](../../images/integrations/cloud-66/integrations-cloud-66-copy-pat.png) ### Go to Infisical Integration Page Click on the Cloud 66 tile and enter your API token to grant Infisical access to your Cloud 66 account. -![integrations cloud 66 tile in infisical dashboard](../../images/integrations-cloud-66-infisical-dashboard.png) +![integrations cloud 66 tile in infisical dashboard](../../images/integrations/cloud-66/integrations-cloud-66-infisical-dashboard.png) If this is your project's first cloud integration, then you'll have to grant @@ -39,17 +39,17 @@ Click on the Cloud 66 tile and enter your API token to grant Infisical access to Enter your Cloud 66 Personal Access Token here. Then click "Connect to Cloud 66". -![integrations cloud 66 tile in infisical dashboard](../../images/integrations-cloud-66-paste-pat.png) +![integrations cloud 66 tile in infisical dashboard](../../images/integrations/cloud-66/integrations-cloud-66-paste-pat.png) ## Start integration Select which Infisical environment secrets you want to sync to which Cloud 66 stacks and press create integration to start syncing secrets to Cloud 66. -![integrations laravel forge](../../images/integrations-cloud-66-create.png) +![integrations laravel forge](../../images/integrations/cloud-66/integrations-cloud-66-create.png) Any existing environment variables in Cloud 66 will be deleted when you start syncing. Make sure to add all the secrets into the Infisical dashboard first before doing any integrations. Done! -![integrations laravel forge](../../images/integrations-cloud-66-done.png) +![integrations laravel forge](../../images/integrations/cloud-66/integrations-cloud-66-done.png) diff --git a/docs/integrations/cloud/cloudflare-pages.mdx b/docs/integrations/cloud/cloudflare-pages.mdx index 4a95a006a..7160aeb58 100644 --- a/docs/integrations/cloud/cloudflare-pages.mdx +++ b/docs/integrations/cloud/cloudflare-pages.mdx @@ -17,17 +17,17 @@ Obtain a Cloudflare [API token](https://dash.cloudflare.com/profile/api-tokens) 1. Create a new [API token](https://dash.cloudflare.com/profile/api-tokens) in My Profile > API Tokens -![integrations cloudflare credentials 1](../../images/integrations-cloudflare-credentials-1.png) -![integrations cloudflare credentials 2](../../images/integrations-cloudflare-credentials-2.png) -![integrations cloudflare credentials 3](../../images/integrations-cloudflare-credentials-3.png) +![integrations cloudflare credentials 1](../../images/integrations/cloudflare/integrations-cloudflare-credentials-1.png) +![integrations cloudflare credentials 2](../../images/integrations/cloudflare/integrations-cloudflare-credentials-2.png) +![integrations cloudflare credentials 3](../../images/integrations/cloudflare/integrations-cloudflare-credentials-3.png) 2. Copy your [Account ID](https://developers.cloudflare.com/fundamentals/get-started/basic-tasks/find-account-and-zone-ids/) from Account > Workers & Pages > Overview -![integrations cloudflare credentials 4](../../images/integrations-cloudflare-credentials-4.png) +![integrations cloudflare credentials 4](../../images/integrations/cloudflare/integrations-cloudflare-credentials-4.png) Press on the Cloudflare Pages tile and input your Cloudflare API token and account ID to grant Infisical access to your Cloudflare Pages. -![integrations cloudflare authorization](../../images/integrations-cloudflare-auth.png) +![integrations cloudflare authorization](../../images/integrations/cloudflare/integrations-cloudflare-auth.png) If this is your project's first cloud integration, then you'll have to grant @@ -40,5 +40,5 @@ Press on the Cloudflare Pages tile and input your Cloudflare API token and accou Select which Infisical environment secrets you want to sync to Cloudflare and press create integration to start syncing secrets. -![integrations cloudflare](../../images/integrations-cloudflare-create.png) -![integrations cloudflare](../../images/integrations-cloudflare.png) +![integrations cloudflare](../../images/integrations/cloudflare/integrations-cloudflare-create.png) +![integrations cloudflare](../../images/integrations/cloudflare/integrations-cloudflare.png) diff --git a/docs/integrations/cloud/digital-ocean-app-platform.mdx b/docs/integrations/cloud/digital-ocean-app-platform.mdx index 10dd7751d..1ed255a48 100644 --- a/docs/integrations/cloud/digital-ocean-app-platform.mdx +++ b/docs/integrations/cloud/digital-ocean-app-platform.mdx @@ -10,10 +10,10 @@ Prerequisites: ## Get your Digital Ocean Personal Access Tokens On Digital Ocean dashboard, navigate to **API > Tokens** and click on "Generate New Token" -![integrations digital ocean dashboard](../../images/integrations-do-dashboard.png) +![integrations digital ocean dashboard](../../images/integrations/digital-ocean/integrations-do-dashboard.png) Name it **infisical**, choose **No expiry**, and make sure to check **Write (optional)**. Then click on "Generate Token" and copy your API token. -![integrations digital ocean token modal](../../images/integrations-do-token-modal.png) +![integrations digital ocean token modal](../../images/integrations/digital-ocean/integrations-do-token-modal.png) ## Navigate to your project's integrations tab @@ -28,12 +28,12 @@ Click on the **Digital Ocean App Platform** tile and enter your API token to gra Then enter your Digital Ocean Personal Access Token here. Then click "Connect to Digital Ocean App Platform". -![integrations infisical dashboard digital ocean integration](../../images/integrations-do-enter-token.png) +![integrations infisical dashboard digital ocean integration](../../images/integrations/digital-ocean/integrations-do-enter-token.png) ## Start integration Select which Infisical environment secrets you want to sync to which Digital Ocean App and click "Create Integration". -![integrations digital ocean select projects](../../images/integrations-do-select-projects.png) +![integrations digital ocean select projects](../../images/integrations/digital-ocean/integrations-do-select-projects.png) Done! -![integrations digital ocean integration success](../../images/integrations-do-success.png) +![integrations digital ocean integration success](../../images/integrations/digital-ocean/integrations-do-success.png) diff --git a/docs/integrations/cloud/flyio.mdx b/docs/integrations/cloud/flyio.mdx index 283c54176..7fe89495d 100644 --- a/docs/integrations/cloud/flyio.mdx +++ b/docs/integrations/cloud/flyio.mdx @@ -15,12 +15,12 @@ Prerequisites: Obtain a Fly.io access token in Access Tokens -![integrations fly dashboard](../../images/integrations-flyio-dashboard.png) -![integrations fly token](../../images/integrations-flyio-token.png) +![integrations fly dashboard](../../images/integrations/flyio/integrations-flyio-dashboard.png) +![integrations fly token](../../images/integrations/flyio/integrations-flyio-token.png) Press on the Fly.io tile and input your Fly.io access token to grant Infisical access to your Fly.io account. -![integrations fly authorization](../../images/integrations-flyio-auth.png) +![integrations fly authorization](../../images/integrations/flyio/integrations-flyio-auth.png) If this is your project's first cloud integration, then you'll have to grant @@ -33,5 +33,5 @@ Press on the Fly.io tile and input your Fly.io access token to grant Infisical a Select which Infisical environment secrets you want to sync to which Fly.io app and press create integration to start syncing secrets to Fly.io. -![integrations fly](../../images/integrations-flyio-create.png) -![integrations fly](../../images/integrations-flyio.png) +![integrations fly](../../images/integrations/flyio/integrations-flyio-create.png) +![integrations fly](../../images/integrations/flyio/integrations-flyio.png) diff --git a/docs/integrations/cloud/hashicorp-vault.mdx b/docs/integrations/cloud/hashicorp-vault.mdx index 936a16941..51a66f3ff 100644 --- a/docs/integrations/cloud/hashicorp-vault.mdx +++ b/docs/integrations/cloud/hashicorp-vault.mdx @@ -34,17 +34,17 @@ To begin, navigate to the cluster / namespace that you want to sync secrets to i In Secrets, enable a KV Secrets Engine at a path for Infisical to sync secrets to; we'll use the path `kv`. -![integrations hashicorp vault secrets engine](../../images/integrations-hashicorp-vault-engine-1.png) -![integrations hashicorp vault secrets engine](../../images/integrations-hashicorp-vault-engine-2.png) -![integrations hashicorp vault secrets engine](../../images/integrations-hashicorp-vault-engine-3.png) +![integrations hashicorp vault secrets engine](../../images/integrations/hashicorp-vault/integrations-hashicorp-vault-engine-1.png) +![integrations hashicorp vault secrets engine](../../images/integrations/hashicorp-vault/integrations-hashicorp-vault-engine-2.png) +![integrations hashicorp vault secrets engine](../../images/integrations/hashicorp-vault/integrations-hashicorp-vault-engine-3.png) ### Enable the AppRole auth method In Access > Auth Methods, enable the AppRole auth method. -![integrations hashicorp vault access](../../images/integrations-hashicorp-vault-access-1.png) -![integrations hashicorp vault access](../../images/integrations-hashicorp-vault-access-2.png) -![integrations hashicorp vault access](../../images/integrations-hashicorp-vault-access-3.png) +![integrations hashicorp vault access](../../images/integrations/hashicorp-vault/integrations-hashicorp-vault-access-1.png) +![integrations hashicorp vault access](../../images/integrations/hashicorp-vault/integrations-hashicorp-vault-access-2.png) +![integrations hashicorp vault access](../../images/integrations/hashicorp-vault/integrations-hashicorp-vault-access-3.png) ### Create an ACL Policy @@ -67,9 +67,9 @@ path "sys/namespaces/*" { that we want to sync secrets to. -![integrations hashicorp vault policy](../../images/integrations-hashicorp-vault-policy-1.png) -![integrations hashicorp vault policy](../../images/integrations-hashicorp-vault-policy-2.png) -![integrations hashicorp vault policy](../../images/integrations-hashicorp-vault-policy-3.png) +![integrations hashicorp vault policy](../../images/integrations/hashicorp-vault/integrations-hashicorp-vault-policy-1.png) +![integrations hashicorp vault policy](../../images/integrations/hashicorp-vault/integrations-hashicorp-vault-policy-2.png) +![integrations hashicorp vault policy](../../images/integrations/hashicorp-vault/integrations-hashicorp-vault-policy-3.png) ### Create a role with the policy attached @@ -77,7 +77,7 @@ We now create a `infisical` role with the generated token's time-to-live (TTL) s 1. Click the Vault CLI shell icon (`>_`) to open a command shell in the browser. -![integrations hashicorp vault shell](../../images/integrations-hashicorp-vault-shell.png) +![integrations hashicorp vault shell](../../images/integrations/hashicorp-vault/integrations-hashicorp-vault-shell.png) 2. Copy the command below. @@ -129,7 +129,7 @@ Great. We're now ready to connect Infisical to Vault! Back in Infisical, press on the HashiCorp Vault tile and input your Vault instance and `infisical` role RoleID and SecretID. -![integrations hashicorp vault authorization](../../images/integrations-hashicorp-vault-auth.png) +![integrations hashicorp vault authorization](../../images/integrations/hashicorp-vault/integrations-hashicorp-vault-auth.png) For additional details on each field: @@ -137,7 +137,7 @@ For additional details on each field: If using HCP, you can copy your Cluster URL in the Cluster Overview: -![integrations hashicorp vault cluster URL](../../images/integrations-hashicorp-vault-cluster-url.png) +![integrations hashicorp vault cluster URL](../../images/integrations/hashicorp-vault/integrations-hashicorp-vault-cluster-url.png) - Vault Namespace: The Vault namespace you wish to connect to. - Vault RoleID: The RoleID previously created for the `infisical` role. @@ -154,8 +154,8 @@ For additional details on each field: Press create integration to start syncing secrets to Vault. -![integrations hashicorp vault](../../images/integrations-hashicorp-vault-create.png) -![integrations hashicorp vault](../../images/integrations-hashicorp-vault.png) +![integrations hashicorp vault](../../images/integrations/hashicorp-vault/integrations-hashicorp-vault-create.png) +![integrations hashicorp vault](../../images/integrations/hashicorp-vault/integrations-hashicorp-vault.png) diff --git a/docs/integrations/cloud/laravel-forge.mdx b/docs/integrations/cloud/laravel-forge.mdx index a3cf51843..67a771e6f 100644 --- a/docs/integrations/cloud/laravel-forge.mdx +++ b/docs/integrations/cloud/laravel-forge.mdx @@ -15,17 +15,17 @@ Prerequisites: Obtain a Laravel Forge access token in API Tokens -![integrations laravel forge dashboard](../../images/integrations-laravelforge-dashboard.png) -![integrations laravel forge api tokens](../../images/integrations-laravelforge-api.png) +![integrations laravel forge dashboard](../../images/integrations/laravel-forge/integrations-laravelforge-dashboard.png) +![integrations laravel forge api tokens](../../images/integrations/laravel-forge/integrations-laravelforge-api.png) Obtain your Laravel Forge Server ID in Servers > Server ID -![integrations laravel forge server](../../images/integrations-laravelforge-servers.png) -![integrations laravel forge server id](../../images/integrations-laravelforge-serverid.png) +![integrations laravel forge server](../../images/integrations/laravel-forge/integrations-laravelforge-servers.png) +![integrations laravel forge server id](../../images/integrations/laravel-forge/integrations-laravelforge-serverid.png) Press on the Laravel Forge tile and input your Laravel Forge access token and server ID to grant Infisical access to your Laravel Forge account. -![integrations laravel forge authorization](../../images/integrations-laravelforge-auth.png) +![integrations laravel forge authorization](../../images/integrations/laravel-forge/integrations-laravelforge-auth.png) If this is your project's first cloud integration, then you'll have to grant @@ -38,5 +38,5 @@ Press on the Laravel Forge tile and input your Laravel Forge access token and se Select which Infisical environment secrets you want to sync to which Laravel Forge site and press create integration to start syncing secrets to Laravel Forge. -![integrations laravel forge](../../images/integrations-laravelforge-create.png) -![integrations laravel forge](../../images/integrations-laravelforge.png) +![integrations laravel forge](../../images/integrations/laravel-forge/integrations-laravelforge-create.png) +![integrations laravel forge](../../images/integrations/laravel-forge/integrations-laravelforge.png) diff --git a/docs/integrations/cloud/northflank.mdx b/docs/integrations/cloud/northflank.mdx index 8b4f7eeb9..c677e871c 100644 --- a/docs/integrations/cloud/northflank.mdx +++ b/docs/integrations/cloud/northflank.mdx @@ -16,12 +16,12 @@ Prerequisites: Obtain a Northflank API token in Account settings > API > Tokens -![integrations northflank dashboard](../../images/integrations-northflank-dashboard.png) -![integrations northflank token](../../images/integrations-northflank-token.png) +![integrations northflank dashboard](../../images/integrations/northflank/integrations-northflank-dashboard.png) +![integrations northflank token](../../images/integrations/northflank/integrations-northflank-token.png) Press on the Northflank tile and input your Northflank API token to grant Infisical access to your Northflank account. -![integrations northflank authorization](../../images/integrations-northflank-auth.png) +![integrations northflank authorization](../../images/integrations/northflank/integrations-northflank-auth.png) If this is your project's first cloud integration, then you'll have to grant @@ -34,5 +34,5 @@ Press on the Northflank tile and input your Northflank API token to grant Infisi Select which Infisical environment secrets you want to sync to which Northflank project and secret group. Finally, press create integration to start syncing secrets to Northflank. -![integrations northflank](../../images/integrations-northflank-create.png) -![integrations northflank](../../images/integrations-northflank.png) +![integrations northflank](../../images/integrations/northflank/integrations-northflank-create.png) +![integrations northflank](../../images/integrations/northflank/integrations-northflank.png) diff --git a/docs/integrations/cloud/railway.mdx b/docs/integrations/cloud/railway.mdx index e19cfb626..e12881995 100644 --- a/docs/integrations/cloud/railway.mdx +++ b/docs/integrations/cloud/railway.mdx @@ -16,8 +16,8 @@ Prerequisites: Obtain a Railway API Token in your Railway [Account Settings > Tokens](https://railway.app/account/tokens). -![integrations railway dashboard](../../images/integrations-railway-dashboard.png) -![integrations railway token](../../images/integrations-railway-token.png) +![integrations railway dashboard](../../images/integrations/railway/integrations-railway-dashboard.png) +![integrations railway token](../../images/integrations/railway/integrations-railway-token.png) If this is your first time creating a Railway API token, then you'll be prompted to join @@ -29,7 +29,7 @@ Obtain a Railway API Token in your Railway [Account Settings > Tokens](https://r Press on the Railway tile and input your Railway API Key to grant Infisical access to your Railway account. -![integrations railway authorization](../../images/integrations-railway-authorization.png) +![integrations railway authorization](../../images/integrations/railway/integrations-railway-authorization.png) If this is your project's first cloud integration, then you'll have to grant @@ -42,7 +42,7 @@ Press on the Railway tile and input your Railway API Key to grant Infisical acce Select which Infisical environment secrets you want to sync to which Railway project and environment (and optionally service). Lastly, press create integration to start syncing secrets to Railway. -![integrations create railway](../../images/integrations-railway-create.png) +![integrations create railway](../../images/integrations/railway/integrations-railway-create.png) Infisical integrates with both Railway's [shared variables](https://blog.railway.app/p/shared-variables-release) at the project environment level as well as service variables at the service level. @@ -50,5 +50,5 @@ Select which Infisical environment secrets you want to sync to which Railway pro To sync secrets to a specific service in a project, you can select a service from the Railway Service dropdown; otherwise, leaving it empty will sync secrets to the shared variables of that project. -![integrations railway](../../images/integrations-railway.png) +![integrations railway](../../images/integrations/railway/integrations-railway.png) diff --git a/docs/integrations/cloud/render.mdx b/docs/integrations/cloud/render.mdx index 290e39012..237226562 100644 --- a/docs/integrations/cloud/render.mdx +++ b/docs/integrations/cloud/render.mdx @@ -15,12 +15,12 @@ Prerequisites: Obtain a Render API Key in your Render Account Settings > API Keys. -![integrations render dashboard](../../images/integrations-render-dashboard.png) -![integrations render token](../../images/integrations-render-token.png) +![integrations render dashboard](../../images/integrations/render/integrations-render-dashboard.png) +![integrations render token](../../images/integrations/render/integrations-render-token.png) Press on the Render tile and input your Render API Key to grant Infisical access to your Render account. -![integrations render authorization](../../images/integrations-render-auth.png) +![integrations render authorization](../../images/integrations/render/integrations-render-auth.png) If this is your project's first cloud integration, then you'll have to grant @@ -33,5 +33,5 @@ Press on the Render tile and input your Render API Key to grant Infisical access Select which Infisical environment secrets you want to sync to which Render service and press create integration to start syncing secrets to Render. -![integrations render](../../images/integrations-render-create.png) -![integrations render](../../images/integrations-render.png) +![integrations render](../../images/integrations/render/integrations-render-create.png) +![integrations render](../../images/integrations/render/integrations-render.png) diff --git a/docs/integrations/cloud/supabase.mdx b/docs/integrations/cloud/supabase.mdx index 14c787f75..14e113ea6 100644 --- a/docs/integrations/cloud/supabase.mdx +++ b/docs/integrations/cloud/supabase.mdx @@ -21,12 +21,12 @@ Prerequisites: ## Enter your Supabase Access Token Obtain a Supabase Access Token in your Supabase [Account > Access Tokens](https://app.supabase.com/account/tokens). -![integrations supabase dashboard](../../images/integrations-supabase-dashboard.png) -![integrations supabase token](../../images/integrations-supabase-token.png) +![integrations supabase dashboard](../../images/integrations/supabase/integrations-supabase-dashboard.png) +![integrations supabase token](../../images/integrations/supabase/integrations-supabase-token.png) Press on the Supabase tile and input your Supabase Access Token to grant Infisical access to your Supabase account. -![integrations supabase authorization](../../images/integrations-supabase-authorization.png) +![integrations supabase authorization](../../images/integrations/supabase/integrations-supabase-authorization.png) If this is your project's first cloud integration, then you'll have to grant @@ -39,6 +39,6 @@ Press on the Supabase tile and input your Supabase Access Token to grant Infisic Select which Infisical environment secrets you want to sync to which Supabase project. Lastly, press create integration to start syncing secrets to Supabase. -![integrations supabase create](../../images/integrations-supabase-create.png) +![integrations supabase create](../../images/integrations/supabase/integrations-supabase-create.png) -![integrations supabase](../../images/integrations-supabase.png) \ No newline at end of file +![integrations supabase](../../images/integrations/supabase/integrations-supabase.png) \ No newline at end of file diff --git a/docs/integrations/cloud/terraform-cloud.mdx b/docs/integrations/cloud/terraform-cloud.mdx index 9000fe194..0d68b02e3 100644 --- a/docs/integrations/cloud/terraform-cloud.mdx +++ b/docs/integrations/cloud/terraform-cloud.mdx @@ -15,17 +15,17 @@ Prerequisites: Obtain a Terraform Cloud API Token in User Settings > Tokens -![integrations terraform cloud dashboard](../../images/integrations-terraformcloud-dashboard.png) -![integrations terraform cloud tokens](../../images/integrations-terraformcloud-tokens.png) +![integrations terraform cloud dashboard](../../images/integrations/terraform/integrations-terraformcloud-dashboard.png) +![integrations terraform cloud tokens](../../images/integrations/terraform/integrations-terraformcloud-tokens.png) Obtain your Terraform Cloud Workspace Id in Projects & Workspaces > Workspace > ID -![integrations terraform cloud projects & workspaces](../../images/integrations-terraformcloud-workspaces.png) -![integrations terraform cloud workspace id](../../images/integrations-terraformcloud-workspaceid.png) +![integrations terraform cloud projects & workspaces](../../images/integrations/terraform/integrations-terraformcloud-workspaces.png) +![integrations terraform cloud workspace id](../../images/integrations/terraform/integrations-terraformcloud-workspaceid.png) Press on the Terraform Cloud tile and input your Terraform Cloud API Token and Workspace Id to grant Infisical access to your Terraform Cloud account. -![integrations terraform cloud authorization](../../images/integrations-terraformcloud-auth.png) +![integrations terraform cloud authorization](../../images/integrations/terraform/integrations-terraformcloud-auth.png) If this is your project's first cloud integration, then you'll have to grant @@ -38,5 +38,5 @@ Press on the Terraform Cloud tile and input your Terraform Cloud API Token and W Select which Infisical environment secrets and Terraform Cloud variable type you want to sync to which Terraform Cloud workspace/project and press create integration to start syncing secrets to Terraform Cloud. -![integrations terraform cloud](../../images/integrations-terraformcloud-create.png) -![integrations terraform cloud](../../images/integrations-terraformcloud.png) +![integrations terraform cloud](../../images/integrations/terraform/integrations-terraformcloud-create.png) +![integrations terraform cloud](../../images/integrations/terraform/integrations-terraformcloud.png) diff --git a/docs/integrations/cloud/vercel.mdx b/docs/integrations/cloud/vercel.mdx index f756e4fe8..b7396d067 100644 --- a/docs/integrations/cloud/vercel.mdx +++ b/docs/integrations/cloud/vercel.mdx @@ -61,22 +61,23 @@ Select which Infisical environment secrets you want to sync to which Vercel app ![integrations Vercel config](../../images/integrations/vercel/integrations-vercel-config-integrations-console.png) ![integrations Vercel config](../../images/integrations/vercel/integrations-vercel-config-new-app.png) - Create the application. As part of the form, set **Redirect URL** to `https://your-domain.com/integrations/vercel/oauth2/callback`. Also, + Create the application. As part of the form, set a **URL Slug** to a unique slug like `infisical-your-domain` and keep it handy. Also, set **Redirect URL** to `https://your-domain.com/integrations/vercel/oauth2/callback`. Lastly, be sure to set the API Scopes according to the second screenshot below. ![integrations Vercel config](../../images/integrations/vercel/integrations-vercel-config-new-app-form-1.png) ![integrations Vercel config](../../images/integrations/vercel/integrations-vercel-config-new-app-form-2.png) - ## Add your Vercel integration credentials to Infisical + ## Add your Vercel integration credentials and information to Infisical - Obtain the **Client (Integration) ID** and **Client (Integration) Secret** for your Vercel integration. + Obtain the **Client (Integration) ID** and **Client (Integration) Secret** as well as the **URL Slug** from earlier for your Vercel integration. ![integrations Vercel config](../../images/integrations/vercel/integrations-vercel-config-credentials.png) - Back in your Infisical instance, add two new environment variables for the credentials of your Vercel integration. + Back in your Infisical instance, add three new environment variables for the credentials of your Vercel integration. - `CLIENT_ID_VERCEL`: The **Client (Integration) ID** of your Vercel integration. - `CLIENT_SECRET_VERCEL`: The **Client (Integration) Secret** of your Vercel integration. + - `CLIENT_SLUG_VERCEL`: The **URL Slug** of your Vercel integration. Once added, restart your Infisical instance and use the Vercel integration. diff --git a/docs/integrations/cloud/windmill.mdx b/docs/integrations/cloud/windmill.mdx index c79931b70..9b41b12bd 100644 --- a/docs/integrations/cloud/windmill.mdx +++ b/docs/integrations/cloud/windmill.mdx @@ -15,12 +15,12 @@ Prerequisites: Obtain a [Windmill](https://www.windmill.dev/) access token in Access Tokens -![integrations windmill dashboard](../../images/integrations-windmill-dashboard.png) -![integrations windmill token](../../images/integrations-windmill-token.png) +![integrations windmill dashboard](../../images/integrations/windmill/integrations-windmill-dashboard.png) +![integrations windmill token](../../images/integrations/windmill/integrations-windmill-token.png) Press on the Windmill tile and input your Windmill access token to grant Infisical access to your Windmill account. -![integrations windmill authorization](../../images/integrations-windmill-auth.png) +![integrations windmill authorization](../../images/integrations/windmill/integrations-windmill-auth.png) If this is your project's first cloud integration, then you'll have to grant @@ -33,8 +33,8 @@ Press on the Windmill tile and input your Windmill access token to grant Infisic Select which Infisical environment secrets you want to sync to which Windmill workspace and press create integration to start syncing secrets to Windmill. -![integrations windmill](../../images/integrations-windmill-create.png) -![integrations windmill](../../images/integrations-windmill.png) +![integrations windmill](../../images/integrations/windmill/integrations-windmill-create.png) +![integrations windmill](../../images/integrations/windmill/integrations-windmill.png) Secrets synced to Windmill are subject to the [ownership path diff --git a/docs/mint.json b/docs/mint.json index c6c0eef3d..41c406bc6 100644 --- a/docs/mint.json +++ b/docs/mint.json @@ -117,10 +117,8 @@ "documentation/platform/secret-reference", "documentation/platform/webhooks", "documentation/platform/pit-recovery", - "documentation/platform/secret-versioning", "documentation/platform/audit-logs", "documentation/platform/token", - "documentation/platform/ip-allowlisting", "documentation/platform/mfa", { "group": "SSO", @@ -388,15 +386,6 @@ "internals/service-tokens" ] }, - { - "group": "Security", - "pages": [ - "security/overview", - "security/data-model", - "security/mechanics", - "security/service-tokens" - ] - }, { "group": "Overview", "pages": ["changelog/overview"] diff --git a/docs/security/data-model.mdx b/docs/security/data-model.mdx deleted file mode 100644 index af4adeb24..000000000 --- a/docs/security/data-model.mdx +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: "Data Model" -description: "Infisical's current Data Structure." ---- - -Infisical stores a range of data namely user, secrets, keys, organization, project, and membership data. - -## Users - -The `User` model includes the fields `email`, `firstName`, `lastName`, `publicKey`, `encryptionVersion`, `protectedKey`, `protectedKeyIV`, `protectedKeyTag`, `encryptedPrivateKey`, `iv`, `tag`, `salt`, `verifier`, and `refreshVersion`. - -Infisical makes a usability-security tradeoff that is to give users convenient access to public-private key pairs across different devices upon login, solving key-storage and transfer challenges across device and browser mediums, in exchange for it storing `encryptedPrivateKey`. - - - `encryptedPrivateKey` is obtained by symmetrically encrypting the user's - private key locally with a protected key which is encrypted by the key derived - from the user's password and salt. Encryption is done via `AES256-GCM` and key - derivation via `argon2id`. The user's password is not sent to the server — - this is done with SRP. - - -## Secrets - -The `Secret` model includes the fields `workspace`, `type`, `user`, `environment`, `secretBlindIndex`, `secretKeyCiphertext`, `secretKeyIV`, `secretKeyTag`, `secretValueCiphertext`, `secretValueIV`, and `secretValueTag`. - -Each secret consists of a key name and value pair and is symmetrically encrypted by the key of the project that it belongs to; that key's encrypted copies are stored in a separate `Key` collection. - -The `secretBlindIndex` enables users to query secrets by their names; it is a blind index computed by applying `argon2id` with a 128-bit random salt (unique to each project) and the name of the secret. The salt itself is symmetrically encrypted under the server key and stored in the `SecretBlindIndexData` collection. - -## Blind Index Data - -The `SecretBlindIndexData` model includes the fields `workspace`, `encryptedSaltCiphertext`, `saltIV`, and `saltTag`. - -Infisical stores salts (unique to each project) symmetrically encrypted under the server key. The salts are used to compute blind indices for secrets that enable -users to query secrets by name. - -## Project Keys - -The `Key` model includes the fields `encryptedKey`, `nonce`, `sender`, `receiver`, and `workspace`. - -Infisical stores copies of project keys, one for each member of a project, asymmetrically encrypted under each member's public key. - -## Bots - -The `Bot` model contains the fields `name`, `workspace`, `isActive`, `publicKey`, `encryptedPrivateKey`, `iv`, and `tag`. - -Each project comes with a bot that has its own public-private key pair; its private key is symmetrically encrypted by the server's key. If needed, a user can opt-in to share their project key with the bot (i.e. Infisical) to give the platform access to the project's secrets. - - - Sharing secrets with Infisical so they can be synced to integrations like - Vercel, GitHub, and Netlify is something we make sure users consent to before - opting in. - - -## Organizations and Workspaces - -The `Organization`, `Workspace`, `MembershipOrg`, and `Membership` models contain enrollment information for organizations and projects; they are used to check if users are authorized to retrieve select secrets. - -## Service Tokens - -The `ServiceTokenData` model contains data for service tokens that enable users to fetch secrets from a particular project and environment; each service token data record includes an (encrypted) copy of the project key that it is bound to as well as a validation hash for `bcrypt`. - -## API Keys - -The `APIKeyData` model contains data for API keys that enable users to interact with [Infisical's Open API](https://infisical.com/docs/api-reference/overview/introduction); each API key data record includes a validation hash for `bcrypt`. diff --git a/docs/security/mechanics.mdx b/docs/security/mechanics.mdx deleted file mode 100644 index 06d5fedd9..000000000 --- a/docs/security/mechanics.mdx +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: "Mechanics" -description: "Quick explanation of how Infisical works." ---- - -## Signup - -During account signup, a user confirms their email address via OTP, generates a public-private key pair to be stored locally, generates a user salt, generates a 256-bit key, and enters their password. - -The 256-bit key is used to encrypt the private key; the 256-bit key itself is then encrypted by a key generated from the user's password and salt with key derivation function `argon2id`. The resulting, 256-bit key is known as the protected key. - -The encrypted private key, protected key, user identifier information, and SRP details are forwarded to the server. - -Once authenticated via SRP, a user is issued a JWT and refresh token. The JWT token is stored in browser memory and is appended to all future outbound requests requiring authentication. The refresh token is stored in an `HttpOnly` cookie and included in future requests to `/api/token` for JWT token renewal. This design side-steps potential XSS attacks on local storage. - - - Infisical authenticates users using the SRP protocol. With SRP, the server can - authenticate users without ever seeing their passwords. - - -## Invitation - -After signing up, a user can invite other users to their organization to partake in projects — An invitation here consists of an email verification link sent to the invitee to confirm their identity if they've not previously signed up to Infisical. Both organization and project invites authorize invitees for resources but project invites differ in that they also involve sharing project keys by encrypting them under the invitees' public keys. - -## Pushing/Pulling Secrets - -To push secrets, a sender randomly-generates a symmetric encryption key, uses that key to encrypt their secret keys and values separately, asymmetrically encrypts the key with the receivers’ public keys, and uploads the encrypted secrets and keys to the server. - -To pull secrets, a receiver obtains encrypted secret keys and values and their encrypted copy of the project key to decrypt the secrets from the server — they asymmetrically decrypt the key using their private key and use the decrypted key to decrypt the secrets. This public-key mechanism prevents the server-side from reading any secrets. - -When dealing with individual secrets (e.g. pulling one secret by name) or creating new secrets, a user passes the name of the secret to the server which is then converted to a blind index by applying `argon2id` with the name of the secret and a 128-bit random salt unique to each project; the salt itself is encrypted by the server key and stored in the database. - - - Infisical ensures that the name of any secret is never stored in plaintext and - instead only a blind index generated from the name. It is infeasible to - reverse back a blind index to the name of a secret without knowledge of the - server key. - - -## Bot - -To use some features like integrations, users must opt out of E2EE (this means sharing access to secrets with Infisical). - -Infisical employs the concept of a bot which is a cryptographic abstraction for how Infisical interacts with secrets when users opt out of E2EE. In this model, each project is assigned a bot with its own public-private key pair where each bot's private key is stored symmetrically encrypted under the server key. When a user opts out of E2EE, they share the project key with the bot by encrypting a copy of it under the public key of the bot. - -When users wish to sync secrets from a project and environment Infisical to other platform integrations like Vercel or GitHub, Infisical decrypts the intended secrets and uses the integration platform's APIs to send secrets over. It should be noted that opting out of E2EE is optional and it is entirely possible to use Infisical to manage secrets across your team and infrastructure without opting out of E2EE. diff --git a/docs/security/overview.mdx b/docs/security/overview.mdx deleted file mode 100644 index bd0ed0878..000000000 --- a/docs/security/overview.mdx +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: "Overview" -description: "Infisical's security statement." ---- - -## Summary - -Infisical uses end-to-end encryption (E2EE) whenever possible to securely store and share secret values. It uses secure remote password (SRP) to handle authentication and public-key cryptography for secret sharing and syncing; secrets are symmetrically encrypted by keys decryptable only by members of the project. - -Infisical uses AES256-GCM for symmetric encryption and x25519-xsalsa20-poly1305 for asymmetric encryption operations mentioned in this brief; key generation and asymmetric algorithms are implemented with the [TweetNaCl.js](https://tweetnacl.js.org/#/) library which has been well-audited and recommended for use by cybersecurity firm Cure53. Lastly, the secure remote password (SRP) implementation uses [jsrp](https://github.com/alax/jsrp) package for user authentication. - -As part of our commitment to user privacy and security, we undergo penetration tests twice a year and are working to achieve SOC 2 (Type II) compliance in Fall 2023. - -## Scope - -Infisical's security model spans sensitive data stored on the server-side and in transit between user devices; it makes no security guarantees for malicious events that can occur beyond its control such as user-device security exploits or key-logging arising from poor cybersecurity management on the users’ behalf. - -## Lingo - -In subsequent sections, we refer: - -- To users uploading their secrets to Infisical as “senders” and those receiving secrets as “receivers". For instance, if Bob and Alice are both enrolled in a project and Bob adds new secrets to the project to be pulled by Alice, then Bob is considered to be the sender and Alice the receiver. -- To any activity involving uploading or modifying secrets to Infisical as "pushing" and fetching secrets from Infisical as "pulling." - -## Statement - -As a secrets manager, we are deeply committed to enforcing the privacy and security of all users and data on the platform but acknowledge that it is virtually impossible to guarantee perfect security; unfortunately, even the most secure systems have vulnerabilities. - -As part of our commitment, we do our best to maintain platform privacy and security, notify users if anything goes wrong, and rectify adverse situations immediately if anything happens. -We are continuously adding more opt-in security measures to ensure better data protection and maintain trust within the growing community. With that, let’s make the most simple and secure secrets management system out there! - -Best, - -Infisical Team diff --git a/docs/security/service-tokens.mdx b/docs/security/service-tokens.mdx deleted file mode 100644 index b70f527eb..000000000 --- a/docs/security/service-tokens.mdx +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "Service Tokens" -description: "Understanding service tokens and their best practices" ---- - -## Background - -Many clients use service tokens to authenticate and read/write secrets from/to Infisical. - -Each service token consist of two parts used for authentication and decryption, separated by `.`. Consider the token `st.abc.def.ghi`. Here, `st.abc.def` can be used to authenticate with the API, by including it in the `Authorization` header under `Bearer st.abc.def`, and retrieve (encrypted) secrets as well as a project key back. Meanwhile, `ghi`, a hex-string, can be used to decrypt the project key used to decrypt the secrets. - -Note that when using service tokens via select client methods like SDK or CLI, cryptographic operations are abstracted for you that is the token is parsed and encryption/decryption operations are handled. If using service tokens with the REST API and end-to-end encryption enabled, then you will have to handle the encryption/decryption operations yourself. - -## Recommendations - -1. Issuance: When creating a new service token, it’s important to consider the [principle of least privilege(PoLP)](https://en.wikipedia.org/wiki/Principle_of_least_privilege) when setting its scope and expiration date. For example, if the client using the token only requires access to a staging environment, then you should scope the token to that environment only; you can further scope tokens to path(s) within environment(s) if you happen to use [path-based secret storage](/documentation/platform/folder). Likewise, if the client does not intend to access secrets indefinitely, then you may consider setting a finite lifetime for the token such as 6 months or 1 year from now. Finally, you should consider carefully whether or not your client requires the ability to read and/or write secrets from/to Infisical. - -2. Network access: We recommend configuring the IP whitelist settings of each project to allow either single IP addresses or CIDR-notated range of addresses to read/write secrets to Infisical. With this feature, you can specify the IP range of your client servers to restrict access to your project in Infisical. - -3. Storage: Since service tokens grant access to your secrets, we recommend storing service tokens securely across your development cycle whether it be in a `.env` file in local development or as an environment variable of your deployment platform. - -4. Rotation: We recommend periodically rotating the service token, even in the absence of compromise. Since service tokens are capable of decrypting project keys used to decrypt secrets, all of which use AES-256-GCM encryption, they should be rotated before approximately 2^32 encryptions have been performed; this follows the guidance set forth by NIST publication 800-38D. Note that Infisical keeps track of the number of times that service tokens are used and will alert you when you have reached 90% of the recommended capacity. diff --git a/docs/self-hosting/authentication/google.mdx b/docs/self-hosting/authentication/google.mdx deleted file mode 100644 index dc3de4089..000000000 --- a/docs/self-hosting/authentication/google.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Google" -description: "Learn to configure Google signin/signup when self-hosting Infisical." ---- -To enable Google Auth for your Infisical project, you first need to set up a Google OAuth application. -Follow Google's Setting up OAuth 2.0 documentation [here](https://support.google.com/googleapi/answer/6158849). After the setup, copy the Client ID and Client secret. You will need them below. - -## Configure Redirect URI -Add the following URI to the Authorized redirect URIs section in the OAuth Client credentials page - `BASE_URL/api/v1/auth/callback/google`. Replace BASE_URL with the URL of your hosted Infisical instance. -![google redirect](../../images/authentication-google-redirect.png) - -## General Configuration -You wil need to configure the following [environment variables](https://infisical.com/docs/self-hosting/configuration/envars): - -- `CLIENT_ID_GOOGLE`: OAuth 2.0 Client ID obtained from the credentials page -- `CLIENT_SECRET_GOOGLE`: OAuth 2.0 Client Secret obtained from the credentials page -- `JWT_PROVIDER_AUTH_SECRET`: Secret Key for signing OAuth 2.0 access token -- `JWT_PROVIDER_AUTH_LIFETIME`: Lifetime for OAuth 2.0 access token \ No newline at end of file diff --git a/docs/self-hosting/configuration/email.mdx b/docs/self-hosting/configuration/email.mdx index 566265a2d..c26c20648 100644 --- a/docs/self-hosting/configuration/email.mdx +++ b/docs/self-hosting/configuration/email.mdx @@ -29,15 +29,15 @@ Below you will find details on how to configure common email providers: 1. Create an account on [Resend](https://resend.com). 2. Add a [Domain](https://resend.com/domains). -![adding resend domain](../../images/email-resend-create-domain.png) +![adding resend domain](../../images/self-hosting/configuration/email/email-resend-create-domain.png) 3. Create an [API Key](https://resend.com/api-keys). -![creating resend api key](../../images/email-resend-create-key.png) +![creating resend api key](../../images/self-hosting/configuration/email/email-resend-create-key.png) 4. Go to the [SMTP page](https://resend.com/settings/smtp) and copy the values. -![go to resend smtp settings](../../images/email-resend-smtp-settings.png) +![go to resend smtp settings](../../images/self-hosting/configuration/email/email-resend-smtp-settings.png) 5. With the API Key, you can now set your SMTP environment variables variables: @@ -61,9 +61,9 @@ SMTP_FROM_NAME=Infisical 2. Create a SendGrid API Key under Settings > [API Keys](https://app.sendgrid.com/settings/api_keys) 3. Set a name for your API Key, we recommend using "Infisical," and select the "Restricted Key" option. You will need to enable the "Mail Send" permission as shown below: -![creating sendgrid api key](../../images/email-sendgrid-create-key.png) +![creating sendgrid api key](../../images/self-hosting/configuration/email/email-sendgrid-create-key.png) -![setting sendgrid api key restriction](../../images/email-sendgrid-restrictions.png) +![setting sendgrid api key restriction](../../images/self-hosting/configuration/email/email-sendgrid-restrictions.png) 4. With the API Key, you can now set your SMTP environment variables: @@ -87,7 +87,7 @@ SMTP_FROM_NAME=Infisical 1. Create an account and configure [Mailgun](https://www.mailgun.com) to send emails. 2. Obtain your Mailgun credentials in Sending > Overview > SMTP -![obtain mailhog api key estriction](../../images/email-mailhog-credentials.png) +![obtain mailhog api key estriction](../../images/self-hosting/configuration/email/email-mailhog-credentials.png) 3. With your Mailgun credentials, you can now set up your SMTP environment variables: @@ -108,9 +108,9 @@ SMTP_FROM_NAME=Infisical 1. Create an account and [configure AWS SES](https://aws.amazon.com/premiumsupport/knowledge-center/ses-set-up-connect-smtp/) to send emails in the Amazon SES console. 2. Create an IAM user for SMTP authentication and obtain SMTP credentials in SMTP settings > Create SMTP credentials -![opening AWS SES console](../../images/email-aws-ses-console.png) +![opening AWS SES console](../../images/self-hosting/configuration/email/email-aws-ses-console.png) -![creating AWS IAM SES user](../../images/email-aws-ses-user.png) +![creating AWS IAM SES user](../../images/self-hosting/configuration/email/email-aws-ses-user.png) 3. With your AWS SES SMTP credentials, you can now set up your SMTP environment variables: @@ -134,9 +134,9 @@ SMTP_FROM_NAME=Infisical 1. Create an account and configure [SocketLabs](https://www.socketlabs.com/) to send emails. 2. From the dashboard, navigate to SMTP Credentials > SMTP & APIs > SMTP Credentials to obtain your SocketLabs SMTP credentials. -![opening SocketLabs dashboard](../../images/email-socketlabs-dashboard.png) +![opening SocketLabs dashboard](../../images/self-hosting/configuration/email/email-socketlabs-dashboard.png) -![obtaining SocketLabs credentials](../../images/email-socketlabs-credentials.png) +![obtaining SocketLabs credentials](../../images/self-hosting/configuration/email/email-socketlabs-credentials.png) 3. With your SocketLabs SMTP credentials, you can now set up your SMTP environment variables: @@ -157,7 +157,7 @@ SMTP_FROM_NAME=Infisical email like `team@sandbox.socketlabs.dev`. -![SocketLabs domain management](../../images/email-socketlabs-domains.png) +![SocketLabs domain management](../../images/self-hosting/configuration/email/email-socketlabs-domains.png) Remember that you will need to restart Infisical for this to work properly. @@ -169,7 +169,7 @@ SMTP_FROM_NAME=Infisical Create an account and enable "less secure app access" in Gmail Account Settings > Security. This will allow applications like Infisical to authenticate with Gmail via your username and password. -![Gmail secure app access](../../images/email-gmail-app-access.png) +![Gmail secure app access](../../images/self-hosting/configuration/email/email-gmail-app-access.png) With your Gmail username and password, you can set your SMTP environment variables: diff --git a/frontend/src/layouts/AppLayout/AppLayout.tsx b/frontend/src/layouts/AppLayout/AppLayout.tsx index 8dd5f12ab..50dae373b 100644 --- a/frontend/src/layouts/AppLayout/AppLayout.tsx +++ b/frontend/src/layouts/AppLayout/AppLayout.tsx @@ -489,7 +489,7 @@ export const AppLayout = ({ children }: LayoutProps) => { )} - + {/* { IP Allowlist - + */} )} - {new Date().getTime() - new Date(user?.createdAt).getTime() < 30 * 24 * 60 * 60 * 1000 && ( + {!(new Date().getTime() - new Date(user?.createdAt).getTime() < 30 * 24 * 60 * 60 * 1000) && (

Onboarding Guide