AWS permissions
What access does ZopNight need on AWS?
ZopNight needs 248 read-only IAM permissions to discover an AWS account, read CloudWatch metrics and pull Cost Explorer data. Write access is a separate CloudFormation stack you can decline: 186 permissions covering only start, stop, scale and remediation. Neither grant can read object contents or database rows.
acm
| Action | Access | Purpose |
|---|---|---|
| acm:DescribeCertificate | discovery | |
| acm:ListCertificates | discovery | |
| acm:RequestCertificate | provisioning |
apigateway
| Action | Access | Purpose |
|---|---|---|
| apigateway:DELETE | remediation |
application-autoscaling
| Action | Access | Purpose |
|---|---|---|
| application-autoscaling:DescribeScalableTargets | scheduling | |
| application-autoscaling:DescribeScalingPolicies | scheduling | |
| application-autoscaling:DescribeScheduledActions | scheduling | |
| application-autoscaling:DeleteScalingPolicy | scheduling | |
| application-autoscaling:DeleteScheduledAction | scheduling | |
| application-autoscaling:DeregisterScalableTarget | scheduling | |
| application-autoscaling:PutScalingPolicy | scheduling | |
| application-autoscaling:PutScheduledAction | scheduling | |
| application-autoscaling:RegisterScalableTarget | scheduling |
apprunner
| Action | Access | Purpose |
|---|---|---|
| apprunner:PauseService | scheduling | |
| apprunner:ResumeService | scheduling |
appstream
| Action | Access | Purpose |
|---|---|---|
| appstream:DescribeFleets | discovery |
autoscaling
| Action | Access | Purpose |
|---|---|---|
| autoscaling:DescribeAutoScalingGroups | discovery | |
| autoscaling:DescribePolicies | discovery | |
| autoscaling:DescribeScheduledActions | discovery | |
| autoscaling:AttachLoadBalancerTargetGroups | provisioning | |
| autoscaling:CreateAutoScalingGroup | scheduling; provisioning | |
| autoscaling:DeleteAutoScalingGroup | provisioning | |
| autoscaling:DeletePolicy | scheduling | |
| autoscaling:DeleteScheduledAction | scheduling | |
| autoscaling:PutScalingPolicy | scheduling | |
| autoscaling:PutScheduledUpdateGroupAction | scheduling | |
| autoscaling:UpdateAutoScalingGroup | scheduling |
backup
| Action | Access | Purpose |
|---|---|---|
| backup:ListBackupVaults | discovery | |
| backup:ListRecoveryPointsByBackupVault | discovery |
bedrock
| Action | Access | Purpose |
|---|---|---|
| bedrock:GetAgent | discovery | |
| bedrock:GetCustomModel | discovery | |
| bedrock:GetEvaluationJob | discovery | |
| bedrock:GetGuardrail | discovery | |
| bedrock:GetKnowledgeBase | discovery | |
| bedrock:GetMarketplaceModelEndpoint | discovery | |
| bedrock:GetModelInvocationLoggingConfiguration | discovery | |
| bedrock:GetProvisionedModelThroughput | discovery | |
| bedrock:ListAgentActionGroups | discovery | |
| bedrock:ListAgentAliases | discovery | |
| bedrock:ListAgents | discovery | |
| bedrock:ListAgentVersions | discovery | |
| bedrock:ListCustomModelDeployments | discovery | |
| bedrock:ListCustomModels | discovery | |
| bedrock:ListDataAutomationProjects | discovery | |
| bedrock:ListDataSources | discovery | |
| bedrock:ListEvaluationJobs | discovery | |
| bedrock:ListFlowAliases | discovery | |
| bedrock:ListFlows | discovery | |
| bedrock:ListFlowVersions | discovery | |
| bedrock:ListFoundationModels | discovery | |
| bedrock:ListGuardrails | discovery | |
| bedrock:ListImportedModels | discovery | |
| bedrock:ListInferenceProfiles | discovery | |
| bedrock:ListKnowledgeBases | discovery | |
| bedrock:ListMarketplaceModelEndpoints | discovery | |
| bedrock:ListModelCopyJobs | discovery | |
| bedrock:ListModelCustomizationJobs | discovery | |
| bedrock:ListModelInvocationJobs | discovery | |
| bedrock:ListPrompts | discovery | |
| bedrock:ListProvisionedModelThroughputs | discovery | |
| bedrock:ListTagsForResource | discovery | |
| bedrock:DeleteAgent | remediation | |
| bedrock:DeleteCustomModel | remediation | |
| bedrock:DeleteGuardrail | remediation | |
| bedrock:DeleteImportedModel | remediation | |
| bedrock:DeleteKnowledgeBase | remediation | |
| bedrock:DeleteProvisionedModelThroughput | remediation | |
| bedrock:InvokeModel | ai-gateway |
ce
| Action | Access | Purpose |
|---|---|---|
| ce:GetCostAndUsage | cost | |
| ce:GetCostAndUsageWithResources | cost |
cloudfront
| Action | Access | Purpose |
|---|---|---|
| cloudfront:GetDistribution | discovery | |
| cloudfront:ListDistributions | discovery | |
| cloudfront:DeleteDistribution | remediation | |
| cloudfront:GetDistributionConfig | remediation | |
| cloudfront:UpdateDistribution | remediation |
cloudtrail
| Action | Access | Purpose |
|---|---|---|
| cloudtrail:DescribeTrails | discovery | |
| cloudtrail:GetTrailStatus | discovery | |
| cloudtrail:LookupEvents | recommendations |
cloudwatch
| Action | Access | Purpose |
|---|---|---|
| cloudwatch:DescribeAlarms | discovery | |
| cloudwatch:GetMetricData | recommendations | |
| cloudwatch:GetMetricStatistics | recommendations | |
| cloudwatch:ListDashboards | discovery | |
| cloudwatch:ListMetrics | recommendations | |
| cloudwatch:ListMetricStreams | discovery | |
| cloudwatch:DeleteAlarms | remediation | |
| cloudwatch:DeleteDashboards | remediation |
codebuild
| Action | Access | Purpose |
|---|---|---|
| codebuild:BatchGetProjects | discovery | |
| codebuild:ListBuildsForProject | discovery | |
| codebuild:ListProjects | discovery | |
| codebuild:DeleteProject | remediation |
codecommit
| Action | Access | Purpose |
|---|---|---|
| codecommit:DeleteRepository | remediation |
config
| Action | Access | Purpose |
|---|---|---|
| config:DescribeConfigRuleEvaluationStatus | discovery | |
| config:DescribeConfigRules | discovery | |
| config:DescribeConfigurationRecorders | discovery | |
| config:DescribeConfigurationRecorderStatus | discovery |
dax
| Action | Access | Purpose |
|---|---|---|
| dax:DescribeClusters | discovery |
dms
| Action | Access | Purpose |
|---|---|---|
| dms:DescribeReplicationInstances | discovery |
dynamodb
| Action | Access | Purpose |
|---|---|---|
| dynamodb:DescribeContinuousBackups | discovery | |
| dynamodb:DescribeTable | discovery | |
| dynamodb:ListTables | discovery |
ec2
| Action | Access | Purpose |
|---|---|---|
| ec2:DescribeAddresses | discovery | |
| ec2:DescribeAvailabilityZones | discovery | |
| ec2:DescribeFlowLogs | discovery | |
| ec2:DescribeImages | discovery | |
| ec2:DescribeInstances | discovery; provisioning | |
| ec2:DescribeLaunchTemplates | discovery | |
| ec2:DescribeNatGateways | discovery | |
| ec2:DescribeNetworkInterfaces | discovery | |
| ec2:DescribeRegions | discovery | |
| ec2:DescribeRouteTables | discovery | |
| ec2:DescribeSecurityGroupRules | discovery | |
| ec2:DescribeSecurityGroups | discovery | |
| ec2:DescribeSnapshots | discovery | |
| ec2:DescribeSubnets | discovery | |
| ec2:DescribeTags | discovery | |
| ec2:DescribeTransitGatewayPeeringAttachments | discovery | |
| ec2:DescribeTransitGateways | discovery | |
| ec2:DescribeVolumes | discovery; provisioning | |
| ec2:DescribeVpcEndpoints | discovery | |
| ec2:DescribeVpcPeeringConnections | discovery | |
| ec2:DescribeVpcs | discovery | |
| ec2:DescribeVpnConnections | discovery | |
| ec2:AcceptVpcPeeringConnection | provisioning | |
| ec2:AllocateAddress | provisioning | |
| ec2:AssociateRouteTable | provisioning | |
| ec2:AttachInternetGateway | provisioning | |
| ec2:AuthorizeSecurityGroupEgress | provisioning | |
| ec2:AuthorizeSecurityGroupIngress | provisioning | |
| ec2:CreateInternetGateway | provisioning | |
| ec2:CreateLaunchTemplate | scheduling | |
| ec2:CreateNatGateway | provisioning | |
| ec2:CreateRoute | provisioning | |
| ec2:CreateRouteTable | provisioning | |
| ec2:CreateSecurityGroup | provisioning | |
| ec2:CreateSubnet | provisioning | |
| ec2:CreateVpc | provisioning | |
| ec2:CreateVpcPeeringConnection | provisioning | |
| ec2:DeleteInternetGateway | remediation; provisioning | |
| ec2:DeleteLaunchTemplate | scheduling | |
| ec2:DeleteNatGateway | provisioning | |
| ec2:DeleteNetworkInterface | provisioning | |
| ec2:DeleteRoute | provisioning | |
| ec2:DeleteRouteTable | provisioning | |
| ec2:DeleteSecurityGroup | provisioning | |
| ec2:DeleteSnapshot | remediation | |
| ec2:DeleteSubnet | provisioning | |
| ec2:DeleteTransitGateway | remediation | |
| ec2:DeleteVolume | remediation | |
| ec2:DeleteVpc | provisioning | |
| ec2:DeleteVpcEndpoints | remediation | |
| ec2:DeleteVpcPeeringConnection | remediation; provisioning | |
| ec2:DetachInternetGateway | provisioning | |
| ec2:DetachNetworkInterface | provisioning | |
| ec2:DisassociateAddress | remediation | |
| ec2:DisassociateRouteTable | provisioning | |
| ec2:ModifyInstanceAttribute | remediation; provisioning | |
| ec2:ModifySnapshotTier | remediation | |
| ec2:ModifyVolume | remediation; provisioning | |
| ec2:ModifyVpcAttribute | provisioning | |
| ec2:ModifyVpcPeeringConnectionOptions | provisioning | |
| ec2:ReleaseAddress | remediation; provisioning | |
| ec2:RestoreSnapshotTier | remediation | |
| ec2:RevokeSecurityGroupEgress | provisioning | |
| ec2:RevokeSecurityGroupIngress | provisioning | |
| ec2:RunInstances | provisioning | |
| ec2:StartInstances | scheduling; provisioning | |
| ec2:StopInstances | scheduling; provisioning | |
| ec2:TerminateInstances | provisioning |
ecr
| Action | Access | Purpose |
|---|---|---|
| ecr:DescribeImages | discovery | |
| ecr:DescribeRepositories | discovery | |
| ecr:GetAuthorizationToken | discovery | |
| ecr:GetLifecyclePolicy | discovery | |
| ecr:GetRepositoryPolicy | discovery | |
| ecr:ListTagsForResource | discovery | |
| ecr:CreateRepository | deployments | |
| ecr:DeleteRepository | deployments |
ecs
| Action | Access | Purpose |
|---|---|---|
| ecs:DescribeClusters | discovery | |
| ecs:DescribeServices | discovery | |
| ecs:DescribeTaskDefinition | discovery | |
| ecs:DescribeTasks | discovery | |
| ecs:ListClusters | discovery | |
| ecs:ListServices | discovery | |
| ecs:ListTasks | discovery | |
| ecs:DeleteCluster | remediation | |
| ecs:DeleteService | remediation | |
| ecs:DeregisterTaskDefinition | remediation | |
| ecs:RegisterTaskDefinition | remediation | |
| ecs:UpdateService | scheduling |
eks
| Action | Access | Purpose |
|---|---|---|
| eks:DescribeAddon | discovery | |
| eks:DescribeCluster | discovery | |
| eks:DescribeNodegroup | discovery | |
| eks:DescribeUpdate | discovery | |
| eks:ListAccessEntries | discovery | |
| eks:ListClusters | discovery | |
| eks:ListFargateProfiles | discovery | |
| eks:ListNodegroups | discovery | |
| eks:CreateCluster | provisioning | |
| eks:CreateNodegroup | provisioning | |
| eks:DeleteCluster | provisioning | |
| eks:DeleteNodegroup | remediation; provisioning | |
| eks:TagResource | scheduling | |
| eks:UpdateClusterConfig | provisioning | |
| eks:UpdateNodegroupConfig | scheduling |
elasticache
| Action | Access | Purpose |
|---|---|---|
| elasticache:DescribeCacheClusters | discovery | |
| elasticache:DescribeCacheSubnetGroups | discovery | |
| elasticache:DescribeGlobalReplicationGroups | discovery | |
| elasticache:DescribeReplicationGroups | discovery | |
| elasticache:CreateCacheCluster | provisioning | |
| elasticache:CreateCacheSubnetGroup | provisioning | |
| elasticache:CreateReplicationGroup | provisioning | |
| elasticache:DeleteCacheCluster | provisioning | |
| elasticache:DeleteCacheSubnetGroup | provisioning | |
| elasticache:DeleteReplicationGroup | provisioning | |
| elasticache:ModifyCacheCluster | provisioning | |
| elasticache:ModifyReplicationGroup | provisioning |
elasticbeanstalk
| Action | Access | Purpose |
|---|---|---|
| elasticbeanstalk:DescribeConfigurationSettings | scheduling | |
| elasticbeanstalk:DescribeEnvironments | scheduling | |
| elasticbeanstalk:UpdateEnvironment | scheduling |
elasticfilesystem
| Action | Access | Purpose |
|---|---|---|
| elasticfilesystem:DescribeFileSystems | discovery | |
| elasticfilesystem:DescribeMountTargets | discovery | |
| elasticfilesystem:DescribeReplicationConfigurations | discovery | |
| elasticfilesystem:DeleteFileSystem | remediation | |
| elasticfilesystem:DeleteMountTarget | remediation |
elasticloadbalancing
| Action | Access | Purpose |
|---|---|---|
| elasticloadbalancing:DescribeLoadBalancers | discovery | |
| elasticloadbalancing:DescribeTags | discovery | |
| elasticloadbalancing:DescribeTargetGroups | discovery | |
| elasticloadbalancing:DescribeTargetHealth | discovery | |
| elasticloadbalancing:CreateListener | provisioning | |
| elasticloadbalancing:CreateLoadBalancer | provisioning | |
| elasticloadbalancing:CreateTargetGroup | provisioning | |
| elasticloadbalancing:DeleteLoadBalancer | provisioning | |
| elasticloadbalancing:DeleteTargetGroup | provisioning | |
| elasticloadbalancing:DeregisterTargets | provisioning | |
| elasticloadbalancing:DescribeLoadBalancerAttributes | remediation | |
| elasticloadbalancing:ModifyLoadBalancerAttributes | remediation; provisioning | |
| elasticloadbalancing:RegisterTargets | provisioning |
elasticmapreduce
| Action | Access | Purpose |
|---|---|---|
| elasticmapreduce:DescribeCluster | discovery | |
| elasticmapreduce:ListClusters | discovery | |
| elasticmapreduce:ListInstanceFleets | discovery | |
| elasticmapreduce:ListInstanceGroups | discovery |
emr-serverless
| Action | Access | Purpose |
|---|---|---|
| emr-serverless:GetApplication | scheduling | |
| emr-serverless:ListApplications | discovery | |
| emr-serverless:StartApplication | scheduling | |
| emr-serverless:StopApplication | scheduling |
es
| Action | Access | Purpose |
|---|---|---|
| es:DescribeDomains | discovery | |
| es:DescribeOutboundConnections | discovery | |
| es:ListDomainNames | discovery | |
| es:DeleteDomain | remediation |
fsx
| Action | Access | Purpose |
|---|---|---|
| fsx:DescribeFileSystems | discovery |
glue
| Action | Access | Purpose |
|---|---|---|
| glue:GetJob | discovery,remediation | |
| glue:GetJobs | discovery | |
| glue:UpdateJob | remediation |
guardduty
| Action | Access | Purpose |
|---|---|---|
| guardduty:GetDetector | discovery | |
| guardduty:ListDetectors | discovery |
iam
| Action | Access | Purpose |
|---|---|---|
| iam:GenerateCredentialReport | discovery | |
| iam:GetAccountPasswordPolicy | discovery | |
| iam:GetAccountSummary | discovery | |
| iam:GetCredentialReport | discovery | |
| iam:GetGroup | discovery | |
| iam:GetInstanceProfile | discovery | |
| iam:GetLoginProfile | discovery | |
| iam:GetOpenIDConnectProvider | discovery | |
| iam:GetRole | discovery | |
| iam:ListAccessKeys | discovery | |
| iam:ListAttachedRolePolicies | discovery | |
| iam:ListGroupPolicies | discovery | |
| iam:ListGroups | discovery | |
| iam:ListGroupsForUser | discovery | |
| iam:ListMFADevices | discovery | |
| iam:ListOpenIDConnectProviders | discovery | |
| iam:ListRolePolicies | discovery | |
| iam:ListRoles | discovery | |
| iam:ListUserPolicies | discovery | |
| iam:ListUsers | discovery | |
| iam:ListUserTags | discovery | |
| iam:SimulatePrincipalPolicy | probe | |
| iam:AddRoleToInstanceProfile | provisioning | |
| iam:AttachRolePolicy | provisioning | |
| iam:CreateInstanceProfile | provisioning | |
| iam:CreateOpenIDConnectProvider | provisioning | |
| iam:CreateRole | provisioning | |
| iam:CreateServiceLinkedRole | provisioning | |
| iam:DeleteInstanceProfile | provisioning | |
| iam:DeleteRole | provisioning | |
| iam:DeleteRolePolicy | provisioning | |
| iam:DetachRolePolicy | provisioning | |
| iam:PutRolePolicy | provisioning | |
| iam:RemoveRoleFromInstanceProfile | provisioning | |
| iam:TagRole | provisioning | |
| iam:UpdateAssumeRolePolicy | provisioning |
identitystore
| Action | Access | Purpose |
|---|---|---|
| identitystore:ListUsers | discovery |
inspector2
| Action | Access | Purpose |
|---|---|---|
| inspector2:BatchGetAccountStatus | discovery |
kafka
| Action | Access | Purpose |
|---|---|---|
| kafka:ListClustersV2 | discovery |
kinesis
| Action | Access | Purpose |
|---|---|---|
| kinesis:DescribeStream | discovery | |
| kinesis:DescribeStreamSummary | discovery | |
| kinesis:ListStreams | discovery | |
| kinesis:DeleteStream | remediation |
kms
| Action | Access | Purpose |
|---|---|---|
| kms:DescribeKey | discovery | |
| kms:ListKeys | discovery | |
| kms:ScheduleKeyDeletion | remediation |
lambda
| Action | Access | Purpose |
|---|---|---|
| lambda:GetFunction | discovery | |
| lambda:GetFunctionConcurrency | discovery | |
| lambda:GetFunctionConfiguration | discovery | |
| lambda:ListEventSourceMappings | discovery | |
| lambda:ListFunctions | discovery | |
| lambda:ListTags | discovery | |
| lambda:DeleteFunction | remediation | |
| lambda:DeleteFunctionConcurrency | scheduling | |
| lambda:PutFunctionConcurrency | scheduling | |
| lambda:TagResource | scheduling | |
| lambda:UpdateFunctionConfiguration | remediation |
lightsail
| Action | Access | Purpose |
|---|---|---|
| lightsail:GetInstances | discovery | |
| lightsail:StartInstance | scheduling | |
| lightsail:StopInstance | scheduling |
logs
| Action | Access | Purpose |
|---|---|---|
| logs:DescribeLogGroups | discovery | |
| logs:DescribeMetricFilters | discovery | |
| logs:DescribeSubscriptionFilters | discovery | |
| logs:GetQueryResults | recommendations | |
| logs:StartQuery | recommendations | |
| logs:DeleteRetentionPolicy | remediation | |
| logs:PutRetentionPolicy | remediation |
memorydb
| Action | Access | Purpose |
|---|---|---|
| memorydb:DescribeClusters | discovery |
mq
| Action | Access | Purpose |
|---|---|---|
| mq:DescribeBroker | discovery | |
| mq:ListBrokers | discovery |
rds
| Action | Access | Purpose |
|---|---|---|
| rds:DescribeDBClusters | discovery | |
| rds:DescribeDBInstances | discovery | |
| rds:DescribeDBProxies | discovery | |
| rds:DescribeDBProxyTargets | discovery | |
| rds:DescribeDBSnapshots | discovery | |
| rds:DescribeDBSubnetGroups | discovery | |
| rds:DescribeGlobalClusters | discovery | |
| rds:ListTagsForResource | discovery | |
| rds:CreateDBInstance | provisioning | |
| rds:CreateDBSubnetGroup | provisioning | |
| rds:DeleteDBInstance | provisioning | |
| rds:DeleteDBProxy | remediation | |
| rds:DeleteDBSubnetGroup | provisioning | |
| rds:ModifyDBInstance | remediation; provisioning | |
| rds:StartDBCluster | scheduling | |
| rds:StartDBInstance | scheduling | |
| rds:StopDBCluster | scheduling | |
| rds:StopDBInstance | scheduling |
redshift
| Action | Access | Purpose |
|---|---|---|
| redshift:DescribeClusters | discovery | |
| redshift:PauseCluster | scheduling | |
| redshift:ResumeCluster | scheduling |
resource-explorer-2
| Action | Access | Purpose |
|---|---|---|
| resource-explorer-2:Search | discovery |
route53
| Action | Access | Purpose |
|---|---|---|
| route53:GetChange | discovery | |
| route53:GetHealthCheckStatus | discovery | |
| route53:GetHostedZone | discovery | |
| route53:ListHealthChecks | discovery | |
| route53:ListHostedZones | discovery | |
| route53:ListResourceRecordSets | discovery | |
| route53:ChangeResourceRecordSets | provisioning | |
| route53:CreateHostedZone | provisioning | |
| route53:DeleteHealthCheck | remediation | |
| route53:DeleteHostedZone | provisioning |
s3
| Action | Access | Purpose |
|---|---|---|
| s3:GetBucketAccelerateConfiguration | discovery | |
| s3:GetBucketPolicy | discovery | |
| s3:GetBucketPolicyStatus | discovery | |
| s3:GetBucketReplication | discovery | |
| s3:GetBucketRequestPayment | discovery | |
| s3:GetObject | cost | |
| s3:ListAllMyBuckets | discovery | |
| s3:ListBucket | cost | |
| s3:ListBucketMultipartUploads | discovery | |
| s3:ListBucketVersions | discovery | |
| s3:GetAccelerateConfiguration | remediation | |
| s3:GetIntelligentTieringConfiguration | remediation | |
| s3:GetLifecycleConfiguration | remediation | |
| s3:PutAccelerateConfiguration | remediation | |
| s3:PutIntelligentTieringConfiguration | remediation | |
| s3:PutLifecycleConfiguration | remediation |
sagemaker
| Action | Access | Purpose |
|---|---|---|
| sagemaker:DescribeApp | discovery | |
| sagemaker:DescribeAutoMLJobV2 | discovery | |
| sagemaker:DescribeCluster | discovery | |
| sagemaker:DescribeCompilationJob | discovery | |
| sagemaker:DescribeEndpoint | discovery | |
| sagemaker:DescribeEndpointConfig | discovery | |
| sagemaker:DescribeFeatureGroup | discovery | |
| sagemaker:DescribeHyperParameterTuningJob | discovery | |
| sagemaker:DescribeInferenceComponent | discovery | |
| sagemaker:DescribeLabelingJob | discovery | |
| sagemaker:DescribeNotebookInstance | discovery | |
| sagemaker:DescribeProcessingJob | discovery | |
| sagemaker:DescribeSpace | discovery | |
| sagemaker:DescribeTrainingJob | discovery | |
| sagemaker:DescribeTransformJob | discovery | |
| sagemaker:ListApps | discovery | |
| sagemaker:ListAutoMLJobs | discovery | |
| sagemaker:ListClusters | discovery | |
| sagemaker:ListCompilationJobs | discovery | |
| sagemaker:ListEndpoints | discovery | |
| sagemaker:ListFeatureGroups | discovery | |
| sagemaker:ListHyperParameterTuningJobs | discovery | |
| sagemaker:ListInferenceComponents | discovery | |
| sagemaker:ListLabelingJobs | discovery | |
| sagemaker:ListNotebookInstances | discovery | |
| sagemaker:ListProcessingJobs | discovery | |
| sagemaker:ListSpaces | discovery | |
| sagemaker:ListTags | discovery | |
| sagemaker:ListTrainingJobs | discovery | |
| sagemaker:ListTransformJobs | discovery | |
| sagemaker:CreateEndpoint | scheduling | |
| sagemaker:CreateEndpointConfig | remediation | |
| sagemaker:DeleteEndpoint | remediation | |
| sagemaker:DeleteNotebookInstance | remediation | |
| sagemaker:StartNotebookInstance | scheduling | |
| sagemaker:StopNotebookInstance | scheduling | |
| sagemaker:UpdateCluster | scheduling | |
| sagemaker:UpdateEndpoint | remediation |
secretsmanager
| Action | Access | Purpose |
|---|---|---|
| secretsmanager:ListSecrets | discovery | |
| secretsmanager:CreateSecret | deployments | |
| secretsmanager:DeleteSecret | remediation; deployments | |
| secretsmanager:GetSecretValue | deployments | |
| secretsmanager:PutSecretValue | deployments |
ses
| Action | Access | Purpose |
|---|---|---|
| ses:ListEmailIdentities | discovery | |
| ses:DeleteEmailIdentity | remediation |
sns
| Action | Access | Purpose |
|---|---|---|
| sns:DeleteTopic | remediation |
sqs
| Action | Access | Purpose |
|---|---|---|
| sqs:DeleteQueue | remediation |
ssm
| Action | Access | Purpose |
|---|---|---|
| ssm:DescribeInstanceInformation | discovery | |
| ssm:GetCommandInvocation | deployments | |
| ssm:GetParameter | deployments | |
| ssm:SendCommand | deployments |
sso
| Action | Access | Purpose |
|---|---|---|
| sso:ListInstances | discovery |
states
| Action | Access | Purpose |
|---|---|---|
| states:ListExecutions | scheduling | |
| states:DeleteStateMachine | remediation | |
| states:StopExecution | scheduling |
sts
| Action | Access | Purpose |
|---|---|---|
| sts:GetCallerIdentity | probe |
wafv2
| Action | Access | Purpose |
|---|---|---|
| wafv2:GetWebACL | remediation | |
| wafv2:DeleteWebACL | remediation |
workspaces
| Action | Access | Purpose |
|---|---|---|
| workspaces:DescribeWorkspaces | discovery | |
| workspaces:StartWorkspaces | scheduling | |
| workspaces:StopWorkspaces | scheduling |
xray
| Action | Access | Purpose |
|---|---|---|
| xray:GetSamplingRules | recommendations |
Two separate IAM grants, read then write
ZopNight asks for two grants, and they are separate on purpose. The first is read-only: 248 permissions that let it discover your estate, read CloudWatch metrics and pull cost data. It cannot start, stop, resize or delete anything with that grant. Most teams run on it indefinitely and never issue the second.
The second grant adds 186 write permissions and only matters if you want ZopNight to act: schedules that stop instances at night, or one-click remediation. It ships as its own CloudFormation stack, so declining it is the default rather than an exception.
Which connection method should I use?
Three are supported. Prefer the first.
- Assume role: a cross-account IAM role ZopNight assumes via STS. No secret is ever stored on our side. Created by a one-click CloudFormation stack, and the only method that supports the one-click billing upgrade.
- Static access keys: a long-lived key pair. Works everywhere, but you own rotation, and the secret sits at rest in our credential store.
- Temporary credentials: short-lived STS credentials. Most restrictive, but they expire, so something has to refresh them.
You can switch between all three in place on an existing account.
What the read-only role is used for
| Purpose | What it reads |
|---|---|
discovery | Resource inventory across every region, on a 6-hour cycle |
cost | Cost Explorer or CUR 2.0, for per-resource spend |
recommendations | The signals rules evaluate: utilisation, attachment state, configuration |
probe | A permission self-check, so the UI can tell you what is missing before you hit an error |
What the write role can do, and what it can never do
Write permissions are scoped to lifecycle and remediation: start and stop instances, scale
groups to zero, pause databases, delete resources a recommendation identified. They are grouped
under scheduling, remediation, provisioning and deployments.
Nothing in either grant can read object contents, database rows, or secret values. ZopNight reads metadata, metrics and billing, and never your data.
How do I check what a credential can actually do?
The probe permissions exist for this. After connecting, ZopNight runs a per-action check and
shows a verdict for each capability, so you find out that a policy is missing
ec2:StopInstances before a schedule fails silently at 8pm rather than after.
AWS permissions: common questions
What IAM permissions does ZopNight need on AWS?
248 read-only permissions to discover the account, read CloudWatch metrics and pull Cost Explorer data. Write is a second, separate CloudFormation stack of 186 permissions covering start, stop, scale and remediation. Most teams run on the read grant indefinitely and never install the second.
Can ZopNight read my S3 objects or database rows?
No. Neither grant reaches object contents, database rows or secret values. It reads metadata, metrics and billing, and stopping a resource is the most it can do even with write installed.
How do I check what a credential can actually do?
The probe permissions exist for that. After you connect, ZopNight runs a per-action check and shows a verdict per capability, so a policy missing ec2:StopInstances surfaces before a schedule fails silently at 8pm rather than after.