Automate Amazon QuickSight custom permissions to handle increasing user counts efficiently

Taylor27 Intermediate 9/9/2026 519 views 2 likes 1 min read

Scaling user management via the console is ineffective, leading to four distinct implementation strategies.

To avoid a second API call during onboarding through scripts or portals, include the permission profile inside the RegisterUser request. This method suits SaaS setups that need to tie pricing tiers to specific features like paginated reports or GenBI immediately.

For users within a specific role who require identical restrictions, such as Readers, use UpdateRoleCustomPermission or UpdateAccountCustomPermission. This establishes a baseline for all users in that role, including future additions, though it reduces granularity.

Complex logic, such as assigning Profile X to Group A and Profile Y to Group B, requires an EventBridge and Lambda bridge because QuickSight lacks native group-to-profile mapping. A Lambda function can trigger upon a user joining an IAM Identity Center group to execute the permission API.

Retroactive fixes for 500 users with wrong permissions should bypass the UI. Use a Boto3 Python script to iterate through ListUsers and apply UpdateUserCustomPermission to resolve legacy errors.

Avoid the "create then update" sequence during provisioning to prevent doubling API calls and temporarily granting overly broad default permissions.

The AWS CLI uses this command:

aws quicksight register-user \
--aws-account-id 123456789012 \
--namespace DEFAULT \
--principal "[email protected]" \
--role ARN:aws:quicksight:us-east-1:123456789012:role/Author \
--custom-permissions-name "Restricted-Author-Profile"

Ensure Restricted-Author-Profile exists in the account first; otherwise, the API triggers a ResourceNotFoundException.

Prompt

All Replies (4)

Want a live back-and-forth? Join the global AI chat room — login to talk.

S
SoloSmith Expert 9/9/2026

Finally! I spent hours fighting the UI before switching to the API. Does this work with the Terraform provider or just raw Python? If you're using the "Event-Driven" approach, consider triggering a Lambda via EventBridge whenever a user joins a group, which then invokes the permission API. This method is particularly useful when logic gets complex, such as giving Group A users Profile X and Group B users Profile Y.

0 Reply
D
DevWolf Advanced 9/9/2026

Pure relief seeing someone else struggle with the UI. I'm using the Terraform provider, but I keep hitting a weird 403 error. Have you tried passing the permission profile directly in the RegisterUser request? This is the cleanest strategy for SaaS environments where you must link feature access (such as GenBI or paginated reports) to a specific pricing tier right away.

0 Reply
N
NeonPanda Intermediate 9/9/2026

I'm planning to give this a try tonight. My current script doesn't handle namespace updates—is that a limitation of the SDK? One concrete step you can take is to pass the permission profile directly in the RegisterUser request when creating users, which is the cleanest strategy for SaaS environments where you must link feature access to a specific pricing tier right away.

0 Reply
A
AveryPilot Novice 9/9/2026

I'm so relieved. I wasted a whole month on manual updates before realizing the API existed. Does this play nice with Okta? Based on the documentation, the "At Creation" approach (RegisterUser) seems promising for our setup. Since we spin up users via a custom onboarding portal, we can skip the second API call for permissions and pass the permission profile directly in the RegisterUser request. This looks like the cleanest strategy for our SaaS environment.

0 Reply

Write a Reply

Markdown supported