> ## Documentation Index
> Fetch the complete documentation index at: https://infisical.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Chef sync

> Learn how to configure a Chef Sync for Infisical.

> [!NOTE]
>
> Chef Sync is a paid feature.
>
> If you're using Infisical Cloud, then it is available under the **Enterprise Tier**. If you're self-hosting Infisical,
> then you should contact [sales@infisical.com](mailto:sales@infisical.com) to purchase an enterprise license to use it.

**Prerequisites:**

* Create a [Chef Connection](https://infisical.com/docs/integrations/app-connections/chef.md)

> [tab] Infisical UI
>
> **1. Add Sync**
>
> Navigate to **Project** > **Integrations** and select the **Secret Syncs** tab. Select the **Add Sync** button.
>
> ![Secret Syncs Tab](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/secret-syncs/general/secret-sync-tab.png)
>
> **2. Select 'Chef'**
>
> ![Select Chef](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/secret-syncs/chef/select-option.png)
>
> **3. Configure source**
>
> Configure the **Source** from where secrets should be retrieved, then click **Next**.
>
> ![Configure Source](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/secret-syncs/chef/sync-source.png)
>
> * **Environment**: The project environment to retrieve secrets from.
>
> * **Secret Path**: The folder path to retrieve secrets from.
>
> > [!TIP]
> >
> > If you need to sync secrets from multiple folder locations, check out [secret imports](https://infisical.com/docs/documentation/platform/secret-reference.md#secret-imports).
>
> **4. Configure destination**
>
> Configure the **Destination** to where secrets should be deployed, then click **Next**.
>
> ![Configure Destination](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/secret-syncs/chef/sync-destination.png)
>
> * **Chef Connection**: The Chef Connection to authenticate with
> * **Data Bag**: The Data Bag to sync secrets to
> * **Data Bag Item**: The Data Bag Item to sync secrets to
> * **Encrypt Secrets**: Whether to write the item as a Chef encrypted data bag item (see [Encrypt secrets in Chef](#encrypt-secrets-in-chef))
>
> **5. Configure Sync Options**
>
> Configure the **Sync Options** to specify how secrets should be synced, then click **Next**.
>
> ![Configure Options](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/secret-syncs/chef/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.
>   * **Import Secrets (Prioritize Infisical)**: Imports secrets from the destination endpoint before syncing, prioritizing values from Infisical over Chef when keys conflict.
>   * **Import Secrets (Prioritize Chef)**: Imports secrets from the destination endpoint before syncing, prioritizing values from Chef over Infisical when keys conflict.
>
> * **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.
>
> > [!NOTE]
> >
> > We highly recommend using a Key Schema to ensure that Infisical only manages the specific keys you intend, keeping everything else untouched.
>
> * **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 details**
>
> Configure the **Details** of your Chef Sync, then click **Next**.
>
> ![Configure Details](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/secret-syncs/chef/sync-details.png)
>
> * **Name**: The name of your sync. Must be slug-friendly.
> * **Description**: An optional description for your sync.
>
> **7. Review configuration**
>
> Review your Chef Sync configuration, then click **Create Sync**.
>
> ![Review Configuration](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/secret-syncs/chef/sync-review.png)
>
> **8. Sync created**
>
> If enabled, your Chef Sync will begin syncing your secrets to the destination endpoint.
>
> ![Sync Created](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/secret-syncs/chef/sync-created.png)

> [tab] API
>
> To create a **Chef Sync**, make an API request to the [Create Chef Sync](https://infisical.com/docs/api-reference/endpoints/secret-syncs/chef/create.md) API endpoint.
>
> ### Sample request
>
> ```bash Request theme={"dark"}
> curl    --request POST \
>         --url https://app.infisical.com/api/v1/secret-syncs/chef \
>         --header 'Content-Type: application/json' \
>         --data '{
>             "name": "my-chef-sync",
>             "projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
>             "description": "sync to chef site",
>             "connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
>             "environment": "dev",
>             "secretPath": "/",
>             "isEnabled": true,
>             "isAutoSyncEnabled": true,
>             "syncOptions": {
>                 "initialSyncBehavior": "overwrite-destination",
>                 "disableSecretDeletion": false
>             },
>             "destinationConfig": {
>                 "dataBagName": "my-data-bag",
>                 "dataBagItemName": "my-data-bag-item",
>                 "shouldEncryptSecrets": false
>             }
>         }'
> ```
>
> ### Sample response
>
> ```bash Response theme={"dark"}
> {
>     "secretSync": {
>         "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
>         "name": "my-chef-sync",
>         "description": "sync to chef site",
>         "folderId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
>         "connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
>         "createdAt": "2025-07-19T12:00:00Z",
>         "updatedAt": "2025-07-19T12:00:00Z",
>         "syncStatus": "succeeded",
>         "lastSyncJobId": "job-1234",
>         "lastSyncMessage": null,
>         "lastSyncedAt": "2025-07-19T12:00:00Z",
>         "syncOptions": {
>             "initialSyncBehavior": "overwrite-destination",
>             "disableSecretDeletion": false
>         },
>         "projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
>         "connection": {
>             "app": "chef",
>             "name": "my-chef-connection",
>             "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
>         },
>         "environment": {
>             "slug": "dev",
>             "name": "Development",
>             "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
>         },
>         "folder": {
>             "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
>             "path": "/"
>         },
>         "destination": "chef",
>         "destinationConfig": {
>             "dataBagName": "my-data-bag",
>             "dataBagItemName": "my-data-bag-item",
>             "shouldEncryptSecrets": false
>         }
>     }
> }
> ```

## Encrypt secrets in Chef

By default, the sync writes secrets to the data bag item in plain text, so anyone who can read the data bag on your Chef server can read the secrets. If you turn on **Encrypt Secrets**, the sync writes the item as a Chef [encrypted data bag item](https://docs.chef.io/data_bags/) instead, and only nodes and users that have your data bag secret can read the values.

### Turn on encryption

**Step 1**

Copy your data bag secret to every node that reads the data bag item. If a node doesn't have the secret, the Chef Infra Client run on that node fails when a recipe reads the item.

**Step 2**

Add the same secret to the sync's [Chef connection](https://infisical.com/docs/integrations/app-connections/chef.md). In **App Connections**, select the three dot menu next to the connection, then select **Edit Credentials**. Enter the **Private Key** and the **Data Bag Secret**, then select **Update Credentials**.

**Step 3**

On the sync's page, select the three dot menu next to **Details**, then select **Edit Sync**. Turn on **Encrypt Secrets**, then select **Save**.

On the next sync, Infisical encrypts every value in the item, including values that Infisical doesn't manage. Chef only decrypts an item if every value in it is encrypted.

### Read encrypted secrets in Chef

Recipes that read the item with `data_bag_item` don't need to change. If the secret is at the path that `encrypted_data_bag_secret` sets in the Chef Infra Client configuration (`/etc/chef/encrypted_data_bag_secret` on Linux by default), `data_bag_item` decrypts the item automatically.

To read the item from a workstation, pass the secret file to knife:

```bash theme={"dark"}
knife data bag show <data-bag> <data-bag-item> --secret-file <path-to-secret-file>
```

### Turn off encryption

If you turn off **Encrypt Secrets**, the next sync writes every value in the item in plain text again. Keep the data bag secret on the connection until that sync finishes, because Infisical needs the secret to read the encrypted values.

### Troubleshooting encryption errors

If the sync can't read or write the encrypted item, the sync fails, and Infisical doesn't change the item. The sync's status shows one of these errors:

| Error | Fix |
| - | - |
| Chef data bag item is encrypted | Add the data bag secret that the item was encrypted with to the Chef connection, for example after updating the connection's credentials without entering the secret again |
| Couldn't decrypt value | Update the Chef connection with the data bag secret that the item was encrypted with |
| Encryption is turned on for this sync, but its Chef connection has no data bag secret | Add the data bag secret to the Chef connection (this error appears if you turn on encryption before adding the secret) |
| Uses encrypted data bag version 1 or 2 | Encrypt the item again with Chef Infra Client 13 or later, which uses version 3 by default |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.