{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--aws-lakeformation-principalpermissions.json",
  "title": "AWSLakeFormationPrincipalPermissionsProperties",
  "description": "A resource schema representing a Lake Formation Permission.. Source:- <https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git>",
  "x-lintel": {
    "source": "https://raw.githubusercontent.com/lalcebo/json-schema/master/serverless/resources/cloudformation-modified/aws-lakeformation-principalpermissions.json",
    "sourceSha256": "261a22e49d3e9f2c3429dfe4eab7ea3a4c520544ec9dd63f1dd997ecdbc1acf2"
  },
  "type": "object",
  "properties": {
    "Catalog": {
      "$ref": "#/$defs/CatalogIdString"
    },
    "Principal": {
      "$ref": "#/$defs/DataLakePrincipal"
    },
    "Resource": {
      "$ref": "#/$defs/Resource"
    },
    "Permissions": {
      "$ref": "#/$defs/PermissionList"
    },
    "PermissionsWithGrantOption": {
      "$ref": "#/$defs/PermissionList"
    }
  },
  "typeName": "AWS::LakeFormation::PrincipalPermissions",
  "propertyTransform": {
    "/properties/Permissions": "Permissions=[] ? null : Permissions",
    "/properties/PermissionsWithGrantOption": "PermissionsWithGrantOption=[] ? null : PermissionsWithGrantOption"
  },
  "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
  "additionalProperties": false,
  "primaryIdentifier": [
    "/properties/PrincipalIdentifier",
    "/properties/ResourceIdentifier"
  ],
  "$defs": {
    "CatalogIdString": {
      "oneOf": [
        {
          "type": "string",
          "minLength": 12,
          "maxLength": 12
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "title": "AWSLakeFormationPrincipalPermissionsCatalogIdStringDefinition"
    },
    "PathString": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "title": "AWSLakeFormationPrincipalPermissionsPathStringDefinition"
    },
    "ResourceArnString": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "title": "AWSLakeFormationPrincipalPermissionsResourceArnStringDefinition"
    },
    "NameString": {
      "oneOf": [
        {
          "type": "string",
          "minLength": 1,
          "maxLength": 255
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "title": "AWSLakeFormationPrincipalPermissionsNameStringDefinition"
    },
    "IAMRoleArn": {
      "oneOf": [
        {
          "type": "string",
          "pattern": "arn:*:iam::[0-9]*:role/.*"
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "title": "AWSLakeFormationPrincipalPermissionsIAMRoleArnDefinition"
    },
    "LFTag": {
      "type": "object",
      "properties": {
        "TagKey": {
          "$ref": "#/$defs/LFTagKey"
        },
        "TagValues": {
          "$ref": "#/$defs/TagValueList"
        }
      },
      "title": "AWSLakeFormationPrincipalPermissionsLFTagDefinition",
      "additionalProperties": false
    },
    "LFTagPair": {
      "type": "object",
      "properties": {
        "CatalogId": {
          "$ref": "#/$defs/CatalogIdString"
        },
        "TagKey": {
          "$ref": "#/$defs/LFTagKey"
        },
        "TagValues": {
          "$ref": "#/$defs/TagValueList"
        }
      },
      "title": "AWSLakeFormationPrincipalPermissionsLFTagPairDefinition",
      "required": [
        "TagKey",
        "TagValues"
      ],
      "additionalProperties": false
    },
    "LFTagsList": {
      "type": "array",
      "insertionOrder": false,
      "items": {
        "$ref": "#/$defs/LFTagPair"
      },
      "title": "AWSLakeFormationPrincipalPermissionsLFTagsListDefinition"
    },
    "Expression": {
      "type": "array",
      "insertionOrder": false,
      "items": {
        "$ref": "#/$defs/LFTag"
      },
      "minItems": 1,
      "maxItems": 5,
      "title": "AWSLakeFormationPrincipalPermissionsExpressionDefinition"
    },
    "DataLakePrincipalString": {
      "oneOf": [
        {
          "type": "string",
          "minLength": 1,
          "maxLength": 255
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "title": "AWSLakeFormationPrincipalPermissionsDataLakePrincipalStringDefinition"
    },
    "DataLakePrincipal": {
      "type": "object",
      "properties": {
        "DataLakePrincipalIdentifier": {
          "$ref": "#/$defs/DataLakePrincipalString"
        }
      },
      "title": "AWSLakeFormationPrincipalPermissionsDataLakePrincipalDefinition",
      "additionalProperties": false
    },
    "ResourceType": {
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "DATABASE",
            "TABLE"
          ]
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "title": "AWSLakeFormationPrincipalPermissionsResourceTypeDefinition"
    },
    "CatalogResource": {
      "type": "object",
      "title": "AWSLakeFormationPrincipalPermissionsCatalogResourceDefinition",
      "additionalProperties": false
    },
    "DatabaseResource": {
      "type": "object",
      "properties": {
        "CatalogId": {
          "$ref": "#/$defs/CatalogIdString"
        },
        "Name": {
          "$ref": "#/$defs/NameString"
        }
      },
      "title": "AWSLakeFormationPrincipalPermissionsDatabaseResourceDefinition",
      "required": [
        "CatalogId",
        "Name"
      ],
      "additionalProperties": false
    },
    "TableWildcard": {
      "type": "object",
      "title": "AWSLakeFormationPrincipalPermissionsTableWildcardDefinition",
      "additionalProperties": false
    },
    "TableResource": {
      "type": "object",
      "properties": {
        "CatalogId": {
          "$ref": "#/$defs/CatalogIdString"
        },
        "DatabaseName": {
          "$ref": "#/$defs/NameString"
        },
        "Name": {
          "$ref": "#/$defs/NameString"
        },
        "TableWildcard": {
          "$ref": "#/$defs/TableWildcard"
        }
      },
      "title": "AWSLakeFormationPrincipalPermissionsTableResourceDefinition",
      "required": [
        "CatalogId",
        "DatabaseName"
      ],
      "additionalProperties": false
    },
    "ColumnNames": {
      "type": "array",
      "insertionOrder": false,
      "items": {
        "$ref": "#/$defs/NameString"
      },
      "title": "AWSLakeFormationPrincipalPermissionsColumnNamesDefinition"
    },
    "ColumnWildcard": {
      "type": "object",
      "properties": {
        "ExcludedColumnNames": {
          "$ref": "#/$defs/ColumnNames"
        }
      },
      "title": "AWSLakeFormationPrincipalPermissionsColumnWildcardDefinition",
      "additionalProperties": false
    },
    "TableWithColumnsResource": {
      "type": "object",
      "properties": {
        "CatalogId": {
          "$ref": "#/$defs/CatalogIdString"
        },
        "DatabaseName": {
          "$ref": "#/$defs/NameString"
        },
        "Name": {
          "$ref": "#/$defs/NameString"
        },
        "ColumnNames": {
          "$ref": "#/$defs/ColumnNames"
        },
        "ColumnWildcard": {
          "$ref": "#/$defs/ColumnWildcard"
        }
      },
      "title": "AWSLakeFormationPrincipalPermissionsTableWithColumnsResourceDefinition",
      "required": [
        "CatalogId",
        "DatabaseName",
        "Name"
      ],
      "additionalProperties": false
    },
    "DataLocationResource": {
      "type": "object",
      "properties": {
        "CatalogId": {
          "$ref": "#/$defs/CatalogIdString"
        },
        "ResourceArn": {
          "$ref": "#/$defs/ResourceArnString"
        }
      },
      "title": "AWSLakeFormationPrincipalPermissionsDataLocationResourceDefinition",
      "required": [
        "CatalogId",
        "ResourceArn"
      ],
      "additionalProperties": false
    },
    "DataCellsFilterResource": {
      "type": "object",
      "properties": {
        "TableCatalogId": {
          "$ref": "#/$defs/CatalogIdString"
        },
        "DatabaseName": {
          "$ref": "#/$defs/NameString"
        },
        "TableName": {
          "$ref": "#/$defs/NameString"
        },
        "Name": {
          "$ref": "#/$defs/NameString"
        }
      },
      "title": "AWSLakeFormationPrincipalPermissionsDataCellsFilterResourceDefinition",
      "required": [
        "TableCatalogId",
        "DatabaseName",
        "TableName",
        "Name"
      ],
      "additionalProperties": false
    },
    "LFTagKeyResource": {
      "type": "object",
      "properties": {
        "CatalogId": {
          "$ref": "#/$defs/CatalogIdString"
        },
        "TagKey": {
          "$ref": "#/$defs/NameString"
        },
        "TagValues": {
          "$ref": "#/$defs/TagValueList"
        }
      },
      "title": "AWSLakeFormationPrincipalPermissionsLFTagKeyResourceDefinition",
      "required": [
        "CatalogId",
        "TagKey",
        "TagValues"
      ],
      "additionalProperties": false
    },
    "LFTagPolicyResource": {
      "type": "object",
      "properties": {
        "CatalogId": {
          "$ref": "#/$defs/CatalogIdString"
        },
        "ResourceType": {
          "$ref": "#/$defs/ResourceType"
        },
        "Expression": {
          "$ref": "#/$defs/Expression"
        }
      },
      "title": "AWSLakeFormationPrincipalPermissionsLFTagPolicyResourceDefinition",
      "required": [
        "CatalogId",
        "ResourceType",
        "Expression"
      ],
      "additionalProperties": false
    },
    "Resource": {
      "type": "object",
      "properties": {
        "Catalog": {
          "$ref": "#/$defs/CatalogResource"
        },
        "Database": {
          "$ref": "#/$defs/DatabaseResource"
        },
        "Table": {
          "$ref": "#/$defs/TableResource"
        },
        "TableWithColumns": {
          "$ref": "#/$defs/TableWithColumnsResource"
        },
        "DataLocation": {
          "$ref": "#/$defs/DataLocationResource"
        },
        "DataCellsFilter": {
          "$ref": "#/$defs/DataCellsFilterResource"
        },
        "LFTag": {
          "$ref": "#/$defs/LFTagKeyResource"
        },
        "LFTagPolicy": {
          "$ref": "#/$defs/LFTagPolicyResource"
        }
      },
      "title": "AWSLakeFormationPrincipalPermissionsResourceDefinition",
      "additionalProperties": false
    },
    "NullableBoolean": {
      "type": [
        "boolean",
        "null"
      ],
      "title": "AWSLakeFormationPrincipalPermissionsNullableBooleanDefinition"
    },
    "Permission": {
      "oneOf": [
        {
          "type": "string",
          "enum": [
            "ALL",
            "SELECT",
            "ALTER",
            "DROP",
            "DELETE",
            "INSERT",
            "DESCRIBE",
            "CREATE_DATABASE",
            "CREATE_TABLE",
            "DATA_LOCATION_ACCESS",
            "CREATE_TAG",
            "ASSOCIATE"
          ]
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "title": "AWSLakeFormationPrincipalPermissionsPermissionDefinition"
    },
    "LFTagKey": {
      "oneOf": [
        {
          "type": "string",
          "minLength": 1,
          "maxLength": 128
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "title": "AWSLakeFormationPrincipalPermissionsLFTagKeyDefinition"
    },
    "LFTagValue": {
      "oneOf": [
        {
          "type": "string",
          "minLength": 0,
          "maxLength": 256
        },
        {
          "$ref": "https://catalog.lintel.tools/schemas/schemastore/serverless-framework-configuration/_shared/latest--cf.functions.json#/Aws_CF_FunctionString"
        }
      ],
      "title": "AWSLakeFormationPrincipalPermissionsLFTagValueDefinition"
    },
    "DataLakePrincipalList": {
      "type": "array",
      "insertionOrder": false,
      "items": {
        "$ref": "#/$defs/DataLakePrincipal"
      },
      "title": "AWSLakeFormationPrincipalPermissionsDataLakePrincipalListDefinition"
    },
    "PermissionList": {
      "type": "array",
      "insertionOrder": false,
      "items": {
        "$ref": "#/$defs/Permission"
      },
      "title": "AWSLakeFormationPrincipalPermissionsPermissionListDefinition"
    },
    "TagValueList": {
      "type": "array",
      "insertionOrder": false,
      "items": {
        "$ref": "#/$defs/LFTagValue"
      },
      "minItems": 1,
      "maxItems": 50,
      "title": "AWSLakeFormationPrincipalPermissionsTagValueListDefinition"
    },
    "PrincipalResourcePair": {
      "type": "object",
      "properties": {
        "Principal": {
          "$ref": "#/$defs/DataLakePrincipal"
        },
        "Resource": {
          "$ref": "#/$defs/Resource"
        }
      },
      "title": "AWSLakeFormationPrincipalPermissionsPrincipalResourcePairDefinition",
      "required": [
        "Principal",
        "Resource"
      ],
      "additionalProperties": false
    },
    "PrincipalPermissions": {
      "type": "object",
      "properties": {
        "DataLakePrincipal": {
          "$ref": "#/$defs/DataLakePrincipal"
        },
        "PermissionList": {
          "$ref": "#/$defs/PermissionList"
        }
      },
      "title": "AWSLakeFormationPrincipalPermissionsPrincipalPermissionsDefinition",
      "additionalProperties": false
    },
    "PrincipalPermissionsList": {
      "type": "array",
      "insertionOrder": false,
      "items": {
        "$ref": "#/$defs/PrincipalPermissions"
      },
      "title": "AWSLakeFormationPrincipalPermissionsPrincipalPermissionsListDefinition"
    }
  },
  "required": [
    "Principal",
    "Resource",
    "Permissions",
    "PermissionsWithGrantOption"
  ],
  "createOnlyProperties": [
    "/properties/Catalog",
    "/properties/Principal",
    "/properties/Resource",
    "/properties/Permissions",
    "/properties/PermissionsWithGrantOption"
  ],
  "readOnlyProperties": [
    "/properties/PrincipalIdentifier",
    "/properties/ResourceIdentifier"
  ],
  "replacementStrategy": "delete_then_create",
  "tagging": {
    "taggable": false
  }
}
