> ## Documentation Index
> Fetch the complete documentation index at: https://www.integrate.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# ETL: Connecting to Amazon S3

> Connect Amazon S3 to Integrate.io ETL for reading and writing data. Configure IAM credentials, bucket policies, and S3 connection settings.

<Frame>
  <iframe className="w-full aspect-video rounded-xl" src="https://fast.wistia.com/embed/iframe/upi7uu1g4q" title="Connect Amazon S3" allow="autoplay; fullscreen" allowFullScreen />
</Frame>

To enable Integrate.io ETL [access to your S3 data](/etl/allowing-integrateio-etl-access-to-data-on-amazon-s3/), you need to perform the following steps:

<Steps>
  <Step>
    In AWS's IAM (Identity and Access Management) module, create a user account for working with Integrate.io ETL.
  </Step>

  <Step>
    In IAM, save the user account's security credentials for later use when defining a connection in Integrate.io ETL.
  </Step>

  <Step>
    In IAM, attach a user policy (provided by Integrate.io ETL) to the newly-created user account.
  </Step>

  <Step>
    In Integrate.io ETL, create a connection using the IAM security credentials you saved previously.
  </Step>
</Steps>

Each of these steps are detailed below. **Note:** To enable Integrate.io ETL to operate with S3:

* never use an underscore in an S3 bucket name.
* never end an S3 bucket name with a dash.

### To create a user account in IAM

<Steps>
  <Step>
    Log into the AWS Management Console.
  </Step>

  <Step>
    Click Identity & Access Management (also known as IAM).

    <Frame>
      <img src="https://mintcdn.com/integrateio/2ttHYDu3EKov-VoY/images/connectivity-and-security/image-80.webp?fit=max&auto=format&n=2ttHYDu3EKov-VoY&q=85&s=bfcb20bf69da831d386bcf31a0ffed8c" alt="AWS Management Console with IAM service highlighted" width="1200" height="895" data-path="images/connectivity-and-security/image-80.webp" />
    </Frame>
  </Step>

  <Step>
    On the left navigation bar, click **Users**.
  </Step>

  <Step>
    Click **Add User**.

    <Frame>
      <img src="https://mintcdn.com/integrateio/2ttHYDu3EKov-VoY/images/connectivity-and-security/image-81.webp?fit=max&auto=format&n=2ttHYDu3EKov-VoY&q=85&s=83b90788efa4448787609ea90ce84aff" alt="IAM Users page with Add User button" width="1200" height="522" data-path="images/connectivity-and-security/image-81.webp" />
    </Frame>
  </Step>

  <Step>
    Enter a user name, such as Integrate.io ETL, and make sure the check box **Programmatic access** is selected. Click **Next: Permissions** to proceed.

    <Frame>
      <img src="https://mintcdn.com/integrateio/2ttHYDu3EKov-VoY/images/connectivity-and-security/image-82.webp?fit=max&auto=format&n=2ttHYDu3EKov-VoY&q=85&s=e1ee21abf266d4f3727ff35c951cb5e3" alt="IAM Add User form with programmatic access selected" width="1200" height="808" data-path="images/connectivity-and-security/image-82.webp" />
    </Frame>
  </Step>

  <Step>
    Click **Create User**. A user account with security credentials is created.

    <Frame>
      <img src="https://mintcdn.com/integrateio/2ttHYDu3EKov-VoY/images/connectivity-and-security/image-83.webp?fit=max&auto=format&n=2ttHYDu3EKov-VoY&q=85&s=71978877b0b5de65f958fad43ae39ed9" alt="IAM user created with security credentials generated" width="1200" height="815" data-path="images/connectivity-and-security/image-83.webp" />
    </Frame>
  </Step>
</Steps>

### To save user security credentials

Click **Download .csv** and save the credentials.csv file for later when you will need to configure Integrate.io ETL to work with S3.

<Frame>
  <img src="https://mintcdn.com/integrateio/2ttHYDu3EKov-VoY/images/connectivity-and-security/image-84.webp?fit=max&auto=format&n=2ttHYDu3EKov-VoY&q=85&s=4701d7c126affacb0399db7fbc27396f" alt="Download CSV button to save security credentials" width="1200" height="463" data-path="images/connectivity-and-security/image-84.webp" />
</Frame>

Click **Close** to close the window.

### Creating new security credentials for a user

<Note>
  **Note:**

  Perform this step if in the procedure to save user security credentials above, any of the user account security credential keys contain a slash, or if you cannot find the credentials.csv file you saved.
</Note>

<Steps>
  <Step>
    In the list of users, click the user you created for working with Integrate.io ETL, then scroll down to **Security credentials**, and then click **Make inactive**.

    <Frame>
      <img src="https://mintcdn.com/integrateio/2ttHYDu3EKov-VoY/images/connectivity-and-security/image-85.webp?fit=max&auto=format&n=2ttHYDu3EKov-VoY&q=85&s=df7d360b541c2cd3d3d8ea0866b3bb46" alt="IAM security credentials section with Make inactive option" width="1200" height="416" data-path="images/connectivity-and-security/image-85.webp" />
    </Frame>
  </Step>

  <Step>
    Click **Create access key**.

    <Frame>
      <img src="https://mintcdn.com/integrateio/2ttHYDu3EKov-VoY/images/connectivity-and-security/image-86.webp?fit=max&auto=format&n=2ttHYDu3EKov-VoY&q=85&s=6bcb82c2ecd072850c7267fdf965bf4b" alt="Create access key button in IAM user security credentials" width="1200" height="416" data-path="images/connectivity-and-security/image-86.webp" />
    </Frame>
  </Step>
</Steps>

Continue from Step 1 in to download and save user security credentials above.

### To attach an Integrate.io ETL user policy to the IAM user account

<Steps>
  <Step>
    In the list of users, click the user you created for working with Integrate.io ETL, then scroll down to **Add permissions**.
  </Step>

  <Step>
    Click **Attach existing policies directly**.
  </Step>

  <Step>
    In the search box, search 's3 ...'.
  </Step>

  <Step>
    For **read-only** buckets, check **AmazonS3ReadOnlyAccess**.

    <Frame>
      <img src="https://mintcdn.com/integrateio/2ttHYDu3EKov-VoY/images/connectivity-and-security/image-87.webp?fit=max&auto=format&n=2ttHYDu3EKov-VoY&q=85&s=a2b68f52d86169d789a9ee98576fc56d" alt="Attaching AmazonS3ReadOnlyAccess policy to the IAM user" width="1200" height="656" data-path="images/connectivity-and-security/image-87.webp" />
    </Frame>
  </Step>

  <Step>
    For **read-write** buckets, Click **create policy.** Choose **JSON**, then Copy the following policy and replace "your-bucket" with your bucket name:

    <Frame>
      <img src="https://mintcdn.com/integrateio/2ttHYDu3EKov-VoY/images/connectivity-and-security/image-88.webp?fit=max&auto=format&n=2ttHYDu3EKov-VoY&q=85&s=16b44f68a85ad0ad6ada991bcba6fa4f" alt="IAM JSON policy editor for read-write S3 bucket access" width="1200" height="632" data-path="images/connectivity-and-security/image-88.webp" />
    </Frame>

    ```json theme={null}
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "ListObjectsInBucket",
                "Effect": "Allow",
                "Action": ["s3:ListBucket"],
                "Resource": ["arn:aws:s3:::bucket-name"]
            },
            {
                "Sid": "AllObjectActions",
                "Effect": "Allow",
                "Action": "s3:*Object",
                "Resource": ["arn:aws:s3:::bucket-name/*"]
            }
        ]
    }
    ```

    Then click **Review policy.** On the next page, click **Create policy.** For more information, refer to AWS IAM documentation on the web.
  </Step>
</Steps>

### To create an Amazon S3 connection in Integrate.io ETL

<Steps>
  <Step>
    Click the **Connections** icon (lightning bolt) on the top left menu.
  </Step>

  <Step>
    To create a connection, click **New connection.**

    <Frame>
      <img src="https://mintcdn.com/integrateio/2ttHYDu3EKov-VoY/images/connectivity-and-security/image-89.webp?fit=max&auto=format&n=2ttHYDu3EKov-VoY&q=85&s=cbb891400f1e2e177baf68f2b1c23431" alt="New connection button in the Connections menu" width="1200" height="830" data-path="images/connectivity-and-security/image-89.webp" />
    </Frame>
  </Step>

  <Step>
    Select **Amazon S3**.

    <Frame>
      <img src="https://mintcdn.com/integrateio/2ttHYDu3EKov-VoY/images/connectivity-and-security/image-90.webp?fit=max&auto=format&n=2ttHYDu3EKov-VoY&q=85&s=cb8dfdadaa1034273e4f90f4cd83699f" alt="Selecting Amazon S3 from the connection type list" width="1200" height="830" data-path="images/connectivity-and-security/image-90.webp" />
    </Frame>
  </Step>

  <Step>
    Type a name for the connection, then from the credentials.csv file you previously saved in **To save user security credentials** above, copy the Access key id and Secret access key into the respective fields.

    <Frame>
      <img src="https://mintcdn.com/integrateio/2ttHYDu3EKov-VoY/images/connectivity-and-security/image-91.webp?fit=max&auto=format&n=2ttHYDu3EKov-VoY&q=85&s=373260906e66a17ec7424faef8b027c8" alt="Amazon S3 connection form with access key and secret fields" width="1200" height="830" data-path="images/connectivity-and-security/image-91.webp" />
    </Frame>
  </Step>

  <Step>
    If the S3 buckets reside in a region that requires AWS Signature v4, fill in the region for the connection. See region list [here](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region).
  </Step>

  <Step>
    Click **Test connection**. If the credentials are correct, a message that the connection test was successful appears.
  </Step>

  <Step>
    Click **Create amazon s3 connection**.
  </Step>

  <Step>
    The connection is created and appears in the list of connections.

    <Frame>
      <img src="https://mintcdn.com/integrateio/2ttHYDu3EKov-VoY/images/connectivity-and-security/image-92.webp?fit=max&auto=format&n=2ttHYDu3EKov-VoY&q=85&s=b16b69a06f90d130b5a0edece142822a" alt="Amazon S3 connection created and listed in connections" width="1200" height="830" data-path="images/connectivity-and-security/image-92.webp" />
    </Frame>
  </Step>

  <Step>
    Now you can create a package and test it on your actual data stored in S3.
  </Step>
</Steps>
