Integration

In order to connect to the Azure Blob storage:

Azure Credentials

Two authentication methods are supported. Define exactly one of credentialsSecret (client secret) or clientCertificateSecret (client certificate) on the backend.

Client secret (service principal)

Store the Client ID and Client Secret with access to the storage container in a Secret:

kubectl create secret generic credentials \
  --from-literal 'clientId=<Azure Client ID>' \
  --from-literal 'clientSecret=<Azure Client Secret>'

Client certificate

Store the certificate and its private key in a native kubernetes.io/tls Secret, then add the Client ID as an extra key:

kubectl create secret tls credentials-cert --cert=tls.crt --key=tls.key
kubectl patch secret credentials-cert --type merge -p '{"stringData":{"clientId":"<Azure Client ID>"}}'

The Secret must contain tls.crt, tls.key and clientId. Both the certificate and the key are required: the private key signs the token request and the certificate identifies the credential to Azure by its thumbprint, so upload the same certificate’s public key to the Azure app registration.

Permissions

The provided Client ID needs read/write access to the blobs in the configured container. Assign the built-in Azure RBAC role Storage Blob Data Contributor, scoped to the storage account or the container:

Operation Purpose
Read container properties Check container existence
Read blob / blob metadata Read objects
Write blob Write objects
List blobs List objects
Delete blob Delete objects

The Storage Blob Data Contributor role covers all of the above. The container must already exist - the integration does not create it.

Object

Once the Secret is created, we are able to create ArangoPlatformStorage.

echo "---
apiVersion: platform.arangodb.com/v1beta1
kind: ArangoPlatformStorage
metadata:
  name: deployment
  namespace: namespace
spec:
  backend:
    azureBlobStorage:
      bucketName: <Bucket Name>
      bucketPath: <Bucket Path>
      credentialsSecret:
        name: credentials
      tenantID: <Azure Tenant ID>
      accountName: <Azure Storage Account Name>
      endpoint: <Azure Storage Endpoint in case of Private Connection>
" | kubectl apply -f -

To use client-certificate authentication instead, replace credentialsSecret with clientCertificateSecret (the two are mutually exclusive):

spec:
  backend:
    azureBlobStorage:
      bucketName: <Bucket Name>
      bucketPath: <Bucket Path>
      clientCertificateSecret:
        name: credentials-cert
      tenantID: <Azure Tenant ID>
      accountName: <Azure Storage Account Name>
      endpoint: <Azure Storage Endpoint in case of Private Connection>