Listen to this Post
AWS S3 (Simple Storage Service) is a widely used cloud storage solution, and there are multiple ways to upload data to an S3 bucket. One efficient method for small files (under 10MB) is using API Gateway as a proxy. This approach allows you to set up an API endpoint that directly uploads files to S3. Additionally, you can integrate authentication using AWS Cognito and enable built-in logging for better monitoring and security.
The article below by Helio Tarnowski provides a step-by-step guide on how to set up this S3 upload option via API Gateway:
Uploading files to S3 through API Gateway
You Should Know:
To implement this solution, follow these steps and use the provided commands and code snippets:
1. Set Up API Gateway:
- Create an API Gateway in the AWS Management Console.
- Define a POST method for the API that will handle file uploads.
- Integrate the POST method with an S3 bucket.
2. Configure IAM Roles:
Ensure the API Gateway has the necessary permissions to write to the S3 bucket. Use the following IAM policy:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::your-bucket-name/*"
}
]
}
3. Enable CORS:
To allow cross-origin requests, enable CORS in the API Gateway settings. Use the following configuration:
{
"statusCode": 200,
"headers": {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "POST, OPTIONS"
}
}
4. Integrate Cognito for Authentication:
- Set up a Cognito User Pool and configure it to authenticate users.
- Attach the Cognito Authorizer to the API Gateway to secure the endpoint.
5. Test the API:
Use the following `curl` command to test the API Gateway endpoint:
curl -X POST -H "Content-Type: multipart/form-data" -F "[email protected]" https://your-api-gateway-url/upload
6. Enable Logging:
To enable logging for API Gateway, go to the “Settings” tab and enable CloudWatch Logs. Use the following AWS CLI command to verify logging:
aws cloudwatch describe-log-groups --log-group-name-prefix /aws/apigateway
7. Handle Large Files:
For files larger than 10MB, consider using AWS SDKs to generate pre-signed URLs. Here’s an example using the AWS SDK for Python (Boto3):
import boto3
s3_client = boto3.client('s3')
presigned_url = s3_client.generate_presigned_url(
'put_object',
Params={'Bucket': 'your-bucket-name', 'Key': 'your-file-key'},
ExpiresIn=3600
)
print("Pre-signed URL:", presigned_url)
What Undercode Say:
Using API Gateway as a proxy for S3 uploads is a clean and efficient solution for handling small file uploads. It simplifies the process by providing a single endpoint for uploads, integrates seamlessly with Cognito for authentication, and offers built-in logging for monitoring. For larger files, pre-signed URLs are a viable alternative. This approach is particularly useful for applications requiring secure and scalable file uploads.
Expected Output:
- API Gateway endpoint for file uploads.
- IAM role with S3 write permissions.
- Cognito authentication integrated with API Gateway.
- CloudWatch logs enabled for monitoring.
- Pre-signed URL generation for large files.
For more details, refer to the original article: Uploading files to S3 through API Gateway.
References:
Reported By: Darryl Ruggles – Hackers Feeds
Extra Hub: Undercode MoN
Basic Verification: Pass ✅



