# Connect your S3 tools
Source: https://docs.infraista.com/en/data-storage/object-storage/connect-s3-tools



Any tool that speaks S3 works with Object Storage. You need three things:

1. **The endpoint** of the bucket's region. Copy it from the bucket's **Overview** under **Bucket
   address**, or from **S3 endpoints** on the Object Storage page.
2. **An access key**: the access key ID and secret. See
   [Create access keys](/en/data-storage/object-storage/create-access-keys).
3. **Path-style addressing**: use the endpoint plus the bucket name in the path, as the console's
   **Bucket URL** shows.

When a tool asks for a region, use the bucket's region code (for example `eu-central`).

In the examples below, replace `<endpoint>` with your bucket's endpoint and `my-bucket` with its name.

## AWS CLI [#aws-cli]

Save the key once as a profile:

```bash
aws configure --profile infraista
# AWS Access Key ID:     <access key ID>
# AWS Secret Access Key: <secret>
# Default region name:   eu-central
```

Then add `--endpoint-url` to every command:

```bash
aws s3 ls s3://my-bucket --profile infraista --endpoint-url <endpoint>
aws s3 cp ./render.exr s3://my-bucket/ --profile infraista --endpoint-url <endpoint>
aws s3 sync ./site s3://my-bucket/site --profile infraista --endpoint-url <endpoint>
```

## rclone [#rclone]

Add a remote to `~/.config/rclone/rclone.conf`:

```ini
[infraista]
type = s3
provider = Other
access_key_id = <access key ID>
secret_access_key = <secret>
endpoint = <endpoint>
region = eu-central
acl = private
```

Then:

```bash
rclone ls infraista:my-bucket
rclone sync ./exports infraista:my-bucket/exports
```

## Python (boto3) [#python-boto3]

```python
import boto3

s3 = boto3.client(
    "s3",
    endpoint_url="<endpoint>",
    aws_access_key_id="<access key ID>",
    aws_secret_access_key="<secret>",
)
for obj in s3.list_objects_v2(Bucket="my-bucket").get("Contents", []):
    print(obj["Key"])
```

Other S3 SDKs work the same way: set the endpoint and your key, and turn on path-style addressing where
the SDK asks (for example `forcePathStyle: true` in the AWS SDK for JavaScript).

## If something goes wrong [#if-something-goes-wrong]

* **`InvalidAccessKeyId` or `SignatureDoesNotMatch`**: the key or secret is wrong, or the key was
  revoked. Create a new key.
* **`AccessDenied`**: the key can't reach this bucket, or is read-only and you tried to write. Check the
  key's scope on the **Access keys** page, or the bucket's **Keys with access to this bucket** list on
  its **Permissions** tab.
* **The bucket isn't found**: check you used the endpoint of the bucket's own region.

## Related [#related]

* [Browse and share files](/en/data-storage/object-storage/browse-and-share-files)
