To add a new S3 source, go to the **Data sources manager** on the left sidebar of the app editor and click on `Add data source` button. Select **AWS S3** from the modal that pops up.
To connect to AWS S3 using **AWS Instance Profile**, select the **Use AWS Instance Profile**. This will use the IAM role attached to the EC2 instance where ToolJet is running.
To access the metadata service of an ECS container and the EC2 instance, we use the WebIdentityToken parameter which is obtained from a successful login with an identity provider.
Click on **Test connection** button to verify if the credentials are correct and that the database is accessible to ToolJet server. Click on **Save** button to save the data source.
:::tip
You can now connect to **[different S3 Hosts using custom endpoints](/docs/how-to/s3-custom-endpoints)**.
:::
## Querying AWS S3
Click on `+` button of the **query manager** at the bottom panel of the editor and select the data source added in the previous step as the data source. Select the operation that you want to perform and click **Save** to save the query.
This operation will fetch the list of all the files in your bucket. It requires two parameters:
1.**Bucket**: Bucket name (mandatory)
2.**Prefix**: To limit the response to keys that begin with the specified prefix (optional)
3.**Max keys**: The maximum number of keys returned in the response body (optional). Default value is 1000.
4.**Offset**: The key to start with when listing objects in a bucket (optional).
5.**"Next Continuation Token"**: `Next Continuation Token` indicates Amazon S3 that the list is being continued on this bucket with a token. ContinuationToken is obfuscated and is not a real key (optional).
:::info
**Next Continuation Token**
For listing a bucket for objects that begin with a specific character or a prefix, then use the `Offset` parameter. For example, if you want to list all the objects that begin with `a`, then set the `Offset` parameter to `a`. Similarly, if you want to list all the objects that begin with `ab`, then set the `Offset` parameter to `ab`.
The `Next Continuation Token` is used to list the next set of objects in a bucket. It is returned by the API when the response is truncated. The results will contain `Next Continuation Token` if there are more keys in the bucket that satisfy the list query. To get the next set of objects, set the `Next Continuation Token` parameter and run the query again.
The results will continue from where the last listing finished.
:::
<imgclassName="screenshot-full"src="/img/datasource-reference/aws-s3/listobjectsv2.png"alt="aws s3 list object"/>
### Signed url for download
The object owner can optionally share objects with others by creating a presigned URL, using their own security credentials, to grant time-limited permission to download the objects. For creating a presigned URL, the required parameters are:
1.**Bucket**: name of the bucket for uploading the file
2.**Key**: an object key
3.**Expires in**: an expiration time of URL
<imgclassName="screenshot-full"src="/img/datasource-reference/aws-s3/urldownv2.png"alt="aws s3 signed download"/>
### Signed url for upload
The presigned URLs are useful if you want your user/customer to be able to upload a specific object to your bucket, but you don't require them to have AWS security credentials or permissions. For creating a presigned URL, the required parameters are:
1.**Bucket**: name of the bucket for uploading the file
2.**Key**: an object key
3.**Expires in**: an expiration time of URL
4.**Content type**: the content type such as text, image etc.
<imgclassName="screenshot-full"src="/img/datasource-reference/aws-s3/urluplv2.png"alt="aws s3 signed upload"/>
We built an app to view and upload files to AWS S3 buckets. Check out the complete tutorial **[here](https://blog.tooljet.com/build-an-aws-s3-broswer-with-tooljet/)**.