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

# How to Configure Azure Blob Storage

> Configure Microsoft Azure Blob Storage as the object storage backend for your Blink self-hosted runner.

Use the following steps to set up a Microsoft Azure Blob Storage container and a connection string to integrate with your Blink Runner. This allows you to manage file storage securely within your own Azure environment, ensuring greater control and flexibility for workflow execution.

<Steps>
  <Step title="Create a Storage Account">
    1. Log in to the [Azure Portal](https://portal.azure.com), search for **Storage accounts**, and click **Create**.

    2. Pick your **Subscription** and **Resource group**, give the account a globally-unique **Storage account name**, choose a **Region** close to where your runner will execute, and leave the remaining defaults (Standard performance, Geo-redundant storage is fine for most use cases).

           <Check>
             Follow Azure storage account naming rules: 3–24 characters, lowercase letters and numbers only.
           </Check>

           <Frame>
             <img src="https://mintcdn.com/blinkops-2/QCB3sJN42aSQSH1z/img/Runners/AzureObjectStorage1.png?fit=max&auto=format&n=QCB3sJN42aSQSH1z&q=85&s=87fb7dcecdb9a2d97a21f371b2abf705" width="2744" height="2067" data-path="img/Runners/AzureObjectStorage1.png" />
           </Frame>

    3. Review and click **Create**. Wait for deployment to finish before moving on.
  </Step>

  <Step title="Create a Blob Container">
    1. Open the new storage account and navigate to **Data storage → Containers** in the left-hand menu.

    2. Click **+ Container**, give it a name (for example, `blink-runner-execution-storage`), and leave **Public access level** as **Private (no anonymous access)**.

           <Check>
             Use a dedicated container per workspace. The runner issues a single container-scoped SAS to executions, so a container should not be shared between unrelated tenants.
           </Check>

           <Frame>
             <img src="https://mintcdn.com/blinkops-2/QCB3sJN42aSQSH1z/img/Runners/AzureObjectStorage2.png?fit=max&auto=format&n=QCB3sJN42aSQSH1z&q=85&s=9bd2b2eb794b39ebfc229de3bf4a595f" width="2742" height="2088" data-path="img/Runners/AzureObjectStorage2.png" />
           </Frame>

    3. Click **Create**.
  </Step>

  <Step title="Copy the Connection String">
    1. Back on the storage account, open **Security + networking → Access keys**.

    2. Reveal `key1` (or `key2`) and copy the **Connection string** field. It looks like:

       ```
       DefaultEndpointsProtocol=https;AccountName=<your-account>;AccountKey=<key>;EndpointSuffix=core.windows.net
       ```

           <Check>
             Treat the connection string as sensitive — it grants full access to the storage account. Store it in Kubernetes Secrets, Docker secrets, or a managed secret store. Do not hardcode it into source.
           </Check>

           <Frame>
             <img src="https://mintcdn.com/blinkops-2/QCB3sJN42aSQSH1z/img/Runners/AzureObjectStorage3.png?fit=max&auto=format&n=QCB3sJN42aSQSH1z&q=85&s=64b83a8df2e7f52611e6896a30b1b096" width="2744" height="2076" data-path="img/Runners/AzureObjectStorage3.png" />
           </Frame>

    3. You can rotate the key from this same page at any time; the runner reads the connection string at startup, so rolling the key requires a runner restart.
  </Step>

  <Step title="Deploy the Blink Runner Using the Azure Storage Credentials">
    After creating the container and copying the connection string, deploy the runner with these additional configuration values. Pick the section that matches your installation.

    ### Deploying the Runner in Kubernetes[​](#deploying-the-runner-in-kubernetes "Direct link to Deploying the Runner in Kubernetes")

    Run the Helm command provided by Blink in the UI, but make sure to include the additional configurations below to enable Azure Blob Storage for the runner:

    ```bash theme={"dark"}
    --set config.storage.provider=azure \
    --set storage.azure.connectionString="DefaultEndpointsProtocol=https;AccountName=<account>;AccountKey=<key>;EndpointSuffix=core.windows.net" \
    --set config.storage.execution.container=blink-runner-execution-storage
    ```

    * Replace `<account>` and `<key>` with the values from the storage account's **Access keys** page (Step 3).
    * Replace `blink-runner-execution-storage` with the container name created in Step 2.

    ### Deploying the Runner in Docker[​](#deploying-the-runner-in-docker "Direct link to Deploying the Runner in Docker")

    Run the Docker command provided by Blink in the UI, but make sure to include the additional configurations below to enable Azure Blob Storage for the runner:

    ```bash theme={"dark"}
     -e STORAGE_PROVIDER=azure \
     -e STORAGE_AZURE_CONNECTION_STRING="DefaultEndpointsProtocol=https;AccountName=<account>;AccountKey=<key>;EndpointSuffix=core.windows.net" \
     -e STORAGE_EXECUTION_BUCKET='{"container":"blink-runner-execution-storage"}'
    ```

    * Replace `<account>` and `<key>` with the values from the storage account's **Access keys** page (Step 3).
    * Replace `blink-runner-execution-storage` with the container name created in Step 2.
  </Step>

  <Step title="Verify">
    Run any workflow that creates a file (for example, an action with the **Save output to file** option enabled). After the run completes, the file should appear in the Azure container under the path:

    ```
    <container>/<tenantId>/<workspaceId>/<executionId>/<file>
    ```

    You can verify in the Azure Portal under **Containers → blink-runner-execution-storage → (browse)** or via the Azure CLI:

    ```bash theme={"dark"}
    az storage blob list \
      --connection-string "DefaultEndpointsProtocol=https;AccountName=<account>;AccountKey=<key>;EndpointSuffix=core.windows.net" \
      --container-name blink-runner-execution-storage \
      --output table
    ```
  </Step>
</Steps>
