MK.IO uses your own cloud storage to hold media assets. Before you can upload, transform, or publish content, you need to connect at least one storage account. MK.IO supports Azure Blob Storage and Amazon S3. Google Cloud Storage support is coming soon.
Prerequisites
Section titled “Prerequisites”You need an AWS account with permissions to create IAM users and manage S3 buckets.
Step 1: Create an S3 bucket
Section titled “Step 1: Create an S3 bucket”If you do not already have an S3 bucket for MK.IO to use:
- Go to the AWS Console and open S3.
- Click Create bucket.
- Choose a bucket name and select the AWS region closest to your MK.IO project region. MK.IO automatically detects the bucket region — you do not enter a region in MK.IO.
- Leave Block Public Access settings enabled (MK.IO accesses the bucket using credentials, not public URLs).
- Click Create bucket.
MK.IO detects your bucket’s region automatically from the bucket name. There is no region field to fill in when connecting S3 storage.
Step 2: Create an IAM user with S3 permissions
Section titled “Step 2: Create an IAM user with S3 permissions”MK.IO accesses your S3 bucket using an IAM access key. Create a dedicated IAM user with the minimum required permissions.
Create the IAM user
Section titled “Create the IAM user”- Open IAM in the AWS Console.
- Go to Users and click Create user.
- Enter a username (for example,
mkio-storage) and click Next. - Select Attach policies directly and click Create policy.
- Switch to the JSON editor and paste the following policy, replacing
your-bucket-namewith your actual bucket name:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::your-bucket-name", "arn:aws:s3:::your-bucket-name/*" ] } ]}- Name the policy (for example,
mkio-s3-access) and click Create policy. - Return to the user creation tab, refresh the policy list, select your new policy, and complete the user creation.
Create access keys
Section titled “Create access keys”- Open your newly created IAM user.
- Go to the Security credentials tab.
- Under Access keys, click Create access key.
- Choose Application running outside AWS as the use case.
- Click Create access key.
- Copy the Access key ID and Secret access key and store them securely. AWS does not show the secret access key again after this screen.
Step 3: Add the S3 bucket in MK.IO
Section titled “Step 3: Add the S3 bucket in MK.IO”- Go to app.mk.io and open your project.
- Select Storage from the left navigation.
- Click Add Storage.
- Fill in the required fields:
- Storage account name: A display name for this connection (for example,
my-s3-bucket). - Description: Optional.
- Bucket name: The exact name of your S3 bucket.
- Access key ID: The access key ID you copied in Step 2.
- Secret access key: The secret access key you copied in Step 2.
- Storage account name: A display name for this connection (for example,
- Click Submit.
MK.IO connects to the bucket and the storage account appears in your storage list.
Troubleshooting
Section titled “Troubleshooting”Error: “Access Denied: Invalid AWS credentials” or “Error getting region for bucket”
This error means MK.IO cannot authenticate with your AWS credentials. There is no region field in MK.IO because the region is detected automatically from the bucket. If you see this error:
- Verify that the Access key ID and Secret access key are correct and have not been regenerated since you copied them.
- Confirm that the IAM user or role associated with these credentials has the
s3:GetObject,s3:PutObject,s3:DeleteObject, ands3:ListBucketpermissions on the bucket. - Check that the bucket name you entered in MK.IO is spelled exactly as it appears in AWS, including the case.
- If the credentials belong to an IAM role rather than a user, confirm that the role’s trust policy allows the credentials to be used from outside AWS.
Error: “Bucket does not exist”
Confirm the bucket name and that the bucket exists in your AWS account. Bucket names are globally unique — if the name exists but belongs to a different AWS account, you receive this error.
Prerequisites
Section titled “Prerequisites”You need an Azure account with permissions to manage storage accounts and create Shared Access Signatures (SAS tokens).
Step 1: Locate your storage account
Section titled “Step 1: Locate your storage account”- Go to the Azure Portal.
- Open Storage accounts and select the storage account you want to connect to MK.IO.
Your Azure Storage account should be in the same region as your MK.IO project to avoid data egress costs.
Step 2: Generate a SAS token
Section titled “Step 2: Generate a SAS token”A Shared Access Signature (SAS) token grants MK.IO time-limited, permission-scoped access to your storage account without sharing your account keys.
Open the SAS configuration
Section titled “Open the SAS configuration”- In your storage account, go to Security + networking > Shared access signature.
Configure the SAS token permissions
Section titled “Configure the SAS token permissions”Set the following options:
- Allowed services: Check Blob only.
- Allowed resource types: Check Container and Object.
- Allowed permissions: Check Read, Write, Delete, List, Add, and Create.
- Start and expiry date/time: Set an expiry date appropriate for your use. MK.IO will lose access to the storage account when the token expires.
Generate and copy the SAS token
Section titled “Generate and copy the SAS token”- Click Generate SAS and connection string.
- Copy the Blob service SAS URL. It looks like this:
https://<storage-name>.blob.core.windows.net/?sv=2022-11-02&ss=b&srt=co&sp=rwdlac&se=2026-12-31T00:00:00Z&spr=https&sig=<signature>- Split this URL into two parts for use in MK.IO:
- URL: Everything up to and including
.blob.core.windows.net— do not include a trailing slash:https://<storage-name>.blob.core.windows.net - SAS token: The query string beginning with
?:?sv=2022-11-02&ss=b&srt=co&sp=rwdlac&se=2026-12-31T00:00:00Z&spr=https&sig=<signature>
- URL: Everything up to and including
Step 3: Add the storage account in MK.IO
Section titled “Step 3: Add the storage account in MK.IO”- Go to app.mk.io and open your project.
- Select Storage from the left navigation.
- Click Add Storage.
- Fill in the required fields:
- Storage account name: A display name for this connection.
- Description: Optional.
- URL: The base blob endpoint without a trailing slash (for example,
https://mystorageaccount.blob.core.windows.net). - SAS token: The query string beginning with
?.
- Click Submit.
MK.IO validates the credentials and the storage account appears in your storage list.
Troubleshooting
Section titled “Troubleshooting”Error on submit: “Invalid URL” or validation failure
- Confirm the URL field does not have a trailing slash. The URL must end with
.blob.core.windows.net. - Confirm the SAS token field begins with
?. Do not include the base URL in the SAS token field.
Storage account connects but MK.IO cannot read or write files
- Check that the SAS token includes Container and Object under allowed resource types. A token scoped to Object only cannot list containers.
- Check that the SAS token has not expired. Generate a new token with a future expiry and update the connection in MK.IO.
- Confirm the Allowed permissions include Read, Write, Delete, List, Add, and Create. Missing permissions cause specific operations to fail without a clear error.
Egress costs are unexpectedly high
Your Azure Storage account and MK.IO project are likely in different regions. Data transferred between regions incurs egress charges. Create a storage account in the same Azure region as your MK.IO project.