AWS permissions
What access does ZopNight need on AWS?
ZopNight needs 281 read-only IAM permissions to discover an AWS account, read CloudWatch metrics and pull Cost Explorer or CUR 2.0 billing data. Write access is a separate CloudFormation stack you can decline: 128 permissions for scheduling, tagging and remediation, including deletes. ZopNight uses the read grant for metadata, metrics and billing.
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: 281 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 128 write permissions and only matters if you want ZopNight to act: schedules that stop instances at night, tagging, or 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 cover scheduling, tagging and remediation: start and stop instances, scale
groups to zero, pause databases, tag resources, and modify or delete resources a recommendation
identified. They are grouped under scheduling, tagging and remediation, plus one ai-gateway
action.
ZopNight does not read secret values. The read grant includes s3:GetObject so ZopNight can read CUR 2.0
billing files, and the role also attaches the AWS-managed ReadOnlyAccess policy, which can read
more than ZopNight uses. ZopNight reads metadata, metrics and billing, not 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?
281 read-only permissions to discover the account, read CloudWatch metrics and pull Cost Explorer or CUR 2.0 data. Write is a second, separate CloudFormation stack of 128 permissions covering scheduling, tagging and remediation, including deletes. Most teams run on the read grant indefinitely and never install the second.
Can ZopNight read my S3 objects or database rows?
ZopNight reads metadata, metrics and billing, not your data, and it does not read secret values. The read grant does include `s3:GetObject` for CUR 2.0 billing files, and the role attaches the AWS-managed `ReadOnlyAccess` policy, which can read more than ZopNight uses. With write installed it can also start, stop, scale, tag and delete resources for remediation.
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.