diff --git a/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/create.mdx b/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/create.mdx new file mode 100644 index 000000000..d53c8eb0d --- /dev/null +++ b/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/create.mdx @@ -0,0 +1,4 @@ +--- +title: "Create" +openapi: "POST /api/v1/secret-syncs/cloudflare-workers" +--- diff --git a/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/delete.mdx b/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/delete.mdx new file mode 100644 index 000000000..919074e74 --- /dev/null +++ b/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/delete.mdx @@ -0,0 +1,4 @@ +--- +title: "Delete" +openapi: "DELETE /api/v1/secret-syncs/cloudflare-workers/{syncId}" +--- diff --git a/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/get-by-id.mdx b/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/get-by-id.mdx new file mode 100644 index 000000000..5d425e722 --- /dev/null +++ b/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/get-by-id.mdx @@ -0,0 +1,4 @@ +--- +title: "Get by ID" +openapi: "GET /api/v1/secret-syncs/cloudflare-workers/{syncId}" +--- diff --git a/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/get-by-name.mdx b/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/get-by-name.mdx new file mode 100644 index 000000000..877b58aed --- /dev/null +++ b/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/get-by-name.mdx @@ -0,0 +1,4 @@ +--- +title: "Get by Name" +openapi: "GET /api/v1/secret-syncs/cloudflare-workers/sync-name/{syncName}" +--- diff --git a/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/list.mdx b/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/list.mdx new file mode 100644 index 000000000..1377c2282 --- /dev/null +++ b/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/list.mdx @@ -0,0 +1,4 @@ +--- +title: "List" +openapi: "GET /api/v1/secret-syncs/cloudflare-workers" +--- diff --git a/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/remove-secrets.mdx b/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/remove-secrets.mdx new file mode 100644 index 000000000..6446ede42 --- /dev/null +++ b/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/remove-secrets.mdx @@ -0,0 +1,4 @@ +--- +title: "Remove Secrets" +openapi: "POST /api/v1/secret-syncs/cloudflare-workers/{syncId}/remove-secrets" +--- diff --git a/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/sync-secrets.mdx b/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/sync-secrets.mdx new file mode 100644 index 000000000..1980f0797 --- /dev/null +++ b/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/sync-secrets.mdx @@ -0,0 +1,4 @@ +--- +title: "Sync Secrets" +openapi: "POST /api/v1/secret-syncs/cloudflare-workers/{syncId}/sync-secrets" +--- diff --git a/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/update.mdx b/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/update.mdx new file mode 100644 index 000000000..4dc511b2c --- /dev/null +++ b/docs/api-reference/endpoints/secret-syncs/cloudflare-workers/update.mdx @@ -0,0 +1,4 @@ +--- +title: "Update" +openapi: "PATCH /api/v1/secret-syncs/cloudflare-workers/{syncId}" +--- diff --git a/docs/docs.json b/docs/docs.json index 94046ad02..5b5775fc6 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -513,6 +513,7 @@ "integrations/secret-syncs/azure-key-vault", "integrations/secret-syncs/camunda", "integrations/secret-syncs/cloudflare-pages", + "integrations/secret-syncs/cloudflare-workers", "integrations/secret-syncs/databricks", "integrations/secret-syncs/flyio", "integrations/secret-syncs/gcp-secret-manager", @@ -853,30 +854,30 @@ { "group": "Organizations", "pages": [ - { - "group": "OIDC SSO", - "pages": [ - "api-reference/endpoints/organizations/oidc-sso/get-oidc-config", - "api-reference/endpoints/organizations/oidc-sso/update-oidc-config", - "api-reference/endpoints/organizations/oidc-sso/create-oidc-config" - ] - }, - { - "group": "LDAP SSO", - "pages": [ - "api-reference/endpoints/organizations/ldap-sso/get-ldap-config", - "api-reference/endpoints/organizations/ldap-sso/update-ldap-config", - "api-reference/endpoints/organizations/ldap-sso/create-ldap-config" - ] - }, - { - "group": "SAML SSO", - "pages": [ - "api-reference/endpoints/organizations/saml-sso/get-saml-config", - "api-reference/endpoints/organizations/saml-sso/update-saml-config", - "api-reference/endpoints/organizations/saml-sso/create-saml-config" - ] - }, + { + "group": "OIDC SSO", + "pages": [ + "api-reference/endpoints/organizations/oidc-sso/get-oidc-config", + "api-reference/endpoints/organizations/oidc-sso/update-oidc-config", + "api-reference/endpoints/organizations/oidc-sso/create-oidc-config" + ] + }, + { + "group": "LDAP SSO", + "pages": [ + "api-reference/endpoints/organizations/ldap-sso/get-ldap-config", + "api-reference/endpoints/organizations/ldap-sso/update-ldap-config", + "api-reference/endpoints/organizations/ldap-sso/create-ldap-config" + ] + }, + { + "group": "SAML SSO", + "pages": [ + "api-reference/endpoints/organizations/saml-sso/get-saml-config", + "api-reference/endpoints/organizations/saml-sso/update-saml-config", + "api-reference/endpoints/organizations/saml-sso/create-saml-config" + ] + }, "api-reference/endpoints/organizations/memberships", "api-reference/endpoints/organizations/update-membership", "api-reference/endpoints/organizations/delete-membership", @@ -1706,6 +1707,19 @@ "api-reference/endpoints/secret-syncs/cloudflare-pages/remove-secrets" ] }, + { + "group": "Cloudflare Workers", + "pages": [ + "api-reference/endpoints/secret-syncs/cloudflare-workers/list", + "api-reference/endpoints/secret-syncs/cloudflare-workers/get-by-id", + "api-reference/endpoints/secret-syncs/cloudflare-workers/get-by-name", + "api-reference/endpoints/secret-syncs/cloudflare-workers/create", + "api-reference/endpoints/secret-syncs/cloudflare-workers/update", + "api-reference/endpoints/secret-syncs/cloudflare-workers/delete", + "api-reference/endpoints/secret-syncs/cloudflare-workers/sync-secrets", + "api-reference/endpoints/secret-syncs/cloudflare-workers/remove-secrets" + ] + }, { "group": "Databricks", "pages": [ diff --git a/docs/images/app-connections/cloudflare/cloudflare-workers-configure-permissions.png b/docs/images/app-connections/cloudflare/cloudflare-workers-configure-permissions.png new file mode 100644 index 000000000..d752b51e3 Binary files /dev/null and b/docs/images/app-connections/cloudflare/cloudflare-workers-configure-permissions.png differ diff --git a/docs/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-created.png b/docs/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-created.png new file mode 100644 index 000000000..25c366ac9 Binary files /dev/null and b/docs/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-created.png differ diff --git a/docs/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-destination.png b/docs/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-destination.png new file mode 100644 index 000000000..dae054651 Binary files /dev/null and b/docs/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-destination.png differ diff --git a/docs/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-details.png b/docs/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-details.png new file mode 100644 index 000000000..b02555bc6 Binary files /dev/null and b/docs/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-details.png differ diff --git a/docs/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-options.png b/docs/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-options.png new file mode 100644 index 000000000..d3e9f4c22 Binary files /dev/null and b/docs/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-options.png differ diff --git a/docs/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-review.png b/docs/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-review.png new file mode 100644 index 000000000..64769357e Binary files /dev/null and b/docs/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-review.png differ diff --git a/docs/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-source.png b/docs/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-source.png new file mode 100644 index 000000000..ea1de6824 Binary files /dev/null and b/docs/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-source.png differ diff --git a/docs/images/secret-syncs/cloudflare-workers/select-cloudflare-workers-option.png b/docs/images/secret-syncs/cloudflare-workers/select-cloudflare-workers-option.png new file mode 100644 index 000000000..9a3681f4e Binary files /dev/null and b/docs/images/secret-syncs/cloudflare-workers/select-cloudflare-workers-option.png differ diff --git a/docs/integrations/app-connections/cloudflare.mdx b/docs/integrations/app-connections/cloudflare.mdx index 66ba1256f..6d79d2567 100644 --- a/docs/integrations/app-connections/cloudflare.mdx +++ b/docs/integrations/app-connections/cloudflare.mdx @@ -35,6 +35,17 @@ Infisical supports connecting to Cloudflare using API tokens and Account ID for - **Account** - **Cloudflare Pages** - **Edit** - **Account** - **Account Settings** - **Read** + Add these permissions to your API token and click **Continue to summary**, then **Create Token** to generate your API token. + + + Use the following permissions to grant Infisical access to sync secrets to Cloudflare Workers: + + ![Configure Token](/images/app-connections/cloudflare/cloudflare-workers-configure-permissions.png) + + **Required Permissions:** + - **Account** - **Workers Scripts** - **Edit** + - **Account** - **Account Settings** - **Read** + Add these permissions to your API token and click **Continue to summary**, then **Create Token** to generate your API token. @@ -44,7 +55,7 @@ Infisical supports connecting to Cloudflare using API tokens and Account ID for After creation, copy and securely store your API token as it will not be shown again. - + ![Generated API Token](/images/app-connections/cloudflare/cloudflare-generated-token.png) diff --git a/docs/integrations/secret-syncs/cloudflare-workers.mdx b/docs/integrations/secret-syncs/cloudflare-workers.mdx new file mode 100644 index 000000000..974d40e82 --- /dev/null +++ b/docs/integrations/secret-syncs/cloudflare-workers.mdx @@ -0,0 +1,130 @@ +--- +title: "Cloudflare Workers Sync" +description: "Learn how to configure a Cloudflare Workers Sync for Infisical." +--- + +**Prerequisites:** + +- Set up and add secrets to [Infisical Cloud](https://app.infisical.com) +- Create a [Cloudflare Connection](/integrations/app-connections/cloudflare) + + + + 1. Navigate to **Project** > **Integrations** and select the **Secret Syncs** tab. Click on the **Add Sync** button. + ![Secret Syncs Tab](/images/secret-syncs/general/secret-sync-tab.png) + + 2. Select the **Cloudflare Workers** option. + ![Select Cloudflare Workers](/images/secret-syncs/cloudflare-workers/select-cloudflare-workers-option.png) + + 3. Configure the **Source** from where secrets should be retrieved, then click **Next**. + ![Configure Source](/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-source.png) + + - **Environment**: The project environment to retrieve secrets from. + - **Secret Path**: The folder path to retrieve secrets from. + + + If you need to sync secrets from multiple folder locations, check out [secret imports](/documentation/platform/secret-reference#secret-imports). + + + 4. Configure the **Destination** to where secrets should be deployed, then click **Next**. + ![Configure Destination](/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-destination.png) + + - **Cloudflare Connection**: The Cloudflare Connection to authenticate with. + - **Cloudflare Workers Script**: Choose the Cloudflare Workers script you want to sync secrets to. + + 5. Configure the **Sync Options** to specify how secrets should be synced, then click **Next**. + ![Configure Options](/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-options.png) + + - **Initial Sync Behavior**: Determines how Infisical should resolve the initial sync. + - **Overwrite Destination Secrets**: Removes any secrets at the destination endpoint not present in Infisical. + - **Key Schema**: Template that determines how secret names are transformed when syncing, using `{{secretKey}}` as a placeholder for the original secret name and `{{environment}}` for the environment. + - **Auto-Sync Enabled**: If enabled, secrets will automatically be synced from the source location when changes occur. Disable to enforce manual syncing only. + - **Disable Secret Deletion**: If enabled, Infisical will not remove secrets from the sync destination. Enable this option if you intend to manage some secrets manually outside of Infisical. + + 6. Configure the **Details** of your Cloudflare Workers Sync, then click **Next**. + ![Configure Details](/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-details.png) + + - **Name**: The name of your sync. Must be slug-friendly. + - **Description**: An optional description for your sync. + + 7. Review your Cloudflare Workers Sync configuration, then click **Create Sync**. + ![Confirm Configuration](/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-review.png) + + 8. If enabled, your Cloudflare Workers Sync will begin syncing your secrets to the destination endpoint. + ![Sync Secrets](/images/secret-syncs/cloudflare-workers/cloudflare-workers-sync-created.png) + + + + To create a **Cloudflare Workers Sync**, make an API request to the [Create Cloudflare Workers Sync](/api-reference/endpoints/secret-syncs/cloudflare-workers/create) API endpoint. + + ### Sample request + + ```bash Request + curl --request POST \ + --url https://app.infisical.com/api/v1/secret-syncs/cloudflare-workers \ + --header 'Content-Type: application/json' \ + --data '{ + "name": "my-cloudflare-workers-sync", + "projectId": "your-project-id", + "description": "an example sync", + "connectionId": "your-cloudflare-connection-id", + "environment": "production", + "secretPath": "/my-secrets", + "isEnabled": true, + "syncOptions": { + "initialSyncBehavior": "overwrite-destination" + }, + "destinationConfig": { + "projectId": "your-cloudflare-workers-project-id", + "scriptId": "my-workers-project" + } + }' + ``` + + ### Sample response + + ```bash Response + { + "secretSync": { + "id": "your-sync-id", + "name": "my-cloudflare-workers-sync", + "description": "an example sync", + "isEnabled": true, + "version": 1, + "folderId": "your-folder-id", + "connectionId": "your-cloudflare-connection-id", + "createdAt": "2024-05-01T12:00:00Z", + "updatedAt": "2024-05-01T12:00:00Z", + "syncStatus": "succeeded", + "lastSyncJobId": "123", + "lastSyncMessage": null, + "lastSyncedAt": "2024-05-01T12:00:00Z", + "syncOptions": { + "initialSyncBehavior": "overwrite-destination" + }, + "projectId": "your-project-id", + "connection": { + "app": "cloudflare", + "name": "my-cloudflare-connection", + "id": "your-cloudflare-connection-id" + }, + "environment": { + "slug": "production", + "name": "Production", + "id": "your-env-id" + }, + "folder": { + "id": "your-folder-id", + "path": "/my-secrets" + }, + "destination": "cloudflare-workers", + "destinationConfig": { + "projectId": "your-cloudflare-workers-project-id", + "scriptId": "my-workers-project" + } + } + } + ``` + + +