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}