{"slug":"object-storage-quickstart","title":"Object Storage Quick Start","description":"Create your first S3-compatible bucket and start storing files in 5 minutes!","section":"Features","url":"https://docs.danubedata.ro/object-storage-quickstart","markdown_url":"https://docs.danubedata.ro/object-storage-quickstart.md","breadcrumbs":[{"title":"Features","slug":null},{"title":"Storage","slug":"storage-overview"},{"title":"Object Storage Quick Start","slug":"object-storage-quickstart"}],"headings":[{"level":1,"title":"Object Storage Quick Start","id":"object-storage-quick-start"},{"level":2,"title":"Prerequisites","id":"prerequisites"},{"level":2,"title":"Step 1: Create a Bucket","id":"step-1-create-a-bucket"},{"level":3,"title":"Via Dashboard","id":"via-dashboard"},{"level":3,"title":"Via API","id":"via-api"},{"level":2,"title":"Step 2: Create Access Keys","id":"step-2-create-access-keys"},{"level":3,"title":"Via Dashboard","id":"via-dashboard"},{"level":3,"title":"Via API","id":"via-api"},{"level":2,"title":"Step 3: Configure Your S3 Client","id":"step-3-configure-your-s3-client"},{"level":3,"title":"AWS CLI","id":"aws-cli"},{"level":3,"title":"Environment Variables","id":"environment-variables"},{"level":2,"title":"Step 4: Upload Your First File","id":"step-4-upload-your-first-file"},{"level":3,"title":"Using AWS CLI","id":"using-aws-cli"},{"level":3,"title":"Using the Dashboard","id":"using-the-dashboard"},{"level":3,"title":"Using Python","id":"using-python"},{"level":2,"title":"Step 5: Download Files","id":"step-5-download-files"},{"level":3,"title":"Using AWS CLI","id":"using-aws-cli"},{"level":3,"title":"Using Python","id":"using-python"},{"level":2,"title":"Step 6: List Objects","id":"step-6-list-objects"},{"level":3,"title":"Using AWS CLI","id":"using-aws-cli"},{"level":3,"title":"Using Python","id":"using-python"},{"level":2,"title":"Step 7: Generate Presigned URLs","id":"step-7-generate-presigned-urls"},{"level":3,"title":"Using Python","id":"using-python"},{"level":3,"title":"Using AWS CLI","id":"using-aws-cli"},{"level":2,"title":"Step 8: Delete Objects","id":"step-8-delete-objects"},{"level":3,"title":"Using AWS CLI","id":"using-aws-cli"},{"level":3,"title":"Using Python","id":"using-python"},{"level":2,"title":"Common Operations Cheat Sheet","id":"common-operations-cheat-sheet"},{"level":2,"title":"Connecting over SFTP","id":"connecting-over-sftp"},{"level":2,"title":"Next Steps","id":"next-steps"},{"level":2,"title":"Troubleshooting","id":"troubleshooting"},{"level":3,"title":"\"Access Denied\" Error","id":"access-denied-error"},{"level":3,"title":"\"Bucket Not Found\" Error","id":"bucket-not-found-error"},{"level":3,"title":"Slow Uploads","id":"slow-uploads"},{"level":3,"title":"SSL Certificate Errors","id":"ssl-certificate-errors"},{"level":2,"title":"Need Help?","id":"need-help"}],"format":"markdown","word_count":1446,"content":"# Object Storage Quick Start\n\nCreate your first S3-compatible bucket and start storing files in 5 minutes!\n\n## Prerequisites\n\n- A DanubeData account\n- Basic familiarity with object storage concepts\n\n## Step 1: Create a Bucket\n\n### Via Dashboard\n\n1. Navigate to **Object Storage** in the sidebar\n2. Click **Create Bucket**\n3. Enter your bucket configuration:\n   - **Name**: `my-first-bucket` (lowercase, 3-63 characters)\n   - **Region**: EU (Falkenstein) - default\n   - **Versioning**: Disabled (can enable later)\n   - **Public Access**: Disabled (recommended)\n   - **Size Limit** (optional): Cap the bucket at 10 GB up to 5 TB, or leave it unlimited. You can change the cap later, but not below current usage.\n   - **Object Lock** (optional): Enable write-once-read-many (WORM) protection. This can **only** be set at creation and turns on versioning automatically. See [Object Storage security](https://docs.danubedata.ro/object-storage-security#object-lock-worm).\n4. Click **Create Bucket**\n\nYour bucket will be ready in a few seconds!\n\n### Via API\n\n```bash\ncurl -X POST https://api.danubedata.ro/v1/storage/buckets \\\n  -H \"Authorization: Bearer YOUR_API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"name\": \"my-first-bucket\",\n    \"region\": \"fsn1\",\n    \"versioning_enabled\": false,\n    \"public_access\": false\n  }'\n```\n\n## Step 2: Create Access Keys\n\nAccess keys are required to interact with your bucket via the S3 API.\n\n### Via Dashboard\n\n1. Navigate to your bucket's detail page\n2. Click the **Access Keys** tab\n3. Click **Create Access Key**\n4. Configure the key:\n   - **Name**: `my-app-key`\n   - **Permissions**: Read & Write (or select specific permissions)\n   - **Expiration**: Optional expiration date\n5. Click **Create**\n6. **Important**: Copy and save your Secret Key immediately - it won't be shown again!\n\n### Via API\n\n```bash\ncurl -X POST https://api.danubedata.ro/v1/storage/buckets/{bucket_id}/access-keys \\\n  -H \"Authorization: Bearer YOUR_API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"name\": \"my-app-key\",\n    \"permissions\": [\"read\", \"write\"]\n  }'\n```\n\nResponse:\n```json\n{\n  \"id\": \"key_abc123\",\n  \"name\": \"my-app-key\",\n  \"access_key\": \"AKIAIOSFODNN7EXAMPLE\",\n  \"secret_key\": \"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY\"\n}\n```\n\n## Step 3: Configure Your S3 Client\n\n### AWS CLI\n\nInstall the AWS CLI and configure it:\n\n```bash\n# Install AWS CLI (if not already installed)\npip install awscli\n\n# Configure credentials\naws configure\n# AWS Access Key ID: YOUR_ACCESS_KEY\n# AWS Secret Access Key: YOUR_SECRET_KEY\n# Default region name: fsn1\n# Default output format: json\n```\n\nCreate an alias for easier use:\n\n```bash\n# Add to ~/.bashrc or ~/.zshrc\nalias danubedata-s3='aws --endpoint-url https://s3.danubedata.ro s3'\nalias danubedata-s3api='aws --endpoint-url https://s3.danubedata.ro s3api'\n```\n\n### Environment Variables\n\nSet up environment variables for your applications:\n\n```bash\nexport AWS_ACCESS_KEY_ID=\"YOUR_ACCESS_KEY\"\nexport AWS_SECRET_ACCESS_KEY=\"YOUR_SECRET_KEY\"\nexport AWS_ENDPOINT_URL=\"https://s3.danubedata.ro\"\nexport AWS_REGION=\"fsn1\"\n```\n\n## Step 4: Upload Your First File\n\n### Using AWS CLI\n\n```bash\n# Upload a single file\naws --endpoint-url https://s3.danubedata.ro s3 cp hello.txt s3://my-first-bucket/\n\n# Upload a directory\naws --endpoint-url https://s3.danubedata.ro s3 cp ./my-folder s3://my-first-bucket/my-folder/ --recursive\n\n# Upload with custom metadata\naws --endpoint-url https://s3.danubedata.ro s3 cp document.pdf s3://my-first-bucket/ \\\n  --metadata '{\"author\":\"john\",\"department\":\"sales\"}'\n```\n\n### Using the Dashboard\n\n1. Navigate to your bucket\n2. Click **Browse Objects** or the **Objects** tab\n3. Click **Upload**\n4. Drag and drop files or click to browse\n5. Click **Upload**\n\n### Using Python\n\n```python\nimport boto3\n\ns3 = boto3.client(\n    's3',\n    endpoint_url='https://s3.danubedata.ro',\n    aws_access_key_id='YOUR_ACCESS_KEY',\n    aws_secret_access_key='YOUR_SECRET_KEY'\n)\n\n# Upload a file\ns3.upload_file('local-file.txt', 'my-first-bucket', 'remote-file.txt')\nprint(\"File uploaded successfully!\")\n\n# Upload with progress callback\nfrom boto3.s3.transfer import TransferConfig\n\ndef progress_callback(bytes_transferred):\n    print(f\"Transferred: {bytes_transferred} bytes\")\n\nconfig = TransferConfig(use_threads=True)\ns3.upload_file(\n    'large-file.zip',\n    'my-first-bucket',\n    'large-file.zip',\n    Config=config,\n    Callback=progress_callback\n)\n```\n\n## Step 5: Download Files\n\n### Using AWS CLI\n\n```bash\n# Download a single file\naws --endpoint-url https://s3.danubedata.ro s3 cp s3://my-first-bucket/hello.txt ./\n\n# Download a directory\naws --endpoint-url https://s3.danubedata.ro s3 cp s3://my-first-bucket/my-folder/ ./my-folder/ --recursive\n\n# Sync a directory (only downloads new/changed files)\naws --endpoint-url https://s3.danubedata.ro s3 sync s3://my-first-bucket/data/ ./local-data/\n```\n\n### Using Python\n\n```python\nimport boto3\n\ns3 = boto3.client(\n    's3',\n    endpoint_url='https://s3.danubedata.ro',\n    aws_access_key_id='YOUR_ACCESS_KEY',\n    aws_secret_access_key='YOUR_SECRET_KEY'\n)\n\n# Download a file\ns3.download_file('my-first-bucket', 'remote-file.txt', 'local-file.txt')\n\n# Get file content directly\nresponse = s3.get_object(Bucket='my-first-bucket', Key='hello.txt')\ncontent = response['Body'].read().decode('utf-8')\nprint(content)\n```\n\n## Step 6: List Objects\n\n### Using AWS CLI\n\n```bash\n# List all objects\naws --endpoint-url https://s3.danubedata.ro s3 ls s3://my-first-bucket/\n\n# List with details\naws --endpoint-url https://s3.danubedata.ro s3 ls s3://my-first-bucket/ --human-readable --summarize\n\n# List objects in a \"folder\"\naws --endpoint-url https://s3.danubedata.ro s3 ls s3://my-first-bucket/images/\n```\n\n### Using Python\n\n```python\nimport boto3\n\ns3 = boto3.client(\n    's3',\n    endpoint_url='https://s3.danubedata.ro',\n    aws_access_key_id='YOUR_ACCESS_KEY',\n    aws_secret_access_key='YOUR_SECRET_KEY'\n)\n\n# List objects\nresponse = s3.list_objects_v2(Bucket='my-first-bucket')\n\nfor obj in response.get('Contents', []):\n    print(f\"{obj['Key']} - {obj['Size']} bytes - {obj['LastModified']}\")\n```\n\n## Step 7: Generate Presigned URLs\n\nShare files temporarily without exposing your credentials.\n\n### Using Python\n\n```python\nimport boto3\nfrom datetime import datetime, timedelta\n\ns3 = boto3.client(\n    's3',\n    endpoint_url='https://s3.danubedata.ro',\n    aws_access_key_id='YOUR_ACCESS_KEY',\n    aws_secret_access_key='YOUR_SECRET_KEY'\n)\n\n# Generate download URL (valid for 1 hour)\nurl = s3.generate_presigned_url(\n    'get_object',\n    Params={'Bucket': 'my-first-bucket', 'Key': 'document.pdf'},\n    ExpiresIn=3600  # seconds\n)\nprint(f\"Download URL: {url}\")\n\n# Generate upload URL (valid for 1 hour)\nupload_url = s3.generate_presigned_url(\n    'put_object',\n    Params={'Bucket': 'my-first-bucket', 'Key': 'uploads/new-file.txt'},\n    ExpiresIn=3600\n)\nprint(f\"Upload URL: {upload_url}\")\n```\n\n### Using AWS CLI\n\n```bash\n# Generate presigned URL (valid for 1 hour)\naws --endpoint-url https://s3.danubedata.ro s3 presign s3://my-first-bucket/document.pdf --expires-in 3600\n```\n\n## Step 8: Delete Objects\n\n### Using AWS CLI\n\n```bash\n# Delete a single object\naws --endpoint-url https://s3.danubedata.ro s3 rm s3://my-first-bucket/hello.txt\n\n# Delete multiple objects (folder)\naws --endpoint-url https://s3.danubedata.ro s3 rm s3://my-first-bucket/old-data/ --recursive\n\n# Delete with confirmation\naws --endpoint-url https://s3.danubedata.ro s3 rm s3://my-first-bucket/important.txt --dryrun\n```\n\n### Using Python\n\n```python\nimport boto3\n\ns3 = boto3.client(\n    's3',\n    endpoint_url='https://s3.danubedata.ro',\n    aws_access_key_id='YOUR_ACCESS_KEY',\n    aws_secret_access_key='YOUR_SECRET_KEY'\n)\n\n# Delete single object\ns3.delete_object(Bucket='my-first-bucket', Key='hello.txt')\n\n# Delete multiple objects\ns3.delete_objects(\n    Bucket='my-first-bucket',\n    Delete={\n        'Objects': [\n            {'Key': 'file1.txt'},\n            {'Key': 'file2.txt'},\n            {'Key': 'folder/file3.txt'},\n        ]\n    }\n)\n```\n\n## Common Operations Cheat Sheet\n\n| Operation | AWS CLI Command |\n|-----------|-----------------|\n| List buckets | `aws --endpoint-url https://s3.danubedata.ro s3 ls` |\n| List objects | `aws --endpoint-url https://s3.danubedata.ro s3 ls s3://bucket/` |\n| Upload file | `aws --endpoint-url https://s3.danubedata.ro s3 cp file.txt s3://bucket/` |\n| Download file | `aws --endpoint-url https://s3.danubedata.ro s3 cp s3://bucket/file.txt ./` |\n| Sync folder | `aws --endpoint-url https://s3.danubedata.ro s3 sync ./local s3://bucket/remote` |\n| Delete file | `aws --endpoint-url https://s3.danubedata.ro s3 rm s3://bucket/file.txt` |\n| Get bucket size | `aws --endpoint-url https://s3.danubedata.ro s3 ls s3://bucket/ --recursive --summarize` |\n\n## Connecting over SFTP\n\nIf a tool or user needs SFTP instead of the S3 API, you can reach your bucket at `sftp.new-s3.danubedata.ro` on port `2222`. Create an SFTP user from the bucket's **SFTP** section — it reuses one of your S3 access keys, so its permissions match that key. The dashboard shows the exact username; the password is the access key's secret.\n\n```bash\n# Connect with any SFTP client (username shown in the dashboard)\nsftp -P 2222 <sftp-username>@sftp.new-s3.danubedata.ro\n```\n\n## Next Steps\n\nNow that you have your first bucket running, explore more features:\n\n- [Object Storage Product Overview](https://docs.danubedata.ro/object-storage) - Full feature documentation\n- [S3 Access Keys](https://docs.danubedata.ro/object-storage-access-keys) - Team-wide vs per-bucket scoped credentials\n- [Object Storage Security](https://docs.danubedata.ro/object-storage-security) - Access control and encryption\n- [Enable Versioning](https://docs.danubedata.ro/object-storage-versioning) - Protect against accidental deletion\n\n## Troubleshooting\n\n### \"Access Denied\" Error\n\n- Verify your access key and secret key are correct\n- Check that your access key has the required permissions\n- Ensure the bucket name is correct (case-sensitive)\n\n### \"Bucket Not Found\" Error\n\n- Bucket names must be globally unique\n- Verify the bucket name spelling\n- Check you're using the correct endpoint (`https://s3.danubedata.ro`)\n\n### Slow Uploads\n\n- Use multipart upload for files larger than 100MB\n- Enable `use_threads=True` in boto3 TransferConfig\n- Check your network connection\n\n### SSL Certificate Errors\n\n- Ensure you're using `https://` not `http://`\n- Update your SSL certificates: `pip install --upgrade certifi`\n\n## Need Help?\n\n- Check our [FAQ](../products/object-storage.md#faq)\n- Contact support: support@danubedata.ro\n\n---\n\n**Congratulations!** You've successfully created your first bucket and uploaded files to DanubeData Object Storage!\n","prev":{"title":"Object Storage (S3)","slug":"object-storage","url":"https://docs.danubedata.ro/object-storage","markdown_url":"https://docs.danubedata.ro/object-storage.md","json_url":"https://docs.danubedata.ro/object-storage.json"},"next":{"title":"Object Storage Security","slug":"object-storage-security","url":"https://docs.danubedata.ro/object-storage-security","markdown_url":"https://docs.danubedata.ro/object-storage-security.md","json_url":"https://docs.danubedata.ro/object-storage-security.json"},"index_url":"https://docs.danubedata.ro/index.json"}