{ "Version": "2012-10-17", "Statement": [ { "Sid": "CloudFormationLifecycleScoped", "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:UpdateStack", "cloudformation:DeleteStack", "cloudformation:DescribeStacks", "cloudformation:DescribeStackEvents", "cloudformation:DescribeStackResources", "cloudformation:GetTemplate" ], "Resource": "arn:aws:cloudformation:*:*:stack/personal-lifecycle-tracker-*/*" }, { "Sid": "CloudFormationGlobalStackActions", "Effect": "Allow", "Action": [ "cloudformation:ValidateTemplate", "cloudformation:ListStacks", "cloudformation:ContinueUpdateRollback", "cloudformation:CancelUpdateStack" ], "Resource": "*" }, { "Sid": "EC2NetworkingAndVPC", "Effect": "Allow", "Action": [ "ec2:CreateVpc", "ec2:DeleteVpc", "ec2:DescribeVpcs", "ec2:ModifyVpcAttribute", "ec2:CreateSubnet", "ec2:DeleteSubnet", "ec2:DescribeSubnets", "ec2:ModifySubnetAttribute", "ec2:CreateInternetGateway", "ec2:DeleteInternetGateway", "ec2:DescribeInternetGateways", "ec2:AttachInternetGateway", "ec2:DetachInternetGateway", "ec2:CreateRouteTable", "ec2:DeleteRouteTable", "ec2:DescribeRouteTables", "ec2:AssociateRouteTable", "ec2:DisassociateRouteTable", "ec2:CreateRoute", "ec2:DeleteRoute", "ec2:CreateSecurityGroup", "ec2:DeleteSecurityGroup", "ec2:DescribeSecurityGroups", "ec2:AuthorizeSecurityGroupIngress", "ec2:AuthorizeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress", "ec2:RevokeSecurityGroupEgress", "ec2:AllocateAddress", "ec2:ReleaseAddress", "ec2:AssociateAddress", "ec2:DisassociateAddress", "ec2:DescribeAddresses", "ec2:CreateTags", "ec2:DeleteTags", "ec2:DescribeTags", "ec2:DescribeImages" ], "Resource": "*" }, { "Sid": "EC2ComputeInstances", "Effect": "Allow", "Action": [ "ec2:RunInstances", "ec2:TerminateInstances", "ec2:StartInstances", "ec2:StopInstances", "ec2:DescribeInstances", "ec2:DescribeInstanceStatus", "ec2:ModifyInstanceAttribute", "ec2:DescribeInstanceAttribute", "ec2:GetConsoleOutput", "ec2:AttachVolume", "ec2:DetachVolume", "ec2:DescribeVolumes" ], "Resource": "*" }, { "Sid": "SSMPublicParameterLookupForAMI", "Effect": "Allow", "Action": [ "ssm:GetParameter", "ssm:GetParameters" ], "Resource": "arn:aws:ssm:*:*:parameter/aws/service/canonical/ubuntu/*" }, { "Sid": "IAMRoleCreationScopedToProject", "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:DeleteRole", "iam:GetRole", "iam:TagRole", "iam:AttachRolePolicy", "iam:DetachRolePolicy", "iam:ListRolePolicies", "iam:GetRolePolicy", "iam:ListAttachedRolePolicies", "iam:ListInstanceProfilesForRole" ], "Resource": [ "arn:aws:iam::*:role/personal-lifecycle-tracker-*-role", "arn:aws:iam::*:role/personal-lifecycle-tracker-lambda-exec-*" ] }, { "Sid": "IAMInstanceProfileScoped", "Effect": "Allow", "Action": [ "iam:CreateInstanceProfile", "iam:DeleteInstanceProfile", "iam:GetInstanceProfile", "iam:TagInstanceProfile", "iam:AddRoleToInstanceProfile", "iam:RemoveRoleFromInstanceProfile" ], "Resource": "arn:aws:iam::*:instance-profile/*" }, { "Sid": "IAMPassRoleScoped", "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::*:role/personal-lifecycle-tracker-*-role", "arn:aws:iam::*:role/personal-lifecycle-tracker-lambda-exec-*" ] }, { "Sid": "SSMSessionManagerInspection", "Effect": "Allow", "Action": [ "ssm:StartSession", "ssm:TerminateSession", "ssm:ResumeSession", "ssm:DescribeInstanceInformation", "ssm:GetConnectionStatus", "ssm:SendCommand", "ssm:GetCommandInvocation", "ssm:ListCommandInvocations", "ssm:ListCommands" ], "Resource": "*" }, { "Sid": "S3FrontendBucketManagement", "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:DeleteBucket", "s3:Get*", "s3:Put*", "s3:DeleteObject*", "s3:List*" ], "Resource": [ "arn:aws:s3:::personal-lifecycle-tracker-*", "arn:aws:s3:::personal-lifecycle-tracker-*/*" ] }, { "Sid": "ZeroTrustExplicitDenySecurityBoundaries", "Effect": "Deny", "Action": [ "iam:CreateUser", "iam:DeleteUser", "iam:CreateAccessKey", "iam:DeleteAccessKey", "iam:CreateLoginProfile", "iam:UpdateLoginProfile", "iam:AttachUserPolicy", "iam:PutUserPolicy", "organizations:*", "account:*", "aws-portal:*", "budgets:*" ], "Resource": "*" } ] }