Skip to main content
This guide helps you set up object storage for SuprSend self-hosted deployment. You’ll need to configure two buckets (private and public) with one of the supported providers.

Supported Providers

  • AWS S3: Amazon Simple Storage Service
  • Azure Blob Storage: Microsoft Azure Blob Storage
  • Google Cloud Storage: Google Cloud object storage

Prerequisites

Before starting, ensure you have:
  • Access to your chosen cloud provider (AWS, Azure, or Google Cloud)
  • Appropriate permissions to create storage resources
  • SuprSend deployment environment ready

AWS S3 Setup

Step 1: Create S3 Buckets

1

Create Private Bucket

Log into AWS Console, navigate to S3 service and create a private bucket with the following settings:
  • Region: Choose your preferred region
  • Versioning: Enable versioning
  • Encryption: Enable server-side encryption (SSE-S3 or SSE-KMS)
  • Access: Block all public access
  • CORS: Configure CORS to allow PUT operations from your domain
2

Create Public Bucket

  • Region: Same region as private bucket
  • Versioning: Enable versioning
  • Encryption: Enable server-side encryption
  • Access: Allow public read access

Step 2: Configure CORS

Configure CORS for both buckets to allow PUT operations: CORS Configuration for Both Buckets:

Step 3: Configure IAM Policies

Create an IAM user with the following policy:

Step 4: Configure Bucket Policies

Private Bucket Policy: For the private bucket, ensure “Block all public access” is enabled. No additional bucket policy is needed as access is controlled via IAM credentials. Public Bucket Policy:

Azure Blob Storage Setup

Step 1: Create Storage Account

Log into Azure Portal, navigate to Storage Accounts and create a storage account with the following settings:
  • Name: suprsend{environment}storage
  • Region: Choose your preferred region
  • Performance: Standard (recommended)
  • Replication: LRS (Locally Redundant Storage) (recommended)
  • Access Tier: Hot (recommended)

Step 2: Create Containers

  1. Create Private Container:
    • Name: suprsend-private
    • Access Level: Private
    • Versioning: Enable
  2. Create Public Container:
    • Name: suprsend-public
    • Access Level: Blob (public read access for blobs only)
    • Versioning: Enable

Step 3: Configure Access Keys

  1. Navigate to Access Keys in your Storage Account
  2. Copy the Account Key (key1 or key2) - this will be used in your SuprSend configuration

Step 4: Configure CORS

  1. Navigate to your Storage Account → Resource sharing (CORS)Blob service
  2. Add the following CORS rule:
    • Allowed origins: https://your-domain.com
    • Allowed methods: GET, PUT
    • Allowed headers: *
    • Exposed headers: *
    • Max age: 3600

Google Cloud Storage Setup

Step 1: Create GCS Buckets

1

Create Private Bucket

Log into Google Cloud Console, navigate to Cloud Storage and create a private bucket with the following settings:
  • Region: Choose your preferred region
  • Storage Class: Standard
  • Access Control: Uniform (recommended)
  • Versioning: Enable versioning
  • Encryption: Google-managed encryption keys
2

Create Public Bucket

  • Region: Same region as private bucket
  • Storage Class: Standard
  • Access Control: Uniform
  • Versioning: Enable versioning
  • Encryption: Google-managed encryption keys

Step 2: Configure Service Account

1

Create Service Account

  • Name: suprsend-blob-storage
  • Description: Service account for SuprSend blob storage access
2

Assign Roles

  • Storage Object Admin: For full bucket access
  • Storage Object Viewer: For read-only access to public bucket
3

Generate Service Account Key

  • Key Type: JSON
  • Download: Save the JSON key file securely

Step 3: Configure Bucket Permissions

Private Bucket IAM Policy:
Public Bucket IAM Policy:

Step 4: Configure CORS

SuprSend Helm Configuration

This section shows only the Blob Storage-specific configuration. You must also configure other required secrets and values for SuprSend to work properly. See the complete configuration guide: SuprSend Installation Guide

Kubernetes Secret Configuration

First, add the Blob Storage-specific secrets to your suprsend-secrets.yaml:

Helm Values Configuration

Then add the following to your suprsend-values.yaml (along with other required configuration):
The above configuration goes under suprsendapi.config section in your suprsend-values.yaml. Configure only the section that matches your chosen blob store provider (S3, Azure, or GCS).

Security Best Practices

  1. Access Control:
    • Private Bucket: Restrict access to SuprSend services only
    • Public Bucket: Allow public read access for media files
    • IAM Policies: Use least privilege principle
    • Rotation: Regularly rotate access keys
    • Bucket Policies: Implement strict bucket policies
    • CORS: Configure CORS only for required origins
  2. Encryption:
    • Server-Side Encryption: Enable for both buckets
    • Key Management: Use KMS for additional security (AWS)
    • TLS: Ensure all connections use HTTPS

Testing Configuration

AWS S3 Testing

Test Public Bucket Access:
Test Private Bucket Access: Verify that your IAM user credentials work by using AWS CLI:

Azure Blob Storage Testing

Test Public Container Access:
Test Private Container Access: Use Azure CLI to verify access:

Next Steps

Once your blob store is configured:
  1. Verify Configuration: Test both private and public access
  2. Update SuprSend: Configure SuprSend to use your blob store

FAQ

  • Verify IAM user has correct permissions
  • Check bucket policies for public bucket
  • Ensure “Block all public access” is enabled for private bucket
  • Verify CORS configuration matches your domain
  • Monitor API rate limits and consider using CloudFront
  • Verify the account key is correct
  • Check container access levels (private vs blob)
  • Ensure the storage account name is correct in the endpoint URL
  • Configure CORS in the storage account’s Resource sharing settings
  • Verify the endpoint URL format: https://<accountname>.blob.core.windows.net
  • Double-check Helm values match your actual bucket/container names
  • Ensure Kubernetes secrets are created in the correct namespace
  • Verify egress rules allow connections to cloud storage endpoints