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:DescribeInstancesec2:DescribeNatGatewaysrds:DescribeDBInstancesrds:ListTagsForResourceecs:DescribeServicesdynamodb:PutItem,dynamodb:GetItem,dynamodb:UpdateItemsns:Publish(infrastructure events topic)
ScheduleManager
dynamodb:GetRecords,dynamodb:GetShardIterator,dynamodb:DescribeStream,dynamodb:ListStreamsscheduler:CreateSchedule,scheduler:UpdateSchedule,scheduler:DeleteScheduleiam:PassRole(for EventBridge Scheduler execution role)sns:Publish(infrastructure events topic)
EC2ActionProcessor
ec2:StartInstances,ec2:StopInstancesec2:DescribeInstancesdynamodb:UpdateItemsqs:ReceiveMessage,sqs:DeleteMessagesns:Publish
RDSActionProcessor
rds:StartDBInstance,rds:StopDBInstancerds:DescribeDBInstancesdynamodb:UpdateItemsqs:ReceiveMessage,sqs:DeleteMessagesns:Publish
NATActionProcessor
ec2:CreateNatGateway,ec2:DeleteNatGatewayec2:DescribeNatGatewaysec2:CreateRoute,ec2:DeleteRoute,ec2:DescribeRouteTablesec2:AssociateAddress(for EIP reattachment)dynamodb:GetItem,dynamodb:PutItem,dynamodb:UpdateItemsqs:ReceiveMessage,sqs:DeleteMessagesns:Publish
ECSActionProcessor
ecs:UpdateServiceecs:DescribeServicesdynamodb:GetItem,dynamodb:UpdateItemsqs:ReceiveMessage,sqs:DeleteMessagesns:Publish