use of com.google.privacy.dlp.v2.InfoType in project java-docs-samples by GoogleCloudPlatform.
the class Redact method redactImage.
// [START dlp_redact_image]
/*
* Redact sensitive data from an image using the Data Loss Prevention API.
*
* @param filePath The path to a local file to inspect. Can be a JPG or PNG image file.
* @param minLikelihood The minimum likelihood required before redacting a match.
* @param infoTypes The infoTypes of information to redact.
* @param outputPath The local path to save the resulting image to.
* @param projectId The project ID to run the API call under.
*/
private static void redactImage(String filePath, Likelihood minLikelihood, List<InfoType> infoTypes, String outputPath, String projectId) throws Exception {
// Instantiate the DLP client
try (DlpServiceClient dlpClient = DlpServiceClient.create()) {
String mimeType = URLConnection.guessContentTypeFromName(filePath);
if (mimeType == null) {
mimeType = MimetypesFileTypeMap.getDefaultFileTypeMap().getContentType(filePath);
}
ByteContentItem.BytesType bytesType;
switch(mimeType) {
case "image/jpeg":
bytesType = ByteContentItem.BytesType.IMAGE_JPEG;
break;
case "image/bmp":
bytesType = ByteContentItem.BytesType.IMAGE_BMP;
break;
case "image/png":
bytesType = ByteContentItem.BytesType.IMAGE_PNG;
break;
case "image/svg":
bytesType = ByteContentItem.BytesType.IMAGE_SVG;
break;
default:
bytesType = ByteContentItem.BytesType.BYTES_TYPE_UNSPECIFIED;
break;
}
byte[] data = Files.readAllBytes(Paths.get(filePath));
InspectConfig inspectConfig = InspectConfig.newBuilder().addAllInfoTypes(infoTypes).setMinLikelihood(minLikelihood).build();
ByteContentItem byteContentItem = ByteContentItem.newBuilder().setType(bytesType).setData(ByteString.copyFrom(data)).build();
List<RedactImageRequest.ImageRedactionConfig> imageRedactionConfigs = infoTypes.stream().map(infoType -> RedactImageRequest.ImageRedactionConfig.newBuilder().setInfoType(infoType).build()).collect(Collectors.toList());
RedactImageRequest redactImageRequest = RedactImageRequest.newBuilder().setParent(ProjectName.of(projectId).toString()).addAllImageRedactionConfigs(imageRedactionConfigs).setByteItem(byteContentItem).setInspectConfig(inspectConfig).build();
RedactImageResponse redactImageResponse = dlpClient.redactImage(redactImageRequest);
// redacted image data
ByteString redactedImageData = redactImageResponse.getRedactedImage();
FileOutputStream outputStream = new FileOutputStream(outputPath);
outputStream.write(redactedImageData.toByteArray());
outputStream.close();
}
}
use of com.google.privacy.dlp.v2.InfoType in project java-docs-samples by GoogleCloudPlatform.
the class Redact method main.
// [END dlp_redact_image]
/**
* Command line application to redact strings, images using the Data Loss Prevention API.
*/
public static void main(String[] args) throws Exception {
Options commandLineOptions = new Options();
Option minLikelihoodOption = Option.builder("minLikelihood").hasArg(true).required(false).build();
commandLineOptions.addOption(minLikelihoodOption);
Option infoTypesOption = Option.builder("infoTypes").hasArg(true).required(false).build();
infoTypesOption.setArgs(Option.UNLIMITED_VALUES);
commandLineOptions.addOption(infoTypesOption);
Option inputFilePathOption = Option.builder("f").hasArg(true).longOpt("inputFilePath").required(false).build();
commandLineOptions.addOption(inputFilePathOption);
Option outputFilePathOption = Option.builder("o").hasArg(true).longOpt("outputFilePath").required(false).build();
commandLineOptions.addOption(outputFilePathOption);
Option projectIdOption = Option.builder("projectId").hasArg(true).required(false).build();
CommandLineParser parser = new DefaultParser();
HelpFormatter formatter = new HelpFormatter();
CommandLine cmd;
try {
cmd = parser.parse(commandLineOptions, args);
} catch (ParseException e) {
System.out.println(e.getMessage());
formatter.printHelp(Redact.class.getName(), commandLineOptions);
System.exit(1);
return;
}
List<InfoType> infoTypesList = new ArrayList<>();
String[] infoTypes = cmd.getOptionValues(infoTypesOption.getOpt());
if (infoTypes != null) {
for (String infoType : infoTypes) {
infoTypesList.add(InfoType.newBuilder().setName(infoType).build());
}
}
Likelihood minLikelihood = Likelihood.valueOf(cmd.getOptionValue(minLikelihoodOption.getOpt(), Likelihood.LIKELIHOOD_UNSPECIFIED.name()));
String inputFilePath = cmd.getOptionValue(inputFilePathOption.getOpt());
String outputFilePath = cmd.getOptionValue(outputFilePathOption.getOpt());
String projectId = cmd.getOptionValue(projectIdOption.getOpt(), ServiceOptions.getDefaultProjectId());
redactImage(inputFilePath, minLikelihood, infoTypesList, outputFilePath, projectId);
}
use of com.google.privacy.dlp.v2.InfoType in project java-docs-samples by GoogleCloudPlatform.
the class RiskAnalysis method calculateKMap.
// [END dlp_l_diversity]
// [START dlp_k_map]
/**
* Calculate k-map risk estimation for an attribute relative to quasi-identifiers in a BigQuery
* table.
*
* @param projectId The Google Cloud Platform project ID to run the API call under.
* @param datasetId The BigQuery dataset to analyze.
* @param tableId The BigQuery table to analyze.
* @param quasiIds A set of column names that form a composite key ('quasi-identifiers').
* @param infoTypes The infoTypes corresponding to each quasi-id column
* @param regionCode An ISO-3166-1 region code specifying the k-map distribution region
* @param topicId The name of the Pub/Sub topic to notify once the job completes
* @param subscriptionId The name of the Pub/Sub subscription to use when listening for job
* completion status.
*/
private static void calculateKMap(String projectId, String datasetId, String tableId, List<String> quasiIds, List<InfoType> infoTypes, String regionCode, String topicId, String subscriptionId) throws Exception {
// Instantiates a client
try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) {
Iterator<String> quasiIdsIterator = quasiIds.iterator();
Iterator<InfoType> infoTypesIterator = infoTypes.iterator();
if (quasiIds.size() != infoTypes.size()) {
throw new IllegalArgumentException("The numbers of quasi-IDs and infoTypes must be equal!");
}
ArrayList<TaggedField> taggedFields = new ArrayList();
while (quasiIdsIterator.hasNext() || infoTypesIterator.hasNext()) {
taggedFields.add(TaggedField.newBuilder().setField(FieldId.newBuilder().setName(quasiIdsIterator.next()).build()).setInfoType(infoTypesIterator.next()).build());
}
KMapEstimationConfig kmapConfig = KMapEstimationConfig.newBuilder().addAllQuasiIds(taggedFields).setRegionCode(regionCode).build();
BigQueryTable bigQueryTable = BigQueryTable.newBuilder().setProjectId(projectId).setDatasetId(datasetId).setTableId(tableId).build();
PrivacyMetric privacyMetric = PrivacyMetric.newBuilder().setKMapEstimationConfig(kmapConfig).build();
String topicName = String.format("projects/%s/topics/%s", projectId, topicId);
PublishToPubSub publishToPubSub = PublishToPubSub.newBuilder().setTopic(topicName).build();
// Create action to publish job status notifications over Google Cloud Pub/Sub
Action action = Action.newBuilder().setPubSub(publishToPubSub).build();
RiskAnalysisJobConfig riskAnalysisJobConfig = RiskAnalysisJobConfig.newBuilder().setSourceTable(bigQueryTable).setPrivacyMetric(privacyMetric).addActions(action).build();
CreateDlpJobRequest createDlpJobRequest = CreateDlpJobRequest.newBuilder().setParent(ProjectName.of(projectId).toString()).setRiskJob(riskAnalysisJobConfig).build();
DlpJob dlpJob = dlpServiceClient.createDlpJob(createDlpJobRequest);
String dlpJobName = dlpJob.getName();
final SettableApiFuture<Boolean> done = SettableApiFuture.create();
// Set up a Pub/Sub subscriber to listen on the job completion status
Subscriber subscriber = Subscriber.newBuilder(ProjectSubscriptionName.newBuilder().setProject(projectId).setSubscription(subscriptionId).build(), (pubsubMessage, ackReplyConsumer) -> {
if (pubsubMessage.getAttributesCount() > 0 && pubsubMessage.getAttributesMap().get("DlpJobName").equals(dlpJobName)) {
// notify job completion
done.set(true);
ackReplyConsumer.ack();
}
}).build();
subscriber.startAsync();
// For long jobs, consider using a truly asynchronous execution model such as Cloud Functions
try {
done.get(1, TimeUnit.MINUTES);
// Wait for the job to become available
Thread.sleep(500);
} catch (TimeoutException e) {
System.out.println("Unable to verify job completion.");
}
// retrieve completed job status
DlpJob completedJob = dlpServiceClient.getDlpJob(GetDlpJobRequest.newBuilder().setName(dlpJobName).build());
System.out.println("Job status: " + completedJob.getState());
AnalyzeDataSourceRiskDetails riskDetails = completedJob.getRiskDetails();
KMapEstimationResult kmapResult = riskDetails.getKMapEstimationResult();
for (KMapEstimationHistogramBucket result : kmapResult.getKMapEstimationHistogramList()) {
System.out.printf("\tAnonymity range: [%d, %d]\n", result.getMinAnonymity(), result.getMaxAnonymity());
System.out.printf("\tSize: %d\n", result.getBucketSize());
for (KMapEstimationQuasiIdValues valueBucket : result.getBucketValuesList()) {
String quasiIdValues = valueBucket.getQuasiIdsValuesList().stream().map(v -> {
String s = v.toString();
return s.substring(s.indexOf(':') + 1).trim();
}).collect(Collectors.joining(", "));
System.out.printf("\tValues: {%s}\n", quasiIdValues);
System.out.printf("\tEstimated k-map anonymity: %d\n", valueBucket.getEstimatedAnonymity());
}
}
} catch (Exception e) {
System.out.println("Error in calculateKMap: " + e.getMessage());
}
}
use of com.google.privacy.dlp.v2.InfoType in project java-docs-samples by GoogleCloudPlatform.
the class Templates method listInspectTemplates.
// [END dlp_create_inspect_template]
// [START dlp_list_inspect_templates]
/**
* List DLP inspection templates created in a given project
*
* @param projectId Google Cloud Project ID
*/
private static void listInspectTemplates(String projectId) {
try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) {
ListInspectTemplatesRequest request = ListInspectTemplatesRequest.newBuilder().setParent(ProjectName.of(projectId).toString()).setPageSize(1).build();
ListInspectTemplatesPagedResponse response = dlpServiceClient.listInspectTemplates(request);
ListInspectTemplatesPage page = response.getPage();
ListInspectTemplatesResponse templatesResponse = page.getResponse();
for (InspectTemplate template : templatesResponse.getInspectTemplatesList()) {
System.out.printf("Template name: %s\n", template.getName());
if (template.getDisplayName() != null) {
System.out.printf("\tDisplay name: %s \n", template.getDisplayName());
System.out.printf("\tCreate time: %s \n", template.getCreateTime());
System.out.printf("\tUpdate time: %s \n", template.getUpdateTime());
// print inspection config
InspectConfig inspectConfig = template.getInspectConfig();
for (InfoType infoType : inspectConfig.getInfoTypesList()) {
System.out.printf("\tInfoType: %s\n", infoType.getName());
}
System.out.printf("\tMin likelihood: %s\n", inspectConfig.getMinLikelihood());
System.out.printf("\tLimits: %s\n", inspectConfig.getLimits().getMaxFindingsPerRequest());
}
}
} catch (Exception e) {
System.out.printf("Error creating template: %s", e.getMessage());
}
}
use of com.google.privacy.dlp.v2.InfoType in project java-docs-samples by GoogleCloudPlatform.
the class Templates method createInspectTemplate.
// [START dlp_create_inspect_template]
/**
* Create a new DLP inspection configuration template.
*
* @param displayName (Optional) The human-readable name to give the template
* @param projectId Google Cloud Project ID to call the API under
* @param templateId (Optional) The name of the template to be created
* @param infoTypeList The infoTypes of information to match
* @param minLikelihood The minimum likelihood required before returning a match
* @param maxFindings The maximum number of findings to report per request (0 = server maximum)
*/
private static void createInspectTemplate(String displayName, String templateId, String description, String projectId, List<InfoType> infoTypeList, Likelihood minLikelihood, int maxFindings) {
try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) {
FindingLimits findingLimits = FindingLimits.newBuilder().setMaxFindingsPerRequest(maxFindings).build();
// Construct the inspection configuration for the template
InspectConfig inspectConfig = InspectConfig.newBuilder().addAllInfoTypes(infoTypeList).setMinLikelihood(minLikelihood).setLimits(findingLimits).build();
InspectTemplate inspectTemplate = InspectTemplate.newBuilder().setInspectConfig(inspectConfig).setDisplayName(displayName).setDescription(description).build();
CreateInspectTemplateRequest createInspectTemplateRequest = CreateInspectTemplateRequest.newBuilder().setParent(ProjectName.of(projectId).toString()).setInspectTemplate(inspectTemplate).setTemplateId(templateId).build();
InspectTemplate response = dlpServiceClient.createInspectTemplate(createInspectTemplateRequest);
System.out.printf("Template created: %s", response.getName());
} catch (Exception e) {
System.out.printf("Error creating template: %s", e.getMessage());
}
}
Aggregations