{
"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": "*"
}
]
}