# AWS S3 Splunk Integration

## **Overview**

To establish an integration between Splunk and Cisco Identity Intelligence, please refer to the setup guide section in this document. This integration method utilizes the Splunk Add-on for AWS to ingest log data from your AWS S3 bucket. This method is frequently employed for batch processing of historical or high-volume log data. It requires setting up AWS credentials and the accurate specification of the SQS queue region and URL.

## **Prerequisites**

Before you begin, please ensure you have the following:

1. Administrative access to your **Cisco Identity Intelligence**
2. Administrative access to your **Splunk Enterprise** or **Splunk Cloud**
3. The [**Cisco Security Cloud**](https://splunkbase.splunk.com/app/7404) **application** installed from Splunkbase

{% hint style="info" %}
The minimum required version of the Cisco Security Cloud application is <mark style="color:$warning;">3.4.0 or higher</mark>
{% endhint %}

4. The Splunk Add-on for AWS **application** installed from Splunkbase
5. Appropriate permissions to manage AWS S3 buckets and Splunk data inputs

## **Setup Guide**

### Configure AWS S3

1. Create an S3 Bucket

   a. Go to the **Amazon S3** console

   b. Click **Create bucket**

   c. Provide a **name** for the bucket, such as "splunk-cii-demo-set-up"for this example.  Keep this name handy, it will be used throughout the setup process. &#x20;

   d. Click **Create bucket** to complete the process
2. Create an IAM Policy

   a. Navigate to **IAM** > **Policies** > **Create Policy**

<figure><img src="/files/o94ZvuXscnY0rm2cgZOQ" alt=""><figcaption></figcaption></figure>

&#x20;       b. Select **JSON** in the policy editor and paste the following JSON:

{% hint style="info" %} <mark style="color:$warning;">**Note:**</mark> Replace `${BUCKET_NAME}` with a suitable name, such as `splunk-cii-demo-set-up`
{% endhint %}

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::${BUCKET_NAME}/*"
    }
  ]
}
```

<figure><img src="/files/ptNto5t3uEhUwlYh22MO" alt=""><figcaption></figcaption></figure>

&#x20;      c. Click Next and provide the policy with a name (In this example, we will use S3WritePolicy)

<figure><img src="/files/2F2guJyJUXhdDymHb2fx" alt=""><figcaption></figcaption></figure>

&#x20;     d. Click Create policy

3. Create an IAM Role

   a. Navigate to **IAM** > **Roles** > **Create Role**

<figure><img src="/files/njHJYEUPu7Ig6KtI5zfr" alt=""><figcaption></figcaption></figure>

&#x20;    b. Select **Custom trust policy** and paste the following JSON:

{% hint style="info" %} <mark style="color:$info;">**Notes:**</mark> &#x20;

* Replace `${CII_ACCOUNT_ID}` with the Identity Intelligence account ID for Splunk 988897525199
* Replace `${UNIQUE_EXTERNAL_ID}` with the unique external ID can be any auto generated value, such as `any-autogenerated-id-value`
  {% endhint %}

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::${CII_ACCOUNT_ID}:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "ForAnyValue:StringEquals": {
          "sts:ExternalId": "${UNIQUE_EXTERNAL_ID}"
        }
      }
    }
  ]
}
```

<figure><img src="/files/1wX7F4QsTIe1xF5T5F0o" alt=""><figcaption></figcaption></figure>

&#x20;    c. Click **Next**.

&#x20;    d. Attach the (S3WritePolicy) policy (created earlier)

<figure><img src="/files/Qms2BD9CvqjfESsmhvTm" alt=""><figcaption></figcaption></figure>

&#x20;    e. Provide the role with the name CrossAccountS3WriteRole (This name is required and must not be changed)

<figure><img src="/files/bxZEFnLzh0FCGjLhnpNd" alt=""><figcaption></figcaption></figure>

&#x20;     f. Click **Create role**

4. Update the S3 Bucket Policy

   a. Go to the **Amazon S3** console and select the **splunk-cii-demo-set-up** bucket.

   b. Navigate to the **Permissions** tab > **Bucket Policy > Edit**

<figure><img src="/files/WKfZEUsOo2BJsLbM6nWp" alt=""><figcaption></figcaption></figure>

c. Paste the following JSON into the bucket policy editor:

**Notes:**

* Replace ${S3\_ACCOUNT\_ID} with your **AWS account ID**
* Replace ${ROLE\_NAME} with **CrossAccountS3WriteRole**
* Replace ${BUCKET\_NAME} with your bucket name, e.g. **splunk-cii-set-up**

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::${S3_ACCOUNT_ID}:role/${ROLE_NAME}"
      },
      "Action": [
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::${BUCKET_NAME}/*"
    }
  ]
}
```

<figure><img src="/files/dXWzQRy2SnrmqyFdfWzf" alt=""><figcaption></figcaption></figure>

&#x20;     d. Save changes

5. Create an SNS Topic

   a. Go to the **Amazon SNS** console > **Create Topic**

<figure><img src="/files/gji1VXM16MNNKxhTSMVS" alt=""><figcaption></figcaption></figure>

&#x20;     b. Provide a name: SplunkSNS

&#x20;     c. In the **Access Policy**, select **Advanced** and paste the following JSON:  \
\
&#x20;     Note:  Replace `${BUCKET_NAME}` with your bucket name, e.g. splunk-cii-set-up

```json
{
  "Version": "2008-10-17",
  "Id": "PolicyForS3Access",
  "Statement": [
    {
      "Sid": "AllowS3Publish",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "SNS:Publish",
      "Resource": "*",
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:s3:::${S3 BUCKET NAME}"
        }
      }
    }
  ]
}
```

<figure><img src="/files/m4BqvOOVZqxjXu7YzE3a" alt=""><figcaption></figcaption></figure>

&#x20;        d. Click **Create topic**

6\. Configure S3 Event Notifications for the SNS Topic

* Go to the **Amazon S3** console and select your splunk-cii-set-up bucket.
* Navigate to the **Properties** tab > **Event Notifications**

<figure><img src="/files/7NMJFTY1tauLZeputPGr" alt=""><figcaption></figcaption></figure>

* Click **Create event notification**
* Configure the event notification:
  * **Event name**: Provide any name.
  * **Prefix (optional)**: Use if you want to trigger events for specific folders.
  * **Event types**: Select **Put** and **Post**.
  * **Destination**: Select **SNS Topic** and choose SplunkSNS.

<figure><img src="/files/3Ur2KphE1PauU6diWAtE" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/wpL7J6PPjHougtzrlMlg" alt=""><figcaption></figcaption></figure>

* Save changes

7\. Create Two SQS Queues

* Create Dead-Letter Queue (DLQ):
  * Go to the **Amazon SQS** console > **Create Queue**
  * Provide the name: SplunkDLQ
  * Set **Visibility Timeout** to **300 seconds**
  * Click **Create Queue**

<figure><img src="/files/WJbzi3TSrEP0pF9bRcCX" alt=""><figcaption></figcaption></figure>

8. **Create Main Queue:**

* Go to the **Amazon SQS** console > **Create Queue**
* Provide the name: SplunkMain
* Set **Visibility Timeout** to **300 seconds**
* Under **Dead-letter queue**, select **Enable** and choose SplunkDLQ
* Click **Create Queue**

**Important**: Configure the SQS visibility timeout to prevent multiple inputs from receiving and processing messages in a queue more than once. Set your SQS visibility timeout to 5 minutes or longer. If the visibility timeout for a message is reached before the message is fully processed by the SQS-based S3 input, the message reappears in the queue and is retrieved and processed again, resulting in duplicate data)

<figure><img src="/files/uKjYeNrXz9gIfpgxXSZT" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/mKUp4pXzebhSK9wVb5MP" alt=""><figcaption></figcaption></figure>

9\. Create an SNS Subscription for SQS

* Go to the **Amazon SNS** console > **Subscriptions** > **Create Subscription**.

<figure><img src="/files/95LOXyoH7C2eqBRctsSQ" alt=""><figcaption></figcaption></figure>

* Configure the subscription:
  * **Topic ARN**: Select SplunkSNS (created earlier)
  * **Protocol**: Select **Amazon SQS**
  * **Endpoint**: Select SplunkMain

<figure><img src="/files/X265Y7Z0dGPYyQBKIa9z" alt=""><figcaption></figcaption></figure>

* Click **Create Subscription**.

10\. Generate Access Key and Secret Key

* Go to **IAM** > **Users** and select your user.
* Navigate to the **Security Credentials** tab.
* Under **Access Keys**, click **Create Access Key**.

<figure><img src="/files/YzPs8BcvfVUG7UFN2dTM" alt=""><figcaption></figcaption></figure>

* Select **Command Line Interface (CLI)** and follow the instructions.

<figure><img src="/files/TXZ8sGzLZSAI5CYT68IU" alt=""><figcaption></figcaption></figure>

* Download the .csv file containing the **Access Key ID** and **Secret Access Key**.

<figure><img src="/files/Uv3UGbYXoiDrVStBnryQ" alt=""><figcaption></figcaption></figure>

### Configure Splunk

<mark style="color:$danger;">Note:</mark> Starting September 2025, <mark style="color:$warning;">CII no longer provides the audience value when creating an API client.</mark> However, the audience field is still required in the Splunk application. Until the application is updated, please use the default audience value [`https://api.oort.io`](https://api.oort.io/) for this field. We will update this documentation once the application no longer requires an audience value.

1. Log in to Splunk.
2. Under Apps, click **Cisco Security Cloud**.
3. On the Application Setup page, click **Configure Application**.

<figure><img src="/files/nCoz84VlPdlqIsBrwWOp" alt=""><figcaption></figcaption></figure>

1. When prompted, enter the following values:

* **AWS Access Key ID**: From the .csv file.
* **AWS Secret Access Key**: From the .csv file.
* **SQS Queue URL**: Go to the **Amazon SQS** console, select SplunkMain, and copy the queue URL.
* **External ID**: Use the any-autogenerated-id-value (UNIQUE\_EXTERNAL\_ID) specified earlier.
* **S3 Bucket URL**: Enter a value in the format s3:// *bucket-name*.s3. *region-code*.amazonaws.com. You got this value in the previous section.
* **S3 Bucket Region: The** AWS region where your S3 bucket is hosted (e.g., us-east-1).

<figure><img src="/files/JJOf7JsYofByvQB2G9JP" alt=""><figcaption></figcaption></figure>

## **Troubleshooting**

**In Splunk:**

1. Navigate to **Apps** in Splunk and open the **Splunk Add-on for AWS**.
2. Go to the **Inputs** tab and verify if a new input named test\_splunk\_demo has been created.

<figure><img src="/files/37Jz5gT775Nv2hXeq4f8" alt=""><figcaption></figcaption></figure>

3. Select the **Account** tab and find the entry for test\_splunk\_demo.

   a. Ensure the account details are correct and match the credentials used during the integration setup.

<figure><img src="/files/jSMrvqDei6wKjtkVKUQp" alt=""><figcaption></figcaption></figure>

**In AWS S3:**

1. **Check the S3 Bucket**:

   a. Log in to your AWS console and go to the **S3** service.

   b. Locate the bucket named splunk-cii-demo-set-up (or the bucket name used during the integration setup).
2. **Verify Data in the S3 Bucket**:

   a. Check if data appears in the bucket after clicking **Test Connectivity** in Identity Intelligence.

<figure><img src="/files/ebOUbIW6lTeB3BGsRFTP" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.oort.io/integrations/splunk/aws-s3-splunk-cii-integration.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
