Prerequisites: IAM Role Setup
Use attached IAM roles for secure, key-free authentication on EC2 instances. This eliminates the need to manage access keys. References: IAM roles for EC2 | IAM best practices | Using instance profilesCreate IAM Role
- Go to IAM Console → Roles
- Click Create role
- Select trusted entity type: AWS service → EC2
- Attach policies as needed:
- For RDS IAM authentication - see RDS/Aurora section
- For Secrets Manager access - see AWS Secrets Manager section
- Name the role:
bytebase-role
Attach IAM Role to EC2
New EC2 Instance:- Launch instance in EC2 Console
- In Advanced details → IAM instance profile: Select
bytebase-role
- Select instance → Actions → Security → Modify IAM role
- Select
bytebase-role→ Update IAM role
Alternative: IAM User with Access Keys
Use only when running Bytebase outside AWS. See why to use IAM roles instead of access keys.
- Create an IAM user with required policies
- Generate access keys
- Set environment variables:
RDS/Aurora with IAM Authentication
Prerequisites: IAM role with RDS connect permissions.
Step 1: Configure RDS/Aurora Instance
- In RDS Console, modify your instance
- Enable IAM database authentication under Database authentication options
- Save changes (SSL is enabled by default)
Step 2: Grant Database Connect Permission
Add this policy to your IAM role to allow RDS IAM authentication:REGION, ACCOUNT_ID, and DB_RESOURCE_ID with your values. Find DB_RESOURCE_ID in RDS console → Configuration tab. For easier setup, you can use wildcards: arn:aws:rds-db:*:*:dbuser:*/*
Reference: IAM policy examples
Step 3: Create Database User
MySQL/Aurora MySQL:Step 4: Connect from Bytebase
- Click New Instance in Bytebase
- Configure connection:
- Host: Your RDS endpoint
- Port: 3306 (MySQL) or 5432 (PostgreSQL)
- Username:
bytebase - Authentication: Select
AWS RDS IAM
- Test and save the connection
Cross-Account IAM Authentication
Available in Bytebase version 3.11.1 and later
Prerequisites
- Bytebase running with an IAM role (EC2 instance profile or ECS task role)
- Target RDS instances have IAM authentication enabled
- Cross-account trust relationships configured
Step 1: Create Target Account Role
In each target AWS account (where databases reside):- Go to IAM Console → Roles
- Click Create role
- Select trusted entity: Another AWS account
- Enter the source account ID (where Bytebase runs)
- Attach this policy for RDS access:
- Name the role (e.g.,
bytebase-cross-account-rds) - Note the role ARN:
arn:aws:iam::TARGET_ACCOUNT:role/bytebase-cross-account-rds
Step 2: Grant AssumeRole Permission
In the source account (where Bytebase runs), add this policy to your Bytebase IAM role:ACCOUNT_B, ACCOUNT_C, ACCOUNT_D with your target account IDs.
Step 3: Configure Cross-Account Connection
- Click New Instance in Bytebase
- Configure connection:
- Host: RDS endpoint in target account
- Port: 3306 (MySQL) or 5432 (PostgreSQL)
- Username:
bytebase - Authentication: Select
AWS RDS IAM - AWS Assume Role ARN: Enter the target account role ARN
(e.g.,
arn:aws:iam::TARGET_ACCOUNT:role/bytebase-cross-account-rds)
- Test and save the connection
- Assume the role in the target account
- Use the assumed credentials to generate RDS IAM tokens
- Authenticate to the database using the token
Example Setup
Scenario: Bytebase in Account A (123456789012) connecting to RDS in Account B (987654321098) Account B - Create role with trust relationship:Security Best Practices
- Use External IDs: Add an external ID to the trust relationship for additional security
- Limit Role Scope: Grant only necessary RDS permissions in target accounts
- Use Specific Resource ARNs: Avoid wildcards in IAM policies when possible
- Enable CloudTrail: Monitor cross-account role assumptions
- Regular Audits: Review cross-account permissions periodically
Troubleshooting Cross-Account Issues
AssumeRole Access Denied:- Verify trust relationship in target account role
- Check source account has AssumeRole permission
- Ensure role ARN is correct
- Verify target role has rds-db:connect permission
- Check database user exists with IAM authentication enabled
- Ensure RDS instance has IAM authentication enabled
- Bytebase automatically refreshes tokens before expiration
- Default session duration is 1 hour (configurable in role settings)
AWS Secrets Manager
Store database passwords securely in AWS Secrets Manager instead of Bytebase.Prerequisites: IAM role with Secrets Manager permissions.
Step 1: Grant Secrets Manager Access
Add this policy to your IAM role to read secrets:REGION, ACCOUNT_ID, and SECRET_NAME with your values. For easier setup, you can use wildcards: arn:aws:secretsmanager:*:*:secret:*
Reference: Secrets Manager IAM permissions
Step 2: Create Secret
- Go to AWS Secrets Manager Console
- Click Store a new secret
- Select Other type of secret
- Add key/value pair: Key =
DB_PASSWORD, Value = your password - Name the secret (e.g.,
bytebase-db-password) - Complete creation and note the ARN
Step 3: Configure in Bytebase
- In your database instance settings, find the password field
- Click the key icon to use external secret
- Select AWS Secrets Manager
- Enter:
- Secret Name: Your secret name from Step 2
- Secret Key:
DB_PASSWORD
- Test connection and save
Database-Specific Configuration
For specific database types running on AWS, see their configuration guides:- PostgreSQL on RDS
- Aurora PostgreSQL
- Aurora MySQL
Best Practices
- Use IAM Roles over Access Keys: Always prefer IAM roles when running on EC2
- Enable SSL/TLS: All AWS database services support encrypted connections
- Use Secrets Manager: Centralize password management with automatic rotation
- Follow Least Privilege: Grant only necessary permissions to IAM roles
- Monitor Access: Use CloudTrail to audit database access patterns
Troubleshooting
Connection Timeout
- Verify security group rules allow traffic on database port
- Check VPC routing and subnet configuration
- Ensure database is publicly accessible or use VPN/bastion host
IAM Authentication Failed
- Verify IAM role has correct
rds-db:connectpermissions - Check database user was created with correct authentication method
- Ensure SSL is enabled for the connection
Secrets Manager Access Denied
- Verify IAM role has
secretsmanager:GetSecretValuepermission - Check secret ARN matches the policy resource
- Ensure secret exists in the correct region

