# Azure Storage

## Setup

The following credentials keys are accepted:

* `account` **(required)** -> This is the Azure account string.
* `container` **(required)** -> This is the storage container.
* `conn_str` (optional) -> This is the Connection String from an [Account Access Keys](https://learn.microsoft.com/en-us/azure/storage/common/storage-account-keys-manage?tabs=azure-portal). Looks something like `DefaultEndpointsProtocol=https;AccountName=my_account;AccountKey=thisIsAFakeKeyxxxxxxxxxxxxx/MRHCrBw4BLmypbaJyVbvUWn4YZ1Nw==;EndpointSuffix=core.windows.net`.
* `sas_svc_url` (optional) -> This is the [Shared Access Signature (SAS)](https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview) URL.
* `client_id` (optional) -> Application ID of an Azure service principal. Can also set via env var `AZURE_CLIENT_ID`
* `tenant_id` (optional) -> ID of the application's Microsoft Entra tenant. Can also set via env var `AZURE_TENANT_ID`
* `client_secret` (optional) -> A client secret generated for the App Registration. Can also set via env var `AZURE_CLIENT_SECRET`
* `client_certificate_path` (optional) -> Path to a PEM or PKCS12 certificate file including private key. Can also set via env var `AZURE_CLIENT_CERTIFICATE_PATH`
* `client_certificate_password` (optional) -> The password protecting the certificate file (PFX/PKCS12 only). Can also set via env var `AZURE_CLIENT_CERTIFICATE_PASSWORD`

### Using `sling conns`

Here are examples of setting a connection named `AZURE_STORAGE`. We must provide the `type=azure` property:

{% code overflow="wrap" %}

```bash
$ sling conns set AZURE_STORAGE type=azure account=<account> container=<container> sas_svc_url=<sas_svc_url>
$ sling conns set AZURE_STORAGE type=azure account=<account> container=<container> conn_str="<conn_str>"
```

{% endcode %}

### Environment Variable

See [here](https://docs.slingdata.io/sling-cli/environment#dot-env-file-.env.sling) to learn more about the `.env.sling` file.

In JSON/YAML format:

{% code overflow="wrap" %}

```bash
export AZURE_STORAGE='{"type": "azure", "account": "<account>", "container": "<container>", "sas_svc_url": "<sas_svc_url>"}'
```

{% endcode %}

### Sling Env File YAML

See [here](https://docs.slingdata.io/sling-cli/environment#sling-env-file-env.yaml) to learn more about the sling `env.yaml` file.

```yaml
connections:
  AZURE_STORAGE:
    type: azure
    account: <account>
    container: <container>
    sas_svc_url: '<sas_svc_url>'

  AZURE_STORAGE_2:
    type: azure
    account: <account>
    container: <container>
    conn_str: '<conn_str>'

  # Service principal with client secret
  AZURE_STORAGE_SP:
    type: azure
    account: <account>
    container: <container>
    client_id: your-client-id
    tenant_id: your-tenant-id
    client_secret: your-client-secret
```

If you are facing issues connecting, please reach out to us at <support@slingdata.io>, on [discord](https://discord.gg/q5xtaSNDvp) or open a Github Issue [here](https://github.com/slingdata-io/sling-cli/issues).
