diff options
Diffstat (limited to 'third_party/googleapis/google/privacy/dlp/v2')
6 files changed, 6748 insertions, 0 deletions
diff --git a/third_party/googleapis/google/privacy/dlp/v2/BUILD.bazel b/third_party/googleapis/google/privacy/dlp/v2/BUILD.bazel new file mode 100644 index 0000000..976df66 --- /dev/null +++ b/third_party/googleapis/google/privacy/dlp/v2/BUILD.bazel @@ -0,0 +1,374 @@ +# This file was automatically generated by BuildFileGenerator + +# This is an API workspace, having public visibility by default makes perfect sense. +package(default_visibility = ["//visibility:public"]) + +############################################################################## +# Common +############################################################################## +load("@rules_proto//proto:defs.bzl", "proto_library") +load("@com_google_googleapis_imports//:imports.bzl", "proto_library_with_info") + +proto_library( +    name = "dlp_proto", +    srcs = [ +        "dlp.proto", +        "storage.proto", +    ], +    deps = [ +        "//google/api:annotations_proto", +        "//google/api:client_proto", +        "//google/api:field_behavior_proto", +        "//google/api:resource_proto", +        "//google/rpc:status_proto", +        "//google/type:date_proto", +        "//google/type:dayofweek_proto", +        "//google/type:timeofday_proto", +        "@com_google_protobuf//:duration_proto", +        "@com_google_protobuf//:empty_proto", +        "@com_google_protobuf//:field_mask_proto", +        "@com_google_protobuf//:timestamp_proto", +    ], +) + +proto_library_with_info( +    name = "dlp_proto_with_info", +    deps = [ +        ":dlp_proto", +        "//google/cloud:common_resources_proto", +    ], +) + +############################################################################## +# Java +############################################################################## +load( +    "@com_google_googleapis_imports//:imports.bzl", +    "java_gapic_assembly_gradle_pkg", +    "java_gapic_library", +    "java_gapic_test", +    "java_grpc_library", +    "java_proto_library", +) + +java_proto_library( +    name = "dlp_java_proto", +    deps = [":dlp_proto"], +) + +java_grpc_library( +    name = "dlp_java_grpc", +    srcs = [":dlp_proto"], +    deps = [":dlp_java_proto"], +) + +java_gapic_library( +    name = "dlp_java_gapic", +    srcs = [":dlp_proto_with_info"], +    gapic_yaml = "dlp_gapic.yaml", +    grpc_service_config = "dlp_grpc_service_config.json", +    test_deps = [ +        ":dlp_java_grpc", +    ], +    transport = "grpc+rest", +    deps = [ +        ":dlp_java_proto", +    ], +) + +java_gapic_test( +    name = "dlp_java_gapic_test_suite", +    test_classes = [ +        "com.google.cloud.dlp.v2.DlpServiceClientHttpJsonTest", +        "com.google.cloud.dlp.v2.DlpServiceClientTest", +    ], +    runtime_deps = [":dlp_java_gapic_test"], +) + +# Open Source Packages +java_gapic_assembly_gradle_pkg( +    name = "google-cloud-privacy-dlp-v2-java", +    transport = "grpc+rest", +    deps = [ +        ":dlp_java_gapic", +        ":dlp_java_grpc", +        ":dlp_java_proto", +        ":dlp_proto", +    ], +) + +############################################################################## +# Go +############################################################################## +load( +    "@com_google_googleapis_imports//:imports.bzl", +    "go_gapic_assembly_pkg", +    "go_gapic_library", +    "go_proto_library", +    "go_test", +) + +go_proto_library( +    name = "dlp_go_proto", +    compilers = ["@io_bazel_rules_go//proto:go_grpc"], +    importpath = "google.golang.org/genproto/googleapis/privacy/dlp/v2", +    protos = [":dlp_proto"], +    deps = [ +        "//google/api:annotations_go_proto", +        "//google/rpc:status_go_proto", +        "//google/type:date_go_proto", +        "//google/type:dayofweek_go_proto", +        "//google/type:timeofday_go_proto", +    ], +) + +go_gapic_library( +    name = "dlp_go_gapic", +    srcs = [":dlp_proto_with_info"], +    grpc_service_config = "dlp_grpc_service_config.json", +    importpath = "cloud.google.com/go/dlp/apiv2;dlp", +    service_yaml = "dlp_v2.yaml", +    transport = "grpc+rest", +    deps = [ +        ":dlp_go_proto", +        "@io_bazel_rules_go//proto/wkt:duration_go_proto", +    ], +) + +go_test( +    name = "dlp_go_gapic_test", +    srcs = [":dlp_go_gapic_srcjar_test"], +    embed = [":dlp_go_gapic"], +    importpath = "cloud.google.com/go/dlp/apiv2", +) + +# Open Source Packages +go_gapic_assembly_pkg( +    name = "gapi-cloud-privacy-dlp-v2-go", +    deps = [ +        ":dlp_go_gapic", +        ":dlp_go_gapic_srcjar-test.srcjar", +        ":dlp_go_proto", +    ], +) + +############################################################################## +# Python +############################################################################## +load( +    "@com_google_googleapis_imports//:imports.bzl", +    "py_gapic_assembly_pkg", +    "py_gapic_library", +    "py_test", +) + +py_gapic_library( +    name = "dlp_py_gapic", +    srcs = [":dlp_proto"], +    grpc_service_config = "dlp_grpc_service_config.json", +    opt_args = ["python-gapic-namespace=google.cloud"], +    transport = "grpc", +) + +py_test( +    name = "dlp_py_gapic_test", +    srcs = [ +        "dlp_py_gapic_pytest.py", +        "dlp_py_gapic_test.py", +    ], +    legacy_create_init = False, +    deps = [":dlp_py_gapic"], +) + +py_gapic_assembly_pkg( +    name = "privacy-dlp-v2-py", +    deps = [ +        ":dlp_py_gapic", +    ], +) + +############################################################################## +# PHP +############################################################################## +load( +    "@com_google_googleapis_imports//:imports.bzl", +    "php_gapic_assembly_pkg", +    "php_gapic_library", +    "php_grpc_library", +    "php_proto_library", +) + +php_proto_library( +    name = "dlp_php_proto", +    deps = [":dlp_proto"], +) + +php_grpc_library( +    name = "dlp_php_grpc", +    srcs = [":dlp_proto"], +    deps = [":dlp_php_proto"], +) + +php_gapic_library( +    name = "dlp_php_gapic", +    srcs = [":dlp_proto_with_info"], +    grpc_service_config = "dlp_grpc_service_config.json", +    deps = [ +        ":dlp_php_grpc", +        ":dlp_php_proto", +    ], +) + +# Open Source Packages +php_gapic_assembly_pkg( +    name = "google-cloud-privacy-dlp-v2-php", +    deps = [ +        ":dlp_php_gapic", +        ":dlp_php_grpc", +        ":dlp_php_proto", +    ], +) + +############################################################################## +# Node.js +############################################################################## +load( +    "@com_google_googleapis_imports//:imports.bzl", +    "nodejs_gapic_assembly_pkg", +    "nodejs_gapic_library", +) + +nodejs_gapic_library( +    name = "dlp_nodejs_gapic", +    package_name = "@google-cloud/dlp", +    src = ":dlp_proto_with_info", +    extra_protoc_parameters = ["metadata"], +    grpc_service_config = "dlp_grpc_service_config.json", +    package = "google.privacy.dlp.v2", +    service_yaml = "dlp_v2.yaml", +    deps = [], +) + +nodejs_gapic_assembly_pkg( +    name = "privacy-dlp-v2-nodejs", +    deps = [ +        ":dlp_nodejs_gapic", +        ":dlp_proto", +    ], +) + +############################################################################## +# Ruby +############################################################################## +load( +    "@com_google_googleapis_imports//:imports.bzl", +    "ruby_cloud_gapic_library", +    "ruby_gapic_assembly_pkg", +    "ruby_grpc_library", +    "ruby_proto_library", +) + +ruby_proto_library( +    name = "dlp_ruby_proto", +    deps = [":dlp_proto"], +) + +ruby_grpc_library( +    name = "dlp_ruby_grpc", +    srcs = [":dlp_proto"], +    deps = [":dlp_ruby_proto"], +) + +ruby_cloud_gapic_library( +    name = "dlp_ruby_gapic", +    srcs = [":dlp_proto_with_info"], +    extra_protoc_parameters = [ +        "ruby-cloud-gem-name=google-cloud-dlp-v2", +        "ruby-cloud-env-prefix=DLP", +        "ruby-cloud-product-url=https://cloud.google.com/dlp", +        "ruby-cloud-api-id=dlp.googleapis.com", +        "ruby-cloud-api-shortname=dlp", +    ], +    grpc_service_config = "dlp_grpc_service_config.json", +    ruby_cloud_description = "Provides methods for detection of privacy-sensitive fragments in text, images, and Google Cloud Platform storage repositories.", +    ruby_cloud_title = "Cloud Data Loss Prevention (DLP) V2", +    deps = [ +        ":dlp_ruby_grpc", +        ":dlp_ruby_proto", +    ], +) + +# Open Source Packages +ruby_gapic_assembly_pkg( +    name = "google-cloud-privacy-dlp-v2-ruby", +    deps = [ +        ":dlp_ruby_gapic", +        ":dlp_ruby_grpc", +        ":dlp_ruby_proto", +    ], +) + +############################################################################## +# C# +############################################################################## +load( +    "@com_google_googleapis_imports//:imports.bzl", +    "csharp_gapic_assembly_pkg", +    "csharp_gapic_library", +    "csharp_grpc_library", +    "csharp_proto_library", +) + +csharp_proto_library( +    name = "dlp_csharp_proto", +    deps = [":dlp_proto"], +) + +csharp_grpc_library( +    name = "dlp_csharp_grpc", +    srcs = [":dlp_proto"], +    deps = [":dlp_csharp_proto"], +) + +csharp_gapic_library( +    name = "dlp_csharp_gapic", +    srcs = [":dlp_proto_with_info"], +    common_resources_config = "@gax_dotnet//:Google.Api.Gax/ResourceNames/CommonResourcesConfig.json", +    grpc_service_config = "dlp_grpc_service_config.json", +    service_yaml = "dlp_v2.yaml", +    deps = [ +        ":dlp_csharp_grpc", +        ":dlp_csharp_proto", +    ], +) + +# Open Source Packages +csharp_gapic_assembly_pkg( +    name = "google-cloud-privacy-dlp-v2-csharp", +    deps = [ +        ":dlp_csharp_gapic", +        ":dlp_csharp_grpc", +        ":dlp_csharp_proto", +    ], +) + +############################################################################## +# C++ +############################################################################## +load( +    "@com_google_googleapis_imports//:imports.bzl", +    "cc_grpc_library", +    "cc_proto_library", +) + +cc_proto_library( +    name = "dlp_cc_proto", +    deps = [":dlp_proto"], +) + +cc_grpc_library( +    name = "dlp_cc_grpc", +    srcs = [":dlp_proto"], +    grpc_only = True, +    deps = [":dlp_cc_proto"], +) diff --git a/third_party/googleapis/google/privacy/dlp/v2/dlp.proto b/third_party/googleapis/google/privacy/dlp/v2/dlp.proto new file mode 100644 index 0000000..7e243dd --- /dev/null +++ b/third_party/googleapis/google/privacy/dlp/v2/dlp.proto @@ -0,0 +1,5371 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +//     http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.privacy.dlp.v2; + +import "google/api/annotations.proto"; +import "google/api/client.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; +import "google/privacy/dlp/v2/storage.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/empty.proto"; +import "google/protobuf/field_mask.proto"; +import "google/protobuf/timestamp.proto"; +import "google/rpc/status.proto"; +import "google/type/date.proto"; +import "google/type/dayofweek.proto"; +import "google/type/timeofday.proto"; + +option csharp_namespace = "Google.Cloud.Dlp.V2"; +option go_package = "google.golang.org/genproto/googleapis/privacy/dlp/v2;dlp"; +option java_multiple_files = true; +option java_outer_classname = "DlpProto"; +option java_package = "com.google.privacy.dlp.v2"; +option php_namespace = "Google\\Cloud\\Dlp\\V2"; +option ruby_package = "Google::Cloud::Dlp::V2"; +option (google.api.resource_definition) = { +  type: "dlp.googleapis.com/DlpContent" +  pattern: "projects/{project}/dlpContent" +  pattern: "projects/{project}/locations/{location}/dlpContent" +}; +option (google.api.resource_definition) = { +  type: "dlp.googleapis.com/OrganizationLocation" +  pattern: "organizations/{organization}/locations/{location}" +}; + +// The Cloud Data Loss Prevention (DLP) API is a service that allows clients +// to detect the presence of Personally Identifiable Information (PII) and other +// privacy-sensitive data in user-supplied, unstructured data streams, like text +// blocks or images. +// The service also includes methods for sensitive data redaction and +// scheduling of data scans on Google Cloud Platform based data sets. +// +// To learn more about concepts and find how-to guides see +// https://cloud.google.com/dlp/docs/. +service DlpService { +  option (google.api.default_host) = "dlp.googleapis.com"; +  option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform"; + +  // Finds potentially sensitive info in content. +  // This method has limits on input size, processing time, and output size. +  // +  // When no InfoTypes or CustomInfoTypes are specified in this request, the +  // system will automatically choose what detectors to run. By default this may +  // be all types, but may change over time as detectors are updated. +  // +  // For how to guides, see https://cloud.google.com/dlp/docs/inspecting-images +  // and https://cloud.google.com/dlp/docs/inspecting-text, +  rpc InspectContent(InspectContentRequest) returns (InspectContentResponse) { +    option (google.api.http) = { +      post: "/v2/{parent=projects/*}/content:inspect" +      body: "*" +      additional_bindings { +        post: "/v2/{parent=projects/*/locations/*}/content:inspect" +        body: "*" +      } +    }; +  } + +  // Redacts potentially sensitive info from an image. +  // This method has limits on input size, processing time, and output size. +  // See https://cloud.google.com/dlp/docs/redacting-sensitive-data-images to +  // learn more. +  // +  // When no InfoTypes or CustomInfoTypes are specified in this request, the +  // system will automatically choose what detectors to run. By default this may +  // be all types, but may change over time as detectors are updated. +  rpc RedactImage(RedactImageRequest) returns (RedactImageResponse) { +    option (google.api.http) = { +      post: "/v2/{parent=projects/*}/image:redact" +      body: "*" +      additional_bindings { +        post: "/v2/{parent=projects/*/locations/*}/image:redact" +        body: "*" +      } +    }; +  } + +  // De-identifies potentially sensitive info from a ContentItem. +  // This method has limits on input size and output size. +  // See https://cloud.google.com/dlp/docs/deidentify-sensitive-data to +  // learn more. +  // +  // When no InfoTypes or CustomInfoTypes are specified in this request, the +  // system will automatically choose what detectors to run. By default this may +  // be all types, but may change over time as detectors are updated. +  rpc DeidentifyContent(DeidentifyContentRequest) returns (DeidentifyContentResponse) { +    option (google.api.http) = { +      post: "/v2/{parent=projects/*}/content:deidentify" +      body: "*" +      additional_bindings { +        post: "/v2/{parent=projects/*/locations/*}/content:deidentify" +        body: "*" +      } +    }; +  } + +  // Re-identifies content that has been de-identified. +  // See +  // https://cloud.google.com/dlp/docs/pseudonymization#re-identification_in_free_text_code_example +  // to learn more. +  rpc ReidentifyContent(ReidentifyContentRequest) returns (ReidentifyContentResponse) { +    option (google.api.http) = { +      post: "/v2/{parent=projects/*}/content:reidentify" +      body: "*" +      additional_bindings { +        post: "/v2/{parent=projects/*/locations/*}/content:reidentify" +        body: "*" +      } +    }; +  } + +  // Returns a list of the sensitive information types that DLP API +  // supports. See https://cloud.google.com/dlp/docs/infotypes-reference to +  // learn more. +  rpc ListInfoTypes(ListInfoTypesRequest) returns (ListInfoTypesResponse) { +    option (google.api.http) = { +      get: "/v2/infoTypes" +      additional_bindings { +        get: "/v2/{parent=locations/*}/infoTypes" +      } +    }; +    option (google.api.method_signature) = "parent"; +  } + +  // Creates an InspectTemplate for reusing frequently used configuration +  // for inspecting content, images, and storage. +  // See https://cloud.google.com/dlp/docs/creating-templates to learn more. +  rpc CreateInspectTemplate(CreateInspectTemplateRequest) returns (InspectTemplate) { +    option (google.api.http) = { +      post: "/v2/{parent=organizations/*}/inspectTemplates" +      body: "*" +      additional_bindings { +        post: "/v2/{parent=organizations/*/locations/*}/inspectTemplates" +        body: "*" +      } +      additional_bindings { +        post: "/v2/{parent=projects/*}/inspectTemplates" +        body: "*" +      } +      additional_bindings { +        post: "/v2/{parent=projects/*/locations/*}/inspectTemplates" +        body: "*" +      } +    }; +    option (google.api.method_signature) = "parent,inspect_template"; +  } + +  // Updates the InspectTemplate. +  // See https://cloud.google.com/dlp/docs/creating-templates to learn more. +  rpc UpdateInspectTemplate(UpdateInspectTemplateRequest) returns (InspectTemplate) { +    option (google.api.http) = { +      patch: "/v2/{name=organizations/*/inspectTemplates/*}" +      body: "*" +      additional_bindings { +        patch: "/v2/{name=organizations/*/locations/*/inspectTemplates/*}" +        body: "*" +      } +      additional_bindings { +        patch: "/v2/{name=projects/*/inspectTemplates/*}" +        body: "*" +      } +      additional_bindings { +        patch: "/v2/{name=projects/*/locations/*/inspectTemplates/*}" +        body: "*" +      } +    }; +    option (google.api.method_signature) = "name,inspect_template,update_mask"; +  } + +  // Gets an InspectTemplate. +  // See https://cloud.google.com/dlp/docs/creating-templates to learn more. +  rpc GetInspectTemplate(GetInspectTemplateRequest) returns (InspectTemplate) { +    option (google.api.http) = { +      get: "/v2/{name=organizations/*/inspectTemplates/*}" +      additional_bindings { +        get: "/v2/{name=organizations/*/locations/*/inspectTemplates/*}" +      } +      additional_bindings { +        get: "/v2/{name=projects/*/inspectTemplates/*}" +      } +      additional_bindings { +        get: "/v2/{name=projects/*/locations/*/inspectTemplates/*}" +      } +    }; +    option (google.api.method_signature) = "name"; +  } + +  // Lists InspectTemplates. +  // See https://cloud.google.com/dlp/docs/creating-templates to learn more. +  rpc ListInspectTemplates(ListInspectTemplatesRequest) returns (ListInspectTemplatesResponse) { +    option (google.api.http) = { +      get: "/v2/{parent=organizations/*}/inspectTemplates" +      additional_bindings { +        get: "/v2/{parent=organizations/*/locations/*}/inspectTemplates" +      } +      additional_bindings { +        get: "/v2/{parent=projects/*}/inspectTemplates" +      } +      additional_bindings { +        get: "/v2/{parent=projects/*/locations/*}/inspectTemplates" +      } +    }; +    option (google.api.method_signature) = "parent"; +  } + +  // Deletes an InspectTemplate. +  // See https://cloud.google.com/dlp/docs/creating-templates to learn more. +  rpc DeleteInspectTemplate(DeleteInspectTemplateRequest) returns (google.protobuf.Empty) { +    option (google.api.http) = { +      delete: "/v2/{name=organizations/*/inspectTemplates/*}" +      additional_bindings { +        delete: "/v2/{name=organizations/*/locations/*/inspectTemplates/*}" +      } +      additional_bindings { +        delete: "/v2/{name=projects/*/inspectTemplates/*}" +      } +      additional_bindings { +        delete: "/v2/{name=projects/*/locations/*/inspectTemplates/*}" +      } +    }; +    option (google.api.method_signature) = "name"; +  } + +  // Creates a DeidentifyTemplate for reusing frequently used configuration +  // for de-identifying content, images, and storage. +  // See https://cloud.google.com/dlp/docs/creating-templates-deid to learn +  // more. +  rpc CreateDeidentifyTemplate(CreateDeidentifyTemplateRequest) returns (DeidentifyTemplate) { +    option (google.api.http) = { +      post: "/v2/{parent=organizations/*}/deidentifyTemplates" +      body: "*" +      additional_bindings { +        post: "/v2/{parent=organizations/*/locations/*}/deidentifyTemplates" +        body: "*" +      } +      additional_bindings { +        post: "/v2/{parent=projects/*}/deidentifyTemplates" +        body: "*" +      } +      additional_bindings { +        post: "/v2/{parent=projects/*/locations/*}/deidentifyTemplates" +        body: "*" +      } +    }; +    option (google.api.method_signature) = "parent,deidentify_template"; +  } + +  // Updates the DeidentifyTemplate. +  // See https://cloud.google.com/dlp/docs/creating-templates-deid to learn +  // more. +  rpc UpdateDeidentifyTemplate(UpdateDeidentifyTemplateRequest) returns (DeidentifyTemplate) { +    option (google.api.http) = { +      patch: "/v2/{name=organizations/*/deidentifyTemplates/*}" +      body: "*" +      additional_bindings { +        patch: "/v2/{name=organizations/*/locations/*/deidentifyTemplates/*}" +        body: "*" +      } +      additional_bindings { +        patch: "/v2/{name=projects/*/deidentifyTemplates/*}" +        body: "*" +      } +      additional_bindings { +        patch: "/v2/{name=projects/*/locations/*/deidentifyTemplates/*}" +        body: "*" +      } +    }; +    option (google.api.method_signature) = "name,deidentify_template,update_mask"; +  } + +  // Gets a DeidentifyTemplate. +  // See https://cloud.google.com/dlp/docs/creating-templates-deid to learn +  // more. +  rpc GetDeidentifyTemplate(GetDeidentifyTemplateRequest) returns (DeidentifyTemplate) { +    option (google.api.http) = { +      get: "/v2/{name=organizations/*/deidentifyTemplates/*}" +      additional_bindings { +        get: "/v2/{name=organizations/*/locations/*/deidentifyTemplates/*}" +      } +      additional_bindings { +        get: "/v2/{name=projects/*/deidentifyTemplates/*}" +      } +      additional_bindings { +        get: "/v2/{name=projects/*/locations/*/deidentifyTemplates/*}" +      } +    }; +    option (google.api.method_signature) = "name"; +  } + +  // Lists DeidentifyTemplates. +  // See https://cloud.google.com/dlp/docs/creating-templates-deid to learn +  // more. +  rpc ListDeidentifyTemplates(ListDeidentifyTemplatesRequest) returns (ListDeidentifyTemplatesResponse) { +    option (google.api.http) = { +      get: "/v2/{parent=organizations/*}/deidentifyTemplates" +      additional_bindings { +        get: "/v2/{parent=organizations/*/locations/*}/deidentifyTemplates" +      } +      additional_bindings { +        get: "/v2/{parent=projects/*}/deidentifyTemplates" +      } +      additional_bindings { +        get: "/v2/{parent=projects/*/locations/*}/deidentifyTemplates" +      } +    }; +    option (google.api.method_signature) = "parent"; +  } + +  // Deletes a DeidentifyTemplate. +  // See https://cloud.google.com/dlp/docs/creating-templates-deid to learn +  // more. +  rpc DeleteDeidentifyTemplate(DeleteDeidentifyTemplateRequest) returns (google.protobuf.Empty) { +    option (google.api.http) = { +      delete: "/v2/{name=organizations/*/deidentifyTemplates/*}" +      additional_bindings { +        delete: "/v2/{name=organizations/*/locations/*/deidentifyTemplates/*}" +      } +      additional_bindings { +        delete: "/v2/{name=projects/*/deidentifyTemplates/*}" +      } +      additional_bindings { +        delete: "/v2/{name=projects/*/locations/*/deidentifyTemplates/*}" +      } +    }; +    option (google.api.method_signature) = "name"; +  } + +  // Creates a job trigger to run DLP actions such as scanning storage for +  // sensitive information on a set schedule. +  // See https://cloud.google.com/dlp/docs/creating-job-triggers to learn more. +  rpc CreateJobTrigger(CreateJobTriggerRequest) returns (JobTrigger) { +    option (google.api.http) = { +      post: "/v2/{parent=projects/*}/jobTriggers" +      body: "*" +      additional_bindings { +        post: "/v2/{parent=projects/*/locations/*}/jobTriggers" +        body: "*" +      } +      additional_bindings { +        post: "/v2/{parent=organizations/*/locations/*}/jobTriggers" +        body: "*" +      } +    }; +    option (google.api.method_signature) = "parent,job_trigger"; +  } + +  // Updates a job trigger. +  // See https://cloud.google.com/dlp/docs/creating-job-triggers to learn more. +  rpc UpdateJobTrigger(UpdateJobTriggerRequest) returns (JobTrigger) { +    option (google.api.http) = { +      patch: "/v2/{name=projects/*/jobTriggers/*}" +      body: "*" +      additional_bindings { +        patch: "/v2/{name=projects/*/locations/*/jobTriggers/*}" +        body: "*" +      } +      additional_bindings { +        patch: "/v2/{name=organizations/*/locations/*/jobTriggers/*}" +        body: "*" +      } +    }; +    option (google.api.method_signature) = "name,job_trigger,update_mask"; +  } + +  // Inspect hybrid content and store findings to a trigger. The inspection +  // will be processed asynchronously. To review the findings monitor the +  // jobs within the trigger. +  rpc HybridInspectJobTrigger(HybridInspectJobTriggerRequest) returns (HybridInspectResponse) { +    option (google.api.http) = { +      post: "/v2/{name=projects/*/locations/*/jobTriggers/*}:hybridInspect" +      body: "*" +    }; +    option (google.api.method_signature) = "name"; +  } + +  // Gets a job trigger. +  // See https://cloud.google.com/dlp/docs/creating-job-triggers to learn more. +  rpc GetJobTrigger(GetJobTriggerRequest) returns (JobTrigger) { +    option (google.api.http) = { +      get: "/v2/{name=projects/*/jobTriggers/*}" +      additional_bindings { +        get: "/v2/{name=projects/*/locations/*/jobTriggers/*}" +      } +      additional_bindings { +        get: "/v2/{name=organizations/*/locations/*/jobTriggers/*}" +      } +    }; +    option (google.api.method_signature) = "name"; +  } + +  // Lists job triggers. +  // See https://cloud.google.com/dlp/docs/creating-job-triggers to learn more. +  rpc ListJobTriggers(ListJobTriggersRequest) returns (ListJobTriggersResponse) { +    option (google.api.http) = { +      get: "/v2/{parent=projects/*}/jobTriggers" +      additional_bindings { +        get: "/v2/{parent=projects/*/locations/*}/jobTriggers" +      } +      additional_bindings { +        get: "/v2/{parent=organizations/*/locations/*}/jobTriggers" +      } +    }; +    option (google.api.method_signature) = "parent"; +  } + +  // Deletes a job trigger. +  // See https://cloud.google.com/dlp/docs/creating-job-triggers to learn more. +  rpc DeleteJobTrigger(DeleteJobTriggerRequest) returns (google.protobuf.Empty) { +    option (google.api.http) = { +      delete: "/v2/{name=projects/*/jobTriggers/*}" +      additional_bindings { +        delete: "/v2/{name=projects/*/locations/*/jobTriggers/*}" +      } +      additional_bindings { +        delete: "/v2/{name=organizations/*/locations/*/jobTriggers/*}" +      } +    }; +    option (google.api.method_signature) = "name"; +  } + +  // Activate a job trigger. Causes the immediate execute of a trigger +  // instead of waiting on the trigger event to occur. +  rpc ActivateJobTrigger(ActivateJobTriggerRequest) returns (DlpJob) { +    option (google.api.http) = { +      post: "/v2/{name=projects/*/jobTriggers/*}:activate" +      body: "*" +      additional_bindings { +        post: "/v2/{name=projects/*/locations/*/jobTriggers/*}:activate" +        body: "*" +      } +    }; +  } + +  // Creates a new job to inspect storage or calculate risk metrics. +  // See https://cloud.google.com/dlp/docs/inspecting-storage and +  // https://cloud.google.com/dlp/docs/compute-risk-analysis to learn more. +  // +  // When no InfoTypes or CustomInfoTypes are specified in inspect jobs, the +  // system will automatically choose what detectors to run. By default this may +  // be all types, but may change over time as detectors are updated. +  rpc CreateDlpJob(CreateDlpJobRequest) returns (DlpJob) { +    option (google.api.http) = { +      post: "/v2/{parent=projects/*}/dlpJobs" +      body: "*" +      additional_bindings { +        post: "/v2/{parent=projects/*/locations/*}/dlpJobs" +        body: "*" +      } +    }; +    option (google.api.method_signature) = "parent,inspect_job"; +    option (google.api.method_signature) = "parent,risk_job"; +  } + +  // Lists DlpJobs that match the specified filter in the request. +  // See https://cloud.google.com/dlp/docs/inspecting-storage and +  // https://cloud.google.com/dlp/docs/compute-risk-analysis to learn more. +  rpc ListDlpJobs(ListDlpJobsRequest) returns (ListDlpJobsResponse) { +    option (google.api.http) = { +      get: "/v2/{parent=projects/*}/dlpJobs" +      additional_bindings { +        get: "/v2/{parent=projects/*/locations/*}/dlpJobs" +      } +      additional_bindings { +        get: "/v2/{parent=organizations/*/locations/*}/dlpJobs" +      } +    }; +    option (google.api.method_signature) = "parent"; +  } + +  // Gets the latest state of a long-running DlpJob. +  // See https://cloud.google.com/dlp/docs/inspecting-storage and +  // https://cloud.google.com/dlp/docs/compute-risk-analysis to learn more. +  rpc GetDlpJob(GetDlpJobRequest) returns (DlpJob) { +    option (google.api.http) = { +      get: "/v2/{name=projects/*/dlpJobs/*}" +      additional_bindings { +        get: "/v2/{name=projects/*/locations/*/dlpJobs/*}" +      } +    }; +    option (google.api.method_signature) = "name"; +  } + +  // Deletes a long-running DlpJob. This method indicates that the client is +  // no longer interested in the DlpJob result. The job will be canceled if +  // possible. +  // See https://cloud.google.com/dlp/docs/inspecting-storage and +  // https://cloud.google.com/dlp/docs/compute-risk-analysis to learn more. +  rpc DeleteDlpJob(DeleteDlpJobRequest) returns (google.protobuf.Empty) { +    option (google.api.http) = { +      delete: "/v2/{name=projects/*/dlpJobs/*}" +      additional_bindings { +        delete: "/v2/{name=projects/*/locations/*/dlpJobs/*}" +      } +    }; +    option (google.api.method_signature) = "name"; +  } + +  // Starts asynchronous cancellation on a long-running DlpJob. The server +  // makes a best effort to cancel the DlpJob, but success is not +  // guaranteed. +  // See https://cloud.google.com/dlp/docs/inspecting-storage and +  // https://cloud.google.com/dlp/docs/compute-risk-analysis to learn more. +  rpc CancelDlpJob(CancelDlpJobRequest) returns (google.protobuf.Empty) { +    option (google.api.http) = { +      post: "/v2/{name=projects/*/dlpJobs/*}:cancel" +      body: "*" +      additional_bindings { +        post: "/v2/{name=projects/*/locations/*/dlpJobs/*}:cancel" +        body: "*" +      } +    }; +  } + +  // Creates a pre-built stored infoType to be used for inspection. +  // See https://cloud.google.com/dlp/docs/creating-stored-infotypes to +  // learn more. +  rpc CreateStoredInfoType(CreateStoredInfoTypeRequest) returns (StoredInfoType) { +    option (google.api.http) = { +      post: "/v2/{parent=organizations/*}/storedInfoTypes" +      body: "*" +      additional_bindings { +        post: "/v2/{parent=organizations/*/locations/*}/storedInfoTypes" +        body: "*" +      } +      additional_bindings { +        post: "/v2/{parent=projects/*}/storedInfoTypes" +        body: "*" +      } +      additional_bindings { +        post: "/v2/{parent=projects/*/locations/*}/storedInfoTypes" +        body: "*" +      } +    }; +    option (google.api.method_signature) = "parent,config"; +  } + +  // Updates the stored infoType by creating a new version. The existing version +  // will continue to be used until the new version is ready. +  // See https://cloud.google.com/dlp/docs/creating-stored-infotypes to +  // learn more. +  rpc UpdateStoredInfoType(UpdateStoredInfoTypeRequest) returns (StoredInfoType) { +    option (google.api.http) = { +      patch: "/v2/{name=organizations/*/storedInfoTypes/*}" +      body: "*" +      additional_bindings { +        patch: "/v2/{name=organizations/*/locations/*/storedInfoTypes/*}" +        body: "*" +      } +      additional_bindings { +        patch: "/v2/{name=projects/*/storedInfoTypes/*}" +        body: "*" +      } +      additional_bindings { +        patch: "/v2/{name=projects/*/locations/*/storedInfoTypes/*}" +        body: "*" +      } +    }; +    option (google.api.method_signature) = "name,config,update_mask"; +  } + +  // Gets a stored infoType. +  // See https://cloud.google.com/dlp/docs/creating-stored-infotypes to +  // learn more. +  rpc GetStoredInfoType(GetStoredInfoTypeRequest) returns (StoredInfoType) { +    option (google.api.http) = { +      get: "/v2/{name=organizations/*/storedInfoTypes/*}" +      additional_bindings { +        get: "/v2/{name=organizations/*/locations/*/storedInfoTypes/*}" +      } +      additional_bindings { +        get: "/v2/{name=projects/*/storedInfoTypes/*}" +      } +      additional_bindings { +        get: "/v2/{name=projects/*/locations/*/storedInfoTypes/*}" +      } +    }; +    option (google.api.method_signature) = "name"; +  } + +  // Lists stored infoTypes. +  // See https://cloud.google.com/dlp/docs/creating-stored-infotypes to +  // learn more. +  rpc ListStoredInfoTypes(ListStoredInfoTypesRequest) returns (ListStoredInfoTypesResponse) { +    option (google.api.http) = { +      get: "/v2/{parent=organizations/*}/storedInfoTypes" +      additional_bindings { +        get: "/v2/{parent=organizations/*/locations/*}/storedInfoTypes" +      } +      additional_bindings { +        get: "/v2/{parent=projects/*}/storedInfoTypes" +      } +      additional_bindings { +        get: "/v2/{parent=projects/*/locations/*}/storedInfoTypes" +      } +    }; +    option (google.api.method_signature) = "parent"; +  } + +  // Deletes a stored infoType. +  // See https://cloud.google.com/dlp/docs/creating-stored-infotypes to +  // learn more. +  rpc DeleteStoredInfoType(DeleteStoredInfoTypeRequest) returns (google.protobuf.Empty) { +    option (google.api.http) = { +      delete: "/v2/{name=organizations/*/storedInfoTypes/*}" +      additional_bindings { +        delete: "/v2/{name=organizations/*/locations/*/storedInfoTypes/*}" +      } +      additional_bindings { +        delete: "/v2/{name=projects/*/storedInfoTypes/*}" +      } +      additional_bindings { +        delete: "/v2/{name=projects/*/locations/*/storedInfoTypes/*}" +      } +    }; +    option (google.api.method_signature) = "name"; +  } + +  // Inspect hybrid content and store findings to a job. +  // To review the findings, inspect the job. Inspection will occur +  // asynchronously. +  rpc HybridInspectDlpJob(HybridInspectDlpJobRequest) returns (HybridInspectResponse) { +    option (google.api.http) = { +      post: "/v2/{name=projects/*/locations/*/dlpJobs/*}:hybridInspect" +      body: "*" +    }; +    option (google.api.method_signature) = "name"; +  } + +  // Finish a running hybrid DlpJob. Triggers the finalization steps and running +  // of any enabled actions that have not yet run. +  rpc FinishDlpJob(FinishDlpJobRequest) returns (google.protobuf.Empty) { +    option (google.api.http) = { +      post: "/v2/{name=projects/*/locations/*/dlpJobs/*}:finish" +      body: "*" +    }; +  } +} + +// List of excluded infoTypes. +message ExcludeInfoTypes { +  // InfoType list in ExclusionRule rule drops a finding when it overlaps or +  // contained within with a finding of an infoType from this list. For +  // example, for `InspectionRuleSet.info_types` containing "PHONE_NUMBER"` and +  // `exclusion_rule` containing `exclude_info_types.info_types` with +  // "EMAIL_ADDRESS" the phone number findings are dropped if they overlap +  // with EMAIL_ADDRESS finding. +  // That leads to "555-222-2222@example.org" to generate only a single +  // finding, namely email address. +  repeated InfoType info_types = 1; +} + +// The rule that specifies conditions when findings of infoTypes specified in +// `InspectionRuleSet` are removed from results. +message ExclusionRule { +  // Exclusion rule types. +  oneof type { +    // Dictionary which defines the rule. +    CustomInfoType.Dictionary dictionary = 1; + +    // Regular expression which defines the rule. +    CustomInfoType.Regex regex = 2; + +    // Set of infoTypes for which findings would affect this rule. +    ExcludeInfoTypes exclude_info_types = 3; +  } + +  // How the rule is applied, see MatchingType documentation for details. +  MatchingType matching_type = 4; +} + +// A single inspection rule to be applied to infoTypes, specified in +// `InspectionRuleSet`. +message InspectionRule { +  // Inspection rule types. +  oneof type { +    // Hotword-based detection rule. +    CustomInfoType.DetectionRule.HotwordRule hotword_rule = 1; + +    // Exclusion rule. +    ExclusionRule exclusion_rule = 2; +  } +} + +// Rule set for modifying a set of infoTypes to alter behavior under certain +// circumstances, depending on the specific details of the rules within the set. +message InspectionRuleSet { +  // List of infoTypes this rule set is applied to. +  repeated InfoType info_types = 1; + +  // Set of rules to be applied to infoTypes. The rules are applied in order. +  repeated InspectionRule rules = 2; +} + +// Configuration description of the scanning process. +// When used with redactContent only info_types and min_likelihood are currently +// used. +message InspectConfig { +  // Configuration to control the number of findings returned for inspection. +  // This is not used for de-identification or data profiling. +  // +  // When redacting sensitive data from images, finding limits don't apply. They +  // can cause unexpected or inconsistent results, where only some data is +  // redacted. Don't include finding limits in +  // [RedactImage][google.privacy.dlp.v2.DlpService.RedactImage] +  // requests. Otherwise, Cloud DLP returns an error. +  message FindingLimits { +    // Max findings configuration per infoType, per content item or long +    // running DlpJob. +    message InfoTypeLimit { +      // Type of information the findings limit applies to. Only one limit per +      // info_type should be provided. If InfoTypeLimit does not have an +      // info_type, the DLP API applies the limit against all info_types that +      // are found but not specified in another InfoTypeLimit. +      InfoType info_type = 1; + +      // Max findings limit for the given infoType. +      int32 max_findings = 2; +    } + +    // Max number of findings that will be returned for each item scanned. +    // When set within `InspectJobConfig`, +    // the maximum returned is 2000 regardless if this is set higher. +    // When set within `InspectContentRequest`, this field is ignored. +    int32 max_findings_per_item = 1; + +    // Max number of findings that will be returned per request/job. +    // When set within `InspectContentRequest`, the maximum returned is 2000 +    // regardless if this is set higher. +    int32 max_findings_per_request = 2; + +    // Configuration of findings limit given for specified infoTypes. +    repeated InfoTypeLimit max_findings_per_info_type = 3; +  } + +  // Restricts what info_types to look for. The values must correspond to +  // InfoType values returned by ListInfoTypes or listed at +  // https://cloud.google.com/dlp/docs/infotypes-reference. +  // +  // When no InfoTypes or CustomInfoTypes are specified in a request, the +  // system may automatically choose what detectors to run. By default this may +  // be all types, but may change over time as detectors are updated. +  // +  // If you need precise control and predictability as to what detectors are +  // run you should specify specific InfoTypes listed in the reference, +  // otherwise a default list will be used, which may change over time. +  repeated InfoType info_types = 1; + +  // Only returns findings equal or above this threshold. The default is +  // POSSIBLE. +  // See https://cloud.google.com/dlp/docs/likelihood to learn more. +  Likelihood min_likelihood = 2; + +  // Configuration to control the number of findings returned. +  // This is not used for data profiling. +  // +  // When redacting sensitive data from images, finding limits don't apply. They +  // can cause unexpected or inconsistent results, where only some data is +  // redacted. Don't include finding limits in +  // [RedactImage][google.privacy.dlp.v2.DlpService.RedactImage] +  // requests. Otherwise, Cloud DLP returns an error. +  FindingLimits limits = 3; + +  // When true, a contextual quote from the data that triggered a finding is +  // included in the response; see [Finding.quote][google.privacy.dlp.v2.Finding.quote]. +  // This is not used for data profiling. +  bool include_quote = 4; + +  // When true, excludes type information of the findings. +  // This is not used for data profiling. +  bool exclude_info_types = 5; + +  // CustomInfoTypes provided by the user. See +  // https://cloud.google.com/dlp/docs/creating-custom-infotypes to learn more. +  repeated CustomInfoType custom_info_types = 6; + +  // Deprecated and unused. +  repeated ContentOption content_options = 8; + +  // Set of rules to apply to the findings for this InspectConfig. +  // Exclusion rules, contained in the set are executed in the end, other +  // rules are executed in the order they are specified for each info type. +  repeated InspectionRuleSet rule_set = 10; +} + +// Container for bytes to inspect or redact. +message ByteContentItem { +  // The type of data being sent for inspection. To learn more, see +  // [Supported file +  // types](https://cloud.google.com/dlp/docs/supported-file-types). +  enum BytesType { +    // Unused +    BYTES_TYPE_UNSPECIFIED = 0; + +    // Any image type. +    IMAGE = 6; + +    // jpeg +    IMAGE_JPEG = 1; + +    // bmp +    IMAGE_BMP = 2; + +    // png +    IMAGE_PNG = 3; + +    // svg +    IMAGE_SVG = 4; + +    // plain text +    TEXT_UTF8 = 5; + +    // docx, docm, dotx, dotm +    WORD_DOCUMENT = 7; + +    // pdf +    PDF = 8; + +    // pptx, pptm, potx, potm, pot +    POWERPOINT_DOCUMENT = 9; + +    // xlsx, xlsm, xltx, xltm +    EXCEL_DOCUMENT = 10; + +    // avro +    AVRO = 11; + +    // csv +    CSV = 12; + +    // tsv +    TSV = 13; +  } + +  // The type of data stored in the bytes string. Default will be TEXT_UTF8. +  BytesType type = 1; + +  // Content data to inspect or redact. +  bytes data = 2; +} + +// Container structure for the content to inspect. +message ContentItem { +  // Data of the item either in the byte array or UTF-8 string form, or table. +  oneof data_item { +    // String data to inspect or redact. +    string value = 3; + +    // Structured content for inspection. See +    // https://cloud.google.com/dlp/docs/inspecting-text#inspecting_a_table to +    // learn more. +    Table table = 4; + +    // Content data to inspect or redact. Replaces `type` and `data`. +    ByteContentItem byte_item = 5; +  } +} + +// Structured content to inspect. Up to 50,000 `Value`s per request allowed. See +// https://cloud.google.com/dlp/docs/inspecting-structured-text#inspecting_a_table +// to learn more. +message Table { +  // Values of the row. +  message Row { +    // Individual cells. +    repeated Value values = 1; +  } + +  // Headers of the table. +  repeated FieldId headers = 1; + +  // Rows of the table. +  repeated Row rows = 2; +} + +// All the findings for a single scanned item. +message InspectResult { +  // List of findings for an item. +  repeated Finding findings = 1; + +  // If true, then this item might have more findings than were returned, +  // and the findings returned are an arbitrary subset of all findings. +  // The findings list might be truncated because the input items were too +  // large, or because the server reached the maximum amount of resources +  // allowed for a single API call. For best results, divide the input into +  // smaller batches. +  bool findings_truncated = 2; +} + +// Represents a piece of potentially sensitive content. +message Finding { +  option (google.api.resource) = { +    type: "dlp.googleapis.com/Finding" +    pattern: "projects/{project}/locations/{location}/findings/{finding}" +  }; + +  // Resource name in format +  // projects/{project}/locations/{location}/findings/{finding} Populated only +  // when viewing persisted findings. +  string name = 14; + +  // The content that was found. Even if the content is not textual, it +  // may be converted to a textual representation here. +  // Provided if `include_quote` is true and the finding is +  // less than or equal to 4096 bytes long. If the finding exceeds 4096 bytes +  // in length, the quote may be omitted. +  string quote = 1; + +  // The type of content that might have been found. +  // Provided if `excluded_types` is false. +  InfoType info_type = 2; + +  // Confidence of how likely it is that the `info_type` is correct. +  Likelihood likelihood = 3; + +  // Where the content was found. +  Location location = 4; + +  // Timestamp when finding was detected. +  google.protobuf.Timestamp create_time = 6; + +  // Contains data parsed from quotes. Only populated if include_quote was set +  // to true and a supported infoType was requested. Currently supported +  // infoTypes: DATE, DATE_OF_BIRTH and TIME. +  QuoteInfo quote_info = 7; + +  // The job that stored the finding. +  string resource_name = 8 [(google.api.resource_reference) = { +                              type: "dlp.googleapis.com/DlpJob" +                            }]; + +  // Job trigger name, if applicable, for this finding. +  string trigger_name = 9 [(google.api.resource_reference) = { +                             type: "dlp.googleapis.com/JobTrigger" +                           }]; + +  // The labels associated with this `Finding`. +  // +  // Label keys must be between 1 and 63 characters long and must conform +  // to the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`. +  // +  // Label values must be between 0 and 63 characters long and must conform +  // to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`. +  // +  // No more than 10 labels can be associated with a given finding. +  // +  // Examples: +  // * `"environment" : "production"` +  // * `"pipeline" : "etl"` +  map<string, string> labels = 10; + +  // Time the job started that produced this finding. +  google.protobuf.Timestamp job_create_time = 11; + +  // The job that stored the finding. +  string job_name = 13 [(google.api.resource_reference) = { +                          type: "dlp.googleapis.com/DlpJob" +                        }]; + +  // The unique finding id. +  string finding_id = 15; +} + +// Specifies the location of the finding. +message Location { +  // Zero-based byte offsets delimiting the finding. +  // These are relative to the finding's containing element. +  // Note that when the content is not textual, this references +  // the UTF-8 encoded textual representation of the content. +  // Omitted if content is an image. +  Range byte_range = 1; + +  // Unicode character offsets delimiting the finding. +  // These are relative to the finding's containing element. +  // Provided when the content is text. +  Range codepoint_range = 2; + +  // List of nested objects pointing to the precise location of the finding +  // within the file or record. +  repeated ContentLocation content_locations = 7; + +  // Information about the container where this finding occurred, if available. +  Container container = 8; +} + +// Precise location of the finding within a document, record, image, or metadata +// container. +message ContentLocation { +  // Name of the container where the finding is located. +  // The top level name is the source file name or table name. Names of some +  // common storage containers are formatted as follows: +  // +  // * BigQuery tables:  `{project_id}:{dataset_id}.{table_id}` +  // * Cloud Storage files: `gs://{bucket}/{path}` +  // * Datastore namespace: {namespace} +  // +  // Nested names could be absent if the embedded object has no string +  // identifier (for example, an image contained within a document). +  string container_name = 1; + +  // Type of the container within the file with location of the finding. +  oneof location { +    // Location within a row or record of a database table. +    RecordLocation record_location = 2; + +    // Location within an image's pixels. +    ImageLocation image_location = 3; + +    // Location data for document files. +    DocumentLocation document_location = 5; + +    // Location within the metadata for inspected content. +    MetadataLocation metadata_location = 8; +  } + +  // Finding container modification timestamp, if applicable. For Cloud Storage, +  // this field contains the last file modification timestamp. For a BigQuery +  // table, this field contains the last_modified_time property. For Datastore, +  // this field isn't populated. +  google.protobuf.Timestamp container_timestamp = 6; + +  // Finding container version, if available +  // ("generation" for Cloud Storage). +  string container_version = 7; +} + +// Metadata Location +message MetadataLocation { +  // Type of metadata containing the finding. +  MetadataType type = 1; + +  // Label of the piece of metadata containing the finding, for example - +  // latitude, author, caption. +  oneof label { +    // Storage metadata. +    StorageMetadataLabel storage_label = 3; +  } +} + +// Storage metadata label to indicate which metadata entry contains findings. +message StorageMetadataLabel { +  string key = 1; +} + +// Location of a finding within a document. +message DocumentLocation { +  // Offset of the line, from the beginning of the file, where the finding +  // is located. +  int64 file_offset = 1; +} + +// Location of a finding within a row or record. +message RecordLocation { +  // Key of the finding. +  RecordKey record_key = 1; + +  // Field id of the field containing the finding. +  FieldId field_id = 2; + +  // Location within a `ContentItem.Table`. +  TableLocation table_location = 3; +} + +// Location of a finding within a table. +message TableLocation { +  // The zero-based index of the row where the finding is located. Only +  // populated for resources that have a natural ordering, not BigQuery. In +  // BigQuery, to identify the row a finding came from, populate +  // BigQueryOptions.identifying_fields with your primary key column names and +  // when you store the findings the value of those columns will be stored +  // inside of Finding. +  int64 row_index = 1; +} + +// Represents a container that may contain DLP findings. +// Examples of a container include a file, table, or database record. +message Container { +  // Container type, for example BigQuery or Cloud Storage. +  string type = 1; + +  // Project where the finding was found. +  // Can be different from the project that owns the finding. +  string project_id = 2; + +  // A string representation of the full container name. +  // Examples: +  // - BigQuery: 'Project:DataSetId.TableId' +  // - Cloud Storage: 'gs://Bucket/folders/filename.txt' +  string full_path = 3; + +  // The root of the container. +  // Examples: +  // +  // - For BigQuery table `project_id:dataset_id.table_id`, the root is +  //  `dataset_id` +  // - For Cloud Storage file `gs://bucket/folder/filename.txt`, the root +  //  is `gs://bucket` +  string root_path = 4; + +  // The rest of the path after the root. +  // Examples: +  // +  // - For BigQuery table `project_id:dataset_id.table_id`, the relative path is +  //  `table_id` +  // - For Cloud Storage file `gs://bucket/folder/filename.txt`, the relative +  //  path is `folder/filename.txt` +  string relative_path = 5; + +  // Findings container modification timestamp, if applicable. For Cloud +  // Storage, this field contains the last file modification timestamp. For a +  // BigQuery table, this field contains the last_modified_time property. For +  // Datastore, this field isn't populated. +  google.protobuf.Timestamp update_time = 6; + +  // Findings container version, if available +  // ("generation" for Cloud Storage). +  string version = 7; +} + +// Generic half-open interval [start, end) +message Range { +  // Index of the first character of the range (inclusive). +  int64 start = 1; + +  // Index of the last character of the range (exclusive). +  int64 end = 2; +} + +// Location of the finding within an image. +message ImageLocation { +  // Bounding boxes locating the pixels within the image containing the finding. +  repeated BoundingBox bounding_boxes = 1; +} + +// Bounding box encompassing detected text within an image. +message BoundingBox { +  // Top coordinate of the bounding box. (0,0) is upper left. +  int32 top = 1; + +  // Left coordinate of the bounding box. (0,0) is upper left. +  int32 left = 2; + +  // Width of the bounding box in pixels. +  int32 width = 3; + +  // Height of the bounding box in pixels. +  int32 height = 4; +} + +// Request to search for potentially sensitive info in an image and redact it +// by covering it with a colored rectangle. +message RedactImageRequest { +  // Configuration for determining how redaction of images should occur. +  message ImageRedactionConfig { +    // Type of information to redact from images. +    oneof target { +      // Only one per info_type should be provided per request. If not +      // specified, and redact_all_text is false, the DLP API will redact all +      // text that it matches against all info_types that are found, but not +      // specified in another ImageRedactionConfig. +      InfoType info_type = 1; + +      // If true, all text found in the image, regardless whether it matches an +      // info_type, is redacted. Only one should be provided. +      bool redact_all_text = 2; +    } + +    // The color to use when redacting content from an image. If not specified, +    // the default is black. +    Color redaction_color = 3; +  } + +  // Parent resource name. +  // +  // The format of this value varies depending on whether you have [specified a +  // processing +  // location](https://cloud.google.com/dlp/docs/specifying-location): +  // +  // + Projects scope, location specified:<br/> +  //   `projects/`<var>PROJECT_ID</var>`/locations/`<var>LOCATION_ID</var> +  // + Projects scope, no location specified (defaults to global):<br/> +  //   `projects/`<var>PROJECT_ID</var> +  // +  // The following example `parent` string specifies a parent project with the +  // identifier `example-project`, and specifies the `europe-west3` location +  // for processing data: +  // +  //     parent=projects/example-project/locations/europe-west3 +  string parent = 1 [(google.api.resource_reference) = { +                       child_type: "dlp.googleapis.com/DlpContent" +                     }]; + +  // Deprecated. This field has no effect. +  string location_id = 8; + +  // Configuration for the inspector. +  InspectConfig inspect_config = 2; + +  // The configuration for specifying what content to redact from images. +  repeated ImageRedactionConfig image_redaction_configs = 5; + +  // Whether the response should include findings along with the redacted +  // image. +  bool include_findings = 6; + +  // The content must be PNG, JPEG, SVG or BMP. +  ByteContentItem byte_item = 7; +} + +// Represents a color in the RGB color space. +message Color { +  // The amount of red in the color as a value in the interval [0, 1]. +  float red = 1; + +  // The amount of green in the color as a value in the interval [0, 1]. +  float green = 2; + +  // The amount of blue in the color as a value in the interval [0, 1]. +  float blue = 3; +} + +// Results of redacting an image. +message RedactImageResponse { +  // The redacted image. The type will be the same as the original image. +  bytes redacted_image = 1; + +  // If an image was being inspected and the InspectConfig's include_quote was +  // set to true, then this field will include all text, if any, that was found +  // in the image. +  string extracted_text = 2; + +  // The findings. Populated when include_findings in the request is true. +  InspectResult inspect_result = 3; +} + +// Request to de-identify a ContentItem. +message DeidentifyContentRequest { +  // Parent resource name. +  // +  // The format of this value varies depending on whether you have [specified a +  // processing +  // location](https://cloud.google.com/dlp/docs/specifying-location): +  // +  // + Projects scope, location specified:<br/> +  //   `projects/`<var>PROJECT_ID</var>`/locations/`<var>LOCATION_ID</var> +  // + Projects scope, no location specified (defaults to global):<br/> +  //   `projects/`<var>PROJECT_ID</var> +  // +  // The following example `parent` string specifies a parent project with the +  // identifier `example-project`, and specifies the `europe-west3` location +  // for processing data: +  // +  //     parent=projects/example-project/locations/europe-west3 +  string parent = 1 [(google.api.resource_reference) = { +                       child_type: "dlp.googleapis.com/DlpContent" +                     }]; + +  // Configuration for the de-identification of the content item. +  // Items specified here will override the template referenced by the +  // deidentify_template_name argument. +  DeidentifyConfig deidentify_config = 2; + +  // Configuration for the inspector. +  // Items specified here will override the template referenced by the +  // inspect_template_name argument. +  InspectConfig inspect_config = 3; + +  // The item to de-identify. Will be treated as text. +  ContentItem item = 4; + +  // Template to use. Any configuration directly specified in +  // inspect_config will override those set in the template. Singular fields +  // that are set in this request will replace their corresponding fields in the +  // template. Repeated fields are appended. Singular sub-messages and groups +  // are recursively merged. +  string inspect_template_name = 5; + +  // Template to use. Any configuration directly specified in +  // deidentify_config will override those set in the template. Singular fields +  // that are set in this request will replace their corresponding fields in the +  // template. Repeated fields are appended. Singular sub-messages and groups +  // are recursively merged. +  string deidentify_template_name = 6; + +  // Deprecated. This field has no effect. +  string location_id = 7; +} + +// Results of de-identifying a ContentItem. +message DeidentifyContentResponse { +  // The de-identified item. +  ContentItem item = 1; + +  // An overview of the changes that were made on the `item`. +  TransformationOverview overview = 2; +} + +// Request to re-identify an item. +message ReidentifyContentRequest { +  // Required. Parent resource name. +  // +  // The format of this value varies depending on whether you have [specified a +  // processing +  // location](https://cloud.google.com/dlp/docs/specifying-location): +  // +  // + Projects scope, location specified:<br/> +  //   `projects/`<var>PROJECT_ID</var>`/locations/`<var>LOCATION_ID</var> +  // + Projects scope, no location specified (defaults to global):<br/> +  //   `projects/`<var>PROJECT_ID</var> +  // +  // The following example `parent` string specifies a parent project with the +  // identifier `example-project`, and specifies the `europe-west3` location +  // for processing data: +  // +  //     parent=projects/example-project/locations/europe-west3 +  string parent = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      child_type: "dlp.googleapis.com/DlpContent" +    } +  ]; + +  // Configuration for the re-identification of the content item. +  // This field shares the same proto message type that is used for +  // de-identification, however its usage here is for the reversal of the +  // previous de-identification. Re-identification is performed by examining +  // the transformations used to de-identify the items and executing the +  // reverse. This requires that only reversible transformations +  // be provided here. The reversible transformations are: +  // +  //  - `CryptoDeterministicConfig` +  //  - `CryptoReplaceFfxFpeConfig` +  DeidentifyConfig reidentify_config = 2; + +  // Configuration for the inspector. +  InspectConfig inspect_config = 3; + +  // The item to re-identify. Will be treated as text. +  ContentItem item = 4; + +  // Template to use. Any configuration directly specified in +  // `inspect_config` will override those set in the template. Singular fields +  // that are set in this request will replace their corresponding fields in the +  // template. Repeated fields are appended. Singular sub-messages and groups +  // are recursively merged. +  string inspect_template_name = 5; + +  // Template to use. References an instance of `DeidentifyTemplate`. +  // Any configuration directly specified in `reidentify_config` or +  // `inspect_config` will override those set in the template. The +  // `DeidentifyTemplate` used must include only reversible transformations. +  // Singular fields that are set in this request will replace their +  // corresponding fields in the template. Repeated fields are appended. +  // Singular sub-messages and groups are recursively merged. +  string reidentify_template_name = 6; + +  // Deprecated. This field has no effect. +  string location_id = 7; +} + +// Results of re-identifying an item. +message ReidentifyContentResponse { +  // The re-identified item. +  ContentItem item = 1; + +  // An overview of the changes that were made to the `item`. +  TransformationOverview overview = 2; +} + +// Request to search for potentially sensitive info in a ContentItem. +message InspectContentRequest { +  // Parent resource name. +  // +  // The format of this value varies depending on whether you have [specified a +  // processing +  // location](https://cloud.google.com/dlp/docs/specifying-location): +  // +  // + Projects scope, location specified:<br/> +  //   `projects/`<var>PROJECT_ID</var>`/locations/`<var>LOCATION_ID</var> +  // + Projects scope, no location specified (defaults to global):<br/> +  //   `projects/`<var>PROJECT_ID</var> +  // +  // The following example `parent` string specifies a parent project with the +  // identifier `example-project`, and specifies the `europe-west3` location +  // for processing data: +  // +  //     parent=projects/example-project/locations/europe-west3 +  string parent = 1 [(google.api.resource_reference) = { +                       child_type: "dlp.googleapis.com/DlpContent" +                     }]; + +  // Configuration for the inspector. What specified here will override +  // the template referenced by the inspect_template_name argument. +  InspectConfig inspect_config = 2; + +  // The item to inspect. +  ContentItem item = 3; + +  // Template to use. Any configuration directly specified in +  // inspect_config will override those set in the template. Singular fields +  // that are set in this request will replace their corresponding fields in the +  // template. Repeated fields are appended. Singular sub-messages and groups +  // are recursively merged. +  string inspect_template_name = 4; + +  // Deprecated. This field has no effect. +  string location_id = 5; +} + +// Results of inspecting an item. +message InspectContentResponse { +  // The findings. +  InspectResult result = 1; +} + +// Cloud repository for storing output. +message OutputStorageConfig { +  // Predefined schemas for storing findings. +  // Only for use with external storage. +  enum OutputSchema { +    // Unused. +    OUTPUT_SCHEMA_UNSPECIFIED = 0; + +    // Basic schema including only `info_type`, `quote`, `certainty`, and +    // `timestamp`. +    BASIC_COLUMNS = 1; + +    // Schema tailored to findings from scanning Cloud Storage. +    GCS_COLUMNS = 2; + +    // Schema tailored to findings from scanning Google Datastore. +    DATASTORE_COLUMNS = 3; + +    // Schema tailored to findings from scanning Google BigQuery. +    BIG_QUERY_COLUMNS = 4; + +    // Schema containing all columns. +    ALL_COLUMNS = 5; +  } + +  // Output storage types. +  oneof type { +    // Store findings in an existing table or a new table in an existing +    // dataset. If table_id is not set a new one will be generated +    // for you with the following format: +    // dlp_googleapis_yyyy_mm_dd_[dlp_job_id]. Pacific time zone will be used +    // for generating the date details. +    // +    // For Inspect, each column in an existing output table must have the same +    // name, type, and mode of a field in the `Finding` object. +    // +    // For Risk, an existing output table should be the output of a previous +    // Risk analysis job run on the same source table, with the same privacy +    // metric and quasi-identifiers. Risk jobs that analyze the same table but +    // compute a different privacy metric, or use different sets of +    // quasi-identifiers, cannot store their results in the same table. +    BigQueryTable table = 1; +  } + +  // Schema used for writing the findings for Inspect jobs. This field is only +  // used for Inspect and must be unspecified for Risk jobs. Columns are derived +  // from the `Finding` object. If appending to an existing table, any columns +  // from the predefined schema that are missing will be added. No columns in +  // the existing table will be deleted. +  // +  // If unspecified, then all available columns will be used for a new table or +  // an (existing) table with no schema, and no changes will be made to an +  // existing table that has a schema. +  // Only for use with external storage. +  OutputSchema output_schema = 3; +} + +// Statistics regarding a specific InfoType. +message InfoTypeStats { +  // The type of finding this stat is for. +  InfoType info_type = 1; + +  // Number of findings for this infoType. +  int64 count = 2; +} + +// The results of an inspect DataSource job. +message InspectDataSourceDetails { +  // Snapshot of the inspection configuration. +  message RequestedOptions { +    // If run with an InspectTemplate, a snapshot of its state at the time of +    // this run. +    InspectTemplate snapshot_inspect_template = 1; + +    // Inspect config. +    InspectJobConfig job_config = 3; +  } + +  // All result fields mentioned below are updated while the job is processing. +  message Result { +    // Total size in bytes that were processed. +    int64 processed_bytes = 1; + +    // Estimate of the number of bytes to process. +    int64 total_estimated_bytes = 2; + +    // Statistics of how many instances of each info type were found during +    // inspect job. +    repeated InfoTypeStats info_type_stats = 3; + +    // Statistics related to the processing of hybrid inspect. +    HybridInspectStatistics hybrid_stats = 7; +  } + +  // The configuration used for this job. +  RequestedOptions requested_options = 2; + +  // A summary of the outcome of this inspection job. +  Result result = 3; +} + +// Statistics related to processing hybrid inspect requests. +message HybridInspectStatistics { +  // The number of hybrid inspection requests processed within this job. +  int64 processed_count = 1; + +  // The number of hybrid inspection requests aborted because the job ran +  // out of quota or was ended before they could be processed. +  int64 aborted_count = 2; + +  // The number of hybrid requests currently being processed. Only populated +  // when called via method `getDlpJob`. +  // A burst of traffic may cause hybrid inspect requests to be enqueued. +  // Processing will take place as quickly as possible, but resource limitations +  // may impact how long a request is enqueued for. +  int64 pending_count = 3; +} + +// InfoType description. +message InfoTypeDescription { +  // Internal name of the infoType. +  string name = 1; + +  // Human readable form of the infoType name. +  string display_name = 2; + +  // Which parts of the API supports this InfoType. +  repeated InfoTypeSupportedBy supported_by = 3; + +  // Description of the infotype. Translated when language is provided in the +  // request. +  string description = 4; + +  // A list of available versions for the infotype. +  repeated VersionDescription versions = 9; + +  // The category of the infoType. +  repeated InfoTypeCategory categories = 10; +} + +// Classification of infoTypes to organize them according to geographic +// location, industry, and data type. +message InfoTypeCategory { +  // Enum of the current locations. +  // We might add more locations in the future. +  enum LocationCategory { +    // Unused location +    LOCATION_UNSPECIFIED = 0; + +    // The infoType is not issued by or tied to a specific region, but is used +    // almost everywhere. +    GLOBAL = 1; + +    // The infoType is typically used in Argentina. +    ARGENTINA = 2; + +    // The infoType is typically used in Australia. +    AUSTRALIA = 3; + +    // The infoType is typically used in Belgium. +    BELGIUM = 4; + +    // The infoType is typically used in Brazil. +    BRAZIL = 5; + +    // The infoType is typically used in Canada. +    CANADA = 6; + +    // The infoType is typically used in Chile. +    CHILE = 7; + +    // The infoType is typically used in China. +    CHINA = 8; + +    // The infoType is typically used in Colombia. +    COLOMBIA = 9; + +    // The infoType is typically used in Denmark. +    DENMARK = 10; + +    // The infoType is typically used in France. +    FRANCE = 11; + +    // The infoType is typically used in Finland. +    FINLAND = 12; + +    // The infoType is typically used in Germany. +    GERMANY = 13; + +    // The infoType is typically used in Hong Kong. +    HONG_KONG = 14; + +    // The infoType is typically used in India. +    INDIA = 15; + +    // The infoType is typically used in Indonesia. +    INDONESIA = 16; + +    // The infoType is typically used in Ireland. +    IRELAND = 17; + +    // The infoType is typically used in Israel. +    ISRAEL = 18; + +    // The infoType is typically used in Italy. +    ITALY = 19; + +    // The infoType is typically used in Japan. +    JAPAN = 20; + +    // The infoType is typically used in Korea. +    KOREA = 21; + +    // The infoType is typically used in Mexico. +    MEXICO = 22; + +    // The infoType is typically used in the Netherlands. +    THE_NETHERLANDS = 23; + +    // The infoType is typically used in Norway. +    NORWAY = 24; + +    // The infoType is typically used in Paraguay. +    PARAGUAY = 25; + +    // The infoType is typically used in Peru. +    PERU = 26; + +    // The infoType is typically used in Poland. +    POLAND = 27; + +    // The infoType is typically used in Portugal. +    PORTUGAL = 28; + +    // The infoType is typically used in Singapore. +    SINGAPORE = 29; + +    // The infoType is typically used in South Africa. +    SOUTH_AFRICA = 30; + +    // The infoType is typically used in Spain. +    SPAIN = 31; + +    // The infoType is typically used in Sweden. +    SWEDEN = 32; + +    // The infoType is typically used in Taiwan. +    TAIWAN = 33; + +    // The infoType is typically used in Thailand. +    THAILAND = 34; + +    // The infoType is typically used in Turkey. +    TURKEY = 35; + +    // The infoType is typically used in the United Kingdom. +    UNITED_KINGDOM = 36; + +    // The infoType is typically used in the United States. +    UNITED_STATES = 37; + +    // The infoType is typically used in Uruguay. +    URUGUAY = 38; + +    // The infoType is typically used in Venezuela. +    VENEZUELA = 39; + +    // The infoType is typically used in Google internally. +    INTERNAL = 40; +  } + +  // Enum of the current industries in the category. +  // We might add more industries in the future. +  enum IndustryCategory { +    // Unused industry +    INDUSTRY_UNSPECIFIED = 0; + +    // The infoType is typically used in the finance industry. +    FINANCE = 1; + +    // The infoType is typically used in the health industry. +    HEALTH = 2; + +    // The infoType is typically used in the telecommunications industry. +    TELECOMMUNICATIONS = 3; +  } + +  // Enum of the current types in the category. +  // We might add more types in the future. +  enum TypeCategory { +    // Unused type +    TYPE_UNSPECIFIED = 0; + +    // Personally identifiable information, for example, a +    // name or phone number +    PII = 1; + +    // Personally identifiable information that is especially sensitive, for +    // example, a passport number. +    SPII = 2; + +    // Attributes that can partially identify someone, especially in +    // combination with other attributes, like age, height, and gender. +    DEMOGRAPHIC = 3; + +    // Confidential or secret information, for example, a password. +    CREDENTIAL = 4; + +    // An identification document issued by a government. +    GOVERNMENT_ID = 5; + +    // A document, for example, a resume or source code. +    DOCUMENT = 6; + +    // Information that is not sensitive on its own, but provides details about +    // the circumstances surrounding an entity or an event. +    CONTEXTUAL_INFORMATION = 7; +  } + +  oneof category { +    // The region or country that issued the ID or document represented by the +    // infoType. +    LocationCategory location_category = 1; + +    // The group of relevant businesses where this infoType is commonly used +    IndustryCategory industry_category = 2; + +    // The class of identifiers where this infoType belongs +    TypeCategory type_category = 3; +  } +} + +// Details about each available version for an infotype. +message VersionDescription { +  // Name of the version +  string version = 1; + +  // Description of the version. +  string description = 2; +} + +// Request for the list of infoTypes. +message ListInfoTypesRequest { +  // The parent resource name. +  // +  // The format of this value is as follows: +  // +  //     locations/<var>LOCATION_ID</var> +  string parent = 4; + +  // BCP-47 language code for localized infoType friendly +  // names. If omitted, or if localized strings are not available, +  // en-US strings will be returned. +  string language_code = 1; + +  // filter to only return infoTypes supported by certain parts of the +  // API. Defaults to supported_by=INSPECT. +  string filter = 2; + +  // Deprecated. This field has no effect. +  string location_id = 3; +} + +// Response to the ListInfoTypes request. +message ListInfoTypesResponse { +  // Set of sensitive infoTypes. +  repeated InfoTypeDescription info_types = 1; +} + +// Configuration for a risk analysis job. See +// https://cloud.google.com/dlp/docs/concepts-risk-analysis to learn more. +message RiskAnalysisJobConfig { +  // Privacy metric to compute. +  PrivacyMetric privacy_metric = 1; + +  // Input dataset to compute metrics over. +  BigQueryTable source_table = 2; + +  // Actions to execute at the completion of the job. Are executed in the order +  // provided. +  repeated Action actions = 3; +} + +// A column with a semantic tag attached. +message QuasiId { +  // Required. Identifies the column. +  FieldId field = 1 [(google.api.field_behavior) = REQUIRED]; + +  // Semantic tag that identifies what a column contains, to determine which +  // statistical model to use to estimate the reidentifiability of each +  // value. [required] +  oneof tag { +    // A column can be tagged with a InfoType to use the relevant public +    // dataset as a statistical model of population, if available. We +    // currently support US ZIP codes, region codes, ages and genders. +    // To programmatically obtain the list of supported InfoTypes, use +    // ListInfoTypes with the supported_by=RISK_ANALYSIS filter. +    InfoType info_type = 2; + +    // A column can be tagged with a custom tag. In this case, the user must +    // indicate an auxiliary table that contains statistical information on +    // the possible values of this column (below). +    string custom_tag = 3; + +    // If no semantic tag is indicated, we infer the statistical model from +    // the distribution of values in the input data +    google.protobuf.Empty inferred = 4; +  } +} + +// An auxiliary table containing statistical information on the relative +// frequency of different quasi-identifiers values. It has one or several +// quasi-identifiers columns, and one column that indicates the relative +// frequency of each quasi-identifier tuple. +// If a tuple is present in the data but not in the auxiliary table, the +// corresponding relative frequency is assumed to be zero (and thus, the +// tuple is highly reidentifiable). +message StatisticalTable { +  // A quasi-identifier column has a custom_tag, used to know which column +  // in the data corresponds to which column in the statistical model. +  message QuasiIdentifierField { +    // Identifies the column. +    FieldId field = 1; + +    // A column can be tagged with a custom tag. In this case, the user must +    // indicate an auxiliary table that contains statistical information on +    // the possible values of this column (below). +    string custom_tag = 2; +  } + +  // Required. Auxiliary table location. +  BigQueryTable table = 3 [(google.api.field_behavior) = REQUIRED]; + +  // Required. Quasi-identifier columns. +  repeated QuasiIdentifierField quasi_ids = 1 [(google.api.field_behavior) = REQUIRED]; + +  // Required. The relative frequency column must contain a floating-point number +  // between 0 and 1 (inclusive). Null values are assumed to be zero. +  FieldId relative_frequency = 2 [(google.api.field_behavior) = REQUIRED]; +} + +// Privacy metric to compute for reidentification risk analysis. +message PrivacyMetric { +  // Compute numerical stats over an individual column, including +  // min, max, and quantiles. +  message NumericalStatsConfig { +    // Field to compute numerical stats on. Supported types are +    // integer, float, date, datetime, timestamp, time. +    FieldId field = 1; +  } + +  // Compute numerical stats over an individual column, including +  // number of distinct values and value count distribution. +  message CategoricalStatsConfig { +    // Field to compute categorical stats on. All column types are +    // supported except for arrays and structs. However, it may be more +    // informative to use NumericalStats when the field type is supported, +    // depending on the data. +    FieldId field = 1; +  } + +  // k-anonymity metric, used for analysis of reidentification risk. +  message KAnonymityConfig { +    // Set of fields to compute k-anonymity over. When multiple fields are +    // specified, they are considered a single composite key. Structs and +    // repeated data types are not supported; however, nested fields are +    // supported so long as they are not structs themselves or nested within +    // a repeated field. +    repeated FieldId quasi_ids = 1; + +    // Message indicating that multiple rows might be associated to a +    // single individual. If the same entity_id is associated to multiple +    // quasi-identifier tuples over distinct rows, we consider the entire +    // collection of tuples as the composite quasi-identifier. This collection +    // is a multiset: the order in which the different tuples appear in the +    // dataset is ignored, but their frequency is taken into account. +    // +    // Important note: a maximum of 1000 rows can be associated to a single +    // entity ID. If more rows are associated with the same entity ID, some +    // might be ignored. +    EntityId entity_id = 2; +  } + +  // l-diversity metric, used for analysis of reidentification risk. +  message LDiversityConfig { +    // Set of quasi-identifiers indicating how equivalence classes are +    // defined for the l-diversity computation. When multiple fields are +    // specified, they are considered a single composite key. +    repeated FieldId quasi_ids = 1; + +    // Sensitive field for computing the l-value. +    FieldId sensitive_attribute = 2; +  } + +  // Reidentifiability metric. This corresponds to a risk model similar to what +  // is called "journalist risk" in the literature, except the attack dataset is +  // statistically modeled instead of being perfectly known. This can be done +  // using publicly available data (like the US Census), or using a custom +  // statistical model (indicated as one or several BigQuery tables), or by +  // extrapolating from the distribution of values in the input dataset. +  message KMapEstimationConfig { +    // A column with a semantic tag attached. +    message TaggedField { +      // Required. Identifies the column. +      FieldId field = 1 [(google.api.field_behavior) = REQUIRED]; + +      // Semantic tag that identifies what a column contains, to determine which +      // statistical model to use to estimate the reidentifiability of each +      // value. [required] +      oneof tag { +        // A column can be tagged with a InfoType to use the relevant public +        // dataset as a statistical model of population, if available. We +        // currently support US ZIP codes, region codes, ages and genders. +        // To programmatically obtain the list of supported InfoTypes, use +        // ListInfoTypes with the supported_by=RISK_ANALYSIS filter. +        InfoType info_type = 2; + +        // A column can be tagged with a custom tag. In this case, the user must +        // indicate an auxiliary table that contains statistical information on +        // the possible values of this column (below). +        string custom_tag = 3; + +        // If no semantic tag is indicated, we infer the statistical model from +        // the distribution of values in the input data +        google.protobuf.Empty inferred = 4; +      } +    } + +    // An auxiliary table contains statistical information on the relative +    // frequency of different quasi-identifiers values. It has one or several +    // quasi-identifiers columns, and one column that indicates the relative +    // frequency of each quasi-identifier tuple. +    // If a tuple is present in the data but not in the auxiliary table, the +    // corresponding relative frequency is assumed to be zero (and thus, the +    // tuple is highly reidentifiable). +    message AuxiliaryTable { +      // A quasi-identifier column has a custom_tag, used to know which column +      // in the data corresponds to which column in the statistical model. +      message QuasiIdField { +        // Identifies the column. +        FieldId field = 1; + +        // A auxiliary field. +        string custom_tag = 2; +      } + +      // Required. Auxiliary table location. +      BigQueryTable table = 3 [(google.api.field_behavior) = REQUIRED]; + +      // Required. Quasi-identifier columns. +      repeated QuasiIdField quasi_ids = 1 [(google.api.field_behavior) = REQUIRED]; + +      // Required. The relative frequency column must contain a floating-point number +      // between 0 and 1 (inclusive). Null values are assumed to be zero. +      FieldId relative_frequency = 2 [(google.api.field_behavior) = REQUIRED]; +    } + +    // Required. Fields considered to be quasi-identifiers. No two columns can have the +    // same tag. +    repeated TaggedField quasi_ids = 1 [(google.api.field_behavior) = REQUIRED]; + +    // ISO 3166-1 alpha-2 region code to use in the statistical modeling. +    // Set if no column is tagged with a region-specific InfoType (like +    // US_ZIP_5) or a region code. +    string region_code = 2; + +    // Several auxiliary tables can be used in the analysis. Each custom_tag +    // used to tag a quasi-identifiers column must appear in exactly one column +    // of one auxiliary table. +    repeated AuxiliaryTable auxiliary_tables = 3; +  } + +  // δ-presence metric, used to estimate how likely it is for an attacker to +  // figure out that one given individual appears in a de-identified dataset. +  // Similarly to the k-map metric, we cannot compute δ-presence exactly without +  // knowing the attack dataset, so we use a statistical model instead. +  message DeltaPresenceEstimationConfig { +    // Required. Fields considered to be quasi-identifiers. No two fields can have the +    // same tag. +    repeated QuasiId quasi_ids = 1 [(google.api.field_behavior) = REQUIRED]; + +    // ISO 3166-1 alpha-2 region code to use in the statistical modeling. +    // Set if no column is tagged with a region-specific InfoType (like +    // US_ZIP_5) or a region code. +    string region_code = 2; + +    // Several auxiliary tables can be used in the analysis. Each custom_tag +    // used to tag a quasi-identifiers field must appear in exactly one +    // field of one auxiliary table. +    repeated StatisticalTable auxiliary_tables = 3; +  } + +  // Types of analysis. +  oneof type { +    // Numerical stats +    NumericalStatsConfig numerical_stats_config = 1; + +    // Categorical stats +    CategoricalStatsConfig categorical_stats_config = 2; + +    // K-anonymity +    KAnonymityConfig k_anonymity_config = 3; + +    // l-diversity +    LDiversityConfig l_diversity_config = 4; + +    // k-map +    KMapEstimationConfig k_map_estimation_config = 5; + +    // delta-presence +    DeltaPresenceEstimationConfig delta_presence_estimation_config = 6; +  } +} + +// Result of a risk analysis operation request. +message AnalyzeDataSourceRiskDetails { +  // Result of the numerical stats computation. +  message NumericalStatsResult { +    // Minimum value appearing in the column. +    Value min_value = 1; + +    // Maximum value appearing in the column. +    Value max_value = 2; + +    // List of 99 values that partition the set of field values into 100 equal +    // sized buckets. +    repeated Value quantile_values = 4; +  } + +  // Result of the categorical stats computation. +  message CategoricalStatsResult { +    // Histogram of value frequencies in the column. +    message CategoricalStatsHistogramBucket { +      // Lower bound on the value frequency of the values in this bucket. +      int64 value_frequency_lower_bound = 1; + +      // Upper bound on the value frequency of the values in this bucket. +      int64 value_frequency_upper_bound = 2; + +      // Total number of values in this bucket. +      int64 bucket_size = 3; + +      // Sample of value frequencies in this bucket. The total number of +      // values returned per bucket is capped at 20. +      repeated ValueFrequency bucket_values = 4; + +      // Total number of distinct values in this bucket. +      int64 bucket_value_count = 5; +    } + +    // Histogram of value frequencies in the column. +    repeated CategoricalStatsHistogramBucket value_frequency_histogram_buckets = 5; +  } + +  // Result of the k-anonymity computation. +  message KAnonymityResult { +    // The set of columns' values that share the same ldiversity value +    message KAnonymityEquivalenceClass { +      // Set of values defining the equivalence class. One value per +      // quasi-identifier column in the original KAnonymity metric message. +      // The order is always the same as the original request. +      repeated Value quasi_ids_values = 1; + +      // Size of the equivalence class, for example number of rows with the +      // above set of values. +      int64 equivalence_class_size = 2; +    } + +    // Histogram of k-anonymity equivalence classes. +    message KAnonymityHistogramBucket { +      // Lower bound on the size of the equivalence classes in this bucket. +      int64 equivalence_class_size_lower_bound = 1; + +      // Upper bound on the size of the equivalence classes in this bucket. +      int64 equivalence_class_size_upper_bound = 2; + +      // Total number of equivalence classes in this bucket. +      int64 bucket_size = 3; + +      // Sample of equivalence classes in this bucket. The total number of +      // classes returned per bucket is capped at 20. +      repeated KAnonymityEquivalenceClass bucket_values = 4; + +      // Total number of distinct equivalence classes in this bucket. +      int64 bucket_value_count = 5; +    } + +    // Histogram of k-anonymity equivalence classes. +    repeated KAnonymityHistogramBucket equivalence_class_histogram_buckets = 5; +  } + +  // Result of the l-diversity computation. +  message LDiversityResult { +    // The set of columns' values that share the same ldiversity value. +    message LDiversityEquivalenceClass { +      // Quasi-identifier values defining the k-anonymity equivalence +      // class. The order is always the same as the original request. +      repeated Value quasi_ids_values = 1; + +      // Size of the k-anonymity equivalence class. +      int64 equivalence_class_size = 2; + +      // Number of distinct sensitive values in this equivalence class. +      int64 num_distinct_sensitive_values = 3; + +      // Estimated frequencies of top sensitive values. +      repeated ValueFrequency top_sensitive_values = 4; +    } + +    // Histogram of l-diversity equivalence class sensitive value frequencies. +    message LDiversityHistogramBucket { +      // Lower bound on the sensitive value frequencies of the equivalence +      // classes in this bucket. +      int64 sensitive_value_frequency_lower_bound = 1; + +      // Upper bound on the sensitive value frequencies of the equivalence +      // classes in this bucket. +      int64 sensitive_value_frequency_upper_bound = 2; + +      // Total number of equivalence classes in this bucket. +      int64 bucket_size = 3; + +      // Sample of equivalence classes in this bucket. The total number of +      // classes returned per bucket is capped at 20. +      repeated LDiversityEquivalenceClass bucket_values = 4; + +      // Total number of distinct equivalence classes in this bucket. +      int64 bucket_value_count = 5; +    } + +    // Histogram of l-diversity equivalence class sensitive value frequencies. +    repeated LDiversityHistogramBucket sensitive_value_frequency_histogram_buckets = 5; +  } + +  // Result of the reidentifiability analysis. Note that these results are an +  // estimation, not exact values. +  message KMapEstimationResult { +    // A tuple of values for the quasi-identifier columns. +    message KMapEstimationQuasiIdValues { +      // The quasi-identifier values. +      repeated Value quasi_ids_values = 1; + +      // The estimated anonymity for these quasi-identifier values. +      int64 estimated_anonymity = 2; +    } + +    // A KMapEstimationHistogramBucket message with the following values: +    //   min_anonymity: 3 +    //   max_anonymity: 5 +    //   frequency: 42 +    // means that there are 42 records whose quasi-identifier values correspond +    // to 3, 4 or 5 people in the overlying population. An important particular +    // case is when min_anonymity = max_anonymity = 1: the frequency field then +    // corresponds to the number of uniquely identifiable records. +    message KMapEstimationHistogramBucket { +      // Always positive. +      int64 min_anonymity = 1; + +      // Always greater than or equal to min_anonymity. +      int64 max_anonymity = 2; + +      // Number of records within these anonymity bounds. +      int64 bucket_size = 5; + +      // Sample of quasi-identifier tuple values in this bucket. The total +      // number of classes returned per bucket is capped at 20. +      repeated KMapEstimationQuasiIdValues bucket_values = 6; + +      // Total number of distinct quasi-identifier tuple values in this bucket. +      int64 bucket_value_count = 7; +    } + +    // The intervals [min_anonymity, max_anonymity] do not overlap. If a value +    // doesn't correspond to any such interval, the associated frequency is +    // zero. For example, the following records: +    //   {min_anonymity: 1, max_anonymity: 1, frequency: 17} +    //   {min_anonymity: 2, max_anonymity: 3, frequency: 42} +    //   {min_anonymity: 5, max_anonymity: 10, frequency: 99} +    // mean that there are no record with an estimated anonymity of 4, 5, or +    // larger than 10. +    repeated KMapEstimationHistogramBucket k_map_estimation_histogram = 1; +  } + +  // Result of the δ-presence computation. Note that these results are an +  // estimation, not exact values. +  message DeltaPresenceEstimationResult { +    // A tuple of values for the quasi-identifier columns. +    message DeltaPresenceEstimationQuasiIdValues { +      // The quasi-identifier values. +      repeated Value quasi_ids_values = 1; + +      // The estimated probability that a given individual sharing these +      // quasi-identifier values is in the dataset. This value, typically +      // called δ, is the ratio between the number of records in the dataset +      // with these quasi-identifier values, and the total number of individuals +      // (inside *and* outside the dataset) with these quasi-identifier values. +      // For example, if there are 15 individuals in the dataset who share the +      // same quasi-identifier values, and an estimated 100 people in the entire +      // population with these values, then δ is 0.15. +      double estimated_probability = 2; +    } + +    // A DeltaPresenceEstimationHistogramBucket message with the following +    // values: +    //   min_probability: 0.1 +    //   max_probability: 0.2 +    //   frequency: 42 +    // means that there are 42 records for which δ is in [0.1, 0.2). An +    // important particular case is when min_probability = max_probability = 1: +    // then, every individual who shares this quasi-identifier combination is in +    // the dataset. +    message DeltaPresenceEstimationHistogramBucket { +      // Between 0 and 1. +      double min_probability = 1; + +      // Always greater than or equal to min_probability. +      double max_probability = 2; + +      // Number of records within these probability bounds. +      int64 bucket_size = 5; + +      // Sample of quasi-identifier tuple values in this bucket. The total +      // number of classes returned per bucket is capped at 20. +      repeated DeltaPresenceEstimationQuasiIdValues bucket_values = 6; + +      // Total number of distinct quasi-identifier tuple values in this bucket. +      int64 bucket_value_count = 7; +    } + +    // The intervals [min_probability, max_probability) do not overlap. If a +    // value doesn't correspond to any such interval, the associated frequency +    // is zero. For example, the following records: +    //   {min_probability: 0, max_probability: 0.1, frequency: 17} +    //   {min_probability: 0.2, max_probability: 0.3, frequency: 42} +    //   {min_probability: 0.3, max_probability: 0.4, frequency: 99} +    // mean that there are no record with an estimated probability in [0.1, 0.2) +    // nor larger or equal to 0.4. +    repeated DeltaPresenceEstimationHistogramBucket delta_presence_estimation_histogram = 1; +  } + +  // Risk analysis options. +  message RequestedRiskAnalysisOptions { +    // The job config for the risk job. +    RiskAnalysisJobConfig job_config = 1; +  } + +  // Privacy metric to compute. +  PrivacyMetric requested_privacy_metric = 1; + +  // Input dataset to compute metrics over. +  BigQueryTable requested_source_table = 2; + +  // Values associated with this metric. +  oneof result { +    // Numerical stats result +    NumericalStatsResult numerical_stats_result = 3; + +    // Categorical stats result +    CategoricalStatsResult categorical_stats_result = 4; + +    // K-anonymity result +    KAnonymityResult k_anonymity_result = 5; + +    // L-divesity result +    LDiversityResult l_diversity_result = 6; + +    // K-map result +    KMapEstimationResult k_map_estimation_result = 7; + +    // Delta-presence result +    DeltaPresenceEstimationResult delta_presence_estimation_result = 9; +  } + +  // The configuration used for this job. +  RequestedRiskAnalysisOptions requested_options = 10; +} + +// A value of a field, including its frequency. +message ValueFrequency { +  // A value contained in the field in question. +  Value value = 1; + +  // How many times the value is contained in the field. +  int64 count = 2; +} + +// Set of primitive values supported by the system. +// Note that for the purposes of inspection or transformation, the number +// of bytes considered to comprise a 'Value' is based on its representation +// as a UTF-8 encoded string. For example, if 'integer_value' is set to +// 123456789, the number of bytes would be counted as 9, even though an +// int64 only holds up to 8 bytes of data. +message Value { +  // Value types +  oneof type { +    // integer +    int64 integer_value = 1; + +    // float +    double float_value = 2; + +    // string +    string string_value = 3; + +    // boolean +    bool boolean_value = 4; + +    // timestamp +    google.protobuf.Timestamp timestamp_value = 5; + +    // time of day +    google.type.TimeOfDay time_value = 6; + +    // date +    google.type.Date date_value = 7; + +    // day of week +    google.type.DayOfWeek day_of_week_value = 8; +  } +} + +// Message for infoType-dependent details parsed from quote. +message QuoteInfo { +  // Object representation of the quote. +  oneof parsed_quote { +    // The date time indicated by the quote. +    DateTime date_time = 2; +  } +} + +// Message for a date time object. +// e.g. 2018-01-01, 5th August. +message DateTime { +  // Time zone of the date time object. +  message TimeZone { +    // Set only if the offset can be determined. Positive for time ahead of UTC. +    // E.g. For "UTC-9", this value is -540. +    int32 offset_minutes = 1; +  } + +  // One or more of the following must be set. +  // Must be a valid date or time value. +  google.type.Date date = 1; + +  // Day of week +  google.type.DayOfWeek day_of_week = 2; + +  // Time of day +  google.type.TimeOfDay time = 3; + +  // Time zone +  TimeZone time_zone = 4; +} + +// The configuration that controls how the data will change. +message DeidentifyConfig { +  oneof transformation { +    // Treat the dataset as free-form text and apply the same free text +    // transformation everywhere. +    InfoTypeTransformations info_type_transformations = 1; + +    // Treat the dataset as structured. Transformations can be applied to +    // specific locations within structured datasets, such as transforming +    // a column within a table. +    RecordTransformations record_transformations = 2; + +    // Treat the dataset as an image and redact. +    ImageTransformations image_transformations = 4; +  } + +  // Mode for handling transformation errors. If left unspecified, the default +  // mode is `TransformationErrorHandling.ThrowError`. +  TransformationErrorHandling transformation_error_handling = 3; +} + +// A type of transformation that is applied over images. +message ImageTransformations { +  // Configuration for determining how redaction of images should occur. +  message ImageTransformation { +    // Apply transformation to the selected info_types. +    message SelectedInfoTypes { +      // Required. InfoTypes to apply the transformation to. Required. Provided InfoType +      // must be unique within the ImageTransformations message. +      repeated InfoType info_types = 5 [(google.api.field_behavior) = REQUIRED]; +    } + +    // Apply transformation to all findings. +    message AllInfoTypes { + +    } + +    // Apply to all text. +    message AllText { + +    } + +    oneof target { +      // Apply transformation to the selected info_types. +      SelectedInfoTypes selected_info_types = 4; + +      // Apply transformation to all findings not specified in other +      // ImageTransformation's selected_info_types. Only one instance is allowed +      // within the ImageTransformations message. +      AllInfoTypes all_info_types = 5; + +      // Apply transformation to all text that doesn't match an infoType. Only +      // one instance is allowed within the ImageTransformations message. +      AllText all_text = 6; +    } + +    // The color to use when redacting content from an image. If not +    // specified, the default is black. +    Color redaction_color = 3; +  } + +  repeated ImageTransformation transforms = 2; +} + +// How to handle transformation errors during de-identification. A +// transformation error occurs when the requested transformation is incompatible +// with the data. For example, trying to de-identify an IP address using a +// `DateShift` transformation would result in a transformation error, since date +// info cannot be extracted from an IP address. +// Information about any incompatible transformations, and how they were +// handled, is returned in the response as part of the +// `TransformationOverviews`. +message TransformationErrorHandling { +  // Throw an error and fail the request when a transformation error occurs. +  message ThrowError { + +  } + +  // Skips the data without modifying it if the requested transformation would +  // cause an error. For example, if a `DateShift` transformation were applied +  // an an IP address, this mode would leave the IP address unchanged in the +  // response. +  message LeaveUntransformed { + +  } + +  // How transformation errors should be handled. +  oneof mode { +    // Throw an error +    ThrowError throw_error = 1; + +    // Ignore errors +    LeaveUntransformed leave_untransformed = 2; +  } +} + +// A rule for transforming a value. +message PrimitiveTransformation { +  oneof transformation { +    // Replace with a specified value. +    ReplaceValueConfig replace_config = 1; + +    // Redact +    RedactConfig redact_config = 2; + +    // Mask +    CharacterMaskConfig character_mask_config = 3; + +    // Ffx-Fpe +    CryptoReplaceFfxFpeConfig crypto_replace_ffx_fpe_config = 4; + +    // Fixed size bucketing +    FixedSizeBucketingConfig fixed_size_bucketing_config = 5; + +    // Bucketing +    BucketingConfig bucketing_config = 6; + +    // Replace with infotype +    ReplaceWithInfoTypeConfig replace_with_info_type_config = 7; + +    // Time extraction +    TimePartConfig time_part_config = 8; + +    // Crypto +    CryptoHashConfig crypto_hash_config = 9; + +    // Date Shift +    DateShiftConfig date_shift_config = 11; + +    // Deterministic Crypto +    CryptoDeterministicConfig crypto_deterministic_config = 12; + +    // Replace with a value randomly drawn (with replacement) from a dictionary. +    ReplaceDictionaryConfig replace_dictionary_config = 13; +  } +} + +// For use with `Date`, `Timestamp`, and `TimeOfDay`, extract or preserve a +// portion of the value. +message TimePartConfig { +  // Components that make up time. +  enum TimePart { +    // Unused +    TIME_PART_UNSPECIFIED = 0; + +    // [0-9999] +    YEAR = 1; + +    // [1-12] +    MONTH = 2; + +    // [1-31] +    DAY_OF_MONTH = 3; + +    // [1-7] +    DAY_OF_WEEK = 4; + +    // [1-53] +    WEEK_OF_YEAR = 5; + +    // [0-23] +    HOUR_OF_DAY = 6; +  } + +  // The part of the time to keep. +  TimePart part_to_extract = 1; +} + +// Pseudonymization method that generates surrogates via cryptographic hashing. +// Uses SHA-256. +// The key size must be either 32 or 64 bytes. +// Outputs a base64 encoded representation of the hashed output +// (for example, L7k0BHmF1ha5U3NfGykjro4xWi1MPVQPjhMAZbSV9mM=). +// Currently, only string and integer values can be hashed. +// See https://cloud.google.com/dlp/docs/pseudonymization to learn more. +message CryptoHashConfig { +  // The key used by the hash function. +  CryptoKey crypto_key = 1; +} + +// Pseudonymization method that generates deterministic encryption for the given +// input. Outputs a base64 encoded representation of the encrypted output. +// Uses AES-SIV based on the RFC https://tools.ietf.org/html/rfc5297. +message CryptoDeterministicConfig { +  // The key used by the encryption function. For deterministic encryption +  // using AES-SIV, the provided key is internally expanded to 64 bytes prior to +  // use. +  CryptoKey crypto_key = 1; + +  // The custom info type to annotate the surrogate with. +  // This annotation will be applied to the surrogate by prefixing it with +  // the name of the custom info type followed by the number of +  // characters comprising the surrogate. The following scheme defines the +  // format: {info type name}({surrogate character count}):{surrogate} +  // +  // For example, if the name of custom info type is 'MY_TOKEN_INFO_TYPE' and +  // the surrogate is 'abc', the full replacement value +  // will be: 'MY_TOKEN_INFO_TYPE(3):abc' +  // +  // This annotation identifies the surrogate when inspecting content using the +  // custom info type 'Surrogate'. This facilitates reversal of the +  // surrogate when it occurs in free text. +  // +  // Note: For record transformations where the entire cell in a table is being +  // transformed, surrogates are not mandatory. Surrogates are used to denote +  // the location of the token and are necessary for re-identification in free +  // form text. +  // +  // In order for inspection to work properly, the name of this info type must +  // not occur naturally anywhere in your data; otherwise, inspection may either +  // +  // - reverse a surrogate that does not correspond to an actual identifier +  // - be unable to parse the surrogate and result in an error +  // +  // Therefore, choose your custom info type name carefully after considering +  // what your data looks like. One way to select a name that has a high chance +  // of yielding reliable detection is to include one or more unicode characters +  // that are highly improbable to exist in your data. +  // For example, assuming your data is entered from a regular ASCII keyboard, +  // the symbol with the hex code point 29DD might be used like so: +  // ⧝MY_TOKEN_TYPE. +  InfoType surrogate_info_type = 2; + +  // A context may be used for higher security and maintaining +  // referential integrity such that the same identifier in two different +  // contexts will be given a distinct surrogate. The context is appended to +  // plaintext value being encrypted. On decryption the provided context is +  // validated against the value used during encryption. If a context was +  // provided during encryption, same context must be provided during decryption +  // as well. +  // +  // If the context is not set, plaintext would be used as is for encryption. +  // If the context is set but: +  // +  // 1. there is no record present when transforming a given value or +  // 2. the field is not present when transforming a given value, +  // +  // plaintext would be used as is for encryption. +  // +  // Note that case (1) is expected when an `InfoTypeTransformation` is +  // applied to both structured and unstructured `ContentItem`s. +  FieldId context = 3; +} + +// Replace each input value with a given `Value`. +message ReplaceValueConfig { +  // Value to replace it with. +  Value new_value = 1; +} + +// Replace each input value with a value randomly selected from the dictionary. +message ReplaceDictionaryConfig { +  oneof type { +    // A list of words to select from for random replacement. The +    // [limits](https://cloud.google.com/dlp/limits) page contains details about +    // the size limits of dictionaries. +    CustomInfoType.Dictionary.WordList word_list = 1; +  } +} + +// Replace each matching finding with the name of the info_type. +message ReplaceWithInfoTypeConfig { + +} + +// Redact a given value. For example, if used with an `InfoTypeTransformation` +// transforming PHONE_NUMBER, and input 'My phone number is 206-555-0123', the +// output would be 'My phone number is '. +message RedactConfig { + +} + +// Characters to skip when doing deidentification of a value. These will be left +// alone and skipped. +message CharsToIgnore { +  // Convenience enum for indicating common characters to not transform. +  enum CommonCharsToIgnore { +    // Unused. +    COMMON_CHARS_TO_IGNORE_UNSPECIFIED = 0; + +    // 0-9 +    NUMERIC = 1; + +    // A-Z +    ALPHA_UPPER_CASE = 2; + +    // a-z +    ALPHA_LOWER_CASE = 3; + +    // US Punctuation, one of !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ +    PUNCTUATION = 4; + +    // Whitespace character, one of [ \t\n\x0B\f\r] +    WHITESPACE = 5; +  } + +  oneof characters { +    // Characters to not transform when masking. +    string characters_to_skip = 1; + +    // Common characters to not transform when masking. Useful to avoid removing +    // punctuation. +    CommonCharsToIgnore common_characters_to_ignore = 2; +  } +} + +// Partially mask a string by replacing a given number of characters with a +// fixed character. Masking can start from the beginning or end of the string. +// This can be used on data of any type (numbers, longs, and so on) and when +// de-identifying structured data we'll attempt to preserve the original data's +// type. (This allows you to take a long like 123 and modify it to a string like +// **3. +message CharacterMaskConfig { +  // Character to use to mask the sensitive values—for example, `*` for an +  // alphabetic string such as a name, or `0` for a numeric string such as ZIP +  // code or credit card number. This string must have a length of 1. If not +  // supplied, this value defaults to `*` for strings, and `0` for digits. +  string masking_character = 1; + +  // Number of characters to mask. If not set, all matching chars will be +  // masked. Skipped characters do not count towards this tally. +  // +  // If `number_to_mask` is negative, this denotes inverse masking. Cloud DLP +  // masks all but a number of characters. +  // For example, suppose you have the following values: +  // +  // - `masking_character` is `*` +  // - `number_to_mask` is `-4` +  // - `reverse_order` is `false` +  // - `CharsToIgnore` includes `-` +  // - Input string is `1234-5678-9012-3456` +  // +  // The resulting de-identified string is +  // `****-****-****-3456`. Cloud DLP masks all but the last four characters. +  // If `reverse_order` is `true`, all but the first four characters are masked +  // as `1234-****-****-****`. +  int32 number_to_mask = 2; + +  // Mask characters in reverse order. For example, if `masking_character` is +  // `0`, `number_to_mask` is `14`, and `reverse_order` is `false`, then the +  // input string `1234-5678-9012-3456` is masked as `00000000000000-3456`. +  // If `masking_character` is `*`, `number_to_mask` is `3`, and `reverse_order` +  // is `true`, then the string `12345` is masked as `12***`. +  bool reverse_order = 3; + +  // When masking a string, items in this list will be skipped when replacing +  // characters. For example, if the input string is `555-555-5555` and you +  // instruct Cloud DLP to skip `-` and mask 5 characters with `*`, Cloud DLP +  // returns `***-**5-5555`. +  repeated CharsToIgnore characters_to_ignore = 4; +} + +// Buckets values based on fixed size ranges. The +// Bucketing transformation can provide all of this functionality, +// but requires more configuration. This message is provided as a convenience to +// the user for simple bucketing strategies. +// +// The transformed value will be a hyphenated string of +// {lower_bound}-{upper_bound}. For example, if lower_bound = 10 and upper_bound +// = 20, all values that are within this bucket will be replaced with "10-20". +// +// This can be used on data of type: double, long. +// +// If the bound Value type differs from the type of data +// being transformed, we will first attempt converting the type of the data to +// be transformed to match the type of the bound before comparing. +// +// See https://cloud.google.com/dlp/docs/concepts-bucketing to learn more. +message FixedSizeBucketingConfig { +  // Required. Lower bound value of buckets. All values less than `lower_bound` are +  // grouped together into a single bucket; for example if `lower_bound` = 10, +  // then all values less than 10 are replaced with the value "-10". +  Value lower_bound = 1 [(google.api.field_behavior) = REQUIRED]; + +  // Required. Upper bound value of buckets. All values greater than upper_bound are +  // grouped together into a single bucket; for example if `upper_bound` = 89, +  // then all values greater than 89 are replaced with the value "89+". +  Value upper_bound = 2 [(google.api.field_behavior) = REQUIRED]; + +  // Required. Size of each bucket (except for minimum and maximum buckets). So if +  // `lower_bound` = 10, `upper_bound` = 89, and `bucket_size` = 10, then the +  // following buckets would be used: -10, 10-20, 20-30, 30-40, 40-50, 50-60, +  // 60-70, 70-80, 80-89, 89+. Precision up to 2 decimals works. +  double bucket_size = 3 [(google.api.field_behavior) = REQUIRED]; +} + +// Generalization function that buckets values based on ranges. The ranges and +// replacement values are dynamically provided by the user for custom behavior, +// such as 1-30 -> LOW 31-65 -> MEDIUM 66-100 -> HIGH +// This can be used on +// data of type: number, long, string, timestamp. +// If the bound `Value` type differs from the type of data being transformed, we +// will first attempt converting the type of the data to be transformed to match +// the type of the bound before comparing. +// See https://cloud.google.com/dlp/docs/concepts-bucketing to learn more. +message BucketingConfig { +  // Bucket is represented as a range, along with replacement values. +  message Bucket { +    // Lower bound of the range, inclusive. Type should be the same as max if +    // used. +    Value min = 1; + +    // Upper bound of the range, exclusive; type must match min. +    Value max = 2; + +    // Required. Replacement value for this bucket. +    Value replacement_value = 3 [(google.api.field_behavior) = REQUIRED]; +  } + +  // Set of buckets. Ranges must be non-overlapping. +  repeated Bucket buckets = 1; +} + +// Replaces an identifier with a surrogate using Format Preserving Encryption +// (FPE) with the FFX mode of operation; however when used in the +// `ReidentifyContent` API method, it serves the opposite function by reversing +// the surrogate back into the original identifier. The identifier must be +// encoded as ASCII. For a given crypto key and context, the same identifier +// will be replaced with the same surrogate. Identifiers must be at least two +// characters long. In the case that the identifier is the empty string, it will +// be skipped. See https://cloud.google.com/dlp/docs/pseudonymization to learn +// more. +// +// Note: We recommend using  CryptoDeterministicConfig for all use cases which +// do not require preserving the input alphabet space and size, plus warrant +// referential integrity. +message CryptoReplaceFfxFpeConfig { +  // These are commonly used subsets of the alphabet that the FFX mode +  // natively supports. In the algorithm, the alphabet is selected using +  // the "radix". Therefore each corresponds to a particular radix. +  enum FfxCommonNativeAlphabet { +    // Unused. +    FFX_COMMON_NATIVE_ALPHABET_UNSPECIFIED = 0; + +    // `[0-9]` (radix of 10) +    NUMERIC = 1; + +    // `[0-9A-F]` (radix of 16) +    HEXADECIMAL = 2; + +    // `[0-9A-Z]` (radix of 36) +    UPPER_CASE_ALPHA_NUMERIC = 3; + +    // `[0-9A-Za-z]` (radix of 62) +    ALPHA_NUMERIC = 4; +  } + +  // Required. The key used by the encryption algorithm. +  CryptoKey crypto_key = 1 [(google.api.field_behavior) = REQUIRED]; + +  // The 'tweak', a context may be used for higher security since the same +  // identifier in two different contexts won't be given the same surrogate. If +  // the context is not set, a default tweak will be used. +  // +  // If the context is set but: +  // +  // 1. there is no record present when transforming a given value or +  // 1. the field is not present when transforming a given value, +  // +  // a default tweak will be used. +  // +  // Note that case (1) is expected when an `InfoTypeTransformation` is +  // applied to both structured and unstructured `ContentItem`s. +  // Currently, the referenced field may be of value type integer or string. +  // +  // The tweak is constructed as a sequence of bytes in big endian byte order +  // such that: +  // +  // - a 64 bit integer is encoded followed by a single byte of value 1 +  // - a string is encoded in UTF-8 format followed by a single byte of value 2 +  FieldId context = 2; + +  // Choose an alphabet which the data being transformed will be made up of. +  oneof alphabet { +    // Common alphabets. +    FfxCommonNativeAlphabet common_alphabet = 4; + +    // This is supported by mapping these to the alphanumeric characters +    // that the FFX mode natively supports. This happens before/after +    // encryption/decryption. +    // Each character listed must appear only once. +    // Number of characters must be in the range [2, 95]. +    // This must be encoded as ASCII. +    // The order of characters does not matter. +    // The full list of allowed characters is: +    // <code>0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +    // ~`!@#$%^&*()_-+={[}]|\:;"'<,>.?/</code> +    string custom_alphabet = 5; + +    // The native way to select the alphabet. Must be in the range [2, 95]. +    int32 radix = 6; +  } + +  // The custom infoType to annotate the surrogate with. +  // This annotation will be applied to the surrogate by prefixing it with +  // the name of the custom infoType followed by the number of +  // characters comprising the surrogate. The following scheme defines the +  // format: info_type_name(surrogate_character_count):surrogate +  // +  // For example, if the name of custom infoType is 'MY_TOKEN_INFO_TYPE' and +  // the surrogate is 'abc', the full replacement value +  // will be: 'MY_TOKEN_INFO_TYPE(3):abc' +  // +  // This annotation identifies the surrogate when inspecting content using the +  // custom infoType +  // [`SurrogateType`](https://cloud.google.com/dlp/docs/reference/rest/v2/InspectConfig#surrogatetype). +  // This facilitates reversal of the surrogate when it occurs in free text. +  // +  // In order for inspection to work properly, the name of this infoType must +  // not occur naturally anywhere in your data; otherwise, inspection may +  // find a surrogate that does not correspond to an actual identifier. +  // Therefore, choose your custom infoType name carefully after considering +  // what your data looks like. One way to select a name that has a high chance +  // of yielding reliable detection is to include one or more unicode characters +  // that are highly improbable to exist in your data. +  // For example, assuming your data is entered from a regular ASCII keyboard, +  // the symbol with the hex code point 29DD might be used like so: +  // ⧝MY_TOKEN_TYPE +  InfoType surrogate_info_type = 8; +} + +// This is a data encryption key (DEK) (as opposed to +// a key encryption key (KEK) stored by Cloud Key Management Service +// (Cloud KMS). +// When using Cloud KMS to wrap or unwrap a DEK, be sure to set an appropriate +// IAM policy on the KEK to ensure an attacker cannot +// unwrap the DEK. +message CryptoKey { +  // Sources of crypto keys. +  oneof source { +    // Transient crypto key +    TransientCryptoKey transient = 1; + +    // Unwrapped crypto key +    UnwrappedCryptoKey unwrapped = 2; + +    // Key wrapped using Cloud KMS +    KmsWrappedCryptoKey kms_wrapped = 3; +  } +} + +// Use this to have a random data crypto key generated. +// It will be discarded after the request finishes. +message TransientCryptoKey { +  // Required. Name of the key. +  // This is an arbitrary string used to differentiate different keys. +  // A unique key is generated per name: two separate `TransientCryptoKey` +  // protos share the same generated key if their names are the same. +  // When the data crypto key is generated, this name is not used in any way +  // (repeating the api call will result in a different key being generated). +  string name = 1 [(google.api.field_behavior) = REQUIRED]; +} + +// Using raw keys is prone to security risks due to accidentally +// leaking the key. Choose another type of key if possible. +message UnwrappedCryptoKey { +  // Required. A 128/192/256 bit key. +  bytes key = 1 [(google.api.field_behavior) = REQUIRED]; +} + +// Include to use an existing data crypto key wrapped by KMS. +// The wrapped key must be a 128-, 192-, or 256-bit key. +// Authorization requires the following IAM permissions when sending a request +// to perform a crypto transformation using a KMS-wrapped crypto key: +// dlp.kms.encrypt +// +// For more information, see [Creating a wrapped key] +// (https://cloud.google.com/dlp/docs/create-wrapped-key). +// +// Note: When you use Cloud KMS for cryptographic operations, +// [charges apply](https://cloud.google.com/kms/pricing). +message KmsWrappedCryptoKey { +  // Required. The wrapped data crypto key. +  bytes wrapped_key = 1 [(google.api.field_behavior) = REQUIRED]; + +  // Required. The resource name of the KMS CryptoKey to use for unwrapping. +  string crypto_key_name = 2 [(google.api.field_behavior) = REQUIRED]; +} + +// Shifts dates by random number of days, with option to be consistent for the +// same context. See https://cloud.google.com/dlp/docs/concepts-date-shifting +// to learn more. +message DateShiftConfig { +  // Required. Range of shift in days. Actual shift will be selected at random within this +  // range (inclusive ends). Negative means shift to earlier in time. Must not +  // be more than 365250 days (1000 years) each direction. +  // +  // For example, 3 means shift date to at most 3 days into the future. +  int32 upper_bound_days = 1 [(google.api.field_behavior) = REQUIRED]; + +  // Required. For example, -5 means shift date to at most 5 days back in the past. +  int32 lower_bound_days = 2 [(google.api.field_behavior) = REQUIRED]; + +  // Points to the field that contains the context, for example, an entity id. +  // If set, must also set cryptoKey. If set, shift will be consistent for the +  // given context. +  FieldId context = 3; + +  // Method for calculating shift that takes context into consideration. If +  // set, must also set context. Can only be applied to table items. +  oneof method { +    // Causes the shift to be computed based on this key and the context. This +    // results in the same shift for the same context and crypto_key. If +    // set, must also set context. Can only be applied to table items. +    CryptoKey crypto_key = 4; +  } +} + +// A type of transformation that will scan unstructured text and +// apply various `PrimitiveTransformation`s to each finding, where the +// transformation is applied to only values that were identified as a specific +// info_type. +message InfoTypeTransformations { +  // A transformation to apply to text that is identified as a specific +  // info_type. +  message InfoTypeTransformation { +    // InfoTypes to apply the transformation to. An empty list will cause +    // this transformation to apply to all findings that correspond to +    // infoTypes that were requested in `InspectConfig`. +    repeated InfoType info_types = 1; + +    // Required. Primitive transformation to apply to the infoType. +    PrimitiveTransformation primitive_transformation = 2 [(google.api.field_behavior) = REQUIRED]; +  } + +  // Required. Transformation for each infoType. Cannot specify more than one +  // for a given infoType. +  repeated InfoTypeTransformation transformations = 1 [(google.api.field_behavior) = REQUIRED]; +} + +// The transformation to apply to the field. +message FieldTransformation { +  // Required. Input field(s) to apply the transformation to. +  // When you have columns that reference their position within a list, +  // omit the index from the FieldId. FieldId name matching ignores the index. +  // For example, instead of "contact.nums[0].type", use "contact.nums.type". +  repeated FieldId fields = 1 [(google.api.field_behavior) = REQUIRED]; + +  // Only apply the transformation if the condition evaluates to true for the +  // given `RecordCondition`. The conditions are allowed to reference fields +  // that are not used in the actual transformation. +  // +  // Example Use Cases: +  // +  // - Apply a different bucket transformation to an age column if the zip code +  // column for the same record is within a specific range. +  // - Redact a field if the date of birth field is greater than 85. +  RecordCondition condition = 3; + +  // Transformation to apply. [required] +  oneof transformation { +    // Apply the transformation to the entire field. +    PrimitiveTransformation primitive_transformation = 4; + +    // Treat the contents of the field as free text, and selectively +    // transform content that matches an `InfoType`. +    InfoTypeTransformations info_type_transformations = 5; +  } +} + +// A type of transformation that is applied over structured data such as a +// table. +message RecordTransformations { +  // Transform the record by applying various field transformations. +  repeated FieldTransformation field_transformations = 1; + +  // Configuration defining which records get suppressed entirely. Records that +  // match any suppression rule are omitted from the output. +  repeated RecordSuppression record_suppressions = 2; +} + +// Configuration to suppress records whose suppression conditions evaluate to +// true. +message RecordSuppression { +  // A condition that when it evaluates to true will result in the record being +  // evaluated to be suppressed from the transformed content. +  RecordCondition condition = 1; +} + +// A condition for determining whether a transformation should be applied to +// a field. +message RecordCondition { +  // The field type of `value` and `field` do not need to match to be +  // considered equal, but not all comparisons are possible. +  // EQUAL_TO and NOT_EQUAL_TO attempt to compare even with incompatible types, +  // but all other comparisons are invalid with incompatible types. +  // A `value` of type: +  // +  // - `string` can be compared against all other types +  // - `boolean` can only be compared against other booleans +  // - `integer` can be compared against doubles or a string if the string value +  // can be parsed as an integer. +  // - `double` can be compared against integers or a string if the string can +  // be parsed as a double. +  // - `Timestamp` can be compared against strings in RFC 3339 date string +  // format. +  // - `TimeOfDay` can be compared against timestamps and strings in the format +  // of 'HH:mm:ss'. +  // +  // If we fail to compare do to type mismatch, a warning will be given and +  // the condition will evaluate to false. +  message Condition { +    // Required. Field within the record this condition is evaluated against. +    FieldId field = 1 [(google.api.field_behavior) = REQUIRED]; + +    // Required. Operator used to compare the field or infoType to the value. +    RelationalOperator operator = 3 [(google.api.field_behavior) = REQUIRED]; + +    // Value to compare against. [Mandatory, except for `EXISTS` tests.] +    Value value = 4; +  } + +  // A collection of conditions. +  message Conditions { +    // A collection of conditions. +    repeated Condition conditions = 1; +  } + +  // An expression, consisting of an operator and conditions. +  message Expressions { +    // Logical operators for conditional checks. +    enum LogicalOperator { +      // Unused +      LOGICAL_OPERATOR_UNSPECIFIED = 0; + +      // Conditional AND +      AND = 1; +    } + +    // The operator to apply to the result of conditions. Default and currently +    // only supported value is `AND`. +    LogicalOperator logical_operator = 1; + +    // Expression types. +    oneof type { +      // Conditions to apply to the expression. +      Conditions conditions = 3; +    } +  } + +  // An expression. +  Expressions expressions = 3; +} + +// Overview of the modifications that occurred. +message TransformationOverview { +  // Total size in bytes that were transformed in some way. +  int64 transformed_bytes = 2; + +  // Transformations applied to the dataset. +  repeated TransformationSummary transformation_summaries = 3; +} + +// Summary of a single transformation. +// Only one of 'transformation', 'field_transformation', or 'record_suppress' +// will be set. +message TransformationSummary { +  // Possible outcomes of transformations. +  enum TransformationResultCode { +    // Unused +    TRANSFORMATION_RESULT_CODE_UNSPECIFIED = 0; + +    // Transformation completed without an error. +    SUCCESS = 1; + +    // Transformation had an error. +    ERROR = 2; +  } + +  // A collection that informs the user the number of times a particular +  // `TransformationResultCode` and error details occurred. +  message SummaryResult { +    // Number of transformations counted by this result. +    int64 count = 1; + +    // Outcome of the transformation. +    TransformationResultCode code = 2; + +    // A place for warnings or errors to show up if a transformation didn't +    // work as expected. +    string details = 3; +  } + +  // Set if the transformation was limited to a specific InfoType. +  InfoType info_type = 1; + +  // Set if the transformation was limited to a specific FieldId. +  FieldId field = 2; + +  // The specific transformation these stats apply to. +  PrimitiveTransformation transformation = 3; + +  // The field transformation that was applied. +  // If multiple field transformations are requested for a single field, +  // this list will contain all of them; otherwise, only one is supplied. +  repeated FieldTransformation field_transformations = 5; + +  // The specific suppression option these stats apply to. +  RecordSuppression record_suppress = 6; + +  // Collection of all transformations that took place or had an error. +  repeated SummaryResult results = 4; + +  // Total size in bytes that were transformed in some way. +  int64 transformed_bytes = 7; +} + +// A flattened description of a `PrimitiveTransformation` or +// `RecordSuppression`. +message TransformationDescription { +  // The transformation type. +  TransformationType type = 1; + +  // A description of the transformation. This is empty for a +  // RECORD_SUPPRESSION, or is the output of calling toString() on the +  // `PrimitiveTransformation` protocol buffer message for any other type of +  // transformation. +  string description = 2; + +  // A human-readable string representation of the `RecordCondition` +  // corresponding to this transformation. Set if a `RecordCondition` was used +  // to determine whether or not to apply this transformation. +  // +  // Examples: +  //     * (age_field > 85) +  //     * (age_field <= 18) +  //     * (zip_field exists) +  //     * (zip_field == 01234) && (city_field != "Springville") +  //     * (zip_field == 01234) && (age_field <= 18) && (city_field exists) +  string condition = 3; + +  // Set if the transformation was limited to a specific `InfoType`. +  InfoType info_type = 4; +} + +// Details about a single transformation. This object contains a description of +// the transformation, information about whether the transformation was +// successfully applied, and the precise location where the transformation +// occurred. These details are stored in a user-specified BigQuery table. +message TransformationDetails { +  // The name of the job that completed the transformation. +  string resource_name = 1; + +  // The top level name of the container where the transformation is located +  // (this will be the source file name or table name). +  string container_name = 2; + +  // Description of transformation. This would only contain more than one +  // element if there were multiple matching transformations and which one to +  // apply was ambiguous. Not set for states that contain no transformation, +  // currently only state that contains no transformation is +  // TransformationResultStateType.METADATA_UNRETRIEVABLE. +  repeated TransformationDescription transformation = 3; + +  // Status of the transformation, if transformation was not successful, this +  // will specify what caused it to fail, otherwise it will show that the +  // transformation was successful. +  TransformationResultStatus status_details = 4; + +  // The number of bytes that were transformed. If transformation was +  // unsuccessful or did not take place because there was no content to +  // transform, this will be zero. +  int64 transformed_bytes = 5; + +  // The precise location of the transformed content in the original container. +  TransformationLocation transformation_location = 6; +} + +// Specifies the location of a transformation. +message TransformationLocation { +  oneof location_type { +    // For infotype transformations, link to the corresponding findings ID so +    // that location information does not need to be duplicated. Each findings +    // ID correlates to an entry in the findings output table, this table only +    // gets created when users specify to save findings (add the save findings +    // action to the request). +    string finding_id = 1; + +    // For record transformations, provide a field and container information. +    RecordTransformation record_transformation = 2; +  } + +  // Information about the functionality of the container where this finding +  // occurred, if available. +  TransformationContainerType container_type = 3; +} + +message RecordTransformation { +  // For record transformations, provide a field. +  FieldId field_id = 1; + +  // Findings container modification timestamp, if applicable. +  google.protobuf.Timestamp container_timestamp = 2; + +  // Container version, if available ("generation" for Cloud Storage). +  string container_version = 3; +} + +message TransformationResultStatus { +  // Transformation result status type, this will be either SUCCESS, or it will +  // be the reason for why the transformation was not completely successful. +  TransformationResultStatusType result_status_type = 1; + +  // Detailed error codes and messages +  google.rpc.Status details = 2; +} + +// Enum of possible outcomes of transformations. SUCCESS if transformation and +// storing of transformation was successful, otherwise, reason for not +// transforming. +enum TransformationResultStatusType { +  STATE_TYPE_UNSPECIFIED = 0; + +  // This will be set when a finding could not be transformed (i.e. outside user +  // set bucket range). +  INVALID_TRANSFORM = 1; + +  // This will be set when a BigQuery transformation was successful but could +  // not be stored back in BigQuery because the transformed row exceeds +  // BigQuery's max row size. +  BIGQUERY_MAX_ROW_SIZE_EXCEEDED = 2; + +  // This will be set when there is a finding in the custom metadata of a file, +  // but at the write time of the transformed file, this key / value pair is +  // unretrievable. +  METADATA_UNRETRIEVABLE = 3; + +  // This will be set when the transformation and storing of it is successful. +  SUCCESS = 4; +} + +// Describes functionality of a given container in its original format. +enum TransformationContainerType { +  TRANSFORM_UNKNOWN_CONTAINER = 0; + +  TRANSFORM_BODY = 1; + +  TRANSFORM_METADATA = 2; + +  TRANSFORM_TABLE = 3; +} + +// An enum of rules that can be used to transform a value. Can be a +// record suppression, or one of the transformation rules specified under +// `PrimitiveTransformation`. +enum TransformationType { +  // Unused +  TRANSFORMATION_TYPE_UNSPECIFIED = 0; + +  // Record suppression +  RECORD_SUPPRESSION = 1; + +  // Replace value +  REPLACE_VALUE = 2; + +  // Replace value using a dictionary. +  REPLACE_DICTIONARY = 15; + +  // Redact +  REDACT = 3; + +  // Character mask +  CHARACTER_MASK = 4; + +  // FFX-FPE +  CRYPTO_REPLACE_FFX_FPE = 5; + +  // Fixed size bucketing +  FIXED_SIZE_BUCKETING = 6; + +  // Bucketing +  BUCKETING = 7; + +  // Replace with info type +  REPLACE_WITH_INFO_TYPE = 8; + +  // Time part +  TIME_PART = 9; + +  // Crypto hash +  CRYPTO_HASH = 10; + +  // Date shift +  DATE_SHIFT = 12; + +  // Deterministic crypto +  CRYPTO_DETERMINISTIC_CONFIG = 13; + +  // Redact image +  REDACT_IMAGE = 14; +} + +// Config for storing transformation details. +message TransformationDetailsStorageConfig { +  // Location to store the transformation summary. +  oneof type { +    // The BigQuery table in which to store the output. This may be an existing +    // table or in a new table in an existing dataset. +    // If table_id is not set a new one will be generated for you with the +    // following format: +    // dlp_googleapis_transformation_details_yyyy_mm_dd_[dlp_job_id]. Pacific +    // time zone will be used for generating the date details. +    BigQueryTable table = 1; +  } +} + +// Schedule for inspect job triggers. +message Schedule { +  oneof option { +    // With this option a job is started on a regular periodic basis. For +    // example: every day (86400 seconds). +    // +    // A scheduled start time will be skipped if the previous +    // execution has not ended when its scheduled time occurs. +    // +    // This value must be set to a time duration greater than or equal +    // to 1 day and can be no longer than 60 days. +    google.protobuf.Duration recurrence_period_duration = 1; +  } +} + +// Job trigger option for hybrid jobs. Jobs must be manually created +// and finished. +message Manual { + +} + +// The inspectTemplate contains a configuration (set of types of sensitive data +// to be detected) to be used anywhere you otherwise would normally specify +// InspectConfig. See https://cloud.google.com/dlp/docs/concepts-templates +// to learn more. +message InspectTemplate { +  option (google.api.resource) = { +    type: "dlp.googleapis.com/InspectTemplate" +    pattern: "organizations/{organization}/inspectTemplates/{inspect_template}" +    pattern: "projects/{project}/inspectTemplates/{inspect_template}" +    pattern: "organizations/{organization}/locations/{location}/inspectTemplates/{inspect_template}" +    pattern: "projects/{project}/locations/{location}/inspectTemplates/{inspect_template}" +  }; + +  // Output only. The template name. +  // +  // The template will have one of the following formats: +  // `projects/PROJECT_ID/inspectTemplates/TEMPLATE_ID` OR +  // `organizations/ORGANIZATION_ID/inspectTemplates/TEMPLATE_ID`; +  string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + +  // Display name (max 256 chars). +  string display_name = 2; + +  // Short description (max 256 chars). +  string description = 3; + +  // Output only. The creation timestamp of an inspectTemplate. +  google.protobuf.Timestamp create_time = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; + +  // Output only. The last update timestamp of an inspectTemplate. +  google.protobuf.Timestamp update_time = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; + +  // The core content of the template. Configuration of the scanning process. +  InspectConfig inspect_config = 6; +} + +// DeidentifyTemplates contains instructions on how to de-identify content. +// See https://cloud.google.com/dlp/docs/concepts-templates to learn more. +message DeidentifyTemplate { +  option (google.api.resource) = { +    type: "dlp.googleapis.com/DeidentifyTemplate" +    pattern: "organizations/{organization}/deidentifyTemplates/{deidentify_template}" +    pattern: "projects/{project}/deidentifyTemplates/{deidentify_template}" +    pattern: "organizations/{organization}/locations/{location}/deidentifyTemplates/{deidentify_template}" +    pattern: "projects/{project}/locations/{location}/deidentifyTemplates/{deidentify_template}" +  }; + +  // Output only. The template name. +  // +  // The template will have one of the following formats: +  // `projects/PROJECT_ID/deidentifyTemplates/TEMPLATE_ID` OR +  // `organizations/ORGANIZATION_ID/deidentifyTemplates/TEMPLATE_ID` +  string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + +  // Display name (max 256 chars). +  string display_name = 2; + +  // Short description (max 256 chars). +  string description = 3; + +  // Output only. The creation timestamp of an inspectTemplate. +  google.protobuf.Timestamp create_time = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; + +  // Output only. The last update timestamp of an inspectTemplate. +  google.protobuf.Timestamp update_time = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; + +  // The core content of the template. +  DeidentifyConfig deidentify_config = 6; +} + +// Details information about an error encountered during job execution or +// the results of an unsuccessful activation of the JobTrigger. +message Error { +  // Detailed error codes and messages. +  google.rpc.Status details = 1; + +  // The times the error occurred. +  repeated google.protobuf.Timestamp timestamps = 2; +} + +// Contains a configuration to make dlp api calls on a repeating basis. +// See https://cloud.google.com/dlp/docs/concepts-job-triggers to learn more. +message JobTrigger { +  option (google.api.resource) = { +    type: "dlp.googleapis.com/JobTrigger" +    pattern: "projects/{project}/jobTriggers/{job_trigger}" +    pattern: "projects/{project}/locations/{location}/jobTriggers/{job_trigger}" +  }; + +  // What event needs to occur for a new job to be started. +  message Trigger { +    oneof trigger { +      // Create a job on a repeating basis based on the elapse of time. +      Schedule schedule = 1; + +      // For use with hybrid jobs. Jobs must be manually created and finished. +      Manual manual = 2; +    } +  } + +  // Whether the trigger is currently active. If PAUSED or CANCELLED, no jobs +  // will be created with this configuration. The service may automatically +  // pause triggers experiencing frequent errors. To restart a job, set the +  // status to HEALTHY after correcting user errors. +  enum Status { +    // Unused. +    STATUS_UNSPECIFIED = 0; + +    // Trigger is healthy. +    HEALTHY = 1; + +    // Trigger is temporarily paused. +    PAUSED = 2; + +    // Trigger is cancelled and can not be resumed. +    CANCELLED = 3; +  } + +  // Unique resource name for the triggeredJob, assigned by the service when the +  // triggeredJob is created, for example +  // `projects/dlp-test-project/jobTriggers/53234423`. +  string name = 1; + +  // Display name (max 100 chars) +  string display_name = 2; + +  // User provided description (max 256 chars) +  string description = 3; + +  // The configuration details for the specific type of job to run. +  oneof job { +    // For inspect jobs, a snapshot of the configuration. +    InspectJobConfig inspect_job = 4; +  } + +  // A list of triggers which will be OR'ed together. Only one in the list +  // needs to trigger for a job to be started. The list may contain only +  // a single Schedule trigger and must have at least one object. +  repeated Trigger triggers = 5; + +  // Output only. A stream of errors encountered when the trigger was activated. Repeated +  // errors may result in the JobTrigger automatically being paused. +  // Will return the last 100 errors. Whenever the JobTrigger is modified +  // this list will be cleared. +  repeated Error errors = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; + +  // Output only. The creation timestamp of a triggeredJob. +  google.protobuf.Timestamp create_time = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; + +  // Output only. The last update timestamp of a triggeredJob. +  google.protobuf.Timestamp update_time = 8 [(google.api.field_behavior) = OUTPUT_ONLY]; + +  // Output only. The timestamp of the last time this trigger executed. +  google.protobuf.Timestamp last_run_time = 9 [(google.api.field_behavior) = OUTPUT_ONLY]; + +  // Required. A status for this trigger. +  Status status = 10 [(google.api.field_behavior) = REQUIRED]; +} + +// A task to execute on the completion of a job. +// See https://cloud.google.com/dlp/docs/concepts-actions to learn more. +message Action { +  // If set, the detailed findings will be persisted to the specified +  // OutputStorageConfig. Only a single instance of this action can be +  // specified. +  // Compatible with: Inspect, Risk +  message SaveFindings { +    // Location to store findings outside of DLP. +    OutputStorageConfig output_config = 1; +  } + +  // Publish a message into a given Pub/Sub topic when DlpJob has completed. The +  // message contains a single field, `DlpJobName`, which is equal to the +  // finished job's +  // [`DlpJob.name`](https://cloud.google.com/dlp/docs/reference/rest/v2/projects.dlpJobs#DlpJob). +  // Compatible with: Inspect, Risk +  message PublishToPubSub { +    // Cloud Pub/Sub topic to send notifications to. The topic must have given +    // publishing access rights to the DLP API service account executing +    // the long running DlpJob sending the notifications. +    // Format is projects/{project}/topics/{topic}. +    string topic = 1; +  } + +  // Publish the result summary of a DlpJob to the Cloud Security +  // Command Center (CSCC Alpha). +  // This action is only available for projects which are parts of +  // an organization and whitelisted for the alpha Cloud Security Command +  // Center. +  // The action will publish the count of finding instances and their info +  // types. The summary of findings will be persisted in CSCC and are governed +  // by CSCC service-specific policy, see +  // https://cloud.google.com/terms/service-terms Only a single instance of this +  // action can be specified. Compatible with: Inspect +  message PublishSummaryToCscc { + +  } + +  // Publish findings of a DlpJob to Data Catalog. In Data Catalog, tag +  // templates are applied to the resource that Cloud DLP scanned. Data +  // Catalog tag templates are stored in the same project and region where the +  // BigQuery table exists. For Cloud DLP to create and apply the tag template, +  // the Cloud DLP service agent must have the +  // `roles/datacatalog.tagTemplateOwner` permission on the project. The tag +  // template contains fields summarizing the results of the DlpJob. Any field +  // values previously written by another DlpJob are deleted. [InfoType naming +  // patterns][google.privacy.dlp.v2.InfoType] are strictly enforced when using +  // this feature. +  // +  // Findings are persisted in Data Catalog storage and are governed by +  // service-specific policies for Data Catalog. For more information, see +  // [Service Specific Terms](https://cloud.google.com/terms/service-terms). +  // +  // Only a single instance of this action can be specified. This action is +  // allowed only if all resources being scanned are BigQuery tables. +  // Compatible with: Inspect +  message PublishFindingsToCloudDataCatalog { + +  } + +  // Create a de-identified copy of the requested table or files. +  // +  // A TransformationDetail will be created for each transformation. +  // +  // If any rows in BigQuery are skipped during de-identification +  // (transformation errors or row size exceeds BigQuery insert API limits) they +  // are placed in the failure output table. If the original row exceeds +  // the BigQuery insert API limit it will be truncated when written to the +  // failure output table. The failure output table can be set in the +  // action.deidentify.output.big_query_output.deidentified_failure_output_table +  // field, if no table is set, a table will be automatically created in the +  // same project and dataset as the original table. +  // +  // Compatible with: Inspect +  message Deidentify { +    // User specified deidentify templates and configs for structured, +    // unstructured, and image files. +    TransformationConfig transformation_config = 7; + +    // Config for storing transformation details. This is separate from the +    // de-identified content, and contains metadata about the successful +    // transformations and/or failures that occurred while de-identifying. This +    // needs to be set in order for users to access information about the status +    // of each transformation (see +    // [TransformationDetails][google.privacy.dlp.v2.TransformationDetails] +    // message for more information about what is noted). +    TransformationDetailsStorageConfig transformation_details_storage_config = 3; + +    oneof output { +      // Required. User settable Cloud Storage bucket and folders to store de-identified +      // files. This field must be set for cloud storage deidentification. The +      // output Cloud Storage bucket must be different from the input bucket. +      // De-identified files will overwrite files in the output path. +      // +      // Form of: gs://bucket/folder/ or gs://bucket +      string cloud_storage_output = 9 [(google.api.field_behavior) = REQUIRED]; +    } + +    // List of user-specified file type groups to transform. If specified, only +    // the files with these filetypes will be transformed. If empty, all +    // supported files will be transformed. Supported types may be automatically +    // added over time. If a file type is set in this field that isn't supported +    // by the Deidentify action then the job will fail and will not be +    // successfully created/started. Currently the only filetypes supported are: +    // IMAGES, TEXT_FILES, CSV, TSV. +    repeated FileType file_types_to_transform = 8; +  } + +  // Sends an email when the job completes. The email goes to IAM project owners +  // and technical [Essential +  // Contacts](https://cloud.google.com/resource-manager/docs/managing-notification-contacts). +  message JobNotificationEmails { + +  } + +  // Enable Stackdriver metric dlp.googleapis.com/finding_count. This +  // will publish a metric to stack driver on each infotype requested and +  // how many findings were found for it. CustomDetectors will be bucketed +  // as 'Custom' under the Stackdriver label 'info_type'. +  message PublishToStackdriver { + +  } + +  oneof action { +    // Save resulting findings in a provided location. +    SaveFindings save_findings = 1; + +    // Publish a notification to a Pub/Sub topic. +    PublishToPubSub pub_sub = 2; + +    // Publish summary to Cloud Security Command Center (Alpha). +    PublishSummaryToCscc publish_summary_to_cscc = 3; + +    // Publish findings to Cloud Datahub. +    PublishFindingsToCloudDataCatalog publish_findings_to_cloud_data_catalog = 5; + +    // Create a de-identified copy of the input data. +    Deidentify deidentify = 7; + +    // Enable email notification for project owners and editors on job's +    // completion/failure. +    JobNotificationEmails job_notification_emails = 8; + +    // Enable Stackdriver metric dlp.googleapis.com/finding_count. +    PublishToStackdriver publish_to_stackdriver = 9; +  } +} + +// User specified templates and configs for how to deidentify structured, +// unstructures, and image files. User must provide either a unstructured +// deidentify template or at least one redact image config. +message TransformationConfig { +  // De-identify template. +  // If this template is specified, it will serve as the default de-identify +  // template. This template cannot contain `record_transformations` since it +  // can be used for unstructured content such as free-form text files. If this +  // template is not set, a default `ReplaceWithInfoTypeConfig` will be used to +  // de-identify unstructured content. +  string deidentify_template = 1; + +  // Structured de-identify template. +  // If this template is specified, it will serve as the de-identify template +  // for structured content such as delimited files and tables. If this template +  // is not set but the `deidentify_template` is set, then `deidentify_template` +  // will also apply to the structured content. If neither template is set, a +  // default `ReplaceWithInfoTypeConfig` will be used to de-identify structured +  // content. +  string structured_deidentify_template = 2; + +  // Image redact template. +  // If this template is specified, it will serve as the de-identify template +  // for images. If this template is not set, all findings in the image will be +  // redacted with a black box. +  string image_redact_template = 4; +} + +// Request message for CreateInspectTemplate. +message CreateInspectTemplateRequest { +  // Required. Parent resource name. +  // +  // The format of this value varies depending on the scope of the request +  // (project or organization) and whether you have [specified a processing +  // location](https://cloud.google.com/dlp/docs/specifying-location): +  // +  // + Projects scope, location specified:<br/> +  //   `projects/`<var>PROJECT_ID</var>`/locations/`<var>LOCATION_ID</var> +  // + Projects scope, no location specified (defaults to global):<br/> +  //   `projects/`<var>PROJECT_ID</var> +  // + Organizations scope, location specified:<br/> +  //   `organizations/`<var>ORG_ID</var>`/locations/`<var>LOCATION_ID</var> +  // + Organizations scope, no location specified (defaults to global):<br/> +  //   `organizations/`<var>ORG_ID</var> +  // +  // The following example `parent` string specifies a parent project with the +  // identifier `example-project`, and specifies the `europe-west3` location +  // for processing data: +  // +  //     parent=projects/example-project/locations/europe-west3 +  string parent = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      child_type: "dlp.googleapis.com/InspectTemplate" +    } +  ]; + +  // Required. The InspectTemplate to create. +  InspectTemplate inspect_template = 2 [(google.api.field_behavior) = REQUIRED]; + +  // The template id can contain uppercase and lowercase letters, +  // numbers, and hyphens; that is, it must match the regular +  // expression: `[a-zA-Z\d-_]+`. The maximum length is 100 +  // characters. Can be empty to allow the system to generate one. +  string template_id = 3; + +  // Deprecated. This field has no effect. +  string location_id = 4; +} + +// Request message for UpdateInspectTemplate. +message UpdateInspectTemplateRequest { +  // Required. Resource name of organization and inspectTemplate to be updated, for +  // example `organizations/433245324/inspectTemplates/432452342` or +  // projects/project-id/inspectTemplates/432452342. +  string name = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      type: "dlp.googleapis.com/InspectTemplate" +    } +  ]; + +  // New InspectTemplate value. +  InspectTemplate inspect_template = 2; + +  // Mask to control which fields get updated. +  google.protobuf.FieldMask update_mask = 3; +} + +// Request message for GetInspectTemplate. +message GetInspectTemplateRequest { +  // Required. Resource name of the organization and inspectTemplate to be read, for +  // example `organizations/433245324/inspectTemplates/432452342` or +  // projects/project-id/inspectTemplates/432452342. +  string name = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      type: "dlp.googleapis.com/InspectTemplate" +    } +  ]; +} + +// Request message for ListInspectTemplates. +message ListInspectTemplatesRequest { +  // Required. Parent resource name. +  // +  // The format of this value varies depending on the scope of the request +  // (project or organization) and whether you have [specified a processing +  // location](https://cloud.google.com/dlp/docs/specifying-location): +  // +  // + Projects scope, location specified:<br/> +  //   `projects/`<var>PROJECT_ID</var>`/locations/`<var>LOCATION_ID</var> +  // + Projects scope, no location specified (defaults to global):<br/> +  //   `projects/`<var>PROJECT_ID</var> +  // + Organizations scope, location specified:<br/> +  //   `organizations/`<var>ORG_ID</var>`/locations/`<var>LOCATION_ID</var> +  // + Organizations scope, no location specified (defaults to global):<br/> +  //   `organizations/`<var>ORG_ID</var> +  // +  // The following example `parent` string specifies a parent project with the +  // identifier `example-project`, and specifies the `europe-west3` location +  // for processing data: +  // +  //     parent=projects/example-project/locations/europe-west3 +  string parent = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      child_type: "dlp.googleapis.com/InspectTemplate" +    } +  ]; + +  // Page token to continue retrieval. Comes from previous call +  // to `ListInspectTemplates`. +  string page_token = 2; + +  // Size of the page, can be limited by the server. If zero server returns +  // a page of max size 100. +  int32 page_size = 3; + +  // Comma separated list of fields to order by, +  // followed by `asc` or `desc` postfix. This list is case-insensitive, +  // default sorting order is ascending, redundant space characters are +  // insignificant. +  // +  // Example: `name asc,update_time, create_time desc` +  // +  // Supported fields are: +  // +  // - `create_time`: corresponds to the time the template was created. +  // - `update_time`: corresponds to the time the template was last updated. +  // - `name`: corresponds to the template's name. +  // - `display_name`: corresponds to the template's display name. +  string order_by = 4; + +  // Deprecated. This field has no effect. +  string location_id = 5; +} + +// Response message for ListInspectTemplates. +message ListInspectTemplatesResponse { +  // List of inspectTemplates, up to page_size in ListInspectTemplatesRequest. +  repeated InspectTemplate inspect_templates = 1; + +  // If the next page is available then the next page token to be used +  // in following ListInspectTemplates request. +  string next_page_token = 2; +} + +// Request message for DeleteInspectTemplate. +message DeleteInspectTemplateRequest { +  // Required. Resource name of the organization and inspectTemplate to be deleted, for +  // example `organizations/433245324/inspectTemplates/432452342` or +  // projects/project-id/inspectTemplates/432452342. +  string name = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      type: "dlp.googleapis.com/InspectTemplate" +    } +  ]; +} + +// Request message for CreateJobTrigger. +message CreateJobTriggerRequest { +  // Required. Parent resource name. +  // +  // The format of this value varies depending on whether you have [specified a +  // processing +  // location](https://cloud.google.com/dlp/docs/specifying-location): +  // +  // + Projects scope, location specified:<br/> +  //   `projects/`<var>PROJECT_ID</var>`/locations/`<var>LOCATION_ID</var> +  // + Projects scope, no location specified (defaults to global):<br/> +  //   `projects/`<var>PROJECT_ID</var> +  // +  // The following example `parent` string specifies a parent project with the +  // identifier `example-project`, and specifies the `europe-west3` location +  // for processing data: +  // +  //     parent=projects/example-project/locations/europe-west3 +  string parent = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      child_type: "dlp.googleapis.com/JobTrigger" +    } +  ]; + +  // Required. The JobTrigger to create. +  JobTrigger job_trigger = 2 [(google.api.field_behavior) = REQUIRED]; + +  // The trigger id can contain uppercase and lowercase letters, +  // numbers, and hyphens; that is, it must match the regular +  // expression: `[a-zA-Z\d-_]+`. The maximum length is 100 +  // characters. Can be empty to allow the system to generate one. +  string trigger_id = 3; + +  // Deprecated. This field has no effect. +  string location_id = 4; +} + +// Request message for ActivateJobTrigger. +message ActivateJobTriggerRequest { +  // Required. Resource name of the trigger to activate, for example +  // `projects/dlp-test-project/jobTriggers/53234423`. +  string name = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      type: "dlp.googleapis.com/JobTrigger" +    } +  ]; +} + +// Request message for UpdateJobTrigger. +message UpdateJobTriggerRequest { +  // Required. Resource name of the project and the triggeredJob, for example +  // `projects/dlp-test-project/jobTriggers/53234423`. +  string name = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      type: "dlp.googleapis.com/JobTrigger" +    } +  ]; + +  // New JobTrigger value. +  JobTrigger job_trigger = 2; + +  // Mask to control which fields get updated. +  google.protobuf.FieldMask update_mask = 3; +} + +// Request message for GetJobTrigger. +message GetJobTriggerRequest { +  // Required. Resource name of the project and the triggeredJob, for example +  // `projects/dlp-test-project/jobTriggers/53234423`. +  string name = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      type: "dlp.googleapis.com/JobTrigger" +    } +  ]; +} + +// Request message for CreateDlpJobRequest. Used to initiate long running +// jobs such as calculating risk metrics or inspecting Google Cloud +// Storage. +message CreateDlpJobRequest { +  // Required. Parent resource name. +  // +  // The format of this value varies depending on whether you have [specified a +  // processing +  // location](https://cloud.google.com/dlp/docs/specifying-location): +  // +  // + Projects scope, location specified:<br/> +  //   `projects/`<var>PROJECT_ID</var>`/locations/`<var>LOCATION_ID</var> +  // + Projects scope, no location specified (defaults to global):<br/> +  //   `projects/`<var>PROJECT_ID</var> +  // +  // The following example `parent` string specifies a parent project with the +  // identifier `example-project`, and specifies the `europe-west3` location +  // for processing data: +  // +  //     parent=projects/example-project/locations/europe-west3 +  string parent = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      child_type: "dlp.googleapis.com/DlpJob" +    } +  ]; + +  // The configuration details for the specific type of job to run. +  oneof job { +    // An inspection job scans a storage repository for InfoTypes. +    InspectJobConfig inspect_job = 2; + +    // A risk analysis job calculates re-identification risk metrics for a +    // BigQuery table. +    RiskAnalysisJobConfig risk_job = 3; +  } + +  // The job id can contain uppercase and lowercase letters, +  // numbers, and hyphens; that is, it must match the regular +  // expression: `[a-zA-Z\d-_]+`. The maximum length is 100 +  // characters. Can be empty to allow the system to generate one. +  string job_id = 4; + +  // Deprecated. This field has no effect. +  string location_id = 5; +} + +// Request message for ListJobTriggers. +message ListJobTriggersRequest { +  // Required. Parent resource name. +  // +  // The format of this value varies depending on whether you have [specified a +  // processing +  // location](https://cloud.google.com/dlp/docs/specifying-location): +  // +  // + Projects scope, location specified:<br/> +  //   `projects/`<var>PROJECT_ID</var>`/locations/`<var>LOCATION_ID</var> +  // + Projects scope, no location specified (defaults to global):<br/> +  //   `projects/`<var>PROJECT_ID</var> +  // +  // The following example `parent` string specifies a parent project with the +  // identifier `example-project`, and specifies the `europe-west3` location +  // for processing data: +  // +  //     parent=projects/example-project/locations/europe-west3 +  string parent = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      child_type: "dlp.googleapis.com/JobTrigger" +    } +  ]; + +  // Page token to continue retrieval. Comes from previous call +  // to ListJobTriggers. `order_by` field must not +  // change for subsequent calls. +  string page_token = 2; + +  // Size of the page, can be limited by a server. +  int32 page_size = 3; + +  // Comma separated list of triggeredJob fields to order by, +  // followed by `asc` or `desc` postfix. This list is case-insensitive, +  // default sorting order is ascending, redundant space characters are +  // insignificant. +  // +  // Example: `name asc,update_time, create_time desc` +  // +  // Supported fields are: +  // +  // - `create_time`: corresponds to the time the JobTrigger was created. +  // - `update_time`: corresponds to the time the JobTrigger was last updated. +  // - `last_run_time`: corresponds to the last time the JobTrigger ran. +  // - `name`: corresponds to the JobTrigger's name. +  // - `display_name`: corresponds to the JobTrigger's display name. +  // - `status`: corresponds to JobTrigger's status. +  string order_by = 4; + +  // Allows filtering. +  // +  // Supported syntax: +  // +  // * Filter expressions are made up of one or more restrictions. +  // * Restrictions can be combined by `AND` or `OR` logical operators. A +  // sequence of restrictions implicitly uses `AND`. +  // * A restriction has the form of `{field} {operator} {value}`. +  // * Supported fields/values for inspect triggers: +  //     - `status` - HEALTHY|PAUSED|CANCELLED +  //     - `inspected_storage` - DATASTORE|CLOUD_STORAGE|BIGQUERY +  //     - 'last_run_time` - RFC 3339 formatted timestamp, surrounded by +  //     quotation marks. Nanoseconds are ignored. +  //     - 'error_count' - Number of errors that have occurred while running. +  // * The operator must be `=` or `!=` for status and inspected_storage. +  // +  // Examples: +  // +  // * inspected_storage = cloud_storage AND status = HEALTHY +  // * inspected_storage = cloud_storage OR inspected_storage = bigquery +  // * inspected_storage = cloud_storage AND (state = PAUSED OR state = HEALTHY) +  // * last_run_time > \"2017-12-12T00:00:00+00:00\" +  // +  // The length of this field should be no more than 500 characters. +  string filter = 5; + +  // The type of jobs. Will use `DlpJobType.INSPECT` if not set. +  DlpJobType type = 6; + +  // Deprecated. This field has no effect. +  string location_id = 7; +} + +// Response message for ListJobTriggers. +message ListJobTriggersResponse { +  // List of triggeredJobs, up to page_size in ListJobTriggersRequest. +  repeated JobTrigger job_triggers = 1; + +  // If the next page is available then the next page token to be used +  // in following ListJobTriggers request. +  string next_page_token = 2; +} + +// Request message for DeleteJobTrigger. +message DeleteJobTriggerRequest { +  // Required. Resource name of the project and the triggeredJob, for example +  // `projects/dlp-test-project/jobTriggers/53234423`. +  string name = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      type: "dlp.googleapis.com/JobTrigger" +    } +  ]; +} + +// Controls what and how to inspect for findings. +message InspectJobConfig { +  // The data to scan. +  StorageConfig storage_config = 1; + +  // How and what to scan for. +  InspectConfig inspect_config = 2; + +  // If provided, will be used as the default for all values in InspectConfig. +  // `inspect_config` will be merged into the values persisted as part of the +  // template. +  string inspect_template_name = 3; + +  // Actions to execute at the completion of the job. +  repeated Action actions = 4; +} + +// A task to execute when a data profile has been generated. +message DataProfileAction { +  // If set, the detailed data profiles will be persisted to the location +  // of your choice whenever updated. +  message Export { +    // Store all table and column profiles in an existing table or a new table +    // in an existing dataset. Each re-generation will result in a new row in +    // BigQuery. +    BigQueryTable profile_table = 1; +  } + +  // Send a Pub/Sub message into the given Pub/Sub topic to connect other +  // systems to data profile generation. The message payload data will +  // be the byte serialization of `DataProfilePubSubMessage`. +  message PubSubNotification { +    // The levels of detail that can be included in the Pub/Sub message. +    enum DetailLevel { +      // Unused. +      DETAIL_LEVEL_UNSPECIFIED = 0; + +      // The full table data profile. +      TABLE_PROFILE = 1; + +      // The resource name of the table. +      RESOURCE_NAME = 2; +    } + +    // Cloud Pub/Sub topic to send notifications to. +    // Format is projects/{project}/topics/{topic}. +    string topic = 1; + +    // The type of event that triggers a Pub/Sub. At most one +    // `PubSubNotification` per EventType is permitted. +    EventType event = 2; + +    // Conditions (e.g., data risk or sensitivity level) for triggering a +    // Pub/Sub. +    DataProfilePubSubCondition pubsub_condition = 3; + +    // How much data to include in the Pub/Sub message. If the user wishes to +    // limit the size of the message, they can use resource_name and fetch the +    // profile fields they wish to. Per table profile (not per column). +    DetailLevel detail_of_message = 4; +  } + +  // Types of event that can trigger an action. +  enum EventType { +    // Unused. +    EVENT_TYPE_UNSPECIFIED = 0; + +    // New profile (not a re-profile). +    NEW_PROFILE = 1; + +    // Changed one of the following profile metrics: +    // * Table data risk score +    // * Table sensitivity score +    // * Table resource visibility +    // * Table encryption type +    // * Table predicted infoTypes +    // * Table other infoTypes +    CHANGED_PROFILE = 2; + +    // Table data risk score or sensitivity score increased. +    SCORE_INCREASED = 3; + +    // A user (non-internal) error occurred. +    ERROR_CHANGED = 4; +  } + +  oneof action { +    // Export data profiles into a provided location. +    Export export_data = 1; + +    // Publish a message into the Pub/Sub topic. +    PubSubNotification pub_sub_notification = 2; +  } +} + +// Configuration for setting up a job to scan resources for profile generation. +// Only one data profile configuration may exist per organization, folder, +// or project. +// +// The generated data profiles are retained according to the +// [data retention policy] +// (https://cloud.google.com/dlp/docs/data-profiles#retention). +message DataProfileJobConfig { +  // The data to scan. +  DataProfileLocation location = 1; + +  // The project that will run the scan. The DLP service +  // account that exists within this project must have access to all resources +  // that are profiled, and the Cloud DLP API must be enabled. +  string project_id = 5; + +  // Detection logic for profile generation. +  // +  // Not all template features are used by profiles. FindingLimits, +  // include_quote and exclude_info_types have no impact on +  // data profiling. +  // +  // Multiple templates may be provided if there is data in multiple regions. +  // At most one template must be specified per-region (including "global"). +  // Each region is scanned using the applicable template. If no region-specific +  // template is specified, but a "global" template is specified, it will be +  // copied to that region and used instead. If no global or region-specific +  // template is provided for a region with data, that region's data will not be +  // scanned. +  // +  // For more information, see +  // https://cloud.google.com/dlp/docs/data-profiles#data_residency. +  repeated string inspect_templates = 7; + +  // Actions to execute at the completion of the job. +  repeated DataProfileAction data_profile_actions = 6; +} + +// The data that will be profiled. +message DataProfileLocation { +  // The location to be scanned. +  oneof location { +    // The ID of an organization to scan. +    int64 organization_id = 1; + +    // The ID of the Folder within an organization to scan. +    int64 folder_id = 2; +  } +} + +// Combines all of the information about a DLP job. +message DlpJob { +  option (google.api.resource) = { +    type: "dlp.googleapis.com/DlpJob" +    pattern: "projects/{project}/dlpJobs/{dlp_job}" +    pattern: "projects/{project}/locations/{location}/dlpJobs/{dlp_job}" +  }; + +  // Possible states of a job. New items may be added. +  enum JobState { +    // Unused. +    JOB_STATE_UNSPECIFIED = 0; + +    // The job has not yet started. +    PENDING = 1; + +    // The job is currently running. Once a job has finished it will transition +    // to FAILED or DONE. +    RUNNING = 2; + +    // The job is no longer running. +    DONE = 3; + +    // The job was canceled before it could be completed. +    CANCELED = 4; + +    // The job had an error and did not complete. +    FAILED = 5; + +    // The job is currently accepting findings via hybridInspect. +    // A hybrid job in ACTIVE state may continue to have findings added to it +    // through the calling of hybridInspect. After the job has finished no more +    // calls to hybridInspect may be made. ACTIVE jobs can transition to DONE. +    ACTIVE = 6; +  } + +  // The server-assigned name. +  string name = 1; + +  // The type of job. +  DlpJobType type = 2; + +  // State of a job. +  JobState state = 3; + +  oneof details { +    // Results from analyzing risk of a data source. +    AnalyzeDataSourceRiskDetails risk_details = 4; + +    // Results from inspecting a data source. +    InspectDataSourceDetails inspect_details = 5; +  } + +  // Time when the job was created. +  google.protobuf.Timestamp create_time = 6; + +  // Time when the job started. +  google.protobuf.Timestamp start_time = 7; + +  // Time when the job finished. +  google.protobuf.Timestamp end_time = 8; + +  // If created by a job trigger, the resource name of the trigger that +  // instantiated the job. +  string job_trigger_name = 10; + +  // A stream of errors encountered running the job. +  repeated Error errors = 11; +} + +// The request message for [DlpJobs.GetDlpJob][]. +message GetDlpJobRequest { +  // Required. The name of the DlpJob resource. +  string name = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      type: "dlp.googleapis.com/DlpJob" +    } +  ]; +} + +// The request message for listing DLP jobs. +message ListDlpJobsRequest { +  // Required. Parent resource name. +  // +  // The format of this value varies depending on whether you have [specified a +  // processing +  // location](https://cloud.google.com/dlp/docs/specifying-location): +  // +  // + Projects scope, location specified:<br/> +  //   `projects/`<var>PROJECT_ID</var>`/locations/`<var>LOCATION_ID</var> +  // + Projects scope, no location specified (defaults to global):<br/> +  //   `projects/`<var>PROJECT_ID</var> +  // +  // The following example `parent` string specifies a parent project with the +  // identifier `example-project`, and specifies the `europe-west3` location +  // for processing data: +  // +  //     parent=projects/example-project/locations/europe-west3 +  string parent = 4 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      child_type: "dlp.googleapis.com/DlpJob" +    } +  ]; + +  // Allows filtering. +  // +  // Supported syntax: +  // +  // * Filter expressions are made up of one or more restrictions. +  // * Restrictions can be combined by `AND` or `OR` logical operators. A +  // sequence of restrictions implicitly uses `AND`. +  // * A restriction has the form of `{field} {operator} {value}`. +  // * Supported fields/values for inspect jobs: +  //     - `state` - PENDING|RUNNING|CANCELED|FINISHED|FAILED +  //     - `inspected_storage` - DATASTORE|CLOUD_STORAGE|BIGQUERY +  //     - `trigger_name` - The name of the trigger that created the job. +  //     - 'end_time` - Corresponds to the time the job finished. +  //     - 'start_time` - Corresponds to the time the job finished. +  // * Supported fields for risk analysis jobs: +  //     - `state` - RUNNING|CANCELED|FINISHED|FAILED +  //     - 'end_time` - Corresponds to the time the job finished. +  //     - 'start_time` - Corresponds to the time the job finished. +  // * The operator must be `=` or `!=`. +  // +  // Examples: +  // +  // * inspected_storage = cloud_storage AND state = done +  // * inspected_storage = cloud_storage OR inspected_storage = bigquery +  // * inspected_storage = cloud_storage AND (state = done OR state = canceled) +  // * end_time > \"2017-12-12T00:00:00+00:00\" +  // +  // The length of this field should be no more than 500 characters. +  string filter = 1; + +  // The standard list page size. +  int32 page_size = 2; + +  // The standard list page token. +  string page_token = 3; + +  // The type of job. Defaults to `DlpJobType.INSPECT` +  DlpJobType type = 5; + +  // Comma separated list of fields to order by, +  // followed by `asc` or `desc` postfix. This list is case-insensitive, +  // default sorting order is ascending, redundant space characters are +  // insignificant. +  // +  // Example: `name asc, end_time asc, create_time desc` +  // +  // Supported fields are: +  // +  // - `create_time`: corresponds to the time the job was created. +  // - `end_time`: corresponds to the time the job ended. +  // - `name`: corresponds to the job's name. +  // - `state`: corresponds to `state` +  string order_by = 6; + +  // Deprecated. This field has no effect. +  string location_id = 7; +} + +// The response message for listing DLP jobs. +message ListDlpJobsResponse { +  // A list of DlpJobs that matches the specified filter in the request. +  repeated DlpJob jobs = 1; + +  // The standard List next-page token. +  string next_page_token = 2; +} + +// The request message for canceling a DLP job. +message CancelDlpJobRequest { +  // Required. The name of the DlpJob resource to be cancelled. +  string name = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      type: "dlp.googleapis.com/DlpJob" +    } +  ]; +} + +// The request message for finishing a DLP hybrid job. +message FinishDlpJobRequest { +  // Required. The name of the DlpJob resource to be cancelled. +  string name = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      type: "dlp.googleapis.com/DlpJob" +    } +  ]; +} + +// The request message for deleting a DLP job. +message DeleteDlpJobRequest { +  // Required. The name of the DlpJob resource to be deleted. +  string name = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      type: "dlp.googleapis.com/DlpJob" +    } +  ]; +} + +// Request message for CreateDeidentifyTemplate. +message CreateDeidentifyTemplateRequest { +  // Required. Parent resource name. +  // +  // The format of this value varies depending on the scope of the request +  // (project or organization) and whether you have [specified a processing +  // location](https://cloud.google.com/dlp/docs/specifying-location): +  // +  // + Projects scope, location specified:<br/> +  //   `projects/`<var>PROJECT_ID</var>`/locations/`<var>LOCATION_ID</var> +  // + Projects scope, no location specified (defaults to global):<br/> +  //   `projects/`<var>PROJECT_ID</var> +  // + Organizations scope, location specified:<br/> +  //   `organizations/`<var>ORG_ID</var>`/locations/`<var>LOCATION_ID</var> +  // + Organizations scope, no location specified (defaults to global):<br/> +  //   `organizations/`<var>ORG_ID</var> +  // +  // The following example `parent` string specifies a parent project with the +  // identifier `example-project`, and specifies the `europe-west3` location +  // for processing data: +  // +  //     parent=projects/example-project/locations/europe-west3 +  string parent = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      child_type: "dlp.googleapis.com/DeidentifyTemplate" +    } +  ]; + +  // Required. The DeidentifyTemplate to create. +  DeidentifyTemplate deidentify_template = 2 [(google.api.field_behavior) = REQUIRED]; + +  // The template id can contain uppercase and lowercase letters, +  // numbers, and hyphens; that is, it must match the regular +  // expression: `[a-zA-Z\d-_]+`. The maximum length is 100 +  // characters. Can be empty to allow the system to generate one. +  string template_id = 3; + +  // Deprecated. This field has no effect. +  string location_id = 4; +} + +// Request message for UpdateDeidentifyTemplate. +message UpdateDeidentifyTemplateRequest { +  // Required. Resource name of organization and deidentify template to be updated, for +  // example `organizations/433245324/deidentifyTemplates/432452342` or +  // projects/project-id/deidentifyTemplates/432452342. +  string name = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      type: "dlp.googleapis.com/DeidentifyTemplate" +    } +  ]; + +  // New DeidentifyTemplate value. +  DeidentifyTemplate deidentify_template = 2; + +  // Mask to control which fields get updated. +  google.protobuf.FieldMask update_mask = 3; +} + +// Request message for GetDeidentifyTemplate. +message GetDeidentifyTemplateRequest { +  // Required. Resource name of the organization and deidentify template to be read, for +  // example `organizations/433245324/deidentifyTemplates/432452342` or +  // projects/project-id/deidentifyTemplates/432452342. +  string name = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      type: "dlp.googleapis.com/DeidentifyTemplate" +    } +  ]; +} + +// Request message for ListDeidentifyTemplates. +message ListDeidentifyTemplatesRequest { +  // Required. Parent resource name. +  // +  // The format of this value varies depending on the scope of the request +  // (project or organization) and whether you have [specified a processing +  // location](https://cloud.google.com/dlp/docs/specifying-location): +  // +  // + Projects scope, location specified:<br/> +  //   `projects/`<var>PROJECT_ID</var>`/locations/`<var>LOCATION_ID</var> +  // + Projects scope, no location specified (defaults to global):<br/> +  //   `projects/`<var>PROJECT_ID</var> +  // + Organizations scope, location specified:<br/> +  //   `organizations/`<var>ORG_ID</var>`/locations/`<var>LOCATION_ID</var> +  // + Organizations scope, no location specified (defaults to global):<br/> +  //   `organizations/`<var>ORG_ID</var> +  // +  // The following example `parent` string specifies a parent project with the +  // identifier `example-project`, and specifies the `europe-west3` location +  // for processing data: +  // +  //     parent=projects/example-project/locations/europe-west3 +  string parent = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      child_type: "dlp.googleapis.com/DeidentifyTemplate" +    } +  ]; + +  // Page token to continue retrieval. Comes from previous call +  // to `ListDeidentifyTemplates`. +  string page_token = 2; + +  // Size of the page, can be limited by the server. If zero server returns +  // a page of max size 100. +  int32 page_size = 3; + +  // Comma separated list of fields to order by, +  // followed by `asc` or `desc` postfix. This list is case-insensitive, +  // default sorting order is ascending, redundant space characters are +  // insignificant. +  // +  // Example: `name asc,update_time, create_time desc` +  // +  // Supported fields are: +  // +  // - `create_time`: corresponds to the time the template was created. +  // - `update_time`: corresponds to the time the template was last updated. +  // - `name`: corresponds to the template's name. +  // - `display_name`: corresponds to the template's display name. +  string order_by = 4; + +  // Deprecated. This field has no effect. +  string location_id = 5; +} + +// Response message for ListDeidentifyTemplates. +message ListDeidentifyTemplatesResponse { +  // List of deidentify templates, up to page_size in +  // ListDeidentifyTemplatesRequest. +  repeated DeidentifyTemplate deidentify_templates = 1; + +  // If the next page is available then the next page token to be used +  // in following ListDeidentifyTemplates request. +  string next_page_token = 2; +} + +// Request message for DeleteDeidentifyTemplate. +message DeleteDeidentifyTemplateRequest { +  // Required. Resource name of the organization and deidentify template to be deleted, +  // for example `organizations/433245324/deidentifyTemplates/432452342` or +  // projects/project-id/deidentifyTemplates/432452342. +  string name = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      type: "dlp.googleapis.com/DeidentifyTemplate" +    } +  ]; +} + +// Configuration for a custom dictionary created from a data source of any size +// up to the maximum size defined in the +// [limits](https://cloud.google.com/dlp/limits) page. The artifacts of +// dictionary creation are stored in the specified Cloud Storage +// location. Consider using `CustomInfoType.Dictionary` for smaller dictionaries +// that satisfy the size requirements. +message LargeCustomDictionaryConfig { +  // Location to store dictionary artifacts in Cloud Storage. These files +  // will only be accessible by project owners and the DLP API. If any of these +  // artifacts are modified, the dictionary is considered invalid and can no +  // longer be used. +  CloudStoragePath output_path = 1; + +  oneof source { +    // Set of files containing newline-delimited lists of dictionary phrases. +    CloudStorageFileSet cloud_storage_file_set = 2; + +    // Field in a BigQuery table where each cell represents a dictionary phrase. +    BigQueryField big_query_field = 3; +  } +} + +// Summary statistics of a custom dictionary. +message LargeCustomDictionaryStats { +  // Approximate number of distinct phrases in the dictionary. +  int64 approx_num_phrases = 1; +} + +// Configuration for stored infoTypes. All fields and subfield are provided +// by the user. For more information, see +// https://cloud.google.com/dlp/docs/creating-custom-infotypes. +message StoredInfoTypeConfig { +  // Display name of the StoredInfoType (max 256 characters). +  string display_name = 1; + +  // Description of the StoredInfoType (max 256 characters). +  string description = 2; + +  // Stored infotype types. +  oneof type { +    // StoredInfoType where findings are defined by a dictionary of phrases. +    LargeCustomDictionaryConfig large_custom_dictionary = 3; + +    // Store dictionary-based CustomInfoType. +    CustomInfoType.Dictionary dictionary = 4; + +    // Store regular expression-based StoredInfoType. +    CustomInfoType.Regex regex = 5; +  } +} + +// Statistics for a StoredInfoType. +message StoredInfoTypeStats { +  // Stat types +  oneof type { +    // StoredInfoType where findings are defined by a dictionary of phrases. +    LargeCustomDictionaryStats large_custom_dictionary = 1; +  } +} + +// Version of a StoredInfoType, including the configuration used to build it, +// create timestamp, and current state. +message StoredInfoTypeVersion { +  // StoredInfoType configuration. +  StoredInfoTypeConfig config = 1; + +  // Create timestamp of the version. Read-only, determined by the system +  // when the version is created. +  google.protobuf.Timestamp create_time = 2; + +  // Stored info type version state. Read-only, updated by the system +  // during dictionary creation. +  StoredInfoTypeState state = 3; + +  // Errors that occurred when creating this storedInfoType version, or +  // anomalies detected in the storedInfoType data that render it unusable. Only +  // the five most recent errors will be displayed, with the most recent error +  // appearing first. +  // +  // For example, some of the data for stored custom dictionaries is put in +  // the user's Cloud Storage bucket, and if this data is modified or +  // deleted by the user or another system, the dictionary becomes invalid. +  // +  // If any errors occur, fix the problem indicated by the error message and +  // use the UpdateStoredInfoType API method to create another version of the +  // storedInfoType to continue using it, reusing the same `config` if it was +  // not the source of the error. +  repeated Error errors = 4; + +  // Statistics about this storedInfoType version. +  StoredInfoTypeStats stats = 5; +} + +// StoredInfoType resource message that contains information about the current +// version and any pending updates. +message StoredInfoType { +  option (google.api.resource) = { +    type: "dlp.googleapis.com/StoredInfoType" +    pattern: "organizations/{organization}/storedInfoTypes/{stored_info_type}" +    pattern: "projects/{project}/storedInfoTypes/{stored_info_type}" +    pattern: "organizations/{organization}/locations/{location}/storedInfoTypes/{stored_info_type}" +    pattern: "projects/{project}/locations/{location}/storedInfoTypes/{stored_info_type}" +  }; + +  // Resource name. +  string name = 1; + +  // Current version of the stored info type. +  StoredInfoTypeVersion current_version = 2; + +  // Pending versions of the stored info type. Empty if no versions are +  // pending. +  repeated StoredInfoTypeVersion pending_versions = 3; +} + +// Request message for CreateStoredInfoType. +message CreateStoredInfoTypeRequest { +  // Required. Parent resource name. +  // +  // The format of this value varies depending on the scope of the request +  // (project or organization) and whether you have [specified a processing +  // location](https://cloud.google.com/dlp/docs/specifying-location): +  // +  // + Projects scope, location specified:<br/> +  //   `projects/`<var>PROJECT_ID</var>`/locations/`<var>LOCATION_ID</var> +  // + Projects scope, no location specified (defaults to global):<br/> +  //   `projects/`<var>PROJECT_ID</var> +  // + Organizations scope, location specified:<br/> +  //   `organizations/`<var>ORG_ID</var>`/locations/`<var>LOCATION_ID</var> +  // + Organizations scope, no location specified (defaults to global):<br/> +  //   `organizations/`<var>ORG_ID</var> +  // +  // The following example `parent` string specifies a parent project with the +  // identifier `example-project`, and specifies the `europe-west3` location +  // for processing data: +  // +  //     parent=projects/example-project/locations/europe-west3 +  string parent = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      child_type: "dlp.googleapis.com/StoredInfoType" +    } +  ]; + +  // Required. Configuration of the storedInfoType to create. +  StoredInfoTypeConfig config = 2 [(google.api.field_behavior) = REQUIRED]; + +  // The storedInfoType ID can contain uppercase and lowercase letters, +  // numbers, and hyphens; that is, it must match the regular +  // expression: `[a-zA-Z\d-_]+`. The maximum length is 100 +  // characters. Can be empty to allow the system to generate one. +  string stored_info_type_id = 3; + +  // Deprecated. This field has no effect. +  string location_id = 4; +} + +// Request message for UpdateStoredInfoType. +message UpdateStoredInfoTypeRequest { +  // Required. Resource name of organization and storedInfoType to be updated, for +  // example `organizations/433245324/storedInfoTypes/432452342` or +  // projects/project-id/storedInfoTypes/432452342. +  string name = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      type: "dlp.googleapis.com/StoredInfoType" +    } +  ]; + +  // Updated configuration for the storedInfoType. If not provided, a new +  // version of the storedInfoType will be created with the existing +  // configuration. +  StoredInfoTypeConfig config = 2; + +  // Mask to control which fields get updated. +  google.protobuf.FieldMask update_mask = 3; +} + +// Request message for GetStoredInfoType. +message GetStoredInfoTypeRequest { +  // Required. Resource name of the organization and storedInfoType to be read, for +  // example `organizations/433245324/storedInfoTypes/432452342` or +  // projects/project-id/storedInfoTypes/432452342. +  string name = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      type: "dlp.googleapis.com/StoredInfoType" +    } +  ]; +} + +// Request message for ListStoredInfoTypes. +message ListStoredInfoTypesRequest { +  // Required. Parent resource name. +  // +  // The format of this value varies depending on the scope of the request +  // (project or organization) and whether you have [specified a processing +  // location](https://cloud.google.com/dlp/docs/specifying-location): +  // +  // + Projects scope, location specified:<br/> +  //   `projects/`<var>PROJECT_ID</var>`/locations/`<var>LOCATION_ID</var> +  // + Projects scope, no location specified (defaults to global):<br/> +  //   `projects/`<var>PROJECT_ID</var> +  // +  // The following example `parent` string specifies a parent project with the +  // identifier `example-project`, and specifies the `europe-west3` location +  // for processing data: +  // +  //     parent=projects/example-project/locations/europe-west3 +  string parent = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      child_type: "dlp.googleapis.com/StoredInfoType" +    } +  ]; + +  // Page token to continue retrieval. Comes from previous call +  // to `ListStoredInfoTypes`. +  string page_token = 2; + +  // Size of the page, can be limited by the server. If zero server returns +  // a page of max size 100. +  int32 page_size = 3; + +  // Comma separated list of fields to order by, +  // followed by `asc` or `desc` postfix. This list is case-insensitive, +  // default sorting order is ascending, redundant space characters are +  // insignificant. +  // +  // Example: `name asc, display_name, create_time desc` +  // +  // Supported fields are: +  // +  // - `create_time`: corresponds to the time the most recent version of the +  // resource was created. +  // - `state`: corresponds to the state of the resource. +  // - `name`: corresponds to resource name. +  // - `display_name`: corresponds to info type's display name. +  string order_by = 4; + +  // Deprecated. This field has no effect. +  string location_id = 5; +} + +// Response message for ListStoredInfoTypes. +message ListStoredInfoTypesResponse { +  // List of storedInfoTypes, up to page_size in ListStoredInfoTypesRequest. +  repeated StoredInfoType stored_info_types = 1; + +  // If the next page is available then the next page token to be used +  // in following ListStoredInfoTypes request. +  string next_page_token = 2; +} + +// Request message for DeleteStoredInfoType. +message DeleteStoredInfoTypeRequest { +  // Required. Resource name of the organization and storedInfoType to be deleted, for +  // example `organizations/433245324/storedInfoTypes/432452342` or +  // projects/project-id/storedInfoTypes/432452342. +  string name = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      type: "dlp.googleapis.com/StoredInfoType" +    } +  ]; +} + +// Request to search for potentially sensitive info in a custom location. +message HybridInspectJobTriggerRequest { +  // Required. Resource name of the trigger to execute a hybrid inspect on, for example +  // `projects/dlp-test-project/jobTriggers/53234423`. +  string name = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      type: "dlp.googleapis.com/JobTrigger" +    } +  ]; + +  // The item to inspect. +  HybridContentItem hybrid_item = 3; +} + +// Request to search for potentially sensitive info in a custom location. +message HybridInspectDlpJobRequest { +  // Required. Resource name of the job to execute a hybrid inspect on, for example +  // `projects/dlp-test-project/dlpJob/53234423`. +  string name = 1 [ +    (google.api.field_behavior) = REQUIRED, +    (google.api.resource_reference) = { +      type: "dlp.googleapis.com/DlpJob" +    } +  ]; + +  // The item to inspect. +  HybridContentItem hybrid_item = 3; +} + +// An individual hybrid item to inspect. Will be stored temporarily during +// processing. +message HybridContentItem { +  // The item to inspect. +  ContentItem item = 1; + +  // Supplementary information that will be added to each finding. +  HybridFindingDetails finding_details = 2; +} + +// Populate to associate additional data with each finding. +message HybridFindingDetails { +  // Details about the container where the content being inspected is from. +  Container container_details = 1; + +  // Offset in bytes of the line, from the beginning of the file, where the +  // finding  is located. Populate if the item being scanned is only part of a +  // bigger item, such as a shard of a file and you want to track the absolute +  // position of the finding. +  int64 file_offset = 2; + +  // Offset of the row for tables. Populate if the row(s) being scanned are +  // part of a bigger dataset and you want to keep track of their absolute +  // position. +  int64 row_offset = 3; + +  // If the container is a table, additional information to make findings +  // meaningful such as the columns that are primary keys. If not known ahead +  // of time, can also be set within each inspect hybrid call and the two +  // will be merged. Note that identifying_fields will only be stored to +  // BigQuery, and only if the BigQuery action has been included. +  TableOptions table_options = 4; + +  // Labels to represent user provided metadata about the data being inspected. +  // If configured by the job, some key values may be required. +  // The labels associated with `Finding`'s produced by hybrid +  // inspection. +  // +  // Label keys must be between 1 and 63 characters long and must conform +  // to the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`. +  // +  // Label values must be between 0 and 63 characters long and must conform +  // to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`. +  // +  // No more than 10 labels can be associated with a given finding. +  // +  // Examples: +  // * `"environment" : "production"` +  // * `"pipeline" : "etl"` +  map<string, string> labels = 5; +} + +// Quota exceeded errors will be thrown once quota has been met. +message HybridInspectResponse { + +} + +// Operators available for comparing the value of fields. +enum RelationalOperator { +  // Unused +  RELATIONAL_OPERATOR_UNSPECIFIED = 0; + +  // Equal. Attempts to match even with incompatible types. +  EQUAL_TO = 1; + +  // Not equal to. Attempts to match even with incompatible types. +  NOT_EQUAL_TO = 2; + +  // Greater than. +  GREATER_THAN = 3; + +  // Less than. +  LESS_THAN = 4; + +  // Greater than or equals. +  GREATER_THAN_OR_EQUALS = 5; + +  // Less than or equals. +  LESS_THAN_OR_EQUALS = 6; + +  // Exists +  EXISTS = 7; +} + +// Type of the match which can be applied to different ways of matching, like +// Dictionary, regular expression and intersecting with findings of another +// info type. +enum MatchingType { +  // Invalid. +  MATCHING_TYPE_UNSPECIFIED = 0; + +  // Full match. +  // +  // - Dictionary: join of Dictionary results matched complete finding quote +  // - Regex: all regex matches fill a finding quote start to end +  // - Exclude info type: completely inside affecting info types findings +  MATCHING_TYPE_FULL_MATCH = 1; + +  // Partial match. +  // +  // - Dictionary: at least one of the tokens in the finding matches +  // - Regex: substring of the finding matches +  // - Exclude info type: intersects with affecting info types findings +  MATCHING_TYPE_PARTIAL_MATCH = 2; + +  // Inverse match. +  // +  // - Dictionary: no tokens in the finding match the dictionary +  // - Regex: finding doesn't match the regex +  // - Exclude info type: no intersection with affecting info types findings +  MATCHING_TYPE_INVERSE_MATCH = 3; +} + +// Deprecated and unused. +enum ContentOption { +  // Includes entire content of a file or a data stream. +  CONTENT_UNSPECIFIED = 0; + +  // Text content within the data, excluding any metadata. +  CONTENT_TEXT = 1; + +  // Images found in the data. +  CONTENT_IMAGE = 2; +} + +// Type of metadata containing the finding. +enum MetadataType { +  // Unused +  METADATATYPE_UNSPECIFIED = 0; + +  // General file metadata provided by Cloud Storage. +  STORAGE_METADATA = 2; +} + +// Parts of the APIs which use certain infoTypes. +enum InfoTypeSupportedBy { +  // Unused. +  ENUM_TYPE_UNSPECIFIED = 0; + +  // Supported by the inspect operations. +  INSPECT = 1; + +  // Supported by the risk analysis operations. +  RISK_ANALYSIS = 2; +} + +// An enum to represent the various types of DLP jobs. +enum DlpJobType { +  // Defaults to INSPECT_JOB. +  DLP_JOB_TYPE_UNSPECIFIED = 0; + +  // The job inspected Google Cloud for sensitive data. +  INSPECT_JOB = 1; + +  // The job executed a Risk Analysis computation. +  RISK_ANALYSIS_JOB = 2; +} + +// State of a StoredInfoType version. +enum StoredInfoTypeState { +  // Unused +  STORED_INFO_TYPE_STATE_UNSPECIFIED = 0; + +  // StoredInfoType version is being created. +  PENDING = 1; + +  // StoredInfoType version is ready for use. +  READY = 2; + +  // StoredInfoType creation failed. All relevant error messages are returned in +  // the `StoredInfoTypeVersion` message. +  FAILED = 3; + +  // StoredInfoType is no longer valid because artifacts stored in +  // user-controlled storage were modified. To fix an invalid StoredInfoType, +  // use the `UpdateStoredInfoType` method to create a new version. +  INVALID = 4; +} + +// Score is a summary of all elements in the data profile. +// A higher number means more risk. +message DataRiskLevel { +  // Various score levels for resources. +  enum DataRiskLevelScore { +    // Unused. +    RISK_SCORE_UNSPECIFIED = 0; + +    // Low risk - Lower indication of sensitive data that appears to have +    // additional access restrictions in place or no indication of sensitive +    // data found. +    RISK_LOW = 10; + +    // Medium risk - Sensitive data may be present but additional access or fine +    // grain access restrictions appear to be present.  Consider limiting +    // access even further or transform data to mask. +    RISK_MODERATE = 20; + +    // High risk – SPII may be present. Access controls may include public +    // ACLs. Exfiltration of data may lead to user data loss. Re-identification +    // of users may be possible. Consider limiting usage and or removing SPII. +    RISK_HIGH = 30; +  } + +  // The score applied to the resource. +  DataRiskLevelScore score = 1; +} + +// How broadly a resource has been shared. New items may be added over time. +// A higher number means more restricted. +enum ResourceVisibility { +  // Unused. +  RESOURCE_VISIBILITY_UNSPECIFIED = 0; + +  // Visible to any user. +  RESOURCE_VISIBILITY_PUBLIC = 10; + +  // Visible only to specific users. +  RESOURCE_VISIBILITY_RESTRICTED = 20; +} + +// Snapshot of the configurations used to generate the profile. +message DataProfileConfigSnapshot { +  // A copy of the inspection config used to generate this profile. This +  // is a copy of the inspect_template specified in `DataProfileJobConfig`. +  InspectConfig inspect_config = 2; + +  // A copy of the configuration used to generate this profile. +  DataProfileJobConfig data_profile_job = 3; +} + +// The profile for a scanned table. +message TableDataProfile { +  // Possible states of a profile. New items may be added. +  enum State { +    // Unused. +    STATE_UNSPECIFIED = 0; + +    // The profile is currently running. Once a profile has finished it will +    // transition to DONE. +    RUNNING = 1; + +    // The profile is no longer generating. +    // If profile_status.status.code is 0, the profile succeeded, otherwise, it +    // failed. +    DONE = 2; +  } + +  // The name of the profile. +  string name = 1; + +  // The resource name to the project data profile for this table. +  string project_data_profile = 2; + +  // The GCP project ID that owns the BigQuery dataset. +  string dataset_project_id = 24; + +  // The BigQuery location where the dataset's data is stored. +  // See https://cloud.google.com/bigquery/docs/locations for supported +  // locations. +  string dataset_location = 29; + +  // The BigQuery dataset ID. +  string dataset_id = 25; + +  // The BigQuery table ID. +  string table_id = 26; + +  // The resource name of the table. +  // https://cloud.google.com/apis/design/resource_names#full_resource_name +  string full_resource = 3; + +  // Success or error status from the most recent profile generation attempt. +  // May be empty if the profile is still being generated. +  ProfileStatus profile_status = 21; + +  // State of a profile. +  State state = 22; + +  // The sensitivity score of this table. +  SensitivityScore sensitivity_score = 5; + +  // The data risk level of this table. +  DataRiskLevel data_risk_level = 6; + +  // The infoTypes predicted from this table's data. +  repeated InfoTypeSummary predicted_info_types = 27; + +  // Other infoTypes found in this table's data. +  repeated OtherInfoTypeSummary other_info_types = 28; + +  // The snapshot of the configurations used to generate the profile. +  DataProfileConfigSnapshot config_snapshot = 7; + +  // The time when this table was last modified +  google.protobuf.Timestamp last_modified_time = 8; + +  // Optional. The time when this table expires. +  google.protobuf.Timestamp expiration_time = 9; + +  // The number of columns profiled in the table. +  int64 scanned_column_count = 10; + +  // The number of columns skipped in the table because of an error. +  int64 failed_column_count = 11; + +  // The size of the table when the profile was generated. +  int64 table_size_bytes = 12; + +  // Number of rows in the table when the profile was generated. +  int64 row_count = 13; + +  // How the table is encrypted. +  EncryptionStatus encryption_status = 14; + +  // How broadly a resource has been shared. +  ResourceVisibility resource_visibility = 15; + +  // The last time the profile was generated. +  google.protobuf.Timestamp profile_last_generated = 16; + +  // The labels applied to the resource at the time the profile was generated. +  map<string, string> resource_labels = 17; + +  // The time at which the table was created. +  google.protobuf.Timestamp create_time = 23; +} + +message ProfileStatus { +  // Profiling status code and optional message +  google.rpc.Status status = 1; + +  // Time when the profile generation status was updated +  google.protobuf.Timestamp timestamp = 3; +} + +// How a resource is encrypted. +enum EncryptionStatus { +  // Unused. +  ENCRYPTION_STATUS_UNSPECIFIED = 0; + +  // Google manages server-side encryption keys on your behalf. +  ENCRYPTION_GOOGLE_MANAGED = 1; + +  // Customer provides the key. +  ENCRYPTION_CUSTOMER_MANAGED = 2; +} + +// The infoType details for this column. +message InfoTypeSummary { +  // The infoType. +  InfoType info_type = 1; + +  // Not populated for predicted infotypes. +  int32 estimated_prevalence = 2 [deprecated = true]; +} + +// Infotype details for other infoTypes found within a column. +message OtherInfoTypeSummary { +  // The other infoType. +  InfoType info_type = 1; + +  // Approximate percentage of non-null rows that contained data detected by +  // this infotype. +  int32 estimated_prevalence = 2; +} + +// A condition for determining whether a Pub/Sub should be triggered. +message DataProfilePubSubCondition { +  // Various score levels for resources. +  enum ProfileScoreBucket { +    // Unused. +    PROFILE_SCORE_BUCKET_UNSPECIFIED = 0; + +    // High risk/sensitivity detected. +    HIGH = 1; + +    // Medium or high risk/sensitivity detected. +    MEDIUM_OR_HIGH = 2; +  } + +  // A condition consisting of a value. +  message PubSubCondition { +    // The value for the condition to trigger. +    oneof value { +      // The minimum data risk score that triggers the condition. +      ProfileScoreBucket minimum_risk_score = 1; + +      // The minimum sensitivity level that triggers the condition. +      ProfileScoreBucket minimum_sensitivity_score = 2; +    } +  } + +  // An expression, consisting of an operator and conditions. +  message PubSubExpressions { +    // Logical operators for conditional checks. +    enum PubSubLogicalOperator { +      // Unused. +      LOGICAL_OPERATOR_UNSPECIFIED = 0; + +      // Conditional OR. +      OR = 1; + +      // Conditional AND. +      AND = 2; +    } + +    // The operator to apply to the collection of conditions. +    PubSubLogicalOperator logical_operator = 1; + +    // Conditions to apply to the expression. +    repeated PubSubCondition conditions = 2; +  } + +  // An expression. +  PubSubExpressions expressions = 1; +} + +// Pub/Sub topic message for a DataProfileAction.PubSubNotification event. +// To receive a message of protocol buffer schema type, convert the message data +// to an object of this proto class. +message DataProfilePubSubMessage { +  // If `DetailLevel` is `TABLE_PROFILE` this will be fully populated. +  // Otherwise, if `DetailLevel` is `RESOURCE_NAME`, then only `name` and +  // `full_resource` will be populated. +  TableDataProfile profile = 1; + +  // The event that caused the Pub/Sub message to be sent. +  DataProfileAction.EventType event = 2; +} diff --git a/third_party/googleapis/google/privacy/dlp/v2/dlp_gapic.yaml b/third_party/googleapis/google/privacy/dlp/v2/dlp_gapic.yaml new file mode 100644 index 0000000..978ea5e --- /dev/null +++ b/third_party/googleapis/google/privacy/dlp/v2/dlp_gapic.yaml @@ -0,0 +1,5 @@ +type: com.google.api.codegen.ConfigProto +config_schema_version: 2.0.0 +language_settings: +  java: +    package_name: com.google.cloud.dlp.v2 diff --git a/third_party/googleapis/google/privacy/dlp/v2/dlp_grpc_service_config.json b/third_party/googleapis/google/privacy/dlp/v2/dlp_grpc_service_config.json new file mode 100755 index 0000000..d3b037e --- /dev/null +++ b/third_party/googleapis/google/privacy/dlp/v2/dlp_grpc_service_config.json @@ -0,0 +1,160 @@ +{ +  "methodConfig": [ +    { +      "name": [ +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "InspectContent" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "RedactImage" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "DeidentifyContent" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "ReidentifyContent" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "ListInfoTypes" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "GetInspectTemplate" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "ListInspectTemplates" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "DeleteInspectTemplate" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "GetDeidentifyTemplate" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "ListDeidentifyTemplates" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "DeleteDeidentifyTemplate" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "ListDlpJobs" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "GetDlpJob" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "DeleteDlpJob" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "ListJobTriggers" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "GetJobTrigger" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "DeleteJobTrigger" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "GetStoredInfoType" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "ListStoredInfoTypes" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "DeleteStoredInfoType" +        } +      ], +      "timeout": "300s", +      "retryPolicy": { +        "initialBackoff": "0.100s", +        "maxAttempts": 5, +        "maxBackoff": "60s", +        "backoffMultiplier": 1.3, +        "retryableStatusCodes": [ +          "UNAVAILABLE", +          "DEADLINE_EXCEEDED" +        ] +      } +    }, +    { +      "name": [ +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "CreateInspectTemplate" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "UpdateInspectTemplate" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "CreateDeidentifyTemplate" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "UpdateDeidentifyTemplate" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "CreateDlpJob" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "CancelDlpJob" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "UpdateJobTrigger" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "CreateJobTrigger" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "CreateStoredInfoType" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "UpdateStoredInfoType" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "ActivateJobTrigger" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "FinishDlpJob" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "HybridInspectDlpJob" +        }, +        { +          "service": "google.privacy.dlp.v2.DlpService", +          "method": "HybridInspectJobTrigger" +        } +      ], +      "timeout": "300s" +    } +  ] +} diff --git a/third_party/googleapis/google/privacy/dlp/v2/dlp_v2.yaml b/third_party/googleapis/google/privacy/dlp/v2/dlp_v2.yaml new file mode 100644 index 0000000..617a0e7 --- /dev/null +++ b/third_party/googleapis/google/privacy/dlp/v2/dlp_v2.yaml @@ -0,0 +1,30 @@ +type: google.api.Service +config_version: 3 +name: dlp.googleapis.com +title: Cloud Data Loss Prevention (DLP) API + +apis: +- name: google.cloud.location.Locations +- name: google.privacy.dlp.v2.DlpService + +types: +- name: google.privacy.dlp.v2.DataProfilePubSubMessage +- name: google.privacy.dlp.v2.TransformationDetails + +documentation: +  summary: |- +    Provides methods for detection, risk analysis, and de-identification of +    privacy-sensitive fragments in text, images, and Google Cloud Platform +    storage repositories. + +backend: +  rules: +  - selector: 'google.privacy.dlp.v2.DlpService.*' +    deadline: 300.0 + +authentication: +  rules: +  - selector: 'google.privacy.dlp.v2.DlpService.*' +    oauth: +      canonical_scopes: |- +        https://www.googleapis.com/auth/cloud-platform diff --git a/third_party/googleapis/google/privacy/dlp/v2/storage.proto b/third_party/googleapis/google/privacy/dlp/v2/storage.proto new file mode 100644 index 0000000..7709f54 --- /dev/null +++ b/third_party/googleapis/google/privacy/dlp/v2/storage.proto @@ -0,0 +1,808 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +//     http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.privacy.dlp.v2; + +import "google/api/resource.proto"; +import "google/protobuf/timestamp.proto"; + +option csharp_namespace = "Google.Cloud.Dlp.V2"; +option go_package = "google.golang.org/genproto/googleapis/privacy/dlp/v2;dlp"; +option java_multiple_files = true; +option java_outer_classname = "DlpStorage"; +option java_package = "com.google.privacy.dlp.v2"; +option php_namespace = "Google\\Cloud\\Dlp\\V2"; +option ruby_package = "Google::Cloud::Dlp::V2"; + +// Type of information detected by the API. +message InfoType { +  // Name of the information type. Either a name of your choosing when +  // creating a CustomInfoType, or one of the names listed +  // at https://cloud.google.com/dlp/docs/infotypes-reference when specifying +  // a built-in type.  When sending Cloud DLP results to Data Catalog, infoType +  // names should conform to the pattern `[A-Za-z0-9$-_]{1,64}`. +  string name = 1; + +  // Optional version name for this InfoType. +  string version = 2; +} + +// Score is a summary of all elements in the data profile. +// A higher number means more sensitive. +message SensitivityScore { +  // Various score levels for resources. +  enum SensitivityScoreLevel { +    // Unused. +    SENSITIVITY_SCORE_UNSPECIFIED = 0; + +    // No sensitive information detected. Limited access. +    SENSITIVITY_LOW = 10; + +    // Medium risk - PII, potentially sensitive data, or fields with free-text +    // data that are at higher risk of having intermittent sensitive data. +    // Consider limiting access. +    SENSITIVITY_MODERATE = 20; + +    // High risk – SPII may be present. Exfiltration of data may lead to user +    // data loss. Re-identification of users may be possible. Consider limiting +    // usage and or removing SPII. +    SENSITIVITY_HIGH = 30; +  } + +  // The score applied to the resource. +  SensitivityScoreLevel score = 1; +} + +// Categorization of results based on how likely they are to represent a match, +// based on the number of elements they contain which imply a match. +enum Likelihood { +  // Default value; same as POSSIBLE. +  LIKELIHOOD_UNSPECIFIED = 0; + +  // Few matching elements. +  VERY_UNLIKELY = 1; + +  UNLIKELY = 2; + +  // Some matching elements. +  POSSIBLE = 3; + +  LIKELY = 4; + +  // Many matching elements. +  VERY_LIKELY = 5; +} + +// A reference to a StoredInfoType to use with scanning. +message StoredType { +  // Resource name of the requested `StoredInfoType`, for example +  // `organizations/433245324/storedInfoTypes/432452342` or +  // `projects/project-id/storedInfoTypes/432452342`. +  string name = 1; + +  // Timestamp indicating when the version of the `StoredInfoType` used for +  // inspection was created. Output-only field, populated by the system. +  google.protobuf.Timestamp create_time = 2; +} + +// Custom information type provided by the user. Used to find domain-specific +// sensitive information configurable to the data in question. +message CustomInfoType { +  // Custom information type based on a dictionary of words or phrases. This can +  // be used to match sensitive information specific to the data, such as a list +  // of employee IDs or job titles. +  // +  // Dictionary words are case-insensitive and all characters other than letters +  // and digits in the unicode [Basic Multilingual +  // Plane](https://en.wikipedia.org/wiki/Plane_%28Unicode%29#Basic_Multilingual_Plane) +  // will be replaced with whitespace when scanning for matches, so the +  // dictionary phrase "Sam Johnson" will match all three phrases "sam johnson", +  // "Sam, Johnson", and "Sam (Johnson)". Additionally, the characters +  // surrounding any match must be of a different type than the adjacent +  // characters within the word, so letters must be next to non-letters and +  // digits next to non-digits. For example, the dictionary word "jen" will +  // match the first three letters of the text "jen123" but will return no +  // matches for "jennifer". +  // +  // Dictionary words containing a large number of characters that are not +  // letters or digits may result in unexpected findings because such characters +  // are treated as whitespace. The +  // [limits](https://cloud.google.com/dlp/limits) page contains details about +  // the size limits of dictionaries. For dictionaries that do not fit within +  // these constraints, consider using `LargeCustomDictionaryConfig` in the +  // `StoredInfoType` API. +  message Dictionary { +    // Message defining a list of words or phrases to search for in the data. +    message WordList { +      // Words or phrases defining the dictionary. The dictionary must contain +      // at least one phrase and every phrase must contain at least 2 characters +      // that are letters or digits. [required] +      repeated string words = 1; +    } + +    oneof source { +      // List of words or phrases to search for. +      WordList word_list = 1; + +      // Newline-delimited file of words in Cloud Storage. Only a single file +      // is accepted. +      CloudStoragePath cloud_storage_path = 3; +    } +  } + +  // Message defining a custom regular expression. +  message Regex { +    // Pattern defining the regular expression. Its syntax +    // (https://github.com/google/re2/wiki/Syntax) can be found under the +    // google/re2 repository on GitHub. +    string pattern = 1; + +    // The index of the submatch to extract as findings. When not +    // specified, the entire match is returned. No more than 3 may be included. +    repeated int32 group_indexes = 2; +  } + +  // Message for detecting output from deidentification transformations +  // such as +  // [`CryptoReplaceFfxFpeConfig`](https://cloud.google.com/dlp/docs/reference/rest/v2/organizations.deidentifyTemplates#cryptoreplaceffxfpeconfig). +  // These types of transformations are +  // those that perform pseudonymization, thereby producing a "surrogate" as +  // output. This should be used in conjunction with a field on the +  // transformation such as `surrogate_info_type`. This CustomInfoType does +  // not support the use of `detection_rules`. +  message SurrogateType { + +  } + +  // Deprecated; use `InspectionRuleSet` instead. Rule for modifying a +  // `CustomInfoType` to alter behavior under certain circumstances, depending +  // on the specific details of the rule. Not supported for the `surrogate_type` +  // custom infoType. +  message DetectionRule { +    // Message for specifying a window around a finding to apply a detection +    // rule. +    message Proximity { +      // Number of characters before the finding to consider. For tabular data, +      // if you want to modify the likelihood of an entire column of findngs, +      // set this to 1. For more information, see +      // [Hotword example: Set the match likelihood of a table column] +      // (https://cloud.google.com/dlp/docs/creating-custom-infotypes-likelihood#match-column-values). +      int32 window_before = 1; + +      // Number of characters after the finding to consider. +      int32 window_after = 2; +    } + +    // Message for specifying an adjustment to the likelihood of a finding as +    // part of a detection rule. +    message LikelihoodAdjustment { +      oneof adjustment { +        // Set the likelihood of a finding to a fixed value. +        Likelihood fixed_likelihood = 1; + +        // Increase or decrease the likelihood by the specified number of +        // levels. For example, if a finding would be `POSSIBLE` without the +        // detection rule and `relative_likelihood` is 1, then it is upgraded to +        // `LIKELY`, while a value of -1 would downgrade it to `UNLIKELY`. +        // Likelihood may never drop below `VERY_UNLIKELY` or exceed +        // `VERY_LIKELY`, so applying an adjustment of 1 followed by an +        // adjustment of -1 when base likelihood is `VERY_LIKELY` will result in +        // a final likelihood of `LIKELY`. +        int32 relative_likelihood = 2; +      } +    } + +    // The rule that adjusts the likelihood of findings within a certain +    // proximity of hotwords. +    message HotwordRule { +      // Regular expression pattern defining what qualifies as a hotword. +      Regex hotword_regex = 1; + +      // Range of characters within which the entire hotword must reside. +      // The total length of the window cannot exceed 1000 characters. +      // The finding itself will be included in the window, so that hotwords can +      // be used to match substrings of the finding itself. Suppose you +      // want Cloud DLP to promote the likelihood of the phone number +      // regex "\(\d{3}\) \d{3}-\d{4}" if the area code is known to be the +      // area code of a company's office. In this case, use the hotword regex +      // "\(xxx\)", where "xxx" is the area code in question. +      // +      // For tabular data, if you want to modify the likelihood of an entire +      // column of findngs, see +      // [Hotword example: Set the match likelihood of a table column] +      // (https://cloud.google.com/dlp/docs/creating-custom-infotypes-likelihood#match-column-values). +      Proximity proximity = 2; + +      // Likelihood adjustment to apply to all matching findings. +      LikelihoodAdjustment likelihood_adjustment = 3; +    } + +    oneof type { +      // Hotword-based detection rule. +      HotwordRule hotword_rule = 1; +    } +  } + +  enum ExclusionType { +    // A finding of this custom info type will not be excluded from results. +    EXCLUSION_TYPE_UNSPECIFIED = 0; + +    // A finding of this custom info type will be excluded from final results, +    // but can still affect rule execution. +    EXCLUSION_TYPE_EXCLUDE = 1; +  } + +  // CustomInfoType can either be a new infoType, or an extension of built-in +  // infoType, when the name matches one of existing infoTypes and that infoType +  // is specified in `InspectContent.info_types` field. Specifying the latter +  // adds findings to the one detected by the system. If built-in info type is +  // not specified in `InspectContent.info_types` list then the name is treated +  // as a custom info type. +  InfoType info_type = 1; + +  // Likelihood to return for this CustomInfoType. This base value can be +  // altered by a detection rule if the finding meets the criteria specified by +  // the rule. Defaults to `VERY_LIKELY` if not specified. +  Likelihood likelihood = 6; + +  oneof type { +    // A list of phrases to detect as a CustomInfoType. +    Dictionary dictionary = 2; + +    // Regular expression based CustomInfoType. +    Regex regex = 3; + +    // Message for detecting output from deidentification transformations that +    // support reversing. +    SurrogateType surrogate_type = 4; + +    // Load an existing `StoredInfoType` resource for use in +    // `InspectDataSource`. Not currently supported in `InspectContent`. +    StoredType stored_type = 5; +  } + +  // Set of detection rules to apply to all findings of this CustomInfoType. +  // Rules are applied in order that they are specified. Not supported for the +  // `surrogate_type` CustomInfoType. +  repeated DetectionRule detection_rules = 7; + +  // If set to EXCLUSION_TYPE_EXCLUDE this infoType will not cause a finding +  // to be returned. It still can be used for rules matching. +  ExclusionType exclusion_type = 8; +} + +// General identifier of a data field in a storage service. +message FieldId { +  // Name describing the field. +  string name = 1; +} + +// Datastore partition ID. +// A partition ID identifies a grouping of entities. The grouping is always +// by project and namespace, however the namespace ID may be empty. +// +// A partition ID contains several dimensions: +// project ID and namespace ID. +message PartitionId { +  // The ID of the project to which the entities belong. +  string project_id = 2; + +  // If not empty, the ID of the namespace to which the entities belong. +  string namespace_id = 4; +} + +// A representation of a Datastore kind. +message KindExpression { +  // The name of the kind. +  string name = 1; +} + +// Options defining a data set within Google Cloud Datastore. +message DatastoreOptions { +  // A partition ID identifies a grouping of entities. The grouping is always +  // by project and namespace, however the namespace ID may be empty. +  PartitionId partition_id = 1; + +  // The kind to process. +  KindExpression kind = 2; +} + +// Definitions of file type groups to scan. New types will be added to this +// list. +enum FileType { +  // Includes all files. +  FILE_TYPE_UNSPECIFIED = 0; + +  // Includes all file extensions not covered by another entry. Binary +  // scanning attempts to convert the content of the file to utf_8 to scan +  // the file. +  // If you wish to avoid this fall back, specify one or more of the other +  // FileType's in your storage scan. +  BINARY_FILE = 1; + +  // Included file extensions: +  //   asc,asp, aspx, brf, c, cc,cfm, cgi, cpp, csv, cxx, c++, cs, css, dart, +  //   dat, dot, eml,, epbub, ged, go, h, hh, hpp, hxx, h++, hs, html, htm, +  //   mkd, markdown, m, ml, mli, perl, pl, plist, pm, php, phtml, pht, +  //   properties, py, pyw, rb, rbw, rs, rss,  rc, scala, sh, sql, swift, tex, +  //   shtml, shtm, xhtml, lhs, ics, ini, java, js, json, kix, kml, ocaml, md, +  //   txt, text, tsv, vb, vcard, vcs, wml, xcodeproj, xml, xsl, xsd, yml, yaml. +  TEXT_FILE = 2; + +  // Included file extensions: +  //   bmp, gif, jpg, jpeg, jpe, png. +  // bytes_limit_per_file has no effect on image files. +  // Image inspection is restricted to 'global', 'us', 'asia', and 'europe'. +  IMAGE = 3; + +  // Word files >30 MB will be scanned as binary files. +  // Included file extensions: +  //   docx, dotx, docm, dotm +  WORD = 5; + +  // PDF files >30 MB will be scanned as binary files. +  // Included file extensions: +  //   pdf +  PDF = 6; + +  // Included file extensions: +  //   avro +  AVRO = 7; + +  // Included file extensions: +  //   csv +  CSV = 8; + +  // Included file extensions: +  //   tsv +  TSV = 9; + +  // Powerpoint files >30 MB will be scanned as binary files. +  // Included file extensions: +  //   pptx, pptm, potx, potm, pot +  POWERPOINT = 11; + +  // Excel files >30 MB will be scanned as binary files. +  // Included file extensions: +  //   xlsx, xlsm, xltx, xltm +  EXCEL = 12; +} + +// Message representing a set of files in a Cloud Storage bucket. Regular +// expressions are used to allow fine-grained control over which files in the +// bucket to include. +// +// Included files are those that match at least one item in `include_regex` and +// do not match any items in `exclude_regex`. Note that a file that matches +// items from both lists will _not_ be included. For a match to occur, the +// entire file path (i.e., everything in the url after the bucket name) must +// match the regular expression. +// +// For example, given the input `{bucket_name: "mybucket", include_regex: +// ["directory1/.*"], exclude_regex: +// ["directory1/excluded.*"]}`: +// +// * `gs://mybucket/directory1/myfile` will be included +// * `gs://mybucket/directory1/directory2/myfile` will be included (`.*` matches +// across `/`) +// * `gs://mybucket/directory0/directory1/myfile` will _not_ be included (the +// full path doesn't match any items in `include_regex`) +// * `gs://mybucket/directory1/excludedfile` will _not_ be included (the path +// matches an item in `exclude_regex`) +// +// If `include_regex` is left empty, it will match all files by default +// (this is equivalent to setting `include_regex: [".*"]`). +// +// Some other common use cases: +// +// * `{bucket_name: "mybucket", exclude_regex: [".*\.pdf"]}` will include all +// files in `mybucket` except for .pdf files +// * `{bucket_name: "mybucket", include_regex: ["directory/[^/]+"]}` will +// include all files directly under `gs://mybucket/directory/`, without matching +// across `/` +message CloudStorageRegexFileSet { +  // The name of a Cloud Storage bucket. Required. +  string bucket_name = 1; + +  // A list of regular expressions matching file paths to include. All files in +  // the bucket that match at least one of these regular expressions will be +  // included in the set of files, except for those that also match an item in +  // `exclude_regex`. Leaving this field empty will match all files by default +  // (this is equivalent to including `.*` in the list). +  // +  // Regular expressions use RE2 +  // [syntax](https://github.com/google/re2/wiki/Syntax); a guide can be found +  // under the google/re2 repository on GitHub. +  repeated string include_regex = 2; + +  // A list of regular expressions matching file paths to exclude. All files in +  // the bucket that match at least one of these regular expressions will be +  // excluded from the scan. +  // +  // Regular expressions use RE2 +  // [syntax](https://github.com/google/re2/wiki/Syntax); a guide can be found +  // under the google/re2 repository on GitHub. +  repeated string exclude_regex = 3; +} + +// Options defining a file or a set of files within a Cloud Storage +// bucket. +message CloudStorageOptions { +  // Set of files to scan. +  message FileSet { +    // The Cloud Storage url of the file(s) to scan, in the format +    // `gs://<bucket>/<path>`. Trailing wildcard in the path is allowed. +    // +    // If the url ends in a trailing slash, the bucket or directory represented +    // by the url will be scanned non-recursively (content in sub-directories +    // will not be scanned). This means that `gs://mybucket/` is equivalent to +    // `gs://mybucket/*`, and `gs://mybucket/directory/` is equivalent to +    // `gs://mybucket/directory/*`. +    // +    // Exactly one of `url` or `regex_file_set` must be set. +    string url = 1; + +    // The regex-filtered set of files to scan. Exactly one of `url` or +    // `regex_file_set` must be set. +    CloudStorageRegexFileSet regex_file_set = 2; +  } + +  // How to sample bytes if not all bytes are scanned. Meaningful only when used +  // in conjunction with bytes_limit_per_file. If not specified, scanning would +  // start from the top. +  enum SampleMethod { +    SAMPLE_METHOD_UNSPECIFIED = 0; + +    // Scan from the top (default). +    TOP = 1; + +    // For each file larger than bytes_limit_per_file, randomly pick the offset +    // to start scanning. The scanned bytes are contiguous. +    RANDOM_START = 2; +  } + +  // The set of one or more files to scan. +  FileSet file_set = 1; + +  // Max number of bytes to scan from a file. If a scanned file's size is bigger +  // than this value then the rest of the bytes are omitted. Only one +  // of bytes_limit_per_file and bytes_limit_per_file_percent can be specified. +  // Cannot be set if de-identification is requested. +  int64 bytes_limit_per_file = 4; + +  // Max percentage of bytes to scan from a file. The rest are omitted. The +  // number of bytes scanned is rounded down. Must be between 0 and 100, +  // inclusively. Both 0 and 100 means no limit. Defaults to 0. Only one +  // of bytes_limit_per_file and bytes_limit_per_file_percent can be specified. +  // Cannot be set if de-identification is requested. +  int32 bytes_limit_per_file_percent = 8; + +  // List of file type groups to include in the scan. +  // If empty, all files are scanned and available data format processors +  // are applied. In addition, the binary content of the selected files +  // is always scanned as well. +  // Images are scanned only as binary if the specified region +  // does not support image inspection and no file_types were specified. +  // Image inspection is restricted to 'global', 'us', 'asia', and 'europe'. +  repeated FileType file_types = 5; + +  SampleMethod sample_method = 6; + +  // Limits the number of files to scan to this percentage of the input FileSet. +  // Number of files scanned is rounded down. Must be between 0 and 100, +  // inclusively. Both 0 and 100 means no limit. Defaults to 0. +  int32 files_limit_percent = 7; +} + +// Message representing a set of files in Cloud Storage. +message CloudStorageFileSet { +  // The url, in the format `gs://<bucket>/<path>`. Trailing wildcard in the +  // path is allowed. +  string url = 1; +} + +// Message representing a single file or path in Cloud Storage. +message CloudStoragePath { +  // A url representing a file or path (no wildcards) in Cloud Storage. +  // Example: gs://[BUCKET_NAME]/dictionary.txt +  string path = 1; +} + +// Options defining BigQuery table and row identifiers. +message BigQueryOptions { +  // How to sample rows if not all rows are scanned. Meaningful only when used +  // in conjunction with either rows_limit or rows_limit_percent. If not +  // specified, rows are scanned in the order BigQuery reads them. +  enum SampleMethod { +    SAMPLE_METHOD_UNSPECIFIED = 0; + +    // Scan groups of rows in the order BigQuery provides (default). Multiple +    // groups of rows may be scanned in parallel, so results may not appear in +    // the same order the rows are read. +    TOP = 1; + +    // Randomly pick groups of rows to scan. +    RANDOM_START = 2; +  } + +  // Complete BigQuery table reference. +  BigQueryTable table_reference = 1; + +  // Table fields that may uniquely identify a row within the table. When +  // `actions.saveFindings.outputConfig.table` is specified, the values of +  // columns specified here are available in the output table under +  // `location.content_locations.record_location.record_key.id_values`. Nested +  // fields such as `person.birthdate.year` are allowed. +  repeated FieldId identifying_fields = 2; + +  // Max number of rows to scan. If the table has more rows than this value, the +  // rest of the rows are omitted. If not set, or if set to 0, all rows will be +  // scanned. Only one of rows_limit and rows_limit_percent can be specified. +  // Cannot be used in conjunction with TimespanConfig. +  int64 rows_limit = 3; + +  // Max percentage of rows to scan. The rest are omitted. The number of rows +  // scanned is rounded down. Must be between 0 and 100, inclusively. Both 0 and +  // 100 means no limit. Defaults to 0. Only one of rows_limit and +  // rows_limit_percent can be specified. Cannot be used in conjunction with +  // TimespanConfig. +  int32 rows_limit_percent = 6; + +  SampleMethod sample_method = 4; + +  // References to fields excluded from scanning. This allows you to skip +  // inspection of entire columns which you know have no findings. +  repeated FieldId excluded_fields = 5; + +  // Limit scanning only to these fields. +  repeated FieldId included_fields = 7; +} + +// Shared message indicating Cloud storage type. +message StorageConfig { +  // Configuration of the timespan of the items to include in scanning. +  // Currently only supported when inspecting Cloud Storage and BigQuery. +  message TimespanConfig { +    // Exclude files, tables, or rows older than this value. +    // If not set, no lower time limit is applied. +    google.protobuf.Timestamp start_time = 1; + +    // Exclude files, tables, or rows newer than this value. +    // If not set, no upper time limit is applied. +    google.protobuf.Timestamp end_time = 2; + +    // Specification of the field containing the timestamp of scanned items. +    // Used for data sources like Datastore and BigQuery. +    // +    // <b>For BigQuery</b> +    // +    // If this value is not specified and the table was modified between the +    // given start and end times, the entire table will be scanned. If this +    // value is specified, then rows are filtered based on the given start and +    // end times. Rows with a `NULL` value in the provided BigQuery column are +    // skipped. +    // Valid data types of the provided BigQuery column are: `INTEGER`, `DATE`, +    // `TIMESTAMP`, and `DATETIME`. +    // +    // If your BigQuery table is [partitioned at ingestion +    // time](https://cloud.google.com/bigquery/docs/partitioned-tables#ingestion_time), +    // you can use any of the following pseudo-columns as your timestamp field. +    // When used with Cloud DLP, these pseudo-column names are case sensitive. +    // +    // <ul> +    // <li><code>_PARTITIONTIME</code></li> +    // <li><code>_PARTITIONDATE</code></li> +    // <li><code>_PARTITION_LOAD_TIME</code></li> +    // </ul> +    // +    // <b>For Datastore</b> +    // +    // If this value is specified, then entities are filtered based on the given +    // start and end times. If an entity does not contain the provided timestamp +    // property or contains empty or invalid values, then it is included. +    // Valid data types of the provided timestamp property are: `TIMESTAMP`. +    // +    // See the +    // [known issue](https://cloud.google.com/dlp/docs/known-issues#bq-timespan) +    // related to this operation. +    FieldId timestamp_field = 3; + +    // When the job is started by a JobTrigger we will automatically figure out +    // a valid start_time to avoid scanning files that have not been modified +    // since the last time the JobTrigger executed. This will be based on the +    // time of the execution of the last run of the JobTrigger or the timespan +    // end_time used in the last run of the JobTrigger. +    bool enable_auto_population_of_timespan_config = 4; +  } + +  oneof type { +    // Google Cloud Datastore options. +    DatastoreOptions datastore_options = 2; + +    // Cloud Storage options. +    CloudStorageOptions cloud_storage_options = 3; + +    // BigQuery options. +    BigQueryOptions big_query_options = 4; + +    // Hybrid inspection options. +    HybridOptions hybrid_options = 9; +  } + +  TimespanConfig timespan_config = 6; +} + +// Configuration to control jobs where the content being inspected is outside +// of Google Cloud Platform. +message HybridOptions { +  // A short description of where the data is coming from. Will be stored once +  // in the job. 256 max length. +  string description = 1; + +  // These are labels that each inspection request must include within their +  // 'finding_labels' map. Request may contain others, but any missing one of +  // these will be rejected. +  // +  // Label keys must be between 1 and 63 characters long and must conform +  // to the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`. +  // +  // No more than 10 keys can be required. +  repeated string required_finding_label_keys = 2; + +  // To organize findings, these labels will be added to each finding. +  // +  // Label keys must be between 1 and 63 characters long and must conform +  // to the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`. +  // +  // Label values must be between 0 and 63 characters long and must conform +  // to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`. +  // +  // No more than 10 labels can be associated with a given finding. +  // +  // Examples: +  // * `"environment" : "production"` +  // * `"pipeline" : "etl"` +  map<string, string> labels = 3; + +  // If the container is a table, additional information to make findings +  // meaningful such as the columns that are primary keys. +  TableOptions table_options = 4; +} + +// Row key for identifying a record in BigQuery table. +message BigQueryKey { +  // Complete BigQuery table reference. +  BigQueryTable table_reference = 1; + +  // Row number inferred at the time the table was scanned. This value is +  // nondeterministic, cannot be queried, and may be null for inspection +  // jobs. To locate findings within a table, specify +  // `inspect_job.storage_config.big_query_options.identifying_fields` in +  // `CreateDlpJobRequest`. +  int64 row_number = 2; +} + +// Record key for a finding in Cloud Datastore. +message DatastoreKey { +  // Datastore entity key. +  Key entity_key = 1; +} + +// A unique identifier for a Datastore entity. +// If a key's partition ID or any of its path kinds or names are +// reserved/read-only, the key is reserved/read-only. +// A reserved/read-only key is forbidden in certain documented contexts. +message Key { +  // A (kind, ID/name) pair used to construct a key path. +  // +  // If either name or ID is set, the element is complete. +  // If neither is set, the element is incomplete. +  message PathElement { +    // The kind of the entity. +    // A kind matching regex `__.*__` is reserved/read-only. +    // A kind must not contain more than 1500 bytes when UTF-8 encoded. +    // Cannot be `""`. +    string kind = 1; + +    // The type of ID. +    oneof id_type { +      // The auto-allocated ID of the entity. +      // Never equal to zero. Values less than zero are discouraged and may not +      // be supported in the future. +      int64 id = 2; + +      // The name of the entity. +      // A name matching regex `__.*__` is reserved/read-only. +      // A name must not be more than 1500 bytes when UTF-8 encoded. +      // Cannot be `""`. +      string name = 3; +    } +  } + +  // Entities are partitioned into subsets, currently identified by a project +  // ID and namespace ID. +  // Queries are scoped to a single partition. +  PartitionId partition_id = 1; + +  // The entity path. +  // An entity path consists of one or more elements composed of a kind and a +  // string or numerical identifier, which identify entities. The first +  // element identifies a _root entity_, the second element identifies +  // a _child_ of the root entity, the third element identifies a child of the +  // second entity, and so forth. The entities identified by all prefixes of +  // the path are called the element's _ancestors_. +  // +  // A path can never be empty, and a path can have at most 100 elements. +  repeated PathElement path = 2; +} + +// Message for a unique key indicating a record that contains a finding. +message RecordKey { +  oneof type { +    DatastoreKey datastore_key = 2; + +    BigQueryKey big_query_key = 3; +  } + +  // Values of identifying columns in the given row. Order of values matches +  // the order of `identifying_fields` specified in the scanning request. +  repeated string id_values = 5; +} + +// Message defining the location of a BigQuery table. A table is uniquely +// identified  by its project_id, dataset_id, and table_name. Within a query +// a table is often referenced with a string in the format of: +// `<project_id>:<dataset_id>.<table_id>` or +// `<project_id>.<dataset_id>.<table_id>`. +message BigQueryTable { +  // The Google Cloud Platform project ID of the project containing the table. +  // If omitted, project ID is inferred from the API call. +  string project_id = 1; + +  // Dataset ID of the table. +  string dataset_id = 2; + +  // Name of the table. +  string table_id = 3; +} + +// Message defining a field of a BigQuery table. +message BigQueryField { +  // Source table of the field. +  BigQueryTable table = 1; + +  // Designated field in the BigQuery table. +  FieldId field = 2; +} + +// An entity in a dataset is a field or set of fields that correspond to a +// single person. For example, in medical records the `EntityId` might be a +// patient identifier, or for financial records it might be an account +// identifier. This message is used when generalizations or analysis must take +// into account that multiple rows correspond to the same entity. +message EntityId { +  // Composite key indicating which field contains the entity identifier. +  FieldId field = 1; +} + +// Instructions regarding the table content being inspected. +message TableOptions { +  // The columns that are the primary keys for table objects included in +  // ContentItem. A copy of this cell's value will stored alongside alongside +  // each finding so that the finding can be traced to the specific row it came +  // from. No more than 3 may be provided. +  repeated FieldId identifying_fields = 1; +}  | 
