Connecting AWS IAM (Single Account)

Last updated: April 8, 2026

This article applies only to AWS connections created after July 2025. To check which version you’re using, look at the Domain ID under your domain:

  • If the domain name shows aws-iam_ics continue with the steps below.

  • If it shows aws.amazon.com, proceed with instructions in this article.

Lumos connects to an individual AWS account by assuming a cross-account IAM role.

Prerequisites

  • Elevated AWS IAM permissions

Connection Instructions

Step 1: Create IAM Role for Lumos

Option A: AWS Console
  1. IAM Console → RolesCreate Role

  2. Select Another AWS account → Account ID: 349123981986

    • Enable Require external ID → enter secure value

  3. Attach the following policies:

    • SecurityAudit

    • AWSCloudTrailReadOnlyAccess

    • A custom policy with the following permissions:

{
    "Version": "2012-10-17",
    "Statement": [
      {
        "Sid": "AllowAccessToIdentityCenter",
        "Effect": "Allow",
        "Action": [
          "iam:ListUsers",
          "iam:GetUser",
          "iam:ListRoles",
          "iam:GetRole",
          "iam:ListGroups",
          "iam:ListGroupsForUser",
          "iam:SimulatePrincipalPolicy",
          "iam:ListPolicies",
          "iam:ListAttachedUserPolicies",
          "iam:ListAttachedRolePolicies",
          "iam:ListAttachedGroupPolicies",
          "iam:AttachUserPolicy",
          "iam:DetachUserPolicy",
          "iam:AddUserToGroup",
          "iam:RemoveUserFromGroup",
          "iam:PutUserPolicy",
          "iam:DeleteUserPolicy",
          "iam:CreateUser",
          "iam:CreateLoginProfile",
          "iam:DeleteUser",
          "iam:GetUserPolicy",
          "iam:GetLoginProfile",
          "iam:DeleteLoginProfile",
          "iam:ListAccessKeys",
          "iam:DeleteAccessKey",
          "iam:ListSigningCertificates",
          "iam:DeleteSigningCertificate",
          "iam:ListSSHPublicKeys",
          "iam:DeleteSSHPublicKey",
          "iam:ListServiceSpecificCredentials",
          "iam:DeleteServiceSpecificCredential",
          "iam:ListMFADevices",
          "iam:DeactivateMFADevice",
          "iam:ListVirtualMFADevices",
          "iam:DeleteVirtualMFADevice",
          "iam:ListUserPolicies",
          "sts:GetCallerIdentity",
          "cloudtrail:LookupEvents"
        ],
        "Resource": "*"
      },
      {
        "Sid": "AccessToSSOProvisionedRoles",
        "Effect": "Allow",
        "Action": [
          "iam:AttachRolePolicy",
          "iam:DeleteRolePolicy",
          "iam:DetachRolePolicy",
          "iam:ListAttachedRolePolicies",
          "iam:GetRole",
          "iam:CreateRole",
          "iam:DeleteRole",
          "iam:PutRolePolicy",
          "iam:UpdateRole",
          "iam:ListRolePolicies",
          "iam:UpdateRoleDescription"
        ],
        "Resource": "arn:aws:iam::*:role/aws-reserved/sso.amazonaws.com/*"
      },
      {
        "Sid": "AccessToSCIMProvider",
        "Effect": "Allow",
        "Action": [
          "iam:GetSAMLProvider"
        ],
        "Resource": "arn:aws:iam::*:saml-provider/AWSSSO_*_DO_NOT_DELETE"
      }
    ]
  }
  1. Edit the trust relationship:

    • Set Principal to: arn:aws:iam::349123981986:user/global-service-account

    • on the "Name, review, and create" page, click edit next to Step 1. Change the value of the AWS key (within Principal) to the following: "arn:aws:iam::349123981986:user/global-service-account"

      1. Click 'Create role'

  2. The connector will use the default 1 hour session duration

  3. Copy the role ARN and external ID → paste into Lumos → click Connect.

Option B: Terraform
data "aws_iam_policy" "SecurityAudit" {
  arn = "arn:aws:iam::aws:policy/SecurityAudit"
}

data "aws_iam_policy" "CloudTrailReadOnly" {
  arn = "arn:aws:iam::aws:policy/AWSCloudTrailReadOnlyAccess"
}

resource "aws_iam_policy" "DeprovisionIAMUser" {
  name = "DeprovisionIAMUser"
  policy = jsonencode({
    "Version": "2012-10-17",
    "Statement": [
      {
        "Sid": "AllowAccessToIdentityCenter",
        "Effect": "Allow",
        "Action": [
          "iam:ListUsers",
          "iam:GetUser",
          "iam:ListRoles",
          "iam:GetRole",
          "iam:ListGroups",
          "iam:ListGroupsForUser",
          "iam:SimulatePrincipalPolicy",
          "iam:ListPolicies",
          "iam:ListAttachedUserPolicies",
          "iam:ListAttachedRolePolicies",
          "iam:ListAttachedGroupPolicies",
          "iam:AttachUserPolicy",
          "iam:DetachUserPolicy",
          "iam:AddUserToGroup",
          "iam:RemoveUserFromGroup",
          "iam:PutUserPolicy",
          "iam:DeleteUserPolicy",
          "iam:CreateUser",
          "iam:CreateLoginProfile",
          "iam:DeleteUser",
          "iam:GetUserPolicy",
          "iam:GetLoginProfile",
          "iam:DeleteLoginProfile",
          "iam:ListAccessKeys",
          "iam:DeleteAccessKey",
          "iam:ListSigningCertificates",
          "iam:DeleteSigningCertificate",
          "iam:ListSSHPublicKeys",
          "iam:DeleteSSHPublicKey",
          "iam:ListServiceSpecificCredentials",
          "iam:DeleteServiceSpecificCredential",
          "iam:ListMFADevices",
          "iam:DeactivateMFADevice",
          "iam:ListVirtualMFADevices",
          "iam:DeleteVirtualMFADevice",
          "iam:ListUserPolicies",
          "sts:GetCallerIdentity",
          "cloudtrail:LookupEvents"
        ],
        "Resource": "*"
      },
      {
        "Sid": "AccessToSSOProvisionedRoles",
        "Effect": "Allow",
        "Action": [
          "iam:AttachRolePolicy",
          "iam:DeleteRolePolicy",
          "iam:DetachRolePolicy",
          "iam:ListAttachedRolePolicies",
          "iam:GetRole",
          "iam:CreateRole",
          "iam:DeleteRole",
          "iam:PutRolePolicy",
          "iam:UpdateRole",
          "iam:ListRolePolicies",
          "iam:UpdateRoleDescription"
        ],
        "Resource": "arn:aws:iam::*:role/aws-reserved/sso.amazonaws.com/*"
      },
      {
        "Sid": "AccessToSCIMProvider",
        "Effect": "Allow",
        "Action": [
          "iam:GetSAMLProvider"
        ],
        "Resource": "arn:aws:iam::*:saml-provider/AWSSSO_*_DO_NOT_DELETE"
      }
    ]
  })
}

resource "aws_iam_role" "lumos_iam_role" {
  name = "LumosSingleAccountIntegrationRole"
  max_session_duration = 43200

  assume_role_policy = jsonencode({
    Version = "2012-10-17",
    Statement = [{
      Action = "sts:AssumeRole",
      Effect = "Allow",
      Principal = {
        AWS = "arn:aws:iam::349123981986:user/global-service-account"
      },
      Condition = {
        StringEquals = {
          "sts:ExternalId" = "CHOOSE_YOUR_EXTERNAL_ID"
        }
      }
    }]
  })
}

resource "aws_iam_role_policy_attachment" "attach_security_audit" {
  role       = aws_iam_role.lumos_iam_role.name
  policy_arn = data.aws_iam_policy.SecurityAudit.arn
}

resource "aws_iam_role_policy_attachment" "attach_cloudtrail" {
  role       = aws_iam_role.lumos_iam_role.name
  policy_arn = data.aws_iam_policy.CloudTrailReadOnly.arn
}

resource "aws_iam_role_policy_attachment" "attach_deprovision" {
  role       = aws_iam_role.lumos_iam_role.name
  policy_arn = aws_iam_policy.DeprovisionIAMUser.arn
}

Capabilities

Functionality

Type

Sync

Provision

Description

Users

Account

User accounts

Groups

Permission

Groups in IAM

Roles

Permission

Roles in IAM

Policies

Permission

Policies attached to Users, groups or roles

AppStore

Offboarding

Access Reviews

License Management


Deprovisioning Action

Type

Description

Deactivate

User

Deactivate the User

Delete

User

This operation deletes a user as well as the following for the user:

- Deleting all associated Login Profiles

- Deleting all associated Access Keys

- Deleting all associated Signing Certificates

- Deleting all associated SSH Public Keys

- Deleting all associated Service Specific Credentials

- Deleting all associated MFA Devices

- Deleting all associated Virtual MFA Devices

- Deleting all associated Inline Policies

- Deleting all associated Attached Managed Policies

- Deleting all associated User to Group Associations


Activity Tracking

Last Login Activity (get_last_activity):
- Uses PasswordLastUsed field from IAM User data
- Tracks LAST_LOGIN event type
- Returns timestamp of most recent password-based login only
- Available for all users with password-enabled accounts
- Does NOT track CloudTrail events in this capability

What gets tracked:
- get_last_activity: Password last used timestamp only


Troubleshooting

"Access Denied" when assuming role

Possible causes:
- Service Role ARN is incorrect
- External ID doesn't match trust policy
- Lumos AWS account not trusted in role
- Role doesn't exist or was deleted

Solutions:
- Verify Service Role ARN is correct
- Check External ID matches exactly (case-sensitive)
- Confirm trust policy includes Lumos account: 349123981986
- Verify role exists in IAM console

"Insufficient permissions" errors

What this means:
The assumed role doesn't have required IAM permissions.

Solution:
- Verify IAMFullAccess policy is attached (or custom policy with all required actions)
- Check CloudTrailReadOnlyAccess is attached for activity tracking
- Review CloudWatch Logs for specific permission errors
- Add missing permissions to role policy

Cannot delete user - "DeleteConflict" error

What this means:
User has attached resources (access keys, MFA devices, etc.) that must be removed first.

Solution:
- Integration automatically handles cleanup
- If error persists, manually check for:
- Attached managed policies
- Inline policies
- Access keys
- MFA devices
- SSH keys
- Service-specific credentials

Activity tracking not working

Possible causes:
- CloudTrail not enabled in account
- CloudTrail logs not accessible
- Service role missing CloudTrail permissions

Solution:
- Enable CloudTrail in AWS account
- Verify CloudTrail is logging AssumeRole events
- Ensure service role has CloudTrailReadOnlyAccess policy
- Check CloudTrail event history in AWS console


Summary

The AWS IAM integration provides comprehensive IAM management:

Syncs all IAM users, roles, groups, and policies
Full user provisioning (create/delete)
Manages group memberships
Assigns roles via inline policies
Attaches/detaches policies
Tracks password last used and role assumptions
Secure cross-account access with External ID
Comprehensive user deletion with automatic cleanup

Important notes:
- Requires IAM service role with External ID
- Uses the default 1 hour session duration
- Activity tracking via PasswordLastUsed and CloudTrail
- Role assignments via inline AssumeRole policies
- User deletion includes automatic resource cleanup
- Deactivation uses DenyAllAccess inline policy

The integration provides reliable IAM lifecycle management with comprehensive permission and activity tracking.