{
  "typeName" : "AWS::NeptuneGraph::PrivateGraphEndpoint",
  "description" : "The AWS::NeptuneGraph::PrivateGraphEndpoint resource creates an Amazon NeptuneGraph PrivateGraphEndpoint.",
  "sourceUrl" : "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-neptunegraph",
  "properties" : {
    "GraphIdentifier" : {
      "description" : "The auto-generated Graph Id assigned by the service.",
      "type" : "string"
    },
    "SecurityGroupIds" : {
      "description" : "The security group Ids associated with the VPC where you want the private graph endpoint to be created, ie, the graph will be reachable from within the VPC.",
      "type" : "array",
      "insertionOrder" : false,
      "items" : {
        "type" : "string"
      }
    },
    "SubnetIds" : {
      "description" : "The subnet Ids associated with the VPC where you want the private graph endpoint to be created, ie, the graph will be reachable from within the VPC.",
      "type" : "array",
      "insertionOrder" : false,
      "items" : {
        "type" : "string"
      }
    },
    "VpcId" : {
      "description" : "The VPC where you want the private graph endpoint to be created, ie, the graph will be reachable from within the VPC.",
      "type" : "string"
    },
    "PrivateGraphEndpointIdentifier" : {
      "description" : "PrivateGraphEndpoint resource identifier generated by concatenating the associated GraphIdentifier and VpcId with an underscore separator.\n\n For example, if GraphIdentifier is `g-12a3bcdef4` and VpcId is `vpc-0a12bc34567de8f90`, the generated PrivateGraphEndpointIdentifier will be `g-12a3bcdef4_vpc-0a12bc34567de8f90`",
      "type" : "string"
    },
    "VpcEndpointId" : {
      "description" : "VPC endpoint that provides a private connection between the Graph and specified VPC.",
      "type" : "string"
    }
  },
  "additionalProperties" : false,
  "required" : [ "GraphIdentifier", "VpcId" ],
  "propertyTransform" : {
    "/properties/GraphIdentifier" : "$lowercase(GraphIdentifier)"
  },
  "readOnlyProperties" : [ "/properties/PrivateGraphEndpointIdentifier", "/properties/VpcEndpointId" ],
  "writeOnlyProperties" : [ "/properties/GraphIdentifier", "/properties/SecurityGroupIds" ],
  "createOnlyProperties" : [ "/properties/GraphIdentifier", "/properties/SecurityGroupIds", "/properties/SubnetIds", "/properties/VpcId" ],
  "primaryIdentifier" : [ "/properties/PrivateGraphEndpointIdentifier" ],
  "additionalIdentifiers" : [ [ "/properties/GraphIdentifier", "/properties/VpcId" ] ],
  "tagging" : {
    "taggable" : false,
    "tagOnCreate" : false,
    "tagUpdatable" : false,
    "cloudFormationSystemTags" : false
  },
  "handlers" : {
    "create" : {
      "permissions" : [ "ec2:CreateVpcEndpoint", "ec2:DescribeVpcEndpoints", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DescribeVpcAttribute", "ec2:DescribeAvailabilityZones", "ec2:ModifyVpcEndpoint", "route53:AssociateVPCWithHostedZone", "iam:PassRole", "neptune-graph:CreatePrivateGraphEndpoint", "neptune-graph:GetPrivateGraphEndpoint", "iam:CreateServiceLinkedRole" ],
      "timeoutInMinutes" : 2160
    },
    "read" : {
      "permissions" : [ "neptune-graph:GetPrivateGraphEndpoint" ],
      "timeoutInMinutes" : 2160
    },
    "update" : {
      "permissions" : [ "iam:PassRole", "neptune-graph:GetPrivateGraphEndpoint" ],
      "timeoutInMinutes" : 2160
    },
    "delete" : {
      "permissions" : [ "ec2:DeleteVpcEndpoints", "ec2:DescribeVpcEndpoints", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DescribeVpcAttribute", "ec2:DescribeAvailabilityZones", "ec2:ModifyVpcEndpoint", "route53:DisassociateVPCFromHostedZone", "neptune-graph:DeletePrivateGraphEndpoint", "neptune-graph:GetPrivateGraphEndpoint" ],
      "timeoutInMinutes" : 2160
    },
    "list" : {
      "permissions" : [ "neptune-graph:GetPrivateGraphEndpoint", "neptune-graph:ListPrivateGraphEndpoints", "neptune-graph:ListGraphs" ],
      "timeoutInMinutes" : 2160
    }
  }
}