Amazon EC2

Vendor key: aws_ec2. In Arthur this source appears as AWS EC2. For how source fields and scan configs fit together, see Agent Discovery Integrations.

Discovers agentic coding tools, local agents, AI browsers and browser extensions installed on your Linux EC2 instances. The Arthur discovery collector runs on each instance and writes its results to the instance's Systems Manager (SSM) custom inventory, and Arthur reads them through the SSM API. Nothing connects to the instance. One source reads one account, or many accounts in your organization, in the regions you name.

Before you start

  1. Make sure Systems Manager manages the instances you want to scan.
  2. Deploy the Arthur discovery collector with the Arthur CloudFormation template, as a stack in each region of one account or as a StackSet across your organization. The template can also create the inventory association that uploads the collector's results, and the role that Arthur assumes.

For step-by-step instructions, see the AWS EC2 setup guide.

Source fields

FieldRequiredSensitiveDefaultDescription
regionsYesNoComma-separated AWS regions, for example us-east-1,eu-west-1, or all for every region each account has enabled. Named regions must be in one AWS partition.
accountsNoNoThe credential's own accountall for every active account in your organization, or comma-separated 12-digit account IDs. Arthur reads each account through its member role.
include_tagsNoNoAll instancesComma-separated key=value instance tags. Only instances with at least one of these tags are scanned.
exclude_tagsNoNoNoneComma-separated key=value instance tags. Instances with any of these tags are skipped. If an instance matches both lists, it's excluded.
role_arnNoNoAn IAM role in the account to assume for the scan, for example arn:aws:iam::123456789012:role/arthur-discovery. Not needed with accounts.
external_idNoNoThe external ID the role's trust policy requires. Sent when assuming role_arn, or each account's member role when you set accounts.
member_role_nameNoNoarthur-ai-discoveryThe name (not the ARN) of the role Arthur assumes in each account when you set accounts. The default is the name the Arthur CloudFormation template gives it.
access_key_idNoYesAn IAM access key ID. Set it together with secret_access_key.
secret_access_keyNoYesThe secret of the IAM access key.

Leave access_key_id and secret_access_key empty only if your Arthur engine is configured to use its own AWS credentials (ARTHUR_ENGINE_AWS_EC2_ALLOW_DEFAULT_CREDENTIALS=true).

Tag matching is exact and case-sensitive. A tag no instance carries is reported with a count of 0. A tag that isn't written as key=value fails the scan.

Scan config

SettingValue
query"" to use Arthur's built-in agent catalog, or your own catalog YAML.
query_languagenone
lookback_window_secondsArthur lists every instance on every scan. Instances whose collector hasn't reported within this window are counted and their results aren't published. 0 publishes every instance's most recent report.

Arthur counts running instances that Systems Manager doesn't manage as not-ssm-managed, and Windows instances as unsupported-platform, so an instance the collector never reached is counted rather than missed.

Required permissions

  • ec2:DescribeInstances
  • ssm:DescribeInstanceInformation
  • ssm:ListInventoryEntries
  • ec2:DescribeRegions. Needed only if regions is all.

Grant these actions and nothing more. AWS managed policies such as ReadOnlyAccess include them, but they also read Parameter Store values and instance user data.

With accounts, the credential needs sts:AssumeRole on the member roles instead, plus organizations:ListAccounts when accounts is all, from the management account or a delegated administrator. The member role in each account holds the actions above, including ec2:DescribeRegions.

If an account's role can't be assumed, or a region isn't enabled or is refused, the scan reads the rest and reports it as a denied scope. If every account and region is refused, the scan fails.


Did this page help you?