Access roles provide varying levels of permissions to AWS accounts, enabling Quiverstone to access and manage your AWS infrastructure. This reference provides comprehensive details about all access role templates, deployment methods, security considerations, and troubleshooting guidance.Documentation Index
Fetch the complete documentation index at: https://docs.quiverstone.io/llms.txt
Use this file to discover all available pages before exploring further.
Overview
Quiverstone access roles use AWS IAM roles with trust policies that allow Quiverstone to assume them. These roles can be configured with different permission levels ranging from read-only to full administrative access. The role catalog provides six CloudFormation templates covering three access methods and two deployment types.Access Role Types
Browser Access Roles: Enable browser-based console access through role switching from an AWS account you’re logged into. These roles do not support External ID authentication. Direct Access Roles: Allow Quiverstone to directly assume roles in your accounts using federated access. These roles support External ID for enhanced security. Chained Access Roles: Route role assumptions through an intermediate account you control, providing an additional security layer. These roles require both an intermediate role and destination role.Key Features
- Flexible Permissions: Choose from eight AWS managed policies (ReadOnly, Administrator, PowerUser, ViewOnly, SecurityAudit, SystemAdministrator, SupportUser, Billing)
- Multiple Deployment Methods: Deploy to individual accounts or across organizations using StackSets
- Security Controls: Support for External ID, specific principal trust, and role chaining
- Organization Inventory: All access roles include AWS Organizations read permissions for account discovery
Access Role Templates
Browser Access Role
Template:browser-access-role.yaml
Purpose: Provides browser-based role switching from a trusted AWS account you’re currently logged into.
Deploy To: Individual account home region (e.g., us-east-1)
Launch Template:
Parameters:
-
pRoleName (String, Default:
QuiverstoneBrowserSession)- Name for the browser-accessible role
- Must be unique within the account
- Security Best Practice: Change the default role name to a custom value unique to your organization
-
pTrustedAccountId (String, Required)
- AWS Account ID you have access to that can assume this role via browser session
- Must be a 12-digit account number
- Important: Do NOT use any Quiverstone account IDs
-
Permission Flags (yes/no for each):
- pIsReadOnlyAccess (Default: yes): View resources across all AWS services
- pIsAdministratorAccess (Default: no): Full access to all AWS services and resources
- pIsPowerUserAccess (Default: no): Full access except IAM user/group management
- pIsViewOnlyAccess (Default: no): View resources and basic metadata
- pIsSecurityAudit (Default: no): View configuration data and logs
- pIsSystemAdministrator (Default: no): Full access for application operations
- pIsSupportUser (Default: no): Troubleshoot issues and manage AWS support cases
- pIsBillingAccess (Default: no): View and manage billing and cost information
- oRoleArn: ARN of the created browser access role
- oRoleName: Name of the created role
- oTrustedAccountId: Account ID that can assume this role
- Does NOT support External ID authentication
- Trusts all principals in the specified trusted account
- Best for scenarios where you control both accounts
- Consider using direct or chained access for production environments requiring External ID
Direct Access Role
Template:direct-access-role.yaml
Purpose: Provides direct federated access from Quiverstone to your AWS accounts.
Deploy To: Individual account home region (e.g., us-east-1)
Launch Template:
Parameters:
-
pRoleName (String, Default:
QuiverstoneDirectAccess)- Name for the federated access role
- Must be unique within the account
- Security Best Practice: Change the default role name to a custom value unique to your organization
-
pQuiverstoneProductionAccountId (String, Default:
684035162433)- Quiverstone production account ID
- DO NOT MODIFY this value
-
pExternalId (String, Required for Production, Max: 1224 characters)
- Security token for role assumption
- Required for production environments — prevents confused deputy attacks
- Generate a unique random string (minimum 32 characters)
- Store securely — required when configuring Quiverstone
- Never share or commit External IDs to version control
-
Permission Flags (yes/no for each):
- Same permission options as browser access role (see above)
- oRoleArn: ARN of the created direct access role
- oRoleExternalId: External ID for role assumption (if configured)
- oRoleName: Name of the created role
- Supports External ID for enhanced security (strongly recommended)
- Trusts only the Quiverstone production account
- Recommended for most production deployments
- External ID prevents confused deputy attacks
Chained Access Role
Template:chained-access-role.yaml
Purpose: Provides access through role chaining via an intermediate account you control.
Deploy To: Target account home region (e.g., us-east-1)
Prerequisites: Intermediate role must be deployed first (see Intermediate Roles Reference)
Launch Template:
Parameters:
-
pChainedAccessRoleName (String, Default:
QuiverstoneChainedAccess, Required)- Name for the destination account access role
- Must be unique within the account
- Security Best Practice: Change the default role name to a custom value unique to your organization
-
pExternalId (String, Required for Production, Max: 1224 characters)
- External ID for role assumption
- Can be different from intermediate role External ID
- Required for production - use a different value than the intermediate role External ID
- Generate a unique random string (minimum 32 characters)
- Never share or commit External IDs to version control
-
pIntermediateAccountId (String, Required)
- AWS Account ID that serves as the intermediate hop
- Must be a 12-digit account number
- This is an account you own and have access to
-
pTrustPrincipals (String, Default:
All)- Controls which principals in intermediate account can assume this role
- Options:
All: Trust all principals in the intermediate accountNamed: Trust only the specific role named in pIntermediateRoleName
- Recommended: Use
Namedfor enhanced security
-
pIntermediateRoleName (String, Default:
QuiverstoneTrustedIntermediate)- Name of the role in the intermediate account
- Required if pTrustPrincipals is set to
Named - Populate for reference even if trusting entire account
- Update this if you changed the intermediate role name
-
pIntermediateRoleExternalId (String, Optional, Max: 1224 characters)
- External ID for intermediate role assumption
- Reference only - used when configuring Quiverstone
- Should match the External ID configured on the intermediate role
-
Permission Flags (yes/no for each):
- Same permission options as browser access role (see above)
- oTargetRoleArn: ARN of the destination account access role
- oTargetRoleExternalId: External ID for target role assumption (if configured)
- oIntermediateRoleArn: ARN of the intermediate role (if name provided)
- oIntermediateRoleArnExcluded: Notice if intermediate role name not provided
- oIntermediateRoleExternalId: External ID for intermediate role (if configured)
- oTrustAllPrincipals: Notice if trusting all principals in intermediate account
- Requires intermediate role to be deployed first
- Provides additional security layer through role chaining
- Use
Namedtrust for maximum security - Both intermediate and destination roles can have separate External IDs
- Best for highly regulated environments or multi-organization scenarios
Browser Access Role StackSet
Template:browser-access-role-stackset.yaml
Purpose: Deploys browser-accessible roles across all organization accounts using CloudFormation StackSets.
Deploy To: Management or Delegated CloudFormation StackSet Account home region (e.g., us-east-1)
Launch Template:
Additional StackSet Parameters:
-
pDeploymentOUs (CommaDelimitedList, Required)
- Organization Unit IDs to deploy to (comma-separated)
- Use root OU ID to deploy to all accounts
- Example:
ou-xxxx-yyyyyyyy,ou-xxxx-zzzzzzzz
-
pDeploymentRegion (String, Default:
us-east-1)- AWS Region to deploy the roles
- Allowed values: us-east-1, us-east-2, us-west-1, us-west-2, eu-west-1, eu-central-1, ap-southeast-1, ap-southeast-2, ap-northeast-1
- All parameters from browser-access-role.yaml (see above)
- Permission Model: SERVICE_MANAGED (uses AWS Organizations integration)
- Auto Deployment: Enabled (automatically deploys to new accounts)
- Retain Stacks on Account Removal: Disabled (cleans up when accounts leave OUs)
- Concurrent Deployment: 100% (deploys to all accounts simultaneously)
- Failure Tolerance: 100% (continues deployment even if some accounts fail)
- oDeploymentOUs: List of OUs where roles are deployed
- oDeploymentRegion: Region where roles are deployed
Direct Access Role StackSet
Template:direct-access-role-stackset.yaml
Purpose: Deploys direct access roles across all organization accounts using CloudFormation StackSets.
Deploy To: Management or Delegated CloudFormation StackSet Account home region (e.g., us-east-1)
Launch Template:
Additional StackSet Parameters:
-
pDeploymentOUs (CommaDelimitedList, Required)
- Organization Unit IDs to deploy to (comma-separated)
- Use root OU ID to deploy to all accounts
-
pDeploymentRegion (String, Default:
us-east-1)- AWS Region to deploy the roles
- Same allowed values as browser access StackSet
- All parameters from direct-access-role.yaml (see above)
- oDeploymentOUs: List of OUs where roles are deployed
- oDeploymentRegion: Region where roles are deployed
Chained Access Role StackSet
Template:chained-access-role-stackset.yaml
Purpose: Deploys chained access roles across all organization accounts using CloudFormation StackSets.
Deploy To: Management Account home region (e.g., us-east-1)
Prerequisites: Intermediate role must be deployed first
Launch Template:
Additional StackSet Parameters:
-
pDeploymentOUs (CommaDelimitedList, Required)
- Organization Unit IDs to deploy to (comma-separated)
- Use root OU ID to deploy to all accounts
-
pDeploymentRegion (String, Default:
us-east-1)- AWS Region to deploy the roles
- Same allowed values as other StackSets
- All parameters from chained-access-role.yaml (see above)
- oDeploymentOUs: List of OUs where roles are deployed
- oDeploymentRegion: Region where roles are deployed
Access Method Comparison
Browser-Based Access
How It Works: Uses AWS console role switching from an AWS account you’re currently logged into. When you’re logged into your trusted account, you can switch roles to access other accounts through the browser. Use Cases:- Interactive console operations requiring browser-based workflows
- Development and testing environments
- Scenarios where you’re already logged into an AWS account
- Quick access for troubleshooting and investigation
- Teams that prefer console-based workflows
- Simple setup with minimal configuration
- Familiar AWS console experience
- No additional authentication beyond your existing AWS login
- Easy role switching in the browser
- Good for ad-hoc access patterns
- Does NOT support External ID authentication
- Requires you to be logged into a trusted AWS account first
- Less suitable for automated or programmatic access
- Trusts all principals in the trusted account (broader trust scope)
- Not recommended for production environments requiring strict security controls
- Trust policy allows any principal in the trusted account to assume the role
- No External ID protection against confused deputy attacks
- Ensure the trusted account has appropriate access controls
- Consider using direct or chained access for production workloads
- Best suited for environments where you control both accounts
- You need interactive console access
- You’re already logged into an AWS account
- You’re working in development/test environments
- External ID is not a security requirement
- You control both the trusted and target accounts
Direct Access
How It Works: Quiverstone directly assumes IAM roles in your accounts using federated access with STS AssumeRole. The trust policy allows the Quiverstone production account to assume the role. Use Cases:- Standard production deployments
- Automated account access and management
- Organizations with straightforward security requirements
- Single AWS organization scenarios
- Most common deployment method for Quiverstone
- Simple architecture with direct trust relationship
- Supports External ID for enhanced security
- Suitable for both interactive and programmatic access
- Lower latency than chained access (one hop instead of two)
- Easier to troubleshoot than chained access
- Recommended for most production deployments
- Direct trust to Quiverstone production account
- No intermediate security layer
- May not meet requirements for highly regulated environments
- Cannot route through your own security controls
- External ID strongly recommended to prevent confused deputy attacks
- Trust policy specifically allows only Quiverstone production account
- External ID acts as a shared secret between you and Quiverstone
- Generate unique External IDs for each account or role
- Store External IDs securely (password manager, secrets manager)
- Rotate External IDs periodically according to your security policies
- You need standard production access
- External ID security is sufficient for your requirements
- You want the simplest production-ready deployment
- You don’t require an intermediate security layer
- You’re deploying in a single AWS organization
Chained Access
How It Works: Role assumptions are routed through an intermediate account you control. Quiverstone first assumes a role in your intermediate account, then uses that role to assume the destination role in the target account. This creates a two-hop chain: Quiverstone → Intermediate Account → Target Account. Use Cases:- Highly regulated environments requiring additional security controls
- Organizations with strict security policies
- Multi-organization deployments
- Scenarios requiring centralized access control
- Environments where direct trust to external accounts is prohibited
- Organizations wanting to audit all role assumptions through a central point
- Additional security layer through your controlled intermediate account
- Centralized access control and auditing
- Can implement custom security controls in intermediate account
- Supports separate External IDs for each hop
- Allows you to revoke Quiverstone access by modifying only the intermediate role
- Meets requirements for environments prohibiting direct external trust
- Can use specific role trust instead of account-level trust
- More complex setup requiring two role deployments
- Higher latency due to two-hop role assumption
- More components to manage and troubleshoot
- Requires maintaining intermediate role in addition to destination roles
- Slightly higher AWS API call costs (two AssumeRole calls per access)
- Intermediate role should use External ID for Quiverstone trust
- Destination roles can use External ID for intermediate account trust
- Use
Namedtrust (specific role) instead ofAll(account-level) for maximum security - Intermediate account becomes a critical security component - protect it accordingly
- Monitor intermediate role usage through CloudTrail
- Consider implementing additional controls in intermediate account (IP restrictions, time-based access, etc.)
- Both roles can have separate External IDs for defense in depth
- Your security policies require an intermediate security layer
- You need centralized access control and auditing
- You’re in a highly regulated environment
- You want to implement custom security controls
- You’re managing multiple AWS organizations
- Direct trust to external accounts is prohibited by policy
- You want the ability to quickly revoke access by modifying only one role
Access Method Decision Matrix
| Criteria | Browser Access | Direct Access | Chained Access |
|---|---|---|---|
| Setup Complexity | Simple | Simple | Complex |
| External ID Support | No | Yes | Yes (both hops) |
| Production Ready | No | Yes | Yes |
| Security Level | Basic | Standard | Enhanced |
| Latency | N/A (browser) | Low | Medium |
| Audit Centralization | No | No | Yes |
| Intermediate Control | No | No | Yes |
| Best For | Dev/Test | Most Production | Highly Regulated |
| Troubleshooting | Easy | Easy | Moderate |
| Maintenance | Low | Low | Medium |
Deployment Type Comparison
Individual Account Deployment
How It Works: Deploy CloudFormation templates directly to individual AWS accounts one at a time. Each deployment creates a stack in a single account. Use Cases:- Small number of accounts (1-10)
- Accounts not in an AWS Organization
- Different configurations needed per account
- Testing and validation before organization-wide deployment
- Accounts requiring unique permission sets
- Standalone accounts or accounts in different organizations
- Log into the target AWS account
- Launch the CloudFormation template
- Configure parameters specific to that account
- Create the stack
- Copy outputs for Quiverstone configuration
- Repeat for each account
- Simple and straightforward process
- Full control over each deployment
- Easy to customize per account
- No AWS Organizations requirement
- Can deploy to accounts in different organizations
- Immediate feedback on deployment success/failure
- Easy to test and validate before wider deployment
- Manual process for each account
- Time-consuming for large numbers of accounts
- Potential for configuration drift between accounts
- No automatic deployment to new accounts
- Requires access to each individual account
- More operational overhead to maintain
- You have fewer than 10 accounts
- Accounts are not in an AWS Organization
- Each account needs different configurations
- You’re testing before organization-wide deployment
- You need maximum control over each deployment
- Accounts are in different organizations
StackSet Deployment
How It Works: Deploy CloudFormation StackSets from your management account (or delegated administrator account) to automatically deploy roles across multiple accounts in your AWS Organization. StackSets use AWS Organizations integration to deploy to specified Organizational Units (OUs). Use Cases:- Large number of accounts (10+)
- Organization-wide standardized deployments
- Automatic deployment to new accounts
- Consistent configuration across all accounts
- Centralized management and updates
- Organizations with mature AWS Organizations structure
- Log into management account (or delegated admin account)
- Launch the StackSet template
- Specify target OUs (or root OU for all accounts)
- Configure parameters (applied to all accounts)
- StackSet automatically deploys to all accounts in specified OUs
- New accounts added to OUs automatically receive the role
- Deploy to hundreds of accounts simultaneously
- Automatic deployment to new accounts (auto-deployment enabled)
- Consistent configuration across all accounts
- Centralized management from management account
- Easy updates across all accounts
- Automatic cleanup when accounts leave OUs
- Parallel deployment for faster completion
- Single point of configuration
- Requires AWS Organizations
- Must be deployed from management or delegated admin account
- Same configuration applied to all accounts in target OUs
- More complex troubleshooting (failures in individual accounts)
- Requires SERVICE_MANAGED permission model
- Cannot customize per-account without multiple StackSets
- Initial setup more complex than individual deployment
- Permission Model: SERVICE_MANAGED (uses AWS Organizations integration)
- Auto Deployment: Enabled by default
- Automatically deploys to new accounts added to target OUs
- Automatically removes stacks when accounts leave OUs
- Concurrent Deployment: 100% (deploys to all accounts simultaneously)
- Failure Tolerance: 100% (continues even if some accounts fail)
- Region Concurrency: PARALLEL (deploys to all regions simultaneously if multi-region)
- You have 10 or more accounts
- Accounts are in an AWS Organization
- You want consistent configuration across accounts
- You need automatic deployment to new accounts
- You want centralized management and updates
- You have a well-organized OU structure
- You want to minimize operational overhead
Deployment Type Decision Matrix
| Criteria | Individual Account | StackSet |
|---|---|---|
| Account Count | 1-10 | 10+ |
| AWS Organizations Required | No | Yes |
| Deployment Speed | Slow (manual) | Fast (parallel) |
| Configuration Flexibility | High (per account) | Low (per StackSet) |
| Auto-Deploy to New Accounts | No | Yes |
| Maintenance Overhead | High | Low |
| Troubleshooting | Easy | Moderate |
| Consistency | Manual | Automatic |
| Best For | Small deployments, testing | Large organizations |
| Update Process | Manual per account | Centralized update |
Hybrid Approach
Many organizations use a combination of both deployment types: Common Hybrid Patterns:-
StackSet for Standard Accounts + Individual for Special Cases
- Use StackSet for most accounts with standard configuration
- Use individual deployment for accounts needing custom permissions or configurations
-
Individual for Testing + StackSet for Production
- Test and validate with individual deployments in dev/test accounts
- Roll out to production using StackSets once validated
-
Multiple StackSets for Different OUs
- Deploy different StackSets to different OUs with varying configurations
- Example: Read-only for development OU, Administrator for production OU
-
StackSet for Organization + Individual for External Accounts
- Use StackSet for accounts in your organization
- Use individual deployment for accounts in partner organizations or standalone accounts
Configuration Guidance
Permission Levels
All access role templates support eight AWS managed policies that can be enabled individually or in combination. Each permission level is controlled by a yes/no parameter.ReadOnlyAccess (pIsReadOnlyAccess)
AWS Managed Policy:arn:aws:iam::aws:policy/ReadOnlyAccess
Description: Grants permissions to view resources and basic metadata across all AWS services.
Use Cases:
- Account discovery and inventory
- Compliance auditing and reporting
- Cost analysis and optimization
- Security posture assessment
- Resource monitoring and alerting
- Read-only access for support teams
- List and describe operations for all AWS services
- Read configuration data
- View logs and metrics
- Access billing and cost information (read-only)
- Creating, modifying, or deleting resources
- Changing configurations
- Managing IAM users or policies
- Performing any write operations
AdministratorAccess (pIsAdministratorAccess)
AWS Managed Policy:arn:aws:iam::aws:policy/AdministratorAccess
Description: Provides full access to AWS services and resources.
Use Cases:
- Full account management
- Infrastructure deployment and management
- Emergency access for incident response
- Complete administrative control
- All actions on all AWS services
- Full IAM management
- Billing and cost management
- Account settings modification
- Nothing - this is full administrative access
PowerUserAccess (pIsPowerUserAccess)
AWS Managed Policy:arn:aws:iam::aws:policy/PowerUserAccess
Description: Provides full access to AWS services and resources, but does not allow management of users and groups.
Use Cases:
- Application deployment and management
- Infrastructure operations
- Development and testing
- Most operational tasks
- Full access to most AWS services
- Create, modify, and delete resources
- Configure services and applications
- Access to billing information
- Creating or managing IAM users
- Creating or managing IAM groups
- Modifying IAM policies
- Managing organization-level settings
ViewOnlyAccess (pIsViewOnlyAccess)
AWS Managed Policy:arn:aws:iam::aws:policy/job-function/ViewOnlyAccess
Description: Grants permissions to view resources and basic metadata across all AWS services.
Use Cases:
- Similar to ReadOnlyAccess but with job function focus
- Viewing resources without modification
- Monitoring and observability
SecurityAudit (pIsSecurityAudit)
AWS Managed Policy:arn:aws:iam::aws:policy/SecurityAudit
Description: Grants permissions to view configuration data for many AWS services and to review their logs.
Use Cases:
- Security compliance auditing
- Security posture assessment
- Configuration review
- Log analysis for security events
- Read access to security-related configurations
- Access to CloudTrail logs
- Access to Config data
- Security group and network ACL inspection
- IAM policy and role inspection
- Modifying security configurations
- Creating or deleting resources
- Changing IAM policies
SystemAdministrator (pIsSystemAdministrator)
AWS Managed Policy:arn:aws:iam::aws:policy/job-function/SystemAdministrator
Description: Grants full access permissions necessary for resources required for application operations.
Use Cases:
- System administration tasks
- Application infrastructure management
- Operational maintenance
- Resource provisioning
- Full access to most AWS services
- Resource creation and management
- Configuration changes
- Similar to PowerUserAccess with job function focus
- IAM user and group management
- Organization-level changes
SupportUser (pIsSupportUser)
AWS Managed Policy:arn:aws:iam::aws:policy/job-function/SupportUser
Description: Grants permissions to troubleshoot and resolve issues in an AWS account. This policy also enables the user to contact AWS support to create and manage cases.
Use Cases:
- AWS Support case management
- Troubleshooting assistance
- Support ticket creation and tracking
- Working with AWS Support teams
- Create and manage AWS Support cases
- Access to Trusted Advisor
- Access to Health Dashboard
- Limited read access for troubleshooting
- Modifying resources
- Full read access to all services
- Administrative operations
Billing (pIsBillingAccess)
AWS Managed Policy:arn:aws:iam::aws:policy/job-function/Billing
Description: Grants permissions for billing and cost management. This includes viewing account usage and viewing and downloading AWS bills.
Use Cases:
- Cost analysis and reporting
- Billing management
- Budget monitoring
- Cost optimization
- View and download bills
- Access to Cost Explorer
- Budget creation and management
- Cost and usage reports
- Payment method management
- Resource management
- Service configuration
- Non-billing operations
Combining Permission Levels
Multiple permission levels can be enabled simultaneously. The role will have the union of all enabled permissions. Common Combinations:- ReadOnlyAccess + SecurityAudit: Comprehensive read access with enhanced security visibility
- ReadOnlyAccess + Billing: Full visibility including cost information
- PowerUserAccess + Billing: Operational access with cost management
- AdministratorAccess only: Full administrative control (use sparingly)
External ID Configuration
External ID is a security feature that helps prevent the “confused deputy” problem in cross-account access.What is External ID?
External ID is a shared secret between you and Quiverstone that must be provided when assuming the role. It acts as an additional authentication factor beyond the AWS account trust.Why Use External ID?
Confused Deputy Problem: Without External ID, if an attacker knows your role ARN, they could potentially trick Quiverstone into accessing your account on their behalf. External ID prevents this by requiring knowledge of the shared secret.External ID Best Practices
Generation:- Generate a unique random string for each role or account
- Minimum length: 32 characters
- Use cryptographically secure random generation
- Include letters, numbers, and special characters
- Example tools:
openssl rand -base64 32, password managers, AWS Secrets Manager
- Store External IDs securely (password manager, secrets manager, encrypted vault)
- Treat External IDs like passwords
- Do not commit External IDs to version control
- Limit access to External IDs to authorized personnel
- Rotate External IDs periodically according to your security policies
- Coordinate rotation with Quiverstone configuration updates
- Document rotation procedures
- Consider automated rotation for large deployments
- Use unique External IDs per account (recommended)
- Or use unique External IDs per role type
- Avoid reusing External IDs across multiple accounts
- Unique IDs limit blast radius if one is compromised
- Direct access roles: Strongly recommended
- Chained access roles: Recommended for both intermediate and destination roles
- Browser access roles: Not supported
Role Naming Best Practices
Naming Conventions
Consistency: Use consistent naming across all accounts- Good:
QuiverstoneDirectAccess,QuiverstoneChainedAccess,QuiverstoneBrowserSession - Avoid:
quiverstone-role,QS-Access,access-role-1
QuiverstoneDirectAccess- clearly indicates direct accessQuiverstoneChainedAccess- clearly indicates chained accessQuiverstoneBrowserSession- clearly indicates browser access
QuiverstoneDirectAccess-ProdQuiverstoneDirectAccess-DevQuiverstoneDirectAccess-Test
QuiverstoneDirectAccess-OrgAQuiverstoneDirectAccess-Finance
Role Name Constraints
- Maximum length: 64 characters
- Allowed characters: A-Z, a-z, 0-9, plus (+), equals (=), comma (,), period (.), at (@), underscore (_), hyphen (-)
- Must be unique within the account
- Case sensitive
Default Names
The templates provide sensible defaults:- Browser access:
QuiverstoneBrowserSession - Direct access:
QuiverstoneDirectAccess - Chained access:
QuiverstoneChainedAccess - Intermediate:
QuiverstoneTrustedIntermediate
StackSet Configuration Options
When deploying via StackSets, additional configuration options are available.Deployment Targets
Organizational Units (OUs):- Specify one or more OU IDs (comma-separated)
- Use root OU ID to deploy to all accounts
- StackSet deploys to all accounts in specified OUs
- New accounts added to OUs automatically receive deployment
- Open AWS Organizations console
- Navigate to AWS accounts
- Select an OU
- Copy the OU ID (format:
ou-xxxx-yyyyyyyy)
Deployment Region
Single Region Deployment: StackSets deploy to a single region (specified in pDeploymentRegion parameter)- IAM roles are global, so single region deployment is sufficient
- Default: us-east-1
- Choose your organization’s home region
Auto-Deployment Settings
Enabled by Default: New accounts added to target OUs automatically receive the role Retain Stacks on Account Removal: Disabled by default- When an account leaves a target OU, the stack is automatically deleted
- Ensures clean removal of roles when accounts move
Concurrent Deployment
Max Concurrent Percentage: 100% (default)- Deploys to all accounts simultaneously
- Fastest deployment time
- Can be reduced if you want more controlled rollout
- Continues deployment even if some accounts fail
- Allows successful deployments to complete
- Failed accounts can be retried individually
Region Concurrency
PARALLEL (default): If deploying to multiple regions, deploys to all regions simultaneously Note: For IAM roles, single region deployment is recommended since IAM is global.Deployment Scenarios
Small Organizations (1-10 Accounts)
Scenario: Startup or small business with a handful of AWS accounts for different environments or projects. Recommended Approach: Individual account deployment with direct access Configuration:- Template:
direct-access-role.yaml - Deployment: Individual to each account
- Permissions: ReadOnlyAccess (minimum), add others as needed
- External ID: Unique per account (recommended)
- Generate unique External ID for each account
- Deploy direct-access-role.yaml to each account individually
- Configure ReadOnlyAccess and any additional permissions needed
- Copy role ARN and External ID from each deployment
- Configure each account in Quiverstone
- Simple and straightforward
- Full control over each account
- Easy to customize per account
- No AWS Organizations requirement
- Manual process for each account
- Manageable at this scale
- Consider StackSets if you plan to grow beyond 10 accounts
Medium Organizations (10-50 Accounts)
Scenario: Growing organization with multiple teams, environments, and projects across dozens of accounts. Recommended Approach: StackSet deployment with direct access Configuration:- Template:
direct-access-role-stackset.yaml - Deployment: StackSet from management account
- Permissions: ReadOnlyAccess + additional permissions per OU
- External ID: Single External ID for all accounts (or unique per OU)
- Organize accounts into OUs by environment or team
- Generate External ID(s)
- Deploy direct-access-role-stackset.yaml from management account
- Target root OU or specific OUs
- Configure permissions appropriate for each OU
- StackSet automatically deploys to all accounts
- Configure organization in Quiverstone with role ARN pattern and External ID
- Automated deployment to all accounts
- Consistent configuration
- Auto-deployment to new accounts
- Centralized management
- Requires AWS Organizations
- Same configuration per StackSet (use multiple StackSets for different configurations)
- Consider different StackSets for different OUs with varying permission needs
- Deploy one StackSet to development OU with ReadOnlyAccess
- Deploy another StackSet to production OU with PowerUserAccess
- Allows different permission levels per environment
Large Organizations (50+ Accounts)
Scenario: Enterprise organization with hundreds of accounts across multiple business units, regions, and environments. Recommended Approach: Multiple StackSets with direct access, organized by OU structure Configuration:- Template:
direct-access-role-stackset.yaml(multiple instances) - Deployment: Multiple StackSets targeting different OUs
- Permissions: Vary by OU and business unit requirements
- External ID: Unique per StackSet or per OU
- Design OU structure aligned with business units and environments
- Define permission requirements per OU
- Generate External IDs per StackSet
- Deploy multiple StackSets:
- Development OU: ReadOnlyAccess
- Staging OU: PowerUserAccess
- Production OU: ReadOnlyAccess + SecurityAudit
- Infrastructure OU: SystemAdministrator
- Configure organization in Quiverstone with role patterns
- Scales to hundreds of accounts
- Granular control per OU
- Automated deployment and updates
- Consistent within each OU
- Requires well-designed OU structure
- Multiple StackSets to manage
- Document which StackSet applies to which OU
- Consider automation for StackSet management
- Use consistent naming:
QuiverstoneDirectAccess-Dev,QuiverstoneDirectAccess-Prod - Document StackSet to OU mappings
- Implement change control for StackSet updates
- Monitor StackSet deployment status
- Use CloudFormation drift detection
Highly Regulated Environments
Scenario: Financial services, healthcare, government, or other highly regulated industries with strict security and compliance requirements. Recommended Approach: Chained access with intermediate account controls Configuration:- Templates:
trusted-intermediate-role.yaml+chained-access-role-stackset.yaml - Deployment: Intermediate role in security account, StackSet for destination roles
- Permissions: Minimal required permissions (ReadOnlyAccess + specific additions)
- External ID: Unique External IDs for both intermediate and destination roles
- Trust: Named role trust (not account-level trust)
- Designate or create a security/audit account as intermediate account
- Deploy trusted-intermediate-role.yaml to intermediate account:
- Use External ID
- Use
specific-role-any-accountscope - Specify destination role name
- Implement additional controls in intermediate account:
- CloudTrail logging
- CloudWatch alarms for role assumptions
- Optional: IP restrictions, time-based access
- Deploy chained-access-role-stackset.yaml to target accounts:
- Use External ID (can be different from intermediate)
- Use
Namedtrust (specific role, not account) - Specify intermediate role name
- Configure minimal required permissions
- Configure chained access in Quiverstone
- Additional security layer through intermediate account
- Centralized access control and auditing
- Can implement custom security controls
- Meets requirements for environments prohibiting direct external trust
- Quick revocation by modifying only intermediate role
- Enable CloudTrail in intermediate account with log file validation
- Set up CloudWatch alarms for unusual role assumption patterns
- Implement IP-based restrictions in intermediate role trust policy
- Use time-based access controls if needed
- Regular audit of intermediate role usage
- Separate External IDs for defense in depth
- Document the role chain for auditors
- Maintain audit logs for all role assumptions
- Implement least privilege permissions
- Regular access reviews
- Automated compliance checks
Multi-Organization Deployment
Scenario: Managing multiple separate AWS Organizations (e.g., acquired companies, partner organizations, separate business entities). Recommended Approach: Chained access with separate intermediate roles per organization Configuration:- Templates: Multiple
trusted-intermediate-role.yaml+chained-access-role-stackset.yamlper org - Deployment: One intermediate role per organization, StackSets within each organization
- Permissions: Vary by organization requirements
- External ID: Unique per organization
- For each organization:
- Deploy intermediate role to a designated account in that organization
- Deploy chained-access-role-stackset to target accounts in that organization
- Use unique External IDs per organization
- Configure each organization separately in Quiverstone
- Maintain separate role chains per organization
- Isolation between organizations
- Independent security controls per organization
- Flexible permission models per organization
- Clear organizational boundaries
- More complex to manage multiple intermediate roles
- Document which intermediate role serves which organization
- Consider naming conventions to identify organization
- May need separate Quiverstone configurations per organization
Development and Testing Environments
Scenario: Separate AWS accounts for development, testing, and experimentation. Recommended Approach: Individual deployment with browser access or direct access Configuration:- Template:
browser-access-role.yamlordirect-access-role.yaml - Deployment: Individual to each dev/test account
- Permissions: AdministratorAccess or PowerUserAccess (broader permissions acceptable in dev/test)
- External ID: Optional for dev/test (required for direct access)
- For browser access:
- Deploy browser-access-role.yaml
- Specify your AWS account as trusted account
- Enable broader permissions (PowerUserAccess or AdministratorAccess)
- For direct access:
- Deploy direct-access-role.yaml
- Use External ID
- Enable broader permissions
- Quick setup for development
- Broader permissions acceptable in non-production
- Easy to test and experiment
- Browser access provides familiar console experience
- Use different roles for dev/test vs production
- Don’t use browser access in production
- Consider separate External IDs for dev/test
- Document that these are non-production configurations
Disaster Recovery and Emergency Access
Scenario: Need for emergency access during incidents or disasters. Recommended Approach: Pre-deployed direct access roles with AdministratorAccess, break-glass procedures Configuration:- Template:
direct-access-role.yaml - Deployment: Individual or StackSet to all critical accounts
- Permissions: AdministratorAccess
- External ID: Highly secure, stored in break-glass procedure
- Role Name:
QuiverstoneEmergencyAccess(distinct from regular access)
- Deploy separate emergency access roles to critical accounts
- Configure with AdministratorAccess
- Use highly secure External ID
- Store External ID in secure break-glass procedure
- Document emergency access procedures
- Do NOT configure in Quiverstone for regular use
- Emergency access roles are pre-deployed but not configured in Quiverstone
- During emergency, retrieve External ID from secure storage
- Configure emergency role in Quiverstone
- Use for emergency operations
- After emergency, remove configuration from Quiverstone
- Audit all actions taken during emergency
- Rotate External ID after use
- Pre-deployed for immediate use
- Full administrative access for emergency response
- Separate from regular access roles
- Clear audit trail
- Store External ID in highly secure location (physical safe, secure vault)
- Limit knowledge of External ID to authorized personnel
- Implement strict procedures for emergency use
- Mandatory audit after each use
- Rotate External ID after emergency use
- Consider time-based access controls
Troubleshooting
Common Issues and Solutions
Issue: “Access Denied” when assuming role
Symptoms: Quiverstone cannot assume the role, returns AccessDenied error Possible Causes and Solutions:-
Incorrect Trust Policy
- Check: Verify the trust policy allows the correct principal
- Direct Access: Should trust Quiverstone production account (684035162433)
- Chained Access: Should trust intermediate account or specific intermediate role
- Browser Access: Should trust your AWS account
- Solution: Update trust policy in IAM console or redeploy with correct parameters
-
External ID Mismatch
- Check: Verify External ID in Quiverstone matches the role’s trust policy
- Solution: Update External ID in Quiverstone or redeploy role with correct External ID
- Note: External ID is case-sensitive
-
Role Name Mismatch
- Check: Verify role ARN in Quiverstone matches the actual role ARN
- Solution: Copy role ARN from CloudFormation outputs or IAM console
- Note: Role names are case-sensitive
-
Intermediate Role Issues (Chained Access)
- Check: Verify intermediate role exists and is configured correctly
- Check: Verify intermediate role can assume destination role
- Solution: Test intermediate role assumption separately
- Solution: Verify destination role trusts intermediate role
-
Permission Boundary Restrictions
- Check: Verify no permission boundaries are restricting role assumption
- Solution: Review and adjust permission boundaries if present
Issue: CloudFormation stack creation fails
Symptoms: Stack fails to create, rolls back with error Possible Causes and Solutions:-
Role Name Already Exists
- Error: “Role with name X already exists”
- Solution: Choose a different role name or delete existing role
- Check: Look in IAM console for existing roles
-
Insufficient Permissions
- Error: “User is not authorized to perform iam:CreateRole”
- Solution: Ensure you have IAM permissions to create roles
- Required Permissions: iam:CreateRole, iam:PutRolePolicy, iam:AttachRolePolicy
-
Invalid Parameter Values
- Error: “Parameter validation failed”
- Solution: Review parameter values for correct format
- Common Issues: Account IDs must be 12 digits, External ID max 1224 characters
-
StackSet Deployment Failures
- Error: “StackSet operation failed in some accounts”
- Solution: Check StackSet operations tab for per-account failures
- Solution: Review CloudFormation events in failed accounts
- Common Cause: Insufficient permissions in target accounts
Issue: Role exists but Quiverstone cannot discover accounts
Symptoms: Role assumption works but no accounts appear in Quiverstone Possible Causes and Solutions:-
Missing Organizations Permissions
- Check: Verify role has Organizations read permissions
- Solution: All access role templates include Organizations permissions by default
- Solution: If using custom role, add Organizations read permissions
-
Role Deployed to Wrong Account
- Check: For inventory, role should be in management account or delegated admin
- Solution: Deploy inventory role to correct account
- Note: Access roles can be in any account
-
Organizations Not Enabled
- Check: Verify AWS Organizations is enabled in the account
- Solution: Enable AWS Organizations if needed
Issue: StackSet not deploying to new accounts
Symptoms: New accounts added to OU don’t receive the role Possible Causes and Solutions:-
Auto-Deployment Not Enabled
- Check: Verify StackSet has auto-deployment enabled
- Solution: Update StackSet to enable auto-deployment
- Note: All templates enable auto-deployment by default
-
Account Not in Target OU
- Check: Verify new account is in an OU targeted by the StackSet
- Solution: Move account to target OU or update StackSet targets
-
StackSet Operation In Progress
- Check: Check StackSet operations tab for in-progress operations
- Solution: Wait for current operation to complete
- Note: StackSets process one operation at a time
-
Service-Managed Permissions Issue
- Check: Verify StackSet uses SERVICE_MANAGED permission model
- Solution: Ensure CloudFormation has Organizations integration enabled
- Solution: Check for service control policies blocking StackSet operations
Issue: Cannot update existing role
Symptoms: CloudFormation update fails or changes don’t apply Possible Causes and Solutions:-
Role Name Change Not Allowed
- Error: “Cannot update role name”
- Solution: Role name changes require replacement (delete and recreate)
- Workaround: Create new role with new name, update Quiverstone, delete old role
-
Managed Policy Conflicts
- Error: “Cannot attach policy”
- Solution: Check for policy attachment limits (10 managed policies per role)
- Solution: Reduce number of enabled permissions
-
Trust Policy Update Issues
- Check: Verify trust policy changes are valid
- Solution: Review trust policy syntax
- Solution: Ensure principal ARNs are correct
Issue: Chained access not working
Symptoms: Intermediate role works but cannot assume destination role Possible Causes and Solutions:-
Deployment Order
- Check: Verify intermediate role was deployed before destination role
- Solution: Deploy intermediate role first, then destination role
-
Trust Configuration Mismatch
- Check: Verify destination role trusts intermediate role
- Check: If using Named trust, verify intermediate role name matches
- Solution: Update destination role trust policy
- Solution: Redeploy with correct intermediate role name
-
External ID Mismatch
- Check: Verify both External IDs are configured correctly in Quiverstone
- Solution: Update Quiverstone configuration with correct External IDs
- Note: Intermediate and destination can have different External IDs
-
Intermediate Role Permissions
- Check: Verify intermediate role has permission to assume destination role
- Solution: Check intermediate role’s assume role scope configuration
- Solution: Ensure scope allows assuming the destination role
Validation Steps
Use these steps to validate your access role deployment:Step 1: Verify Role Exists
Step 2: Verify Trust Policy
Step 3: Verify Attached Policies
Step 4: Test Role Assumption (Direct Access)
Step 5: Verify Organizations Permissions
Step 6: Verify StackSet Deployment
Step 7: Check StackSet Operation Status
Debug Checklist
Use this checklist when troubleshooting access issues: Basic Checks:- Role exists in the correct AWS account
- Role name matches configuration in Quiverstone
- Role ARN is correct in Quiverstone
- Trust policy allows correct principal
- External ID is present in trust policy (if using External ID)
- External ID matches Quiverstone configuration
- External ID is case-sensitive match
- At least one permission level is enabled
- Required permissions are attached (ReadOnlyAccess minimum)
- Organizations permissions are present
- No permission boundaries restricting access
- Intermediate role exists and is configured
- Intermediate role was deployed before destination role
- Destination role trusts intermediate role (or account)
- Intermediate role name matches in destination trust policy
- Both External IDs are configured in Quiverstone
- Intermediate role has permission to assume destination role
- StackSet deployed from management account
- Target OUs are correct
- Auto-deployment is enabled
- Latest StackSet operation succeeded
- All expected accounts have stack instances
- No service control policies blocking deployment
- Quiverstone has correct role ARN
- Quiverstone has correct External ID(s)
- Account ID is correct in Quiverstone
- Configuration saved in Quiverstone
Getting Help
If you continue to experience issues after following this troubleshooting guide:-
Gather Information:
- Role ARN
- Error messages (exact text)
- CloudFormation stack events
- CloudTrail logs for AssumeRole attempts
- StackSet operation details (if applicable)
-
Check CloudTrail:
- Look for AssumeRole events
- Check for AccessDenied errors
- Review error messages for specific causes
-
Review CloudFormation Events:
- Check stack events for deployment errors
- Review StackSet operation details
- Look for per-account failure reasons
-
Contact Support:
- Provide gathered information
- Include role configuration details
- Describe steps already attempted
- Include relevant CloudTrail or CloudFormation logs
Security Best Practices
Custom Role Names
Recommendations:- Use organization-specific prefixes:
MyCompany-Access-Production - Include environment indicators:
CustomAccess-Prod,CustomAccess-Dev - Avoid predictable patterns
- Document your naming convention securely
- Use consistent naming across all accounts
External ID Requirements
Best Practices:- Generate cryptographically secure random strings (minimum 32 characters)
- Use unique External IDs per role or per account
- Store External IDs in a secure password manager or secrets management system
- Never commit External IDs to version control
- Rotate External IDs periodically (quarterly or annually)
- Use different External IDs for intermediate and destination roles in chained access
Protecting Role Configurations from Inspection
When deploying support or access roles, prevent non-administrative roles from viewing role permissions, trust policies, and External ID configurations. This prevents tiered support teams and other roles from potentially escalating their own privileges.Example Deny Policy
Apply this policy to roles that should NOT be able to view sensitive role configurations: JSON Format:Policy Explanation
- DenyRoleInspection: Prevents viewing role details, trust policies, and attached policies
- Resource Patterns: Adjust the patterns to match your custom role names
*Access*: Matches roles containing “Access”*Support*: Matches roles containing “Support”*Inventory*: Matches roles containing “Inventory”*Intermediate*: Matches roles containing “Intermediate”
- Actions Denied:
iam:GetRole: Prevents viewing role details including trust policy (where External ID is visible)iam:GetRolePolicy: Prevents viewing inline policiesiam:ListRolePolicies: Prevents listing inline policiesiam:ListAttachedRolePolicies: Prevents listing managed policies
Implementation Recommendations
- Apply to Support Roles: Attach this deny policy to all tiered support and operational roles that don’t need to manage IAM
- Customize Resource Patterns: Update the resource ARN patterns to match your custom role names
- Exclude Administrative Roles: Do NOT apply this policy to roles that legitimately need to manage IAM (security admins, IAM admins)
- Test Thoroughly: Verify the policy doesn’t block legitimate operations before deploying to production
- Document Exceptions: Clearly document which roles are exempt from this policy and why
- Use with StackSets: Deploy this policy organization-wide using CloudFormation StackSets
Additional Security Controls
CloudTrail Monitoring:- Enable CloudTrail in all accounts
- Set up CloudWatch alarms for unusual role assumption patterns
- Monitor for failed AssumeRole attempts
- Alert on role assumption from unexpected IP addresses
- Use SCPs to enforce External ID requirements at the organization level
- Restrict role creation to approved patterns
- Prevent modification of critical security roles
- Quarterly review of who has access to view IAM roles
- Annual review of all External IDs and role configurations
- Audit role assumption patterns for anomalies
- Review and update role permissions based on least privilege
- Start with ReadOnlyAccess and add permissions as needed
- Avoid AdministratorAccess unless absolutely required
- Use PowerUserAccess or SystemAdministrator for operational needs
- Regularly review and remove unused permissions
- Add IP-based conditions to role trust policies
- Restrict role assumptions to known IP ranges
- Use VPC endpoints for API calls
- Implement time-based access controls
Security Checklist
Use this checklist when deploying access roles:- Changed default role name to custom value
- Generated cryptographically secure External ID (32+ characters)
- Stored External ID in secure password manager or secrets system
- Configured External ID in CloudFormation template
- Verified External ID is not committed to version control
- Applied deny policy to prevent role inspection by non-admin roles
- Enabled CloudTrail logging in all accounts
- Set up CloudWatch alarms for unusual role assumptions
- Documented role naming convention securely
- Scheduled External ID rotation (quarterly/annually)
- Reviewed and minimized permissions (least privilege)
- Tested role assumption with correct External ID
- Verified deny policy doesn’t block legitimate operations
- Documented which roles are exempt from inspection restrictions

