blob: 5022524852a006f00958857ea53408ad8d1236c7 [file] [log] [blame]
// Copyright 2023 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 = "cloud.google.com/go/dlp/apiv2/dlppb;dlppb";
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/sensitive-data-protection/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/sensitive-data-protection/docs/inspecting-images
// and
// https://cloud.google.com/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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 config for discovery to scan and profile storage.
rpc CreateDiscoveryConfig(CreateDiscoveryConfigRequest)
returns (DiscoveryConfig) {
option (google.api.http) = {
post: "/v2/{parent=projects/*/locations/*}/discoveryConfigs"
body: "*"
additional_bindings {
post: "/v2/{parent=organizations/*/locations/*}/discoveryConfigs"
body: "*"
}
};
option (google.api.method_signature) = "parent,discovery_config";
}
// Updates a discovery configuration.
rpc UpdateDiscoveryConfig(UpdateDiscoveryConfigRequest)
returns (DiscoveryConfig) {
option (google.api.http) = {
patch: "/v2/{name=projects/*/locations/*/discoveryConfigs/*}"
body: "*"
additional_bindings {
patch: "/v2/{name=organizations/*/locations/*/discoveryConfigs/*}"
body: "*"
}
};
option (google.api.method_signature) = "name,discovery_config,update_mask";
}
// Gets a discovery configuration.
rpc GetDiscoveryConfig(GetDiscoveryConfigRequest) returns (DiscoveryConfig) {
option (google.api.http) = {
get: "/v2/{name=projects/*/locations/*/discoveryConfigs/*}"
additional_bindings {
get: "/v2/{name=organizations/*/locations/*/discoveryConfigs/*}"
}
};
option (google.api.method_signature) = "name";
}
// Lists discovery configurations.
rpc ListDiscoveryConfigs(ListDiscoveryConfigsRequest)
returns (ListDiscoveryConfigsResponse) {
option (google.api.http) = {
get: "/v2/{parent=projects/*/locations/*}/discoveryConfigs"
additional_bindings {
get: "/v2/{parent=organizations/*/locations/*}/discoveryConfigs"
}
};
option (google.api.method_signature) = "parent";
}
// Deletes a discovery configuration.
rpc DeleteDiscoveryConfig(DeleteDiscoveryConfigRequest)
returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v2/{name=projects/*/locations/*/discoveryConfigs/*}"
additional_bindings {
delete: "/v2/{name=organizations/*/locations/*/discoveryConfigs/*}"
}
};
option (google.api.method_signature) = "name";
}
// Creates a new job to inspect storage or calculate risk metrics.
// See
// https://cloud.google.com/sensitive-data-protection/docs/inspecting-storage
// and
// https://cloud.google.com/sensitive-data-protection/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/sensitive-data-protection/docs/inspecting-storage
// and
// https://cloud.google.com/sensitive-data-protection/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/sensitive-data-protection/docs/inspecting-storage
// and
// https://cloud.google.com/sensitive-data-protection/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/sensitive-data-protection/docs/inspecting-storage
// and
// https://cloud.google.com/sensitive-data-protection/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/sensitive-data-protection/docs/inspecting-storage
// and
// https://cloud.google.com/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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";
}
// Lists data profiles for an organization.
rpc ListProjectDataProfiles(ListProjectDataProfilesRequest)
returns (ListProjectDataProfilesResponse) {
option (google.api.http) = {
get: "/v2/{parent=organizations/*/locations/*}/projectDataProfiles"
additional_bindings {
get: "/v2/{parent=projects/*/locations/*}/projectDataProfiles"
}
};
option (google.api.method_signature) = "parent";
}
// Lists data profiles for an organization.
rpc ListTableDataProfiles(ListTableDataProfilesRequest)
returns (ListTableDataProfilesResponse) {
option (google.api.http) = {
get: "/v2/{parent=organizations/*/locations/*}/tableDataProfiles"
additional_bindings {
get: "/v2/{parent=projects/*/locations/*}/tableDataProfiles"
}
};
option (google.api.method_signature) = "parent";
}
// Lists data profiles for an organization.
rpc ListColumnDataProfiles(ListColumnDataProfilesRequest)
returns (ListColumnDataProfilesResponse) {
option (google.api.http) = {
get: "/v2/{parent=organizations/*/locations/*}/columnDataProfiles"
additional_bindings {
get: "/v2/{parent=projects/*/locations/*}/columnDataProfiles"
}
};
option (google.api.method_signature) = "parent";
}
// Gets a project data profile.
rpc GetProjectDataProfile(GetProjectDataProfileRequest)
returns (ProjectDataProfile) {
option (google.api.http) = {
get: "/v2/{name=organizations/*/locations/*/projectDataProfiles/*}"
additional_bindings {
get: "/v2/{name=projects/*/locations/*/projectDataProfiles/*}"
}
};
option (google.api.method_signature) = "name";
}
// Gets a table data profile.
rpc GetTableDataProfile(GetTableDataProfileRequest)
returns (TableDataProfile) {
option (google.api.http) = {
get: "/v2/{name=organizations/*/locations/*/tableDataProfiles/*}"
additional_bindings {
get: "/v2/{name=projects/*/locations/*/tableDataProfiles/*}"
}
};
option (google.api.method_signature) = "name";
}
// Gets a column data profile.
rpc GetColumnDataProfile(GetColumnDataProfileRequest)
returns (ColumnDataProfile) {
option (google.api.http) = {
get: "/v2/{name=organizations/*/locations/*/columnDataProfiles/*}"
additional_bindings {
get: "/v2/{name=projects/*/locations/*/columnDataProfiles/*}"
}
};
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 "[email protected]" to generate only a single
// finding, namely email address.
repeated InfoType info_types = 1;
}
// The rule to exclude findings based on a hotword. For record inspection of
// tables, column names are considered hotwords. An example of this is to
// exclude a finding if it belongs to a BigQuery column that matches a specific
// pattern.
message ExcludeByHotword {
// Regular expression pattern defining what qualifies as a hotword.
CustomInfoType.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 windowBefore property in proximity should be set to 1 if the hotword
// needs to be included in a column header.
CustomInfoType.DetectionRule.Proximity proximity = 2;
}
// 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;
// Drop if the hotword rule is contained in the proximate context. For
// tabular data, the context includes the column name.
ExcludeByHotword exclude_by_hotword = 5;
}
// 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 for setting a minimum likelihood per infotype. Used to
// customize the minimum likelihood level for specific infotypes in the
// request. For example, use this if you want to lower the precision for
// PERSON_NAME without lowering the precision for the other infotypes in the
// request.
message InfoTypeLikelihood {
// Type of information the likelihood threshold applies to. Only one
// likelihood per info_type should be provided. If InfoTypeLikelihood does
// not have an info_type, the configuration fails.
InfoType info_type = 1;
// Only returns findings equal to or above this threshold. This field is
// required or else the configuration fails.
Likelihood min_likelihood = 2;
}
// 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 are returned for each item scanned.
//
// When set within an
// [InspectContentRequest][google.privacy.dlp.v2.InspectContentRequest],
// this field is ignored.
//
// This value isn't a hard limit. If the number of findings for an item
// reaches this limit, the inspection of that item ends gradually, not
// abruptly. Therefore, the actual number of findings that Cloud DLP returns
// for the item can be multiple times higher than this value.
int32 max_findings_per_item = 1;
// Max number of findings that are returned per request or job.
//
// If you set this field in an
// [InspectContentRequest][google.privacy.dlp.v2.InspectContentRequest], the
// resulting maximum value is the value that you set or 3,000, whichever is
// lower.
//
// This value isn't a hard limit. If an inspection reaches this limit, the
// inspection ends gradually, not abruptly. Therefore, the actual number of
// findings that Cloud DLP returns can be multiple times higher than this
// value.
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/sensitive-data-protection/docs/infotypes-reference.
//
// When no InfoTypes or CustomInfoTypes are specified in a request, the
// system may automatically choose a default list of detectors to run, which
// may change over time.
//
// 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 to or above this threshold. The default is
// POSSIBLE.
//
// In general, the highest likelihood setting yields the fewest findings in
// results and the lowest chance of a false positive. For more information,
// see [Match
// likelihood](https://cloud.google.com/sensitive-data-protection/docs/likelihood).
Likelihood min_likelihood = 2;
// Minimum likelihood per infotype. For each infotype, a user can specify a
// minimum likelihood. The system only returns a finding if its likelihood is
// above this threshold. If this field is not set, the system uses the
// InspectConfig min_likelihood.
repeated InfoTypeLikelihood min_likelihood_per_info_type = 11;
// 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.
//
// When set within an
// [InspectJobConfig][google.privacy.dlp.v2.InspectJobConfig], the specified
// maximum values aren't hard limits. If an inspection job reaches these
// limits, the job ends gradually, not abruptly. Therefore, the actual number
// of findings that Cloud DLP returns can be multiple times higher than these
// maximum values.
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/sensitive-data-protection/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/sensitive-data-protection/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;
}
// Type of 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/sensitive-data-protection/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/sensitive-data-protection/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 {
// Label name.
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/sensitive-data-protection/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/sensitive-data-protection/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.
//
// This value must be of type
// [Table][google.privacy.dlp.v2.Table] if your
// [deidentify_config][google.privacy.dlp.v2.DeidentifyContentRequest.deidentify_config]
// is a
// [RecordTransformations][google.privacy.dlp.v2.RecordTransformations]
// object.
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/sensitive-data-protection/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/sensitive-data-protection/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;
}
// The schema of data to be saved to the BigQuery table when the
// `DataProfileAction` is enabled.
message DataProfileBigQueryRowSchema {
// Data profile type.
oneof data_profile {
// Table data profile column
TableDataProfile table_profile = 1;
// Column data profile column
ColumnDataProfile column_profile = 2;
}
}
// 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;
}
// The results of an [Action][google.privacy.dlp.v2.Action].
message ActionDetails {
// Summary of what occurred in the actions.
oneof details {
// Outcome of a de-identification action.
DeidentifyDataSourceDetails deidentify_details = 1;
}
}
// Summary of what was modified during a transformation.
message DeidentifyDataSourceStats {
// Total size in bytes that were transformed in some way.
int64 transformed_bytes = 1;
// Number of successfully applied transformations.
int64 transformation_count = 2;
// Number of errors encountered while trying to apply transformations.
int64 transformation_error_count = 3;
}
// The results of a [Deidentify][google.privacy.dlp.v2.Action.Deidentify] action
// from an inspect job.
message DeidentifyDataSourceDetails {
// De-identification options.
message RequestedDeidentifyOptions {
// Snapshot of the state of the `DeidentifyTemplate` from the
// [Deidentify][google.privacy.dlp.v2.Action.Deidentify] action at the time
// this job was run.
DeidentifyTemplate snapshot_deidentify_template = 1;
// Snapshot of the state of the structured `DeidentifyTemplate` from the
// `Deidentify` action at the time this job was run.
DeidentifyTemplate snapshot_structured_deidentify_template = 2;
// Snapshot of the state of the image transformation `DeidentifyTemplate`
// from the `Deidentify` action at the time this job was run.
DeidentifyTemplate snapshot_image_redact_template = 3;
}
// De-identification config used for the request.
RequestedDeidentifyOptions requested_options = 1;
// Stats about the de-identification operation.
DeidentifyDataSourceStats deidentify_stats = 2;
}
// 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;
// The default sensitivity of the infoType.
SensitivityScore sensitivity_score = 11;
}
// 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 Croatia.
CROATIA = 42;
// 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 New Zealand.
NEW_ZEALAND = 41;
// 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 Switzerland.
SWITZERLAND = 43;
// 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;
}
// Categories of infotypes.
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/sensitive-data-protection/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 {
// Type of transformation
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 {}
// Part of the image to transform.
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;
}
// List of transforms to make.
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 {
// Type of transformation.
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/sensitive-data-protection/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 {
// Type of dictionary.
oneof type {
// A list of words to select from for random replacement. The
// [limits](https://cloud.google.com/sensitive-data-protection/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;
}
// Type of characters to skip.
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&mdash;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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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 {
// Location type.
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;
}
// The field in a record to transform.
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;
}
// The outcome of a transformation.
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 {
// Unused.
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 {
// Unused.
TRANSFORM_UNKNOWN_CONTAINER = 0;
// Body of a file.
TRANSFORM_BODY = 1;
// Metadata for a file.
TRANSFORM_METADATA = 2;
// A table.
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 {
// Type of 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/sensitive-data-protection/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/sensitive-data-protection/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. List includes the oldest timestamp and the
// last 9 timestamps.
repeated google.protobuf.Timestamp timestamps = 2;
}
// Contains a configuration to make dlp api calls on a repeating basis.
// See
// https://cloud.google.com/sensitive-data-protection/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 {
// What event needs to occur for a new job to be started.
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/sensitive-data-protection/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/sensitive-data-protection/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 [Security Command
// Center](https://cloud.google.com/security-command-center). This action is
// available for only projects that belong to an organization. This action
// publishes the count of finding instances and their infoTypes. The summary
// of findings are persisted in Security Command Center and are governed by
// [service-specific policies for Security Command
// Center](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;
// Where to store the output.
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 {}
// Extra events to execute after the job has finished.
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;
// 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).
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/sensitive-data-protection/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/sensitive-data-protection/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 the previous call
// to `ListInspectTemplates`.
string page_token = 2;
// Size of the page. This value 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. The
// 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 the
// 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/sensitive-data-protection/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 CreateDiscoveryConfig.
message CreateDiscoveryConfigRequest {
// Required. Parent resource name.
//
// The format of this value is as follows:
// `projects/`<var>PROJECT_ID</var>`/locations/`<var>LOCATION_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/DiscoveryConfig"
}
];
// Required. The DiscoveryConfig to create.
DiscoveryConfig discovery_config = 2 [(google.api.field_behavior) = REQUIRED];
// The config 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 config_id = 3;
}
// Request message for UpdateDiscoveryConfig.
message UpdateDiscoveryConfigRequest {
// Required. Resource name of the project and the configuration, for example
// `projects/dlp-test-project/discoveryConfigs/53234423`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dlp.googleapis.com/DiscoveryConfig"
}
];
// Required. New DiscoveryConfig value.
DiscoveryConfig discovery_config = 2 [(google.api.field_behavior) = REQUIRED];
// Mask to control which fields get updated.
google.protobuf.FieldMask update_mask = 3;
}
// Request message for GetDiscoveryConfig.
message GetDiscoveryConfigRequest {
// Required. Resource name of the project and the configuration, for example
// `projects/dlp-test-project/discoveryConfigs/53234423`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dlp.googleapis.com/DiscoveryConfig"
}
];
}
// Request message for ListDiscoveryConfigs.
message ListDiscoveryConfigsRequest {
// Required. Parent resource name.
//
// The format of this value is as follows:
// `projects/`<var>PROJECT_ID</var>`/locations/`<var>LOCATION_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/DiscoveryConfig"
}
];
// Page token to continue retrieval. Comes from the previous call
// to ListDiscoveryConfigs. `order_by` field must not
// change for subsequent calls.
string page_token = 2;
// Size of the page. This value can be limited by a server.
int32 page_size = 3;
// Comma separated list of config fields to order by,
// followed by `asc` or `desc` postfix. This list is case insensitive. The
// default sorting order is ascending. Redundant space characters are
// insignificant.
//
// Example: `name asc,update_time, create_time desc`
//
// Supported fields are:
//
// - `last_run_time`: corresponds to the last time the DiscoveryConfig ran.
// - `name`: corresponds to the DiscoveryConfig's name.
// - `status`: corresponds to DiscoveryConfig's status.
string order_by = 4;
}
// Response message for ListDiscoveryConfigs.
message ListDiscoveryConfigsResponse {
// List of configs, up to page_size in ListDiscoveryConfigsRequest.
repeated DiscoveryConfig discovery_configs = 1;
// If the next page is available then this value is the next page token to be
// used in the following ListDiscoveryConfigs request.
string next_page_token = 2;
}
// Request message for DeleteDiscoveryConfig.
message DeleteDiscoveryConfigRequest {
// Required. Resource name of the project and the config, for example
// `projects/dlp-test-project/discoveryConfigs/53234423`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dlp.googleapis.com/DiscoveryConfig"
}
];
}
// 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/sensitive-data-protection/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/sensitive-data-protection/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 the previous call
// to ListJobTriggers. `order_by` field must not
// change for subsequent calls.
string page_token = 2;
// Size of the page. This value 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. The
// 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 this value is the next page token to be
// used in the 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;
}
// Type of action to execute when a profile is generated.
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/sensitive-data-protection/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/sensitive-data-protection/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;
}
// A pattern to match against one or more tables, datasets, or projects that
// contain BigQuery tables. At least one pattern must be specified.
// Regular expressions use RE2
// [syntax](https://github.com/google/re2/wiki/Syntax); a guide can be found
// under the google/re2 repository on GitHub.
message BigQueryRegex {
// For organizations, if unset, will match all projects. Has no effect
// for data profile configurations created within a project.
string project_id_regex = 1;
// If unset, this property matches all datasets.
string dataset_id_regex = 2;
// If unset, this property matches all tables.
string table_id_regex = 3;
}
// A collection of regular expressions to determine what tables to match
// against.
message BigQueryRegexes {
// A single BigQuery regular expression pattern to match against one or more
// tables, datasets, or projects that contain BigQuery tables.
repeated BigQueryRegex patterns = 1;
}
// The types of BigQuery tables supported by Cloud DLP.
message BigQueryTableTypes {
// A set of BigQuery table types.
repeated BigQueryTableType types = 1;
}
// Over time new types may be added. Currently VIEW, MATERIALIZED_VIEW,
// and SNAPSHOT are not supported.
enum BigQueryTableTypeCollection {
// Unused.
BIG_QUERY_COLLECTION_UNSPECIFIED = 0;
// Automatically generate profiles for all tables, even if the table type is
// not yet fully supported for analysis. Profiles for unsupported tables will
// be generated with errors to indicate their partial support. When full
// support is added, the tables will automatically be profiled during the next
// scheduled run.
BIG_QUERY_COLLECTION_ALL_TYPES = 1;
// Only those types fully supported will be profiled. Will expand
// automatically as Cloud DLP adds support for new table types. Unsupported
// table types will not have partial profiles generated.
BIG_QUERY_COLLECTION_ONLY_SUPPORTED_TYPES = 2;
}
// Over time new types may be added. Currently VIEW, MATERIALIZED_VIEW,
// SNAPSHOT, and non-BigLake external tables are not supported.
enum BigQueryTableType {
// Unused.
BIG_QUERY_TABLE_TYPE_UNSPECIFIED = 0;
// A normal BigQuery table.
BIG_QUERY_TABLE_TYPE_TABLE = 1;
// A table that references data stored in Cloud Storage.
BIG_QUERY_TABLE_TYPE_EXTERNAL_BIG_LAKE = 2;
}
// How frequently data profiles can be updated. New options can be added at a
// later time.
enum DataProfileUpdateFrequency {
// Unspecified.
UPDATE_FREQUENCY_UNSPECIFIED = 0;
// After the data profile is created, it will never be updated.
UPDATE_FREQUENCY_NEVER = 1;
// The data profile can be updated up to once every 24 hours.
UPDATE_FREQUENCY_DAILY = 2;
// The data profile can be updated up to once every 30 days. Default.
UPDATE_FREQUENCY_MONTHLY = 4;
}
// Do not profile the tables.
message Disabled {}
// 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;
}
}
// Configuration for discovery to scan resources for profile generation.
// Only one discovery configuration may exist per organization, folder,
// or project.
//
// The generated data profiles are retained according to the
// [data retention policy]
// (https://cloud.google.com/sensitive-data-protection/docs/data-profiles#retention).
message DiscoveryConfig {
option (google.api.resource) = {
type: "dlp.googleapis.com/DiscoveryConfig"
pattern: "projects/{project}/locations/{location}/discoveryConfigs/{discovery_config}"
};
// Project and scan location information. Only set when the parent is an org.
message OrgConfig {
// The data to scan: folder, org, or project
DiscoveryStartingLocation 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 = 2;
}
// Whether the discovery config is currently active. New options may be added
// at a later time.
enum Status {
// Unused
STATUS_UNSPECIFIED = 0;
// The discovery config is currently active.
RUNNING = 1;
// The discovery config is paused temporarily.
PAUSED = 2;
}
// Unique resource name for the DiscoveryConfig, assigned by the service when
// the DiscoveryConfig is created, for example
// `projects/dlp-test-project/locations/global/discoveryConfigs/53234423`.
string name = 1;
// Display name (max 100 chars)
string display_name = 11;
// Only set when the parent is an org.
OrgConfig org_config = 2;
// Detection logic for profile generation.
//
// Not all template features are used by Discovery. FindingLimits,
// include_quote and exclude_info_types have no impact on
// Discovery.
//
// 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/sensitive-data-protection/docs/data-profiles#data-residency.
repeated string inspect_templates = 3;
// Actions to execute at the completion of scanning.
repeated DataProfileAction actions = 4;
// Target to match against for determining what to scan and how frequently.
repeated DiscoveryTarget targets = 5;
// Output only. A stream of errors encountered when the config was activated.
// Repeated errors may result in the config automatically being paused. Output
// only field. Will return the last 100 errors. Whenever the config is
// modified this list will be cleared.
repeated Error errors = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The creation timestamp of a DiscoveryConfig.
google.protobuf.Timestamp create_time = 7
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The last update timestamp of a DiscoveryConfig.
google.protobuf.Timestamp update_time = 8
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The timestamp of the last time this config was executed.
google.protobuf.Timestamp last_run_time = 9
[(google.api.field_behavior) = OUTPUT_ONLY];
// Required. A status for this configuration.
Status status = 10 [(google.api.field_behavior) = REQUIRED];
}
// Target used to match against for Discovery.
message DiscoveryTarget {
// A target to match against for Discovery.
oneof target {
// BigQuery target for Discovery. The first target to match a table will be
// the one applied.
BigQueryDiscoveryTarget big_query_target = 1;
}
}
// Target used to match against for discovery with BigQuery tables
message BigQueryDiscoveryTarget {
// Required. The tables the discovery cadence applies to. The first target
// with a matching filter will be the one to apply to a table.
DiscoveryBigQueryFilter filter = 1 [(google.api.field_behavior) = REQUIRED];
// In addition to matching the filter, these conditions must be true
// before a profile is generated.
DiscoveryBigQueryConditions conditions = 2;
// The generation rule includes the logic on how frequently
// to update the data profiles. If not specified, discovery will re-run and
// update no more than once a month if new columns appear in the table.
oneof frequency {
// How often and when to update profiles. New tables that match both the
// filter and conditions are scanned as quickly as possible depending on
// system capacity.
DiscoveryGenerationCadence cadence = 3;
// Tables that match this filter will not have profiles created.
Disabled disabled = 4;
}
}
// Determines what tables will have profiles generated within an organization
// or project. Includes the ability to filter by regular expression patterns
// on project ID, dataset ID, and table ID.
message DiscoveryBigQueryFilter {
// Catch-all for all other tables not specified by other filters. Should
// always be last, except for single-table configurations, which will only
// have a TableReference target.
message AllOtherBigQueryTables {}
// Whether the filter applies to a specific set of tables or all other tables
// within the location being profiled. The first filter to match will be
// applied, regardless of the condition. If none is set, will default to
// `other_tables`.
oneof filter {
// A specific set of tables for this filter to apply to. A table collection
// must be specified in only one filter per config.
// If a table id or dataset is empty, Cloud DLP assumes all tables in that
// collection must be profiled. Must specify a project ID.
BigQueryTableCollection tables = 1;
// Catch-all. This should always be the last filter in the list because
// anything above it will apply first. Should only appear once in a
// configuration. If none is specified, a default one will be added
// automatically.
AllOtherBigQueryTables other_tables = 2;
}
}
// Specifies a collection of BigQuery tables. Used for Discovery.
message BigQueryTableCollection {
// Maximum of 100 entries.
// The first filter containing a pattern that matches a table will be used.
oneof pattern {
// A collection of regular expressions to match a BigQuery table against.
BigQueryRegexes include_regexes = 1;
}
}
// Requirements that must be true before a table is scanned in discovery for the
// first time. There is an AND relationship between the top-level attributes.
// Additionally, minimum conditions with an OR relationship that must be met
// before Cloud DLP scans a table can be set (like a minimum row count or a
// minimum table age).
message DiscoveryBigQueryConditions {
// There is an OR relationship between these attributes. They are used to
// determine if a table should be scanned or not in Discovery.
message OrConditions {
// Minimum number of rows that should be present before Cloud DLP
// profiles a table
int32 min_row_count = 1;
// Minimum age a table must have before Cloud DLP can profile it. Value must
// be 1 hour or greater.
google.protobuf.Duration min_age = 2;
}
// BigQuery table must have been created after this date. Used to avoid
// backfilling.
google.protobuf.Timestamp created_after = 1;
// The type of BigQuery tables to scan. If nothing is set the default
// behavior is to scan only tables of type TABLE and to give errors
// for all unsupported tables.
oneof included_types {
// Restrict discovery to specific table types.
BigQueryTableTypes types = 2;
// Restrict discovery to categories of table types.
BigQueryTableTypeCollection type_collection = 3;
}
// At least one of the conditions must be true for a table to be scanned.
OrConditions or_conditions = 4;
}
// What must take place for a profile to be updated and how
// frequently it should occur.
// New tables are scanned as quickly as possible depending on system
// capacity.
message DiscoveryGenerationCadence {
// Governs when to update data profiles when a schema is modified.
DiscoverySchemaModifiedCadence schema_modified_cadence = 1;
// Governs when to update data profiles when a table is modified.
DiscoveryTableModifiedCadence table_modified_cadence = 2;
}
// The cadence at which to update data profiles when a table is modified.
message DiscoveryTableModifiedCadence {
// The type of events to consider when deciding if the table has been
// modified and should have the profile updated. Defaults to
// MODIFIED_TIMESTAMP.
repeated BigQueryTableModification types = 1;
// How frequently data profiles can be updated when tables are modified.
// Defaults to never.
DataProfileUpdateFrequency frequency = 2;
}
// Attributes evaluated to determine if a table has been modified. New values
// may be added at a later time.
enum BigQueryTableModification {
// Unused.
TABLE_MODIFICATION_UNSPECIFIED = 0;
// A table will be considered modified when the last_modified_time from
// BigQuery has been updated.
TABLE_MODIFIED_TIMESTAMP = 1;
}
// The cadence at which to update data profiles when a schema is modified.
message DiscoverySchemaModifiedCadence {
// The type of events to consider when deciding if the table's schema
// has been modified and should have the profile updated. Defaults to
// NEW_COLUMNS.
repeated BigQuerySchemaModification types = 1;
// How frequently profiles may be updated when schemas are
// modified. Defaults to monthly.
DataProfileUpdateFrequency frequency = 2;
}
// Attributes evaluated to determine if a schema has been modified. New values
// may be added at a later time.
enum BigQuerySchemaModification {
// Unused
SCHEMA_MODIFICATION_UNSPECIFIED = 0;
// Profiles should be regenerated when new columns are added to the table.
// Default.
SCHEMA_NEW_COLUMNS = 1;
// Profiles should be regenerated when columns are removed from the table.
SCHEMA_REMOVED_COLUMNS = 2;
}
// The location to begin a discovery scan. Denotes an organization ID or folder
// ID within an organization.
message DiscoveryStartingLocation {
// 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;
// Job details.
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;
// Time when the job was last modified by the system.
google.protobuf.Timestamp last_modified = 15;
// 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;
// Events that should occur after the job has completed.
repeated ActionDetails action_details = 12;
}
// 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/sensitive-data-protection/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. The
// 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 finished.
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/sensitive-data-protection/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/sensitive-data-protection/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 the previous call
// to `ListDeidentifyTemplates`.
string page_token = 2;
// Size of the page. This value 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. The
// 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 the
// 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/sensitive-data-protection/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;
// Source of the dictionary.
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/sensitive-data-protection/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/sensitive-data-protection/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/sensitive-data-protection/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 the previous call
// to `ListStoredInfoTypes`.
string page_token = 2;
// Size of the page. This value 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. The
// 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 the 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;
}
// Request to list the profiles generated for a given organization or project.
message ListProjectDataProfilesRequest {
// Required. organizations/{org_id}/locations/{loc_id}
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "dlp.googleapis.com/ProjectDataProfile"
}
];
// Page token to continue retrieval.
string page_token = 2;
// Size of the page. This value 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. The default sorting order is
// ascending. Redundant space characters are insignificant. Only one order
// field at a time is allowed.
//
// Examples:
// * `project_id`
// * `sensitivity_level desc`
//
// Supported fields are:
//
// - `project_id`: GCP project ID
// - `sensitivity_level`: How sensitive the data in a project is, at most.
// - `data_risk_level`: How much risk is associated with this data.
// - `profile_last_generated`: When the profile was last updated in epoch
// seconds.
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:
// - `sensitivity_level` - HIGH|MODERATE|LOW
// - `data_risk_level` - HIGH|MODERATE|LOW
// - `status_code` - an RPC status code as defined in
// https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto
// * The operator must be `=` or `!=`.
//
// Examples:
//
// * `project_id = 12345 AND status_code = 1`
// * `project_id = 12345 AND sensitivity_level = HIGH`
//
// The length of this field should be no more than 500 characters.
string filter = 5;
}
// List of profiles generated for a given organization or project.
message ListProjectDataProfilesResponse {
// List of data profiles.
repeated ProjectDataProfile project_data_profiles = 1;
// The next page token.
string next_page_token = 2;
}
// Request to list the profiles generated for a given organization or project.
message ListTableDataProfilesRequest {
// Required. Resource name of the organization or project, for
// example `organizations/433245324/locations/europe` or
// `projects/project-id/locations/asia`.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "dlp.googleapis.com/TableDataProfile"
}
];
// Page token to continue retrieval.
string page_token = 2;
// Size of the page. This value 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. The default sorting order is
// ascending. Redundant space characters are insignificant. Only one order
// field at a time is allowed.
//
// Examples:
// * `project_id asc`
// * `table_id`
// * `sensitivity_level desc`
//
// Supported fields are:
//
// - `project_id`: The GCP project ID.
// - `dataset_id`: The ID of a BigQuery dataset.
// - `table_id`: The ID of a BigQuery table.
// - `sensitivity_level`: How sensitive the data in a table is, at most.
// - `data_risk_level`: How much risk is associated with this data.
// - `profile_last_generated`: When the profile was last updated in epoch
// seconds.
// - `last_modified`: The last time the resource was modified.
// - `resource_visibility`: Visibility restriction for this resource.
// - `row_count`: Number of rows in this resource.
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:
// - `project_id` - The GCP project ID.
// - `dataset_id` - The BigQuery dataset ID.
// - `table_id` - The ID of the BigQuery table.
// - `sensitivity_level` - HIGH|MODERATE|LOW
// - `data_risk_level` - HIGH|MODERATE|LOW
// - `resource_visibility`: PUBLIC|RESTRICTED
// - `status_code` - an RPC status code as defined in
// https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto
// * The operator must be `=` or `!=`.
//
// Examples:
//
// * `project_id = 12345 AND status_code = 1`
// * `project_id = 12345 AND sensitivity_level = HIGH`
// * `project_id = 12345 AND resource_visibility = PUBLIC`
//
// The length of this field should be no more than 500 characters.
string filter = 5;
}
// List of profiles generated for a given organization or project.
message ListTableDataProfilesResponse {
// List of data profiles.
repeated TableDataProfile table_data_profiles = 1;
// The next page token.
string next_page_token = 2;
}
// Request to list the profiles generated for a given organization or project.
message ListColumnDataProfilesRequest {
// Required. Resource name of the organization or project, for
// example `organizations/433245324/locations/europe` or
// `projects/project-id/locations/asia`.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "dlp.googleapis.com/ColumnDataProfile"
}
];
// Page token to continue retrieval.
string page_token = 2;
// Size of the page. This value 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. The default sorting order is
// ascending. Redundant space characters are insignificant. Only one order
// field at a time is allowed.
//
// Examples:
// * `project_id asc`
// * `table_id`
// * `sensitivity_level desc`
//
// Supported fields are:
//
// - `project_id`: The Google Cloud project ID.
// - `dataset_id`: The ID of a BigQuery dataset.
// - `table_id`: The ID of a BigQuery table.
// - `sensitivity_level`: How sensitive the data in a column is, at most.
// - `data_risk_level`: How much risk is associated with this data.
// - `profile_last_generated`: When the profile was last updated in epoch
// seconds.
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:
// - `table_data_profile_name` - The name of the related table data
// profile.
// - `project_id` - The Google Cloud project ID. (REQUIRED)
// - `dataset_id` - The BigQuery dataset ID. (REQUIRED)
// - `table_id` - The BigQuery table ID. (REQUIRED)
// - `field_id` - The ID of the BigQuery field.
// - `info_type` - The infotype detected in the resource.
// - `sensitivity_level` - HIGH|MEDIUM|LOW
// - `data_risk_level`: How much risk is associated with this data.
// - `status_code` - an RPC status code as defined in
// https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto
// * The operator must be `=` for project_id, dataset_id, and table_id. Other
// filters also support `!=`.
//
// Examples:
//
// * project_id = 12345 AND status_code = 1
// * project_id = 12345 AND sensitivity_level = HIGH
// * project_id = 12345 AND info_type = STREET_ADDRESS
//
// The length of this field should be no more than 500 characters.
string filter = 5;
}
// List of profiles generated for a given organization or project.
message ListColumnDataProfilesResponse {
// List of data profiles.
repeated ColumnDataProfile column_data_profiles = 1;
// The next page token.
string next_page_token = 2;
}
// 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;
}
// An aggregated profile for this project, based on the resources profiled
// within it.
message ProjectDataProfile {
option (google.api.resource) = {
type: "dlp.googleapis.com/ProjectDataProfile"
pattern: "organizations/{organization}/locations/{location}/projectDataProfiles/{project_data_profile}"
pattern: "projects/{project}/locations/{location}/projectDataProfiles/{project_data_profile}"
};
// The resource name of the profile.
string name = 1;
// Project ID that was profiled.
string project_id = 2;
// The last time the profile was generated.
google.protobuf.Timestamp profile_last_generated = 3;
// The sensitivity score of this project.
SensitivityScore sensitivity_score = 4;
// The data risk level of this project.
DataRiskLevel data_risk_level = 5;
// Success or error status of the last attempt to profile the project.
ProfileStatus profile_status = 7;
}
// How broadly the data in the 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. This is
// deprecated, and the DiscoveryConfig field is preferred moving forward.
// DataProfileJobConfig will still be written here for Discovery in BigQuery
// for backwards compatibility, but will not be updated with new fields, while
// DiscoveryConfig will.
DataProfileJobConfig data_profile_job = 3 [deprecated = true];
// A copy of the configuration used to generate this profile.
DiscoveryConfig discovery_config = 4;
// Name of the inspection template used to generate this profile
string inspect_template_name = 5;
// Timestamp when the template was modified
google.protobuf.Timestamp inspect_template_modified_time = 6;
}
// The profile for a scanned table.
message TableDataProfile {
option (google.api.resource) = {
type: "dlp.googleapis.com/TableDataProfile"
pattern: "organizations/{organization}/locations/{location}/tableDataProfiles/{table_data_profile}"
pattern: "projects/{project}/locations/{location}/tableDataProfiles/{table_data_profile}"
};
// 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 type that was profiled.
DataSourceType data_source_type = 36;
// The resource name to the project data profile for this table.
string project_data_profile = 2;
// The Google Cloud project ID that owns the resource.
string dataset_project_id = 24;
// If supported, the location where the dataset's data is stored.
// See https://cloud.google.com/bigquery/docs/locations for supported
// locations.
string dataset_location = 29;
// If the resource is BigQuery, the dataset ID.
string dataset_id = 25;
// If the resource is BigQuery, the BigQuery table ID.
string table_id = 26;
// The resource name of the resource profiled.
// 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.
// This will not be populated for BigLake tables.
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;
}
// Success or errors for the profile generation.
message ProfileStatus {
// Profiling status code and optional message. The `status.code` value is 0
// (default value) for OK.
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;
// Whether this infoType was excluded from sensitivity and risk analysis due
// to factors such as low prevalence (subject to change).
bool excluded_from_analysis = 3;
}
// Bucketized nullness percentage levels. A higher level means a higher
// percentage of the column is null.
enum NullPercentageLevel {
// Unused.
NULL_PERCENTAGE_LEVEL_UNSPECIFIED = 0;
// Very few null entries.
NULL_PERCENTAGE_VERY_LOW = 1;
// Some null entries.
NULL_PERCENTAGE_LOW = 2;
// A few null entries.
NULL_PERCENTAGE_MEDIUM = 3;
// A lot of null entries.
NULL_PERCENTAGE_HIGH = 4;
}
// Bucketized uniqueness score levels. A higher uniqueness score is a strong
// signal that the column may contain a unique identifier like user id. A low
// value indicates that the column contains few unique values like booleans or
// other classifiers.
enum UniquenessScoreLevel {
// Some columns do not have estimated uniqueness. Possible reasons include
// having too few values.
UNIQUENESS_SCORE_LEVEL_UNSPECIFIED = 0;
// Low uniqueness, possibly a boolean, enum or similiarly typed column.
UNIQUENESS_SCORE_LOW = 1;
// Medium uniqueness.
UNIQUENESS_SCORE_MEDIUM = 2;
// High uniqueness, possibly a column of free text or unique identifiers.
UNIQUENESS_SCORE_HIGH = 3;
}
// The profile for a scanned column within a table.
message ColumnDataProfile {
option (google.api.resource) = {
type: "dlp.googleapis.com/ColumnDataProfile"
pattern: "organizations/{organization}/locations/{location}/columnDataProfiles/{column_data_profile}"
pattern: "projects/{project}/locations/{location}/columnDataProfiles/{column_data_profile}"
};
// 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;
}
// Data types of the data in a column. Types may be added over time.
enum ColumnDataType {
// Invalid type.
COLUMN_DATA_TYPE_UNSPECIFIED = 0;
// Encoded as a string in decimal format.
TYPE_INT64 = 1;
// Encoded as a boolean "false" or "true".
TYPE_BOOL = 2;
// Encoded as a number, or string "NaN", "Infinity" or "-Infinity".
TYPE_FLOAT64 = 3;
// Encoded as a string value.
TYPE_STRING = 4;
// Encoded as a base64 string per RFC 4648, section 4.
TYPE_BYTES = 5;
// Encoded as an RFC 3339 timestamp with mandatory "Z" time zone string:
// 1985-04-12T23:20:50.52Z
TYPE_TIMESTAMP = 6;
// Encoded as RFC 3339 full-date format string: 1985-04-12
TYPE_DATE = 7;
// Encoded as RFC 3339 partial-time format string: 23:20:50.52
TYPE_TIME = 8;
// Encoded as RFC 3339 full-date "T" partial-time: 1985-04-12T23:20:50.52
TYPE_DATETIME = 9;
// Encoded as WKT
TYPE_GEOGRAPHY = 10;
// Encoded as a decimal string.
TYPE_NUMERIC = 11;
// Container of ordered fields, each with a type and field name.
TYPE_RECORD = 12;
// Decimal type.
TYPE_BIGNUMERIC = 13;
// Json type.
TYPE_JSON = 14;
}
// The possible policy states for a column.
enum ColumnPolicyState {
// No policy tags.
COLUMN_POLICY_STATE_UNSPECIFIED = 0;
// Column has policy tag applied.
COLUMN_POLICY_TAGGED = 1;
}
// The name of the profile.
string name = 1;
// Success or error status from the most recent profile generation attempt.
// May be empty if the profile is still being generated.
ProfileStatus profile_status = 17;
// State of a profile.
State state = 18;
// The last time the profile was generated.
google.protobuf.Timestamp profile_last_generated = 3;
// The resource name of the table data profile.
string table_data_profile = 4;
// The resource name of the resource this column is within.
string table_full_resource = 5;
// The Google Cloud project ID that owns the profiled resource.
string dataset_project_id = 19;
// The BigQuery location where the dataset's data is stored.
// See https://cloud.google.com/bigquery/docs/locations for supported
// locations.
string dataset_location = 20;
// The BigQuery dataset ID.
string dataset_id = 21;
// The BigQuery table ID.
string table_id = 22;
// The name of the column.
string column = 6;
// The sensitivity of this column.
SensitivityScore sensitivity_score = 7;
// The data risk level for this column.
DataRiskLevel data_risk_level = 8;
// If it's been determined this column can be identified as a single type,
// this will be set. Otherwise the column either has unidentifiable content
// or mixed types.
InfoTypeSummary column_info_type = 9;
// Other types found within this column. List will be unordered.
repeated OtherInfoTypeSummary other_matches = 10;
// Approximate percentage of entries being null in the column.
NullPercentageLevel estimated_null_percentage = 23;
// Approximate uniqueness of the column.
UniquenessScoreLevel estimated_uniqueness_score = 24;
// The likelihood that this column contains free-form text.
// A value close to 1 may indicate the column is likely to contain
// free-form or natural language text.
// Range in 0-1.
double free_text_score = 13;
// The data type of a given column.
ColumnDataType column_type = 14;
// Indicates if a policy tag has been applied to the column.
ColumnPolicyState policy_state = 15;
}
// Request to get a project data profile.
message GetProjectDataProfileRequest {
// Required. Resource name, for example
// `organizations/12345/locations/us/projectDataProfiles/53234423`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dlp.googleapis.com/ProjectDataProfile"
}
];
}
// Request to get a table data profile.
message GetTableDataProfileRequest {
// Required. Resource name, for example
// `organizations/12345/locations/us/tableDataProfiles/53234423`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dlp.googleapis.com/TableDataProfile"
}
];
}
// Request to get a column data profile.
message GetColumnDataProfileRequest {
// Required. Resource name, for example
// `organizations/12345/locations/us/columnDataProfiles/53234423`.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dlp.googleapis.com/ColumnDataProfile"
}
];
}
// 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;
}
// Message used to identify the type of resource being profiled.
message DataSourceType {
// Output only. An identifying string to the type of resource being profiled.
// Current values: google/bigquery/table, google/project
string data_source = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
}