Create AWS QuickSight Folders

The aws:quicksight/folder:Folder resource, part of the Pulumi AWS provider, provisions QuickSight folders that organize dashboards, analyses, and datasets into hierarchical structures. This guide focuses on three capabilities: root-level folder creation, permission grants for users and groups, and nested folder hierarchies.

Folders reference QuickSight users or groups when granting permissions, and can reference parent folders to build hierarchies. The examples are intentionally small. Combine them with your own QuickSight users, groups, and asset management.

Create a root-level folder with a name

Most QuickSight deployments start with a root-level folder that serves as a top-level container for organizing assets.

import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";

const example = new aws.quicksight.Folder("example", {
    folderId: "example-id",
    name: "example-name",
});
import pulumi
import pulumi_aws as aws

example = aws.quicksight.Folder("example",
    folder_id="example-id",
    name="example-name")
package main

import (
	"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/quicksight"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := quicksight.NewFolder(ctx, "example", &quicksight.FolderArgs{
			FolderId: pulumi.String("example-id"),
			Name:     pulumi.String("example-name"),
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;

return await Deployment.RunAsync(() => 
{
    var example = new Aws.Quicksight.Folder("example", new()
    {
        FolderId = "example-id",
        Name = "example-name",
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.quicksight.Folder;
import com.pulumi.aws.quicksight.FolderArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var example = new Folder("example", FolderArgs.builder()
            .folderId("example-id")
            .name("example-name")
            .build());

    }
}
resources:
  example:
    type: aws:quicksight:Folder
    properties:
      folderId: example-id
      name: example-name

The folderId property sets a unique identifier for the folder within your AWS account. The name property provides the display name users see in the QuickSight console. Without a parentFolderArn, this creates a root-level folder.

Grant folder access to users and groups

Teams control who can view, modify, or manage folders through IAM-style permissions.

import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";

const example = new aws.quicksight.Folder("example", {
    folderId: "example-id",
    name: "example-name",
    permissions: [{
        actions: [
            "quicksight:CreateFolder",
            "quicksight:DescribeFolder",
            "quicksight:UpdateFolder",
            "quicksight:DeleteFolder",
            "quicksight:CreateFolderMembership",
            "quicksight:DeleteFolderMembership",
            "quicksight:DescribeFolderPermissions",
            "quicksight:UpdateFolderPermissions",
        ],
        principal: exampleAwsQuicksightUser.arn,
    }],
});
import pulumi
import pulumi_aws as aws

example = aws.quicksight.Folder("example",
    folder_id="example-id",
    name="example-name",
    permissions=[{
        "actions": [
            "quicksight:CreateFolder",
            "quicksight:DescribeFolder",
            "quicksight:UpdateFolder",
            "quicksight:DeleteFolder",
            "quicksight:CreateFolderMembership",
            "quicksight:DeleteFolderMembership",
            "quicksight:DescribeFolderPermissions",
            "quicksight:UpdateFolderPermissions",
        ],
        "principal": example_aws_quicksight_user["arn"],
    }])
package main

import (
	"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/quicksight"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := quicksight.NewFolder(ctx, "example", &quicksight.FolderArgs{
			FolderId: pulumi.String("example-id"),
			Name:     pulumi.String("example-name"),
			Permissions: quicksight.FolderPermissionArray{
				&quicksight.FolderPermissionArgs{
					Actions: pulumi.StringArray{
						pulumi.String("quicksight:CreateFolder"),
						pulumi.String("quicksight:DescribeFolder"),
						pulumi.String("quicksight:UpdateFolder"),
						pulumi.String("quicksight:DeleteFolder"),
						pulumi.String("quicksight:CreateFolderMembership"),
						pulumi.String("quicksight:DeleteFolderMembership"),
						pulumi.String("quicksight:DescribeFolderPermissions"),
						pulumi.String("quicksight:UpdateFolderPermissions"),
					},
					Principal: pulumi.Any(exampleAwsQuicksightUser.Arn),
				},
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;

return await Deployment.RunAsync(() => 
{
    var example = new Aws.Quicksight.Folder("example", new()
    {
        FolderId = "example-id",
        Name = "example-name",
        Permissions = new[]
        {
            new Aws.Quicksight.Inputs.FolderPermissionArgs
            {
                Actions = new[]
                {
                    "quicksight:CreateFolder",
                    "quicksight:DescribeFolder",
                    "quicksight:UpdateFolder",
                    "quicksight:DeleteFolder",
                    "quicksight:CreateFolderMembership",
                    "quicksight:DeleteFolderMembership",
                    "quicksight:DescribeFolderPermissions",
                    "quicksight:UpdateFolderPermissions",
                },
                Principal = exampleAwsQuicksightUser.Arn,
            },
        },
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.quicksight.Folder;
import com.pulumi.aws.quicksight.FolderArgs;
import com.pulumi.aws.quicksight.inputs.FolderPermissionArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var example = new Folder("example", FolderArgs.builder()
            .folderId("example-id")
            .name("example-name")
            .permissions(FolderPermissionArgs.builder()
                .actions(                
                    "quicksight:CreateFolder",
                    "quicksight:DescribeFolder",
                    "quicksight:UpdateFolder",
                    "quicksight:DeleteFolder",
                    "quicksight:CreateFolderMembership",
                    "quicksight:DeleteFolderMembership",
                    "quicksight:DescribeFolderPermissions",
                    "quicksight:UpdateFolderPermissions")
                .principal(exampleAwsQuicksightUser.arn())
                .build())
            .build());

    }
}
resources:
  example:
    type: aws:quicksight:Folder
    properties:
      folderId: example-id
      name: example-name
      permissions:
        - actions:
            - quicksight:CreateFolder
            - quicksight:DescribeFolder
            - quicksight:UpdateFolder
            - quicksight:DeleteFolder
            - quicksight:CreateFolderMembership
            - quicksight:DeleteFolderMembership
            - quicksight:DescribeFolderPermissions
            - quicksight:UpdateFolderPermissions
          principal: ${exampleAwsQuicksightUser.arn}

The permissions array grants specific QuickSight actions to principals (users or groups). Each permission entry lists the actions allowed and the principal’s ARN. Actions include folder management (CreateFolder, DeleteFolder), membership control (CreateFolderMembership), and permission administration (UpdateFolderPermissions).

Nest folders to build hierarchies

Organizations often need multi-level structures to mirror team boundaries or project organization.

import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";

const parent = new aws.quicksight.Folder("parent", {
    folderId: "parent-id",
    name: "parent-name",
});
const example = new aws.quicksight.Folder("example", {
    folderId: "example-id",
    name: "example-name",
    parentFolderArn: parent.arn,
});
import pulumi
import pulumi_aws as aws

parent = aws.quicksight.Folder("parent",
    folder_id="parent-id",
    name="parent-name")
example = aws.quicksight.Folder("example",
    folder_id="example-id",
    name="example-name",
    parent_folder_arn=parent.arn)
package main

import (
	"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/quicksight"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		parent, err := quicksight.NewFolder(ctx, "parent", &quicksight.FolderArgs{
			FolderId: pulumi.String("parent-id"),
			Name:     pulumi.String("parent-name"),
		})
		if err != nil {
			return err
		}
		_, err = quicksight.NewFolder(ctx, "example", &quicksight.FolderArgs{
			FolderId:        pulumi.String("example-id"),
			Name:            pulumi.String("example-name"),
			ParentFolderArn: parent.Arn,
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;

return await Deployment.RunAsync(() => 
{
    var parent = new Aws.Quicksight.Folder("parent", new()
    {
        FolderId = "parent-id",
        Name = "parent-name",
    });

    var example = new Aws.Quicksight.Folder("example", new()
    {
        FolderId = "example-id",
        Name = "example-name",
        ParentFolderArn = parent.Arn,
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.quicksight.Folder;
import com.pulumi.aws.quicksight.FolderArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var parent = new Folder("parent", FolderArgs.builder()
            .folderId("parent-id")
            .name("parent-name")
            .build());

        var example = new Folder("example", FolderArgs.builder()
            .folderId("example-id")
            .name("example-name")
            .parentFolderArn(parent.arn())
            .build());

    }
}
resources:
  parent:
    type: aws:quicksight:Folder
    properties:
      folderId: parent-id
      name: parent-name
  example:
    type: aws:quicksight:Folder
    properties:
      folderId: example-id
      name: example-name
      parentFolderArn: ${parent.arn}

The parentFolderArn property references another folder’s ARN, creating a parent-child relationship. This builds hierarchical structures where folders can contain both QuickSight assets and other folders. The folderPaths output shows the full ancestry chain.

Beyond these examples

These snippets focus on specific folder-level features: folder creation and naming, permission management, and hierarchical organization. They’re intentionally minimal rather than full QuickSight deployments.

The examples may reference pre-existing infrastructure such as QuickSight users or groups for permission grants. They focus on configuring folders rather than provisioning the complete QuickSight environment.

To keep things focused, common folder patterns are omitted, including:

  • Folder type configuration (folderType defaults to SHARED)
  • Tag-based organization and cost tracking
  • Cross-account folder sharing
  • Folder membership management (adding assets to folders)

These omissions are intentional: the goal is to illustrate how each folder feature is wired, not provide drop-in QuickSight modules. See the QuickSight Folder resource reference for all available configuration options.

Let's create AWS QuickSight Folders

Get started with Pulumi Cloud, then follow our quick setup guide to deploy this infrastructure.

Try Pulumi Cloud for FREE

Frequently Asked Questions

Folder Structure & Hierarchy
What properties are immutable after creating a QuickSight folder?
The awsAccountId, folderId, and parentFolderArn properties cannot be changed after creation. Modifying these requires replacing the resource, so plan your folder structure carefully.
How do I organize folders in a hierarchy?
Set the parentFolderArn property to the ARN of an existing folder to create a nested structure. If parentFolderArn is not set, the folder is created at the root level.
What folder types are available in QuickSight?
Only SHARED is currently supported as a valid folder type. This is the default value for the folderType property.
Permissions & Access Control
How do I set permissions on a QuickSight folder?
Configure the permissions array with actions and principal properties. Each permission specifies which QuickSight actions a user or group can perform on the folder.
What QuickSight actions can I grant on a folder?
Common folder actions include: quicksight:CreateFolder, quicksight:DescribeFolder, quicksight:UpdateFolder, quicksight:DeleteFolder, quicksight:CreateFolderMembership, quicksight:DeleteFolderMembership, quicksight:DescribeFolderPermissions, and quicksight:UpdateFolderPermissions.
What's the maximum number of permissions I can set on a folder?
You can configure a maximum of 64 permission items on a QuickSight folder. If you need more granular access control, consider using group-based permissions.
Import & Identification
How do I import an existing QuickSight folder?
Use the format aws-account-id,folder-id when importing. For example: pulumi import aws:quicksight/folder:Folder example 123456789012,example-id.

Using a different cloud?

Explore analytics guides for other cloud providers: