kubernetes/kops · error

error removing role %q from IAM instance profile %q: %v

Error message

error removing role %q from IAM instance profile %q: %v

What it means

Fires in DeleteIAMInstanceProfile when iam.RemoveRoleFromInstanceProfile fails while stripping roles from the instance profile prior to deletion — permissions, throttling, or a concurrently modified profile.

Source

Thrown at pkg/resources/aws/aws.go:2050

func DeleteIAMInstanceProfile(cloud fi.Cloud, r *resources.Resource) error {
	ctx := context.TODO()
	c := cloud.(awsup.AWSCloud)

	profile := r.Obj.(iamtypes.InstanceProfile)
	name := aws.ToString(profile.InstanceProfileName)

	// Remove roles
	{
		for _, role := range profile.Roles {
			klog.V(2).Infof("Removing role %q from IAM instance profile %q", aws.ToString(role.RoleName), name)
			request := &iam.RemoveRoleFromInstanceProfileInput{
				InstanceProfileName: profile.InstanceProfileName,
				RoleName:            role.RoleName,
			}
			_, err := c.IAM().RemoveRoleFromInstanceProfile(ctx, request)
			if err != nil {
				return fmt.Errorf("error removing role %q from IAM instance profile %q: %v", aws.ToString(role.RoleName), name, err)
			}
		}
	}

	// Delete the instance profile
	{
		klog.V(2).Infof("Deleting IAM instance profile %q", name)
		request := &iam.DeleteInstanceProfileInput{
			InstanceProfileName: profile.InstanceProfileName,
		}
		_, err := c.IAM().DeleteInstanceProfile(ctx, request)
		if err != nil {
			return fmt.Errorf("error deleting IAM instance profile %q: %v", name, err)
		}
	}

	return nil
}

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Check iam:RemoveRoleFromInstanceProfile permission
  2. Retry after transient errors; the profile may have been modified concurrently
  3. Ensure no EC2 instances are actively using the profile
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at pkg/resources/aws/aws.go:2050 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05). Data as JSON: /api/errors/6a6d6a54f8e53dcf. Report an issue: GitHub.