Loading PasteShare...

Building a Secure File Sharing Service with Laravel and AWS S3

By James Delaney Nov 22, 2025 1 min read 137 views

The Need for Secure File Sharing

Many applications require users to upload and share files. Building a secure file sharing service is critical to protect sensitive data and ensure compliance. Laravel, combined with AWS S3, provides a powerful and scalable solution.

Why AWS S3 for File Storage?

  • Scalability: Virtually unlimited storage capacity
  • Durability: Designed for 99.999999999% (11 nines) durability
  • Security: Encryption at rest and in transit, fine-grained access control
  • Cost-Effective: Pay-as-you-go pricing
  • Integration: Seamlessly integrates with Laravel's filesystem

Setting up AWS S3 with Laravel

1. Install AWS S3 Package

composer require league/flysystem-aws-s3-v3

2. Configure `config/filesystems.php`

'disks' => [
    // ...
    's3' => [
        'driver' => 's3',
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'region' => env('AWS_DEFAULT_REGION'),
        'bucket' => env('AWS_BUCKET'),
        'url' => env('AWS_URL'),
        'endpoint' => env('AWS_ENDPOINT'),
        'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
        'throw' => false,
    ],
],

3. Add AWS Credentials to `.env`

AWS_ACCESS_KEY_ID=your_access_key
AWS_SECRET_ACCESS_KEY=your_secret_key
AWS_DEFAULT_REGION=your_region
AWS_BUCKET=your_bucket_name
AWS_URL=https://your_bucket_name.s3.your_region.amazonaws.com

Uploading Files to S3

use Illuminate\Support\Facades\Storage;

// Store a file
$path = $request->file('avatar')->store('avatars', 's3');

// Store a file with public visibility (if bucket policy allows)
$path = Storage::disk('s3')->putFile('documents', $request->file('document'), 'public');

// Get a temporary URL for private files (expires in 5 minutes)
$url = Storage::disk('s3')->temporaryUrl(
    'private/file.pdf', now()->addMinutes(5)
);

Implementing Access Control

  • Private Buckets: Default to private and generate signed URLs for access
  • IAM Policies: Fine-tune user and role permissions for S3 buckets
  • Pre-signed URLs: Grant temporary access to specific objects

Remember: Always prioritize security when handling user uploads. Laravel and AWS S3 provide the tools; it's up to you to implement them securely.

Comments (0)

Please login or register to leave a comment.

No comments yet. Be the first to share your thoughts!