Agentless Workload Scanning for AWS - IAM Permissions Required for Deployment
Overview
You can use the following AWS Identity and Access Management (IAM) permissions to create custom IAM policies for the purposes of an Agentless Workload Scanning deployment.
Using the permissions provided ensures that least-privilege access is granted for the purposes of the Agentless Workload Scanning deployment.
High-Level Deployment Requirements
Single Account Requirements
- Create ECS clusters, and create a VPC, subnets, and Internet Gateway for the ECS cluster.
- IAM to create an ECS task execution role, task role, and an EventBridge role for starting ECS tasks.
- IAM to create a cross-account role that has permissions to read from a newly created S3 bucket and start ECS tasks.
- Create CloudWatch Log Groups and Streams.
- Create a new S3 bucket.
- Create a new secret in AWS Secrets Manager.
Organization Requirements
The access requirements for the scanning account are the same as the requirements for the Single Account integration. See Single Account Requirements.
The access requirements for the top-level AWS account are:
- Access to the Organization APIs.
- IAM to create a role to provide the scanning account the ability to list accounts in the organization.
- Create an IAM role on each of the accounts mentioned above. This role will have access to create snapshots and optionally decrypt the content.
How to Use
After you have created the custom policy (or policies), you can then attach them to the identity that will be used for the integration.
Ensure that you are configured to use the relevant identity in your command line interface prior to running Terraform.
Single Account Integration
Use the following link to download these permissions in JSON format and create a custom IAM policy:
The tables below list all the required permissions.
- EC2
- ECS
- Events
- IAM
- Logs
- S3
- Secrets Manager
| Scope | IAM Permission |
|---|
| ACCOUNT_ID | ec2:AssociateRouteTable |
| ACCOUNT_ID | ec2:AttachInternetGateway |
| ACCOUNT_ID | ec2:AuthorizeSecurityGroupEgress |
| ACCOUNT_ID | ec2:CreateInternetGateway |
| ACCOUNT_ID | ec2:CreateRoute |
| ACCOUNT_ID | ec2:CreateRouteTable |
| ACCOUNT_ID | ec2:CreateSecurityGroup |
| ACCOUNT_ID | ec2:CreateSubnet |
| ACCOUNT_ID | ec2:CreateTags |
| ACCOUNT_ID | ec2:CreateVpc |
| ACCOUNT_ID | ec2:DeleteInternetGateway |
| ACCOUNT_ID | ec2:DeleteRoute |
| ACCOUNT_ID | ec2:DeleteRouteTable |
| ACCOUNT_ID | ec2:DeleteSecurityGroup |
| ACCOUNT_ID | ec2:DeleteSubnet |
| ACCOUNT_ID | ec2:DeleteVpc |
| ACCOUNT_ID | ec2:DescribeInternetGateways |
| ACCOUNT_ID | ec2:DescribeNetworkAcls |
| ACCOUNT_ID | ec2:DescribeNetworkInterfaces |
| ACCOUNT_ID | ec2:DescribeRouteTables |
| ACCOUNT_ID | ec2:DescribeSecurityGroupRules |
| ACCOUNT_ID | ec2:DescribeSecurityGroups |
| ACCOUNT_ID | ec2:DescribeSubnets |
| ACCOUNT_ID | ec2:DescribeVpcAttribute |
| ACCOUNT_ID | ec2:DescribeVpcClassicLink |
| ACCOUNT_ID | ec2:DescribeVpcClassicLinkDnsSupport |
| ACCOUNT_ID | ec2:DescribeVpcs |
| ACCOUNT_ID | ec2:DetachInternetGateway |
| ACCOUNT_ID | ec2:DisassociateRouteTable |
| ACCOUNT_ID | ec2:ModifyVpcAttribute |
| ACCOUNT_ID | ec2:RevokeSecurityGroupEgress |
| ACCOUNT_ID | ec2:RevokeSecurityGroupIngress |
| Scope | IAM Permission |
|---|
| ACCOUNT_ID | ecs:CreateCluster |
| ACCOUNT_ID | ecs:DeleteCluster |
| ACCOUNT_ID | ecs:DeregisterTaskDefinition |
| ACCOUNT_ID | ecs:DescribeClusters |
| ACCOUNT_ID | ecs:DescribeTaskDefinition |
| ACCOUNT_ID | ecs:PutClusterCapacityProviders |
| ACCOUNT_ID | ecs:RegisterTaskDefinition |
| Scope | IAM Permission |
|---|
| ACCOUNT_ID | events:DeleteRule |
| ACCOUNT_ID | events:DescribeRule |
| ACCOUNT_ID | events:ListTagsForResource |
| ACCOUNT_ID | events:ListTargetsByRule |
| ACCOUNT_ID | events:PutRule |
| ACCOUNT_ID | events:PutTargets |
| ACCOUNT_ID | events:RemoveTargets |
| Scope | IAM Permission |
|---|
| ACCOUNT_ID | iam:AttachRolePolicy |
| ACCOUNT_ID | iam:CreatePolicy |
| ACCOUNT_ID | iam:CreateRole |
| ACCOUNT_ID | iam:DeletePolicy |
| ACCOUNT_ID | iam:DeleteRole |
| ACCOUNT_ID | iam:DeleteRolePolicy |
| ACCOUNT_ID | iam:DetachRolePolicy |
| ACCOUNT_ID | iam:GetPolicy |
| ACCOUNT_ID | iam:GetPolicyVersion |
| ACCOUNT_ID | iam:GetRole |
| ACCOUNT_ID | iam:GetRolePolicy |
| ACCOUNT_ID | iam:ListAttachedRolePolicies |
| ACCOUNT_ID | iam:ListInstanceProfilesForRole |
| ACCOUNT_ID | iam:ListPolicyVersions |
| ACCOUNT_ID | iam:ListRolePolicies |
| ACCOUNT_ID | iam:PassRole |
| ACCOUNT_ID | iam:PutRolePolicy |
| ACCOUNT_ID | iam:TagRole |
| Scope | IAM Permission |
|---|
| ACCOUNT_ID | logs:CreateLogGroup |
| ACCOUNT_ID | logs:DeleteLogGroup |
| ACCOUNT_ID | logs:DescribeLogGroups |
| ACCOUNT_ID | logs:ListTagsLogGroup |
| ACCOUNT_ID | logs:PutRetentionPolicy |
| Scope | IAM Permission |
|---|
| ACCOUNT_ID | s3:CreateBucket |
| ACCOUNT_ID | s3:DeleteBucket |
| ACCOUNT_ID | s3:DeleteBucketPolicy |
| ACCOUNT_ID | s3:DeleteObject |
| ACCOUNT_ID | s3:DeleteObjectVersion |
| ACCOUNT_ID | s3:GetAccelerateConfiguration |
| ACCOUNT_ID | s3:GetBucketAcl |
| ACCOUNT_ID | s3:GetBucketCORS |
| ACCOUNT_ID | s3:GetBucketLogging |
| ACCOUNT_ID | s3:GetBucketObjectLockConfiguration |
| ACCOUNT_ID | s3:GetBucketOwnershipControls |
| ACCOUNT_ID | s3:GetBucketPolicy |
| ACCOUNT_ID | s3:GetBucketPublicAccessBlock |
| ACCOUNT_ID | s3:GetBucketRequestPayment |
| ACCOUNT_ID | s3:GetBucketTagging |
| ACCOUNT_ID | s3:GetBucketVersioning |
| ACCOUNT_ID | s3:GetBucketWebsite |
| ACCOUNT_ID | s3:GetEncryptionConfiguration |
| ACCOUNT_ID | s3:GetLifecycleConfiguration |
| ACCOUNT_ID | s3:GetReplicationConfiguration |
| ACCOUNT_ID | s3:ListBucket |
| ACCOUNT_ID | s3:ListBucketVersions |
| ACCOUNT_ID | s3:PutBucketOwnershipControls |
| ACCOUNT_ID | s3:PutBucketPolicy |
| ACCOUNT_ID | s3:PutBucketPublicAccessBlock |
| ACCOUNT_ID | s3:PutBucketTagging |
| ACCOUNT_ID | s3:PutBucketVersioning |
| ACCOUNT_ID | s3:PutEncryptionConfiguration |
| ACCOUNT_ID | s3:PutLifecycleConfiguration |
| Scope | IAM Permission |
|---|
| ACCOUNT_ID | secretsmanager:CreateSecret |
| ACCOUNT_ID | secretsmanager:DeleteSecret |
| ACCOUNT_ID | secretsmanager:DescribeSecret |
| ACCOUNT_ID | secretsmanager:GetResourcePolicy |
| ACCOUNT_ID | secretsmanager:GetSecretValue |
| ACCOUNT_ID | secretsmanager:PutSecretValue |
Organization Integration
Use the following links to download these permissions in JSON format and create custom IAM policies:
The tables below list all the required permissions.
- EC2
- ECS
- Events
- IAM
- Logs
- Organizations
- S3
- Secrets Manager
| Scope | IAM Permission |
|---|
| SCANNING_ACCOUNT_ID | ec2:AssociateRouteTable |
| SCANNING_ACCOUNT_ID | ec2:AttachInternetGateway |
| SCANNING_ACCOUNT_ID | ec2:AuthorizeSecurityGroupEgress |
| SCANNING_ACCOUNT_ID | ec2:CreateInternetGateway |
| SCANNING_ACCOUNT_ID | ec2:CreateRoute |
| SCANNING_ACCOUNT_ID | ec2:CreateRouteTable |
| SCANNING_ACCOUNT_ID | ec2:CreateSecurityGroup |
| SCANNING_ACCOUNT_ID | ec2:CreateSubnet |
| SCANNING_ACCOUNT_ID | ec2:CreateTags |
| SCANNING_ACCOUNT_ID | ec2:CreateVpc |
| SCANNING_ACCOUNT_ID | ec2:DeleteInternetGateway |
| SCANNING_ACCOUNT_ID | ec2:DeleteRoute |
| SCANNING_ACCOUNT_ID | ec2:DeleteRouteTable |
| SCANNING_ACCOUNT_ID | ec2:DeleteSecurityGroup |
| SCANNING_ACCOUNT_ID | ec2:DeleteSubnet |
| SCANNING_ACCOUNT_ID | ec2:DeleteVpc |
| SCANNING_ACCOUNT_ID | ec2:DescribeInternetGateways |
| SCANNING_ACCOUNT_ID | ec2:DescribeNetworkAcls |
| SCANNING_ACCOUNT_ID | ec2:DescribeNetworkInterfaces |
| SCANNING_ACCOUNT_ID | ec2:DescribeRouteTables |
| SCANNING_ACCOUNT_ID | ec2:DescribeSecurityGroupRules |
| SCANNING_ACCOUNT_ID | ec2:DescribeSecurityGroups |
| SCANNING_ACCOUNT_ID | ec2:DescribeSubnets |
| SCANNING_ACCOUNT_ID | ec2:DescribeVpcAttribute |
| SCANNING_ACCOUNT_ID | ec2:DescribeVpcClassicLink |
| SCANNING_ACCOUNT_ID | ec2:DescribeVpcClassicLinkDnsSupport |
| SCANNING_ACCOUNT_ID | ec2:DescribeVpcs |
| SCANNING_ACCOUNT_ID | ec2:DetachInternetGateway |
| SCANNING_ACCOUNT_ID | ec2:DisassociateRouteTable |
| SCANNING_ACCOUNT_ID | ec2:ModifyVpcAttribute |
| SCANNING_ACCOUNT_ID | ec2:RevokeSecurityGroupEgress |
| SCANNING_ACCOUNT_ID | ec2:RevokeSecurityGroupIngress |
| Scope | IAM Permission |
|---|
| SCANNING_ACCOUNT_ID | ecs:CreateCluster |
| SCANNING_ACCOUNT_ID | ecs:DeleteCluster |
| SCANNING_ACCOUNT_ID | ecs:DeregisterTaskDefinition |
| SCANNING_ACCOUNT_ID | ecs:DescribeClusters |
| SCANNING_ACCOUNT_ID | ecs:DescribeTaskDefinition |
| SCANNING_ACCOUNT_ID | ecs:PutClusterCapacityProviders |
| SCANNING_ACCOUNT_ID | ecs:RegisterTaskDefinition |
| Scope | IAM Permission |
|---|
| SCANNING_ACCOUNT_ID | events:DeleteRule |
| SCANNING_ACCOUNT_ID | events:DescribeRule |
| SCANNING_ACCOUNT_ID | events:ListTagsForResource |
| SCANNING_ACCOUNT_ID | events:ListTargetsByRule |
| SCANNING_ACCOUNT_ID | events:PutRule |
| SCANNING_ACCOUNT_ID | events:PutTargets |
| SCANNING_ACCOUNT_ID | events:RemoveTargets |
| Scope | IAM Permission |
|---|
| MANAGEMENT_ACCOUNT_ID | iam:CreateRole |
| MANAGEMENT_ACCOUNT_ID | iam:DeleteRole |
| MANAGEMENT_ACCOUNT_ID | iam:DeleteRolePolicy |
| MANAGEMENT_ACCOUNT_ID | iam:GetRole |
| MANAGEMENT_ACCOUNT_ID | iam:GetRolePolicy |
| MANAGEMENT_ACCOUNT_ID | iam:ListAttachedRolePolicies |
| MANAGEMENT_ACCOUNT_ID | iam:ListInstanceProfilesForRole |
| MANAGEMENT_ACCOUNT_ID | iam:ListRolePolicies |
| MANAGEMENT_ACCOUNT_ID | iam:PutRolePolicy |
| MANAGEMENT_ACCOUNT_ID | iam:TagRole |
| MONITORED_ACCOUNT_ID | iam:CreateRole |
| MONITORED_ACCOUNT_ID | iam:DeleteRole |
| MONITORED_ACCOUNT_ID | iam:DeleteRolePolicy |
| MONITORED_ACCOUNT_ID | iam:GetRole |
| MONITORED_ACCOUNT_ID | iam:GetRolePolicy |
| MONITORED_ACCOUNT_ID | iam:ListAttachedRolePolicies |
| MONITORED_ACCOUNT_ID | iam:ListInstanceProfilesForRole |
| MONITORED_ACCOUNT_ID | iam:ListRolePolicies |
| MONITORED_ACCOUNT_ID | iam:PutRolePolicy |
| MONITORED_ACCOUNT_ID | iam:TagRole |
| SCANNING_ACCOUNT_ID | iam:AttachRolePolicy |
| SCANNING_ACCOUNT_ID | iam:CreatePolicy |
| SCANNING_ACCOUNT_ID | iam:CreateRole |
| SCANNING_ACCOUNT_ID | iam:DeletePolicy |
| SCANNING_ACCOUNT_ID | iam:DeleteRole |
| SCANNING_ACCOUNT_ID | iam:DeleteRolePolicy |
| SCANNING_ACCOUNT_ID | iam:DetachRolePolicy |
| SCANNING_ACCOUNT_ID | iam:GetPolicy |
| SCANNING_ACCOUNT_ID | iam:GetPolicyVersion |
| SCANNING_ACCOUNT_ID | iam:GetRole |
| SCANNING_ACCOUNT_ID | iam:GetRolePolicy |
| SCANNING_ACCOUNT_ID | iam:ListAttachedRolePolicies |
| SCANNING_ACCOUNT_ID | iam:ListInstanceProfilesForRole |
| SCANNING_ACCOUNT_ID | iam:ListPolicyVersions |
| SCANNING_ACCOUNT_ID | iam:ListRolePolicies |
| SCANNING_ACCOUNT_ID | iam:PassRole |
| SCANNING_ACCOUNT_ID | iam:PutRolePolicy |
| SCANNING_ACCOUNT_ID | iam:TagRole |
| Scope | IAM Permission |
|---|
| SCANNING_ACCOUNT_ID | logs:CreateLogGroup |
| SCANNING_ACCOUNT_ID | logs:DeleteLogGroup |
| SCANNING_ACCOUNT_ID | logs:DescribeLogGroups |
| SCANNING_ACCOUNT_ID | logs:ListTagsLogGroup |
| SCANNING_ACCOUNT_ID | logs:PutRetentionPolicy |
| Scope | IAM Permission |
|---|
| MANAGEMENT_ACCOUNT_ID | organizations:DescribeOrganization |
| MANAGEMENT_ACCOUNT_ID | organizations:ListAWSServiceAccessForOrganization |
| MANAGEMENT_ACCOUNT_ID | organizations:ListAccounts |
| MANAGEMENT_ACCOUNT_ID | organizations:ListRoots |
| Scope | IAM Permission |
|---|
| SCANNING_ACCOUNT_ID | s3:CreateBucket |
| SCANNING_ACCOUNT_ID | s3:DeleteBucket |
| SCANNING_ACCOUNT_ID | s3:DeleteBucketPolicy |
| SCANNING_ACCOUNT_ID | s3:DeleteObject |
| SCANNING_ACCOUNT_ID | s3:DeleteObjectVersion |
| SCANNING_ACCOUNT_ID | s3:GetAccelerateConfiguration |
| SCANNING_ACCOUNT_ID | s3:GetBucketAcl |
| SCANNING_ACCOUNT_ID | s3:GetBucketCORS |
| SCANNING_ACCOUNT_ID | s3:GetBucketLogging |
| SCANNING_ACCOUNT_ID | s3:GetBucketObjectLockConfiguration |
| SCANNING_ACCOUNT_ID | s3:GetBucketOwnershipControls |
| SCANNING_ACCOUNT_ID | s3:GetBucketPolicy |
| SCANNING_ACCOUNT_ID | s3:GetBucketPublicAccessBlock |
| SCANNING_ACCOUNT_ID | s3:GetBucketRequestPayment |
| SCANNING_ACCOUNT_ID | s3:GetBucketTagging |
| SCANNING_ACCOUNT_ID | s3:GetBucketVersioning |
| SCANNING_ACCOUNT_ID | s3:GetBucketWebsite |
| SCANNING_ACCOUNT_ID | s3:GetEncryptionConfiguration |
| SCANNING_ACCOUNT_ID | s3:GetLifecycleConfiguration |
| SCANNING_ACCOUNT_ID | s3:GetReplicationConfiguration |
| SCANNING_ACCOUNT_ID | s3:ListBucket |
| SCANNING_ACCOUNT_ID | s3:ListBucketVersions |
| SCANNING_ACCOUNT_ID | s3:PutBucketOwnershipControls |
| SCANNING_ACCOUNT_ID | s3:PutBucketPolicy |
| SCANNING_ACCOUNT_ID | s3:PutBucketPublicAccessBlock |
| SCANNING_ACCOUNT_ID | s3:PutBucketTagging |
| SCANNING_ACCOUNT_ID | s3:PutBucketVersioning |
| SCANNING_ACCOUNT_ID | s3:PutEncryptionConfiguration |
| SCANNING_ACCOUNT_ID | s3:PutLifecycleConfiguration |
| Scope | IAM Permission |
|---|
| SCANNING_ACCOUNT_ID | secretsmanager:CreateSecret |
| SCANNING_ACCOUNT_ID | secretsmanager:DeleteSecret |
| SCANNING_ACCOUNT_ID | secretsmanager:DescribeSecret |
| SCANNING_ACCOUNT_ID | secretsmanager:GetResourcePolicy |
| SCANNING_ACCOUNT_ID | secretsmanager:GetSecretValue |
| SCANNING_ACCOUNT_ID | secretsmanager:PutSecretValue |
Next Steps
- (Optional) Explore the operational permissions used during an Agentless Workload Scanning integration in AWS.
- Ensure that you have met all Integration Requirements.
- Proceed with the Agentless Workload Scanning integration: