Skip to content

IAM permissions reference

CloudFormation deployment role

The IAM principal that deploys the Uptime Scheduler CloudFormation stack needs sufficient permissions to create and manage the stack’s resources.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CloudFormationStackManagement",
"Effect": "Allow",
"Action": [
"cloudformation:CreateStack",
"cloudformation:UpdateStack",
"cloudformation:DeleteStack",
"cloudformation:DescribeStacks",
"cloudformation:DescribeStackEvents",
"cloudformation:DescribeStackResources",
"cloudformation:GetTemplate",
"cloudformation:ValidateTemplate",
"cloudformation:ListStackResources"
],
"Resource": "*"
},
{
"Sid": "IAMRolesAndPolicies",
"Effect": "Allow",
"Action": [
"iam:CreateRole",
"iam:DeleteRole",
"iam:GetRole",
"iam:PassRole",
"iam:AttachRolePolicy",
"iam:DetachRolePolicy",
"iam:PutRolePolicy",
"iam:DeleteRolePolicy",
"iam:GetRolePolicy",
"iam:TagRole",
"iam:UntagRole",
"iam:UpdateAssumeRolePolicy"
],
"Resource": "arn:aws:iam::*:role/*"
},
{
"Sid": "LambdaFunctions",
"Effect": "Allow",
"Action": [
"lambda:CreateFunction",
"lambda:DeleteFunction",
"lambda:GetFunction",
"lambda:GetFunctionConfiguration",
"lambda:UpdateFunctionCode",
"lambda:UpdateFunctionConfiguration",
"lambda:AddPermission",
"lambda:RemovePermission",
"lambda:InvokeFunction",
"lambda:TagResource",
"lambda:ListTags",
"lambda:CreateEventSourceMapping",
"lambda:DeleteEventSourceMapping",
"lambda:GetEventSourceMapping",
"lambda:UpdateEventSourceMapping",
"lambda:PutFunctionConcurrency"
],
"Resource": "*"
},
{
"Sid": "S3LambdaCodeBucket",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": "arn:aws:s3:::uptime-platform-*-customer-resources/customer-stack/*"
},
{
"Sid": "DynamoDB",
"Effect": "Allow",
"Action": [
"dynamodb:CreateTable",
"dynamodb:DeleteTable",
"dynamodb:DescribeTable",
"dynamodb:DescribeTimeToLive",
"dynamodb:UpdateTimeToLive",
"dynamodb:UpdateTable",
"dynamodb:DescribeContinuousBackups",
"dynamodb:ListTagsOfResource",
"dynamodb:TagResource",
"dynamodb:UntagResource"
],
"Resource": "*"
},
{
"Sid": "KMS",
"Effect": "Allow",
"Action": [
"kms:CreateKey",
"kms:DeleteKey",
"kms:DescribeKey",
"kms:EnableKeyRotation",
"kms:GetKeyPolicy",
"kms:GetKeyRotationStatus",
"kms:ListKeyPolicies",
"kms:ListResourceTags",
"kms:PutKeyPolicy",
"kms:ScheduleKeyDeletion",
"kms:TagResource",
"kms:UntagResource",
"kms:CreateAlias",
"kms:DeleteAlias",
"kms:UpdateAlias",
"kms:ListAliases"
],
"Resource": "*"
},
{
"Sid": "SNS",
"Effect": "Allow",
"Action": [
"sns:CreateTopic",
"sns:DeleteTopic",
"sns:GetTopicAttributes",
"sns:SetTopicAttributes",
"sns:Subscribe",
"sns:Unsubscribe",
"sns:GetSubscriptionAttributes",
"sns:ListSubscriptionsByTopic",
"sns:AddPermission",
"sns:RemovePermission",
"sns:TagResource",
"sns:ListTagsForResource"
],
"Resource": "*"
},
{
"Sid": "SQS",
"Effect": "Allow",
"Action": [
"sqs:CreateQueue",
"sqs:DeleteQueue",
"sqs:GetQueueAttributes",
"sqs:SetQueueAttributes",
"sqs:GetQueueUrl",
"sqs:AddPermission",
"sqs:RemovePermission",
"sqs:TagQueue",
"sqs:ListQueueTags"
],
"Resource": "*"
},
{
"Sid": "CloudTrail",
"Effect": "Allow",
"Action": [
"cloudtrail:CreateTrail",
"cloudtrail:DeleteTrail",
"cloudtrail:DescribeTrails",
"cloudtrail:GetTrailStatus",
"cloudtrail:GetEventSelectors",
"cloudtrail:PutEventSelectors",
"cloudtrail:StartLogging",
"cloudtrail:StopLogging",
"cloudtrail:AddTags",
"cloudtrail:RemoveTags",
"cloudtrail:ListTags"
],
"Resource": "*"
},
{
"Sid": "S3CloudTrailBucket",
"Effect": "Allow",
"Action": [
"s3:CreateBucket",
"s3:DeleteBucket",
"s3:GetBucketPolicy",
"s3:PutBucketPolicy",
"s3:DeleteBucketPolicy",
"s3:GetBucketAcl",
"s3:PutBucketAcl",
"s3:GetBucketVersioning",
"s3:PutBucketVersioning",
"s3:GetBucketEncryption",
"s3:PutBucketEncryption",
"s3:GetLifecycleConfiguration",
"s3:PutLifecycleConfiguration",
"s3:GetBucketPublicAccessBlock",
"s3:PutBucketPublicAccessBlock",
"s3:GetBucketTagging",
"s3:PutBucketTagging",
"s3:ListBucket"
],
"Resource": "*"
},
{
"Sid": "EventBridge",
"Effect": "Allow",
"Action": [
"events:CreateEventBus",
"events:DeleteEventBus",
"events:DescribeEventBus",
"events:PutRule",
"events:DeleteRule",
"events:DescribeRule",
"events:EnableRule",
"events:DisableRule",
"events:PutTargets",
"events:RemoveTargets",
"events:ListTargetsByRule",
"events:TagResource",
"events:UntagResource",
"events:ListTagsForResource"
],
"Resource": "*"
},
{
"Sid": "EventBridgeScheduler",
"Effect": "Allow",
"Action": [
"scheduler:CreateSchedule",
"scheduler:DeleteSchedule",
"scheduler:GetSchedule",
"scheduler:UpdateSchedule",
"scheduler:CreateScheduleGroup",
"scheduler:DeleteScheduleGroup",
"scheduler:GetScheduleGroup",
"scheduler:ListSchedules",
"scheduler:TagResource",
"scheduler:UntagResource"
],
"Resource": "*"
},
{
"Sid": "CloudWatchLogs",
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:DeleteLogGroup",
"logs:DescribeLogGroups",
"logs:PutRetentionPolicy",
"logs:DeleteRetentionPolicy",
"logs:ListTagsLogGroup",
"logs:TagLogGroup",
"logs:UntagLogGroup"
],
"Resource": "*"
}
]
}

Lambda execution roles

The CloudFormation stack creates least-privilege IAM roles for each Lambda function. These are created automatically and do not require any action from you.

TagEventProcessor

  • ec2:DescribeInstances
  • ec2:DescribeNatGateways
  • rds:DescribeDBInstances
  • rds:ListTagsForResource
  • ecs:DescribeServices
  • dynamodb:PutItem, dynamodb:GetItem, dynamodb:UpdateItem
  • sns:Publish (infrastructure events topic)

ScheduleManager

  • dynamodb:GetRecords, dynamodb:GetShardIterator, dynamodb:DescribeStream, dynamodb:ListStreams
  • scheduler:CreateSchedule, scheduler:UpdateSchedule, scheduler:DeleteSchedule
  • iam:PassRole (for EventBridge Scheduler execution role)
  • sns:Publish (infrastructure events topic)

EC2ActionProcessor

  • ec2:StartInstances, ec2:StopInstances
  • ec2:DescribeInstances
  • dynamodb:UpdateItem
  • sqs:ReceiveMessage, sqs:DeleteMessage
  • sns:Publish

RDSActionProcessor

  • rds:StartDBInstance, rds:StopDBInstance
  • rds:DescribeDBInstances
  • dynamodb:UpdateItem
  • sqs:ReceiveMessage, sqs:DeleteMessage
  • sns:Publish

NATActionProcessor

  • ec2:CreateNatGateway, ec2:DeleteNatGateway
  • ec2:DescribeNatGateways
  • ec2:CreateRoute, ec2:DeleteRoute, ec2:DescribeRouteTables
  • ec2:AssociateAddress (for EIP reattachment)
  • dynamodb:GetItem, dynamodb:PutItem, dynamodb:UpdateItem
  • sqs:ReceiveMessage, sqs:DeleteMessage
  • sns:Publish

ECSActionProcessor

  • ecs:UpdateService
  • ecs:DescribeServices
  • dynamodb:GetItem, dynamodb:UpdateItem
  • sqs:ReceiveMessage, sqs:DeleteMessage
  • sns:Publish