> For the complete documentation index, see [llms.txt](https://docs.oort.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.oort.io/integrations/splunk/aws-s3-splunk-cii-integration.md).

# 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 for large organizations. 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**

### Generate External ID

1. In CII, create/select an S3 notification target.
2. On Initial Setup, click Generate External ID.
3. Copy/save that value.
4. Use a fresh generated ID per S3 notification target

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

### 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.

   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>

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>

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>

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>

b. Select **Custom trust policy** and paste the following JSON:

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

* Replace `${CII_ACCOUNT_ID}` with the Identity Intelligence account ID for Splunk 988897525199
* Replace `${UNIQUE_EXTERNAL_ID}` with the External ID generated in Cisco Identity Intelligence for this S3 notification target
  {% 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/EWWmKjkX49Cfn5j1bkhy" alt=""><figcaption></figcaption></figure>

c. Click **Next**.

d. Attach the (S3WritePolicy) policy (created earlier)

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

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>

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/Oq6vvlPWqHIbrVgpICH5" alt=""><figcaption></figcaption></figure>

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>

b. Provide a name: SplunkSNS

c. In the **Access Policy**, select **Advanced** and paste the following JSON:\
\
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>

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/B4fgGaGXxl112AT6Bz91" 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 same CII-generated External ID that you added to the AWS IAM role trust policy.
* **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>
