IAM Configuration System
ModelKnife uses a configuration-driven IAM system with standardized role naming. Understanding this architecture helps administrators customize permissions and troubleshoot access issues.
Configuration Overview
ModelKnife uses two configuration files to manage IAM resources:
- System Config: Standardized roles and policies (same for all accounts)
- User Config: Account-specific customizations (admin-only)
Configuration Architecture
The IAM system uses a two-file architecture that separates standard configuration from customizations:
File Structure
# IAM configuration location
~/.mlknife/iam-config/
├── system-config.json # Standard roles and policies
└── user-config-{account_id}-{region}.json # Account customizations (optional)
System Configuration
The system configuration defines standardized IAM resources used across all AWS accounts:
{
"version": "1.0",
"description": "Standardized IAM configuration",
"environment": {
"account_id": "123456789012",
"region": "us-east-1"
},
"iam_roles": {
"lambda_execution_role": {
"role_name_template": "mlknife-lambda-execution",
"description": "Lambda execution role",
"trust_policy": {
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": { "Service": "lambda.amazonaws.com" },
"Action": "sts:AssumeRole"
}]
}
},
"step_functions_role": {
"role_name_template": "mlknife-stepfunctions",
"description": "Step Functions execution role",
"trust_policy": {
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": { "Service": "states.amazonaws.com" },
"Action": "sts:AssumeRole"
}]
}
}
},
"iam_groups": {
"mlknife-developers": {
"description": "Developer access group",
"attached_policies": ["mlknife-developer-policy"]
},
"mlknife-admin": {
"description": "Administrator access group",
"attached_policies": ["mlknife-admin-policy"]
}
}
}
Standardized Role Naming
All IAM roles use consistent, predictable names across AWS accounts:
Role Naming Pattern
Format: mlknife-{service}
mlknife-stepfunctions
mlknife-lambda-execution
mlknife-sagemaker-exec
mlknife-glue-job
mlknife-developers
mlknife-admin
User Configuration (Admin-Only)
Administrators can create account-specific customizations when needed:
{
"version": "1.0",
"description": "Account-specific customizations",
"custom_policies": {
"additional-s3-access": {
"description": "Custom S3 bucket access",
"policy_document": {
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "arn:aws:s3:::company-bucket/*"
}]
}
}
},
"role_overrides": {
"lambda_execution_role": {
"additional_policies": ["additional-s3-access"]
}
}
}
Admin-Only Feature
Only users in the mlknife-admin
group can create or modify user configuration files. This ensures security and consistency across the team.
Configuration Generation Process
When mk setup init
runs, it follows this process:
Setup Process
- Load system configuration: Reads standardized role definitions from source code
- Detect environment: Gets AWS account ID and region
- Generate roles: Creates IAM roles using the standardized names
- Create groups: Sets up team access groups with appropriate policies
- Save configuration: Stores generated config in
~/.mlknife/iam-config/
Configuration Commands
# View system configuration
mk setup status --detail
# Reset configuration to defaults (admin only)
mk setup reset --confirm
# View configuration file locations
ls ~/.mlknife/iam-config/
Advanced Configuration
Configuration File Locations
# System configuration (auto-generated)
~/.mlknife/iam-config/system-config.json
# User configuration (admin-created)
~/.mlknife/iam-config/user-config-{account_id}-{region}.json
# Source configuration (in ModelKnife installation)
{mlknife_install}/mlknife/utils/iam/defaults/system_config.py
Configuration Precedence
When multiple configuration sources exist, ModelKnife uses this precedence order:
- User config overrides: Account-specific customizations take highest priority
- Generated system config: Standard configuration for the account
- Default system config: Built-in defaults from source code
Regenerating Configuration
Administrators can regenerate configuration from the latest source code:
# Regenerate from source (preserves user config)
mk setup reset --confirm
mk setup init
Troubleshooting Configuration Issues
Configuration File Problems
Missing Configuration Files
Problem: mk setup status
shows "configuration not found"
Solution: Run mk setup init
to generate configuration files
Outdated Configuration
Problem: Role names don't match current standardized format
Solution: Regenerate configuration:
mk setup reset --confirm
mk setup init
Role Creation Issues
Role Already Exists
Problem: IAM role creation fails with "already exists" error
Solution: Check existing role configuration and update if needed
# Check existing roles in AWS
aws iam list-roles --query 'Roles[?starts_with(RoleName, `mlknife-`)].RoleName'
# Update existing roles instead of creating new ones
mk setup init --update
Debugging Configuration
# View current configuration
mk setup status --detail
# Check configuration file syntax
python -m json.tool ~/.mlknife/iam-config/system-config.json
# Validate IAM resources in AWS
aws iam list-roles --query 'Roles[?starts_with(RoleName, `mlknife-`)].{Name:RoleName,Created:CreateDate}' --output table
Related Documentation
See Also
- Team Setup: User management and access control
- Installation: Initial setup and prerequisites
- CLI Reference: Complete command documentation