Skip to main content
Version: v4.2.22

Credential Management Fixes - Documentation Sync with Business Logic

🚨 Issues Identified and Fixed

Previous Issues (Fixed)

  1. Hardcoded Account ID Mappings

    • Problem: The CLI script contained hardcoded mappings like:
      account_env_mapping = {
      "123456789012": "PROD",
      "123456789013": "STAGING",
      "123456789014": "DEV"
      }
    • Impact: Only worked with specific account IDs, not flexible for real-world usage
    • Risk: Users would need to modify code for their own account IDs
  2. Hardcoded Secret Name Mappings

    • Problem: AWS Secrets Manager integration had hardcoded secret names:
      account_secret_mapping = {
      "123456789012": "inventag/credentials/production",
      "123456789013": "inventag/credentials/staging"
      }
    • Impact: Only worked with predefined secret names
    • Risk: Required code changes for different secret naming conventions
  3. Documentation-Code Mismatch

    • Problem: Documentation showed flexible examples but code was hardcoded
    • Impact: Users following documentation would encounter runtime failures
    • Risk: Poor user experience and loss of trust

Solutions Implemented

1. Flexible GitHub Actions Credential Management

New Implementation:

def _apply_github_secrets_credentials(accounts):
for account in accounts:
# Try multiple environment variable naming patterns
env_patterns = [
f"AWS_ACCESS_KEY_ID_{account.account_id}",
f"AWS_ACCESS_KEY_ID_{_sanitize_env_name(account.account_name).upper()}",
f"{_sanitize_env_name(account.account_name).upper()}_AWS_ACCESS_KEY_ID",
f"AWS_ACCESS_KEY_ID_{account.account_id[-4:]}",
]
# Automatically tries all patterns until credentials are found

Benefits:

  • ✅ Works with any account ID (e.g., 999888777666, 111222333444)
  • ✅ Works with any account name (e.g., My Custom Production Environment)
  • ✅ Multiple naming pattern support
  • ✅ No code changes required for different accounts

2. Flexible AWS Secrets Manager Integration

New Implementation:

def _apply_aws_secrets_manager_credentials(accounts):
for account in accounts:
# Try multiple secret name patterns
secret_patterns = [
os.environ.get(f'INVENTAG_SECRET_{_sanitize_env_name(account.account_name).upper()}'),
f"inventag/credentials/{account.account_id}",
f"inventag/credentials/{_sanitize_env_name(account.account_name).lower()}",
f"inventag/{account.account_id}/credentials",
f"inventag-{account.account_id}",
]
# Automatically tries all patterns until secret is found

Benefits:

  • ✅ Works with any secret naming convention
  • ✅ Environment variable overrides for custom secret names
  • ✅ Multiple fallback patterns
  • ✅ Clear logging of which secrets were tried and found

3. Comprehensive Validation and Error Handling

New Implementation:

def _validate_account_credentials(accounts):
accounts_without_credentials = []
for account in accounts:
has_credentials = bool(
account.access_key_id or
account.profile_name or
account.role_arn
)
if not has_credentials:
accounts_without_credentials.append(account)

if accounts_without_credentials:
# Provide environment-specific guidance
environment = _detect_environment()
if environment == "github_actions":
logger.error("For GitHub Actions, set up secrets like:")
for account in accounts_without_credentials:
logger.error(f" - AWS_ACCESS_KEY_ID_{account.account_id}")

Benefits:

  • ✅ Clear error messages when credentials are missing
  • ✅ Environment-specific guidance
  • ✅ Lists all missing accounts
  • ✅ Provides concrete next steps

4. Automated Testing and Verification

New Implementation:

  • Created examples/test_credential_management.py to verify all functionality
  • Tests multiple account IDs and names
  • Verifies pattern matching works correctly
  • Ensures no hardcoded dependencies

Test Results:

✅ All tests passed! Credential management is flexible and works with any account configuration.

🔑 Key Benefits:
• No hardcoded account IDs or mappings
• Works with any account names and IDs
• Multiple naming pattern support
• Environment variable overrides
• Clear error messages when credentials are missing
• Automatic environment detection

📋 Updated Configuration Examples

Flexible Account Configuration

File: examples/accounts_flexible_credentials.json

{
"accounts": [
{
"account_id": "999888777666",
"account_name": "Arbitrary Production Environment"
},
{
"account_id": "111222333444",
"account_name": "Custom-Staging@Environment#123"
}
]
}

GitHub Actions Secrets (Any Account)

For account 999888777666 named Arbitrary Production Environment:

  • AWS_ACCESS_KEY_ID_999888777666
  • AWS_ACCESS_KEY_ID_ARBITRARY_PRODUCTION_ENVIRONMENT
  • ARBITRARY_PRODUCTION_ENVIRONMENT_AWS_ACCESS_KEY_ID
  • AWS_ACCESS_KEY_ID_7666

AWS Secrets Manager (Any Account)

For account 999888777666 named Arbitrary Production Environment:

  • inventag/credentials/999888777666
  • inventag/credentials/arbitrary_production_environment
  • inventag/999888777666/credentials
  • inventag-999888777666
  • Environment override: INVENTAG_SECRET_ARBITRARY_PRODUCTION_ENVIRONMENT

🔍 Verification Steps

1. Run the Test Suite

python examples/test_credential_management.py

2. Test with Your Own Account IDs

# Create a test configuration with your actual account IDs
cat > my_test_accounts.json << EOF
{
"version": "1.0",
"accounts": [
{
"account_id": "YOUR_ACTUAL_ACCOUNT_ID",
"account_name": "Your Actual Account Name"
}
]
}
EOF

# Test dry run
python scripts/cicd_bom_generation.py \
--accounts-file my_test_accounts.json \
--formats excel \
--dry-run \
--verbose

3. Verify Environment Detection

# Test GitHub Actions detection
GITHUB_ACTIONS=true python scripts/cicd_bom_generation.py --accounts-file my_test_accounts.json --dry-run

# Test CodeBuild detection
CODEBUILD_BUILD_ID=test-123 python scripts/cicd_bom_generation.py --accounts-file my_test_accounts.json --dry-run

📚 Updated Documentation

Files Updated:

  • docs/CREDENTIAL_SECURITY_GUIDE.md - Flexible credential patterns
  • docs/CONFIGURATION_EXAMPLES.md - Updated with flexible examples
  • examples/accounts_flexible_credentials.json - Comprehensive example
  • examples/test_credential_management.py - Automated testing
  • ✅ All GitHub Actions and CodeBuild examples updated

Key Documentation Changes:

  1. Removed all hardcoded account ID references
  2. Added flexible pattern examples
  3. Included environment variable override instructions
  4. Added testing and verification steps
  5. Provided clear error handling guidance

🎯 Business Logic ↔ Documentation Sync

✅ Now Synchronized:

  • Code: Uses flexible pattern matching for any account ID/name
  • Documentation: Shows flexible examples that work with any account
  • Examples: Demonstrate real-world usage with various account configurations
  • Tests: Verify functionality works with arbitrary account IDs and names

✅ User Experience:

  • Before: Users had to modify code for their account IDs
  • After: Users can use any account configuration without code changes
  • Before: Cryptic errors when credentials not found
  • After: Clear, actionable error messages with specific guidance

✅ Maintainability:

  • Before: Code changes required for new account configurations
  • After: Zero code changes needed for new accounts
  • Before: Documentation examples didn't match code behavior
  • After: Documentation examples work exactly as shown

🚀 Ready for Production

The credential management system is now:

  • Flexible - Works with any account IDs and names
  • Secure - Supports all major secret management systems
  • Tested - Comprehensive test suite verifies functionality
  • Documented - Clear examples and guidance for all scenarios
  • Maintainable - No hardcoded dependencies
  • User-Friendly - Clear error messages and guidance

The documentation is now 100% synchronized with the business logic.