{
  "typeName" : "AWS::EC2::ClientVpnEndpoint",
  "description" : "Resource Type definition for AWS::EC2::ClientVpnEndpoint",
  "additionalProperties" : false,
  "properties" : {
    "ClientCidrBlock" : {
      "type" : "string"
    },
    "ClientConnectOptions" : {
      "$ref" : "#/definitions/ClientConnectOptions"
    },
    "Description" : {
      "type" : "string"
    },
    "ClientRouteEnforcementOptions" : {
      "$ref" : "#/definitions/ClientRouteEnforcementOptions"
    },
    "TagSpecifications" : {
      "type" : "array",
      "uniqueItems" : false,
      "items" : {
        "$ref" : "#/definitions/TagSpecification"
      }
    },
    "AuthenticationOptions" : {
      "type" : "array",
      "uniqueItems" : false,
      "items" : {
        "$ref" : "#/definitions/ClientAuthenticationRequest"
      }
    },
    "ServerCertificateArn" : {
      "type" : "string"
    },
    "SessionTimeoutHours" : {
      "type" : "integer"
    },
    "DnsServers" : {
      "type" : "array",
      "uniqueItems" : false,
      "items" : {
        "type" : "string"
      }
    },
    "SecurityGroupIds" : {
      "type" : "array",
      "uniqueItems" : false,
      "items" : {
        "type" : "string"
      }
    },
    "DisconnectOnSessionTimeout" : {
      "type" : "boolean"
    },
    "ConnectionLogOptions" : {
      "$ref" : "#/definitions/ConnectionLogOptions"
    },
    "SplitTunnel" : {
      "type" : "boolean"
    },
    "TrafficIpAddressType" : {
      "type" : "string"
    },
    "ClientLoginBannerOptions" : {
      "$ref" : "#/definitions/ClientLoginBannerOptions"
    },
    "VpcId" : {
      "type" : "string"
    },
    "SelfServicePortal" : {
      "type" : "string"
    },
    "TransitGatewayConfiguration" : {
      "$ref" : "#/definitions/TransitGatewayConfiguration"
    },
    "TransportProtocol" : {
      "type" : "string"
    },
    "Id" : {
      "type" : "string"
    },
    "EndpointIpAddressType" : {
      "type" : "string"
    },
    "VpnPort" : {
      "type" : "integer"
    }
  },
  "definitions" : {
    "ConnectionLogOptions" : {
      "type" : "object",
      "additionalProperties" : false,
      "properties" : {
        "Enabled" : {
          "type" : "boolean"
        },
        "CloudwatchLogGroup" : {
          "type" : "string"
        },
        "CloudwatchLogStream" : {
          "type" : "string"
        }
      },
      "required" : [ "Enabled" ]
    },
    "ClientConnectOptions" : {
      "type" : "object",
      "additionalProperties" : false,
      "properties" : {
        "Enabled" : {
          "type" : "boolean"
        },
        "LambdaFunctionArn" : {
          "type" : "string"
        }
      },
      "required" : [ "Enabled" ]
    },
    "FederatedAuthenticationRequest" : {
      "type" : "object",
      "additionalProperties" : false,
      "properties" : {
        "SAMLProviderArn" : {
          "type" : "string"
        },
        "SelfServiceSAMLProviderArn" : {
          "type" : "string"
        }
      },
      "required" : [ "SAMLProviderArn" ]
    },
    "ClientRouteEnforcementOptions" : {
      "type" : "object",
      "additionalProperties" : false,
      "properties" : {
        "Enforced" : {
          "type" : "boolean"
        }
      }
    },
    "ClientLoginBannerOptions" : {
      "type" : "object",
      "additionalProperties" : false,
      "properties" : {
        "Enabled" : {
          "type" : "boolean"
        },
        "BannerText" : {
          "type" : "string"
        }
      },
      "required" : [ "Enabled" ]
    },
    "DirectoryServiceAuthenticationRequest" : {
      "type" : "object",
      "additionalProperties" : false,
      "properties" : {
        "DirectoryId" : {
          "type" : "string"
        }
      },
      "required" : [ "DirectoryId" ]
    },
    "TransitGatewayConfiguration" : {
      "type" : "object",
      "additionalProperties" : false,
      "properties" : {
        "TransitGatewayId" : {
          "type" : "string"
        },
        "AvailabilityZoneIds" : {
          "type" : "array",
          "uniqueItems" : false,
          "items" : {
            "type" : "string"
          }
        },
        "AvailabilityZones" : {
          "type" : "array",
          "uniqueItems" : false,
          "items" : {
            "type" : "string"
          }
        }
      },
      "required" : [ "TransitGatewayId" ]
    },
    "CertificateAuthenticationRequest" : {
      "type" : "object",
      "additionalProperties" : false,
      "properties" : {
        "ClientRootCertificateChainArn" : {
          "type" : "string"
        }
      },
      "required" : [ "ClientRootCertificateChainArn" ]
    },
    "ClientAuthenticationRequest" : {
      "type" : "object",
      "additionalProperties" : false,
      "properties" : {
        "MutualAuthentication" : {
          "$ref" : "#/definitions/CertificateAuthenticationRequest"
        },
        "Type" : {
          "type" : "string"
        },
        "ActiveDirectory" : {
          "$ref" : "#/definitions/DirectoryServiceAuthenticationRequest"
        },
        "FederatedAuthentication" : {
          "$ref" : "#/definitions/FederatedAuthenticationRequest"
        }
      },
      "required" : [ "Type" ]
    },
    "Tag" : {
      "type" : "object",
      "additionalProperties" : false,
      "properties" : {
        "Value" : {
          "type" : "string"
        },
        "Key" : {
          "type" : "string"
        }
      },
      "required" : [ "Value", "Key" ]
    },
    "TagSpecification" : {
      "type" : "object",
      "additionalProperties" : false,
      "properties" : {
        "ResourceType" : {
          "type" : "string"
        },
        "Tags" : {
          "type" : "array",
          "uniqueItems" : false,
          "items" : {
            "$ref" : "#/definitions/Tag"
          }
        }
      },
      "required" : [ "ResourceType", "Tags" ]
    }
  },
  "required" : [ "ConnectionLogOptions", "AuthenticationOptions", "ServerCertificateArn" ],
  "createOnlyProperties" : [ "/properties/TransportProtocol", "/properties/ClientCidrBlock", "/properties/TagSpecifications", "/properties/AuthenticationOptions", "/properties/TransitGatewayConfiguration", "/properties/EndpointIpAddressType", "/properties/TrafficIpAddressType" ],
  "primaryIdentifier" : [ "/properties/Id" ],
  "readOnlyProperties" : [ "/properties/Id" ]
}