cat << EOF > ${FILE_IAM_POLICY_DOC}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloud9:ValidateEnvironmentName",
"cloud9:UpdateUserSettings",
"cloud9:GetUserSettings",
"iam:GetUser",
"iam:ListUsers",
"ec2:DescribeIamInstanceProfileAssociations",
"ec2:DescribeInstances",
"ec2:DescribeInstanceStatus",
"ec2:DescribeSubnets",
"ec2:DescribeVolumes",
"ec2:DescribeVpcs"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"cloud9:CreateEnvironmentEC2",
"cloud9:DeleteEnvironment"
],
"Resource": "*",
"Condition": {
"StringLike": {
"cloud9:EnvironmentName": "${CLOUD9_ENVIRONMENT_NAME_PREFIX}-*",
"cloud9:InstanceType": [
"t2.*",
"t3.*",
"t3a.*",
"t4g.*"
]
}
}
},
{
"Effect": "Allow",
"Action": [
"cloud9:GetUserPublicKey"
],
"Resource": "*",
"Condition": {
"Null": {
"cloud9:UserArn": "true"
}
}
},
{
"Effect": "Allow",
"Action": "cloud9:DescribeEnvironmentMemberships",
"Resource": "*",
"Condition": {
"Null": {
"cloud9:UserArn": "true",
"cloud9:EnvironmentId": "true"
}
}
},
{
"Effect": "Allow",
"Action": "iam:CreateServiceLinkedRole",
"Resource": "*",
"Condition": {
"StringLike": {
"iam:AWSServiceName": "cloud9.amazonaws.com"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:DisassociateIamInstanceProfile",
"ec2:AssociateIamInstanceProfile"
],
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"StringLike": {
"ec2:ResourceTag/Name": "aws-cloud9-${CLOUD9_ENVIRONMENT_NAME_PREFIX}-*"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:RebootInstances",
"ec2:StopInstances",
"ec2:StartInstances",
"ec2:TerminateInstances"
],
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"StringLike": {
"ec2:ResourceTag/Name": "aws-cloud9-${CLOUD9_ENVIRONMENT_NAME_PREFIX}-*"
}
}
},
{
"Action": "iam:ListInstanceProfiles",
"Effect": "Allow",
"Resource": [
"arn:aws:iam::*:instance-profile/*"
]
},
{
"Action": "iam:PassRole",
"Effect": "Allow",
"Resource": [
"${iam_role_arn}"
],
"Condition": {
"StringLike": {
"iam:PassedToService": [
"ec2.amazonaws.com"
]
}
}
},
{
"Effect": "Allow",
"Action": [
"ssm:StartSession"
],
"Resource": [
"arn:aws:ssm:*:*:document/*"
]
}
]
}
EOF
cat ${FILE_IAM_POLICY_DOC}