AWS Scanner
The AWS Scanner is a native scanner type that inspects a connected AWS account, discovering the full inventory of identities, including human and non-human identities such as IAM users, roles, and groups, and AI agents built on Amazon Bedrock Agents and Amazon Bedrock AgentCore, along with secrets stored in AWS Secrets Manager and certificates managed through AWS Certificate Manager, as well as the relationships between them. Each discovered object is evaluated against Identity & Secrets Intelligence security policies, which assess its risk posture and surface the resulting findings for review.
What the AWS Scanner Discovers
Each scanner covers one or more object types, selected when the scanner is created:
| Object Type | What is discovered |
|---|---|
| Secrets | Secrets stored in AWS Secrets Manager, with their rotation status, access history, resource policies, and the identities that read them |
| Certificates | Certificates managed through AWS Certificate Manager, and the identities that read them |
| Identities | IAM users, roles, and groups, with their credentials, MFA status, attached policies, and group memberships |
| AI Agents | Amazon Bedrock Agents and Amazon Bedrock AgentCore agent runtimes, with the roles they run as, the tools they call, and the controls that govern them |
Secrets, certificates, secret usage, and AI agents are discovered in the region configured on the AWS Target. IAM identities are global, so they are discovered for the whole account. To cover several regions, create an AWS Target and a scanner for each region.
Prerequisites
- An Akeyless account with the Identity & Secrets Intelligence license.
- A deployed and connected Akeyless Gateway version
4.53.0and later. Scanning AI agents requires version5.5.0and later. - A Gateway with Akeyless AI Insights configured.
- An AWS Target representing the AWS IAM Role that will scan the account.
- The AWS IAM Role used by the Target granted the permissions listed under AWS Service Account Permissions below.
- Access to configure and run the scanner, granted via:
Manage ISI ScannersorAdminGateway Permission.Identity & Secrets IntelligenceAdministrative Rule set toScopedorAll.Listpermission on the GitLab Target.
Required AWS Permissions
The AWS IAM Role used by the Target needs read access to the AWS services behind each object type selected on the scanner. Every table in this section has an Object Type column, so you can grant only what the selected object types need.
There are two ways to grant the permissions:
- Quick Setup - attach broad AWS managed policies. Fastest to configure, but grants more access than the scanner actually uses.
- Granular Permissions - attach only the exact actions the scanner needs, following the principle of least privilege.
Both produce a complete scan. The difference is privilege scope, not scan coverage.
Quick Setup
For each object type selected on the scanner, attach the AWS managed policies and the custom policy statement listed below:
| Object Type | AWS managed policies | Custom policy statement |
|---|---|---|
| Secrets | AWSCloudTrail_ReadOnlyAccess | SecretsReadOnly |
| Certificates | AWSCertificateManagerReadOnly | None |
| Identities | IAMReadOnlyAccess | None |
| AI Agents | AmazonBedrockReadOnly, IAMReadOnlyAccess, AWSLambda_ReadOnlyAccess, AWSCloudTrail_ReadOnlyAccess, IAMAccessAnalyzerReadOnlyAccess | AIAgentsReadOnly |
The custom policy below covers the services that have no read-only AWS managed policy: AWS Secrets Manager, Amazon Bedrock AgentCore, and AWS KMS. Keep the statement for each object type you selected, and remove the other:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SecretsReadOnly",
"Effect": "Allow",
"Action": [
"secretsmanager:ListSecrets",
"secretsmanager:DescribeSecret",
"secretsmanager:ListSecretVersionIds",
"secretsmanager:GetResourcePolicy"
],
"Resource": "*"
},
{
"Sid": "AIAgentsReadOnly",
"Effect": "Allow",
"Action": [
"bedrock-agentcore:ListAgentRuntimes",
"bedrock-agentcore:GetAgentRuntime",
"bedrock-agentcore:ListGateways",
"bedrock-agentcore:ListGatewayTargets",
"kms:DescribeKey",
"kms:GetKeyRotationStatus"
],
"Resource": "*"
}
]
}"Resource": "*" above gives full coverage but can be scoped down. Anything out of scope is reported as a gap in the scan details.
WarningDo not use
SecretsManagerReadWrite. It grants read and write access on secrets and is not a safe substitute.
Granular Permissions
All permissions below are read-only. The scanner never requires write access to your AWS environment, and never reads the values of secrets stored in AWS Secrets Manager, only their metadata.
Required Permissions
The permissions listed below are required for the scan to complete successfully. If one is missing for an object type selected on the scanner, the scan fails, in the cases described below:
| Object Type | Permission | If missing |
|---|---|---|
| Secrets | secretsmanager:ListSecrets | The scan fails |
| Certificates | acm:ListCertificates | The scan fails |
| Certificates | acm:DescribeCertificate | The scan fails if denied for every certificate; otherwise reported as a gap |
| Identities | iam:ListUsers, iam:ListRoles, iam:ListGroups | The scan fails if all three are denied; a single missing one is reported as a gap |
| AI Agents | bedrock:ListAgents | The scan fails, even when the account only uses AgentCore |
| AI Agents | bedrock:GetAgent | Agents that can't be read are skipped and reported as a gap. The scan fails if no agent can be read |
| AI Agents | bedrock-agentcore:ListAgentRuntimes | AgentCore agents are skipped and reported as a gap. The scan fails if no Bedrock Agents were found either |
| AI Agents | bedrock-agentcore:GetAgentRuntime | Runtimes that can't be read are skipped and reported as a gap. The scan fails if no agent was found at all |
A failure in any selected object type marks the whole scan as failed.
Additional Permissions for Complete Coverage
These permissions are optional. If missing, the scan still completes, but with reduced visibility, and the policies that depend on them are not evaluated.
| Object Type | Permission | What it adds |
|---|---|---|
| Secrets | secretsmanager:DescribeSecretsecretsmanager:ListSecretVersionIds | Secret metadata: rotation status, last access/change dates, version history |
| Secrets | secretsmanager:GetResourcePolicy | Secret resource policies - who is granted access to each secret in the Security Graph |
| Secrets | cloudtrail:LookupEvents | Secret usage - which identities actually read each secret over the last 90 days |
| Identities | iam:ListAccessKeysiam:GetAccessKeyLastUsediam:ListMFADevicesiam:GetLoginProfile | User credential hygiene: stale keys, missing MFA, console access |
| Identities | iam:GetUserPolicyiam:GetRolePolicyiam:GetGroupPolicyiam:GetPolicyiam:GetPolicyVersion | Policy analysis - which identities can access which secrets |
| Identities | iam:ListUserPoliciesiam:ListAttachedUserPoliciesiam:ListRolePoliciesiam:ListAttachedRolePoliciesiam:ListGroupPoliciesiam:ListAttachedGroupPolicies | Enumerating the policies attached to each identity (required for the policy analysis above) |
| Identities | iam:GetGroup | Group membership in the Security Graph |
| AI Agents | bedrock:ListAgentActionGroupsbedrock:GetAgentActionGroup | The agent's action groups and the Lambda functions they call |
| AI Agents | lambda:GetFunctionConfiguration | Each action-group function's execution role, and the static credentials in its environment variables |
| AI Agents | lambda:GetPolicy | Each action-group function's resource policy, used to check whether only this agent can invoke it |
| AI Agents | bedrock:ListAgentCollaborators | Multi-agent collaboration: a supervisor agent's collaborators and their execution roles |
| AI Agents | bedrock:ListTagsForResource | The agent's Owner or Team tag |
| AI Agents | cloudtrail:LookupEvents | The identity that created each agent, from CreateAgent events in the last 90 days. If missing, no gap is reported, and each agent without an Owner or Team tag is reported as unowned |
| AI Agents | iam:ListAttachedRolePoliciesiam:ListAttachedUserPolicies | Comparing the agent's execution role with the privileges of the identity that created it |
| AI Agents | iam:GetUseriam:GetRole | Whether the identity that created the agent still exists |
| AI Agents | iam:ListRolePoliciesiam:GetRolePolicyiam:GetPolicyiam:GetPolicyVersioniam:ListAttachedRolePolicies | Policy analysis of each execution role, including whether an AgentCore execution role can obtain access tokens on behalf of users |
| AI Agents | bedrock:GetModelInvocationLoggingConfiguration | Whether Bedrock model invocation logging is enabled |
| AI Agents | logs:DescribeLogGroups | The retention period of the CloudWatch log group that receives model invocation logs. If missing, no gap is reported |
| AI Agents | access-analyzer:ListAnalyzersaccess-analyzer:ListFindings | Agent execution roles and Lambda functions that IAM Access Analyzer reports as reachable from outside the account. Requires an IAM Access Analyzer in the Target's region |
| AI Agents | kms:DescribeKeykms:GetKeyRotationStatus | Whether automatic rotation is enabled on the customer managed KMS key that encrypts an agent |
| AI Agents | bedrock-agentcore:ListGatewaysbedrock-agentcore:ListGatewayTargets | The number of MCP gateways in the account and the targets they route to |
Each gap entry names the skipped resource, the missing permissions, and the AWS managed policy or custom policy that grants them.
Create an AWS Scanner in the Akeyless Console
- Log in to the Akeyless Console, and go to Products > Identity & Secrets Intelligence > Scanners.
- Click New, and select the scanner type AWS, then click Next.
- Define a Name for the scanner.
- Select the Target representing the AWS account to scans, and the Gateway that will execute the scans, then click Next.
- Use the Object Type drop-down list to select the scanner's scope, and click Finish.
Run a Scan
- Log in to the Akeyless Console, and go to Products > Identity & Secrets Intelligence > Scanners.
- Click the AWS scanner.
- Click Start Scan.
Once the scan completes, results appear in Inventory for review.
Updated 17 days ago
