Cloud DLP 검사 작업 만들기 및 예약

이 주제에서는 Cloud Data Loss Prevention(DLP) 검사 작업을 만드는 방법과 작업 트리거를 만들어 반복 검사 작업을 예약하는 방법을 자세히 설명합니다. Cloud DLP UI를 사용하여 새 작업 트리거를 만드는 방법을 빠르게 둘러보려면 빠른 시작: Cloud DLP 작업 트리거 만들기를 참조하세요.

검사 작업 및 작업 트리거 정보

Cloud DLP가 민감한 정보를 식별하는 검스캔을 수행할 때 각 스캔은 작업으로 실행됩니다. Cloud DLP는 사용자가 Cloud Storage 버킷, BigQuery 테이블, Datastore 종류를 비롯한 Google Cloud 스토리지 저장소의 검사를 명령할 때마다 작업 리소스를 만들고 실행합니다.

작업 트리거를 만들어 Cloud DLP 검사 스캔 작업을 예약합니다. 작업 트리거는 주기적으로 DLP 작업 생성을 자동화하며 요청 시 실행될 수도 있습니다.

Cloud DLP의 작업 및 작업 트리거에 대한 자세한 내용은 작업 및 작업 트리거 개념 페이지를 참조하세요.

새 검사 작업 만들기

새 Cloud DLP 검사 작업을 만들려면 다음 안내를 따르세요.

콘솔

  1. Cloud Console에서 Cloud DLP를 엽니다.

    Cloud DLP UI로 이동

  2. 만들기 메뉴에서 작업 또는 작업 트리거를 선택합니다.

    또는 다음 버튼을 클릭합니다.

    새 작업 만들기

작업 만들기 페이지에는 다음 섹션이 포함되어 있습니다.

입력 데이터 선택

이름

작업의 이름을 입력합니다. 문자, 숫자, 하이픈을 사용할 수 있습니다. 작업 이름 지정은 선택사항입니다. 이름을 입력하지 않으면 Cloud DLP가 작업에 고유 번호 식별자를 부여합니다.

위치

스토리지 유형 메뉴에서 스캔할 데이터를 저장할 저장소 종류를 선택합니다.

  • Cloud Storage: 스캔할 버킷의 URL을 입력하거나 위치 유형 메뉴에서 포함/제외를 선택한 다음 찾아보기를 클릭하여 스캔할 버킷 또는 하위 폴더로 이동합니다. 재귀적으로 폴더 스캔 체크박스를 선택하여 지정된 디렉터리와 포함된 모든 디렉터리를 스캔합니다. 지정된 디렉터리만 스캔하고 포함된 하위 디렉터리는 스캔하지 않으려면 이 체크박스를 선택하지 마세요.
  • BigQuery: 스캔할 프로젝트, 데이터세트, 테이블의 식별자를 입력하세요.
  • Datastore: 스캔할 프로젝트, 네임스페이스(선택사항), 종류의 식별자를 입력하세요.

샘플링

샘플링은 데이터가 매우 많은 경우 리소스를 절약할 수 있는 선택적인 방법입니다.

샘플링에서는 선택된 데이터를 모두 스캔할지 아니면 특정 비율을 지정하여 데이터를 일부만 스캔할지 선택할 수 있습니다. 샘플링은 스캔하는 스토리지 저장소 유형에 따라 다르게 작동합니다.

  • BigQuery의 경우에는 스캔에 포함하도록 지정한 파일 비율에 따라 선택된 전체 행의 일부를 샘플링할 수 있습니다.
  • Cloud Storage의 경우 파일별로 스캔할 최대 바이트 크기에 지정된 크기를 초과하는 파일이 있으면, Cloud DLP가 최대 파일 크기까지만 파일을 스캔하고, 다음 파일로 이동합니다.

샘플링을 사용하려면 첫 번째 메뉴에서 다음 옵션 중 하나를 선택합니다.

  • 위에서부터 샘플링 시작: Cloud DLP가 데이터의 시작 부분에서 부분 스캔을 시작합니다. BigQuery의 경우 첫 번째 행에서 스캔을 시작합니다. Cloud Storage의 경우 각 파일의 시작 부분에서 스캔을 시작하고, Cloud DLP가 지정된 최대 파일 크기(위 참조)까지 스캔했으면 스캔을 중지합니다.
  • 임의 위치에서 샘플링 시작: Cloud DLP가 데이터 내의 무작위 위치에서 부분 스캔을 시작합니다. BigQuery의 경우 무작위 행에서 스캔을 시작합니다. Cloud Storage의 경우 이 설정은 지정된 최대 크기를 초과하는 파일에만 적용됩니다. Cloud DLP는 전체 파일 중에서 최대 파일 크기 미만의 파일을 스캔하고, 최대 파일 크기 이상의 파일은 최댓값까지만 스캔합니다.

부분 스캔을 수행하려면 스캔하려는 데이터의 비율도 선택해야 합니다. 슬라이더를 사용하여 비율을 설정하세요.

고급 구성

Cloud Storage 버킷 또는 BigQuery 테이블 스캔을 위한 작업을 만들 때 고급 구성을 지정하여 검색 범위를 좁힐 수 있습니다. 구성 가능한 옵션은 다음과 같습니다.

  • 파일(Cloud Storage만 해당): 텍스트, 바이너리, 이미지 파일이 포함된 스캔 대상 파일 유형입니다.
  • 식별 필드(BigQuery만 해당): 테이블 내의 고유한 행 식별자입니다.
  • Cloud Storage의 경우 파일별로 스캔할 최대 바이트 크기에 지정된 크기를 초과하는 파일이 있으면, Cloud DLP가 최대 파일 크기까지만 파일을 스캔하고, 다음 파일로 이동합니다.

샘플링을 사용하려면 스캔할 데이터의 비율을 선택합니다. 슬라이더를 사용하여 비율을 설정하세요. 그런 다음 첫 번째 메뉴에서 다음 옵션 중 하나를 선택합니다.

  • 위에서부터 샘플링 시작: Cloud DLP가 데이터의 시작 부분에서 부분 스캔을 시작합니다. BigQuery의 경우 첫 번째 행에서 스캔을 시작합니다. Cloud Storage의 경우 각 파일의 시작 부분에서 스캔을 시작하고, Cloud DLP가 지정된 최대 파일 크기(위 참조)까지 스캔했으면 스캔을 중지합니다.
  • 임의 위치에서 샘플링 시작: Cloud DLP가 데이터 내의 무작위 위치에서 부분 스캔을 시작합니다. BigQuery의 경우 무작위 행에서 스캔을 시작합니다. Cloud Storage의 경우 이 설정은 지정된 최대 크기를 초과하는 파일에만 적용됩니다. Cloud DLP는 전체 파일 중에서 최대 파일 크기 미만의 파일을 스캔하고, 최대 파일 크기 이상의 파일은 최댓값까지만 스캔합니다.

파일

Cloud Storage에 저장된 파일의 경우, 파일에서 스캔에 포함할 유형을 지정할 수 있습니다.

바이너리, 텍스트, 이미지, Microsoft Word, PDF, Apache Avro 파일 중에서 선택할 수 있습니다. Cloud DLP가 Cloud Storage 버킷에서 스캔할 수 있는 파일 확장자의 전체 목록은 FileType의 API 참조 페이지에 포함되어 있습니다. 바이너리를 선택하면 Cloud DLP가 인식되지 않는 유형의 파일을 스캔합니다.

식별 필드

BigQuery의 테이블의 경우 식별 필드에서 Cloud DLP가 특정 필드에 값이 있는 행만 스캔하도록 지정할 수 있습니다.

필드를 추가하려면 식별 필드 추가를 클릭합니다. 필드 이름을 입력합니다. 필요에 따라 중첩된 필드를 지정하려면 점 표기법을 사용합니다.

필드는 원하는 만큼 추가할 수 있습니다. 필드를 삭제하려면 삭제하려는 필드 옆에 있는 항목 삭제(휴지통 아이콘)를 클릭합니다.

감지 구성

감지 구성 섹션에서는 스캔할 민감한 정보 유형을 지정합니다. 이 섹션을 완료하는 것은 선택사항입니다. 이 섹션을 건너뛰면 Cloud DLP가 ALL_BASIC infoType 감지기에 해당하는 가장 일반적인 옵션을 사용하여 데이터에서 일반적인 유형의 민감한 정보를 스캔합니다.

템플릿

선택적으로 Cloud DLP 템플릿을 사용하여 이전에 지정한 구성 정보를 재사용할 수 있습니다.

사용할 템플릿을 이미 만든 경우 템플릿 이름 필드를 클릭하여 기존 검사 템플릿 목록을 확인합니다. 사용하려는 템플릿 이름을 선택하거나 입력합니다.

템플릿 만들기에 대한 자세한 내용은 Cloud DLP 검사 템플릿 만들기를 참조하세요.

InfoType

InfoType 감지기는 특정 유형의 민감한 정보를 찾습니다. 예를 들어 Cloud DLP에 기본 제공되는 US_SOCIAL_SECURITY_NUMBER infoType 감지기는 미국 사회 보장 번호를 찾습니다. 기본 제공 infoType 감지기 외에 고유 한 커스텀 infoType 감지기도 만들 수 있습니다.

InfoTypes에서 스캔할 데이터 유형에 해당하는 infoType 감지기를 선택합니다. 또한 모든 기본 infoType을 스캔하려면 이 필드를 비워둘 수 있습니다. 각 감지기에 대한 자세한 내용은 InfoType 감지기 참조를 확인하세요.

또한 커스텀 infoType 섹션에 커스텀 infoType 감지기를 추가하고 검사 규칙 세트 섹션에서 기본 제공 infoType 감지기와 커스텀 infoType 감지기를 모두 맞춤설정할 수 있습니다.

커스텀 infoType

To add a custom infoType detector:

  1. Click Add custom infoType.
  2. Choose the type of custom infoType detector you want to create:
    • Words or phrases: Matches on one or more words or phrases that you enter into the field. Use this custom infoType when you have just a few words or phrases to search for. Give your custom infoType a name, and then, under List of words or phrases, type the word or phrase you want Cloud DLP to match on. To search on multiple words or phrases, press Enter after each one. For more information, see Creating a regular custom dictionary detector.
    • Dictionary path: Searches your content for items in a list of words and phrases. The list is stored in a text file in Cloud Storage. Use this custom infoType when you have anywhere from a few to several hundred thousand words or phrases to search for. This method is also useful if your list contains sensitive elements and you don't want to store them inside of a job or template. Give your custom infoType a name, and then, under Dictionary location, enter or browse to the Cloud Storage path where the dictionary file is stored. For more information, see Creating a regular custom dictionary detector.
    • Regex: Matches content based on a regular expression. Give your custom infoType a name, and then, in the Regex field, enter a regex pattern to match words and phrases. See the supported regex syntax.
    • Stored infoType: This option adds a stored custom dictionary detector, which is a kind of dictionary detector that is built from either a large text file stored in Cloud Storage or a single column of a BigQuery table. Use this kind of custom infoType when you have anywhere from several hundred thousand to tens of millions of words or phrases to search for. Be aware that this is the only option in this menu for which you must have already created the stored infoType to use it. Give your custom infoType a name (different from the name you gave the stored infoType), and then, in the Stored infoType field, enter the name of the stored infoType. For more information about creating stored custom dictionaries, see Creating a stored custom dictionary detector.

Click Add custom infoType again to add additional custom infoType detectors.

검사 규칙 세트

Inspection rulesets allow you to customize both built-in and custom infoType detectors using context rules. The two types of inspection rules are:

To add a new ruleset, first specify one or more built-in or custom infoType detectors in the InfoTypes section. These are the infoType detectors that your rulesets will be modifying. Then, do the following:

  1. Click in the Choose infoTypes field. The infoType or infoTypes you specified previously appear below the field in a menu, as shown here:
  2. Screenshot of the DLP UI's inspection rulesets configuration.
  3. Choose an infoType from the menu, and then click Add rule. A menu appears with the two options Hotword rule and Exclusion rule.

For hotword rules, choose Hotword rules. Then, do the following:

  1. In the Hotword field, enter a regular expression that Cloud DLP should look for.
  2. From the Hotword proximity menu, choose whether the hotword you entered is found before or after the chosen infoType.
  3. In Hotword distance from infoType, enter the approximate number of characters between the hotword and the chosen infoType.
  4. In Confidence level adjustment, choose whether to assign matches a fixed likelihood level, or to increase or decrease the default likelihood level by a certain amount.

For exclusion rules, choose Exclusion rules. Then, do the following:

  1. In the Exclude field, enter a regular expression (regex) that Cloud DLP should look for.
  2. From the Matching type menu, choose one of the following:
    • Full match: The finding must completely match the regex.
    • Partial match: A substring of the finding can match the regex.
    • Inverse match: The finding doesn't match the regex.

You can add additional hotword or exclusion rules and rulesets to further refine your scan results.

신뢰도 기준

Cloud DLP가 민감한 정보의 잠재적인 일치 항목을 감지할 때마다 일치 항목에 'Very unlikely'에서 'Very likely' 범위의 가능성 값을 할당합니다. 여기서 가능성 값을 설정하면 Cloud DLP는 이 가능성 값 이상에 해당하는 데이터만 비교하게 됩니다.

기본값인 '가능성 있음'은 대부분의 용도에 적합합니다. 일반적으로 결과가 너무 많이 검색되면 슬라이더를 위로 이동합니다. 일치 항목 결과가 너무 적으면 슬라이더를 아래로 이동합니다.

완료되었으면 계속을 클릭합니다.

작업 추가

작업 추가 단계에서 작업 완료 후 Cloud DLP가 수행할 작업을 선택합니다.

선택 가능한 옵션은 다음과 같습니다.

  • BigQuery에 저장: 이 옵션은 검색 결과를 BigQuery 테이블에 저장합니다. BigQuery에 저장되는 검색 결과에는 각 검색 결과의 위치 및 일치 가능성에 대한 세부정보가 포함됩니다. 검색 결과를 저장하지 않으면 검색 결과 개수 및 infoType에 대한 통계만 완료된 작업에 포함됩니다. 테이블 ID를 지정하지 않으면 BigQuery가 새 테이블에 기본 이름을 지정합니다. 기존 테이블을 지정하면 검색 결과가 여기에 추가됩니다. 각 일치 결과에 상황별 텍스트를 포함하려면 인용 포함 체크박스를 선택합니다.
  • Pub/Sub에 게시: 이 옵션은 작업이 완료될 때 Pub/Sub에 알림 메시지를 보냅니다. 새 주제를 클릭하여 알림을 게시하려는 주제 이름을 하나 이상 지정합니다.
  • Google Cloud Security Command Center에 게시: 이 옵션은 결과 요약을 Security Command Center에 게시합니다. 자세한 내용은 Cloud DLP 스캔 결과를 Security Command Center로 보내기를 참조하세요.
  • Data Catalog에 게시: Google Cloud의 메타데이터 관리 서비스 인 Data Catalog로 검사 결과를 보내려면 이 옵션을 선택합니다.
  • Stackdriver에 게시: Google Cloud의 작업 제품군인 Cloud Monitoring으로 검사 결과를 보내려면 이 옵션을 선택합니다.
  • 이메일로 알림: 이 옵션은 작업이 완료될 때 Cloud DLP가 프로젝트 소유자 및 편집자에게 이메일을 보내도록 설정합니다.

작업 선택을 마쳤으면 계속을 클릭합니다.

검토

검토 섹션에는 방금 지정한 작업 설정이 JSON 형식으로 요약되어 있습니다.

만들기를 클릭하여 작업을 만들고(일정을 지정하지 않은 경우) 작업을 한 번 실행합니다. 상태 및 기타 정보가 포함된 작업 정보 페이지가 나타납니다. 작업이 현재 실행 중이면 취소 버튼을 클릭하여 작업을 중지할 수 있습니다. 삭제를 클릭하여 작업을 삭제할 수도 있습니다.

기본 Cloud DLP 페이지로 돌아가려면 Cloud Console에서 뒤로 화살표를 클릭합니다.

프로토콜

작업은 DLP API에서 DlpJobs 리소스로 표현됩니다. DlpJob 리소스의 projects.dlpJobs.create 메서드를 사용하여 새 작업을 만들 수 있습니다.

이 샘플 JSON은 지정된 Cloud DLP REST 엔드포인트에 대한 POST 요청으로 보낼 수 있습니다. 이 JSON 예시는 Cloud DLP에서 작업을 만드는 방법을 보여줍니다. 작업은 Datastore 검사 스캔입니다.

아래에 포함된 API 탐색기를 사용하여 빠르게 시도해 볼 수 있습니다. API 탐색기에서 생성된 것이라도, 요청이 성공하면 작업이 생성됩니다. JSON을 사용하여 Cloud DLP API로 요청을 전송하는 방법에 대한 일반적인 정보는 JSON 빠른 시작을 참조하세요.

JSON 입력:

{
  "inspectJob": {
    "storageConfig": {
      "bigQueryOptions": {
        "tableReference": {
          "projectId": "bigquery-public-data",
          "datasetId": "san_francisco_sfpd_incidents",
          "tableId": "sfpd_incidents"
        }
      },
      "timespanConfig": {
        "startTime": "2020-01-01T00:00:01Z",
        "endTime": "2020-01-31T23:59:59Z",
        "timestampField": {
          "name": "timestamp"
        }
      }
    },
    "inspectConfig": {
      "infoTypes": [
        {
          "name": "PERSON_NAME"
        },
        {
          "name": "STREET_ADDRESS"
        }
      ],
      "excludeInfoTypes": false,
      "includeQuote": true,
      "minLikelihood": "LIKELY"
    },
    "actions": [
      {
        "saveFindings": {
          "outputConfig": {
            "table": {
              "projectId": "[PROJECT-ID]",
              "datasetId": "[DATASET-ID]"
            }
          }
        }
      }
    ]
  }
}

JSON 출력:

다음 출력은 작업이 성공적으로 만들어졌음을 나타냅니다.

{
  "name": "projects/[PROJECT-ID]/dlpJobs/[JOB-ID]",
  "type": "INSPECT_JOB",
  "state": "PENDING",
  "inspectDetails": {
    "requestedOptions": {
      "snapshotInspectTemplate": {},
      "jobConfig": {
        "storageConfig": {
          "bigQueryOptions": {
            "tableReference": {
              "projectId": "bigquery-public-data",
              "datasetId": "san_francisco_sfpd_incidents",
              "tableId": "sfpd_incidents"
            }
          },
          "timespanConfig": {
            "startTime": "2020-01-01T00:00:01Z",
            "endTime": "2020-01-31T23:59:59Z",
            "timestampField": {
              "name": "timestamp"
            }
          }
        },
        "inspectConfig": {
          "infoTypes": [
            {
              "name": "PERSON_NAME"
            },
            {
              "name": "STREET_ADDRESS"
            }
          ],
          "minLikelihood": "LIKELY",
          "limits": {},
          "includeQuote": true
        },
        "actions": [
          {
            "saveFindings": {
              "outputConfig": {
                "table": {
                  "projectId": "[PROJECT-ID]",
                  "datasetId": "[DATASET-ID]",
                  "tableId": "[TABLE-ID]"
                }
              }
            }
          }
        ]
      }
    },
    "result": {}
  },
  "createTime": "2020-07-10T07:26:33.643Z"
}

자바


import com.google.cloud.dlp.v2.DlpServiceClient;
import com.google.privacy.dlp.v2.Action;
import com.google.privacy.dlp.v2.CloudStorageOptions;
import com.google.privacy.dlp.v2.CreateDlpJobRequest;
import com.google.privacy.dlp.v2.DlpJob;
import com.google.privacy.dlp.v2.InfoType;
import com.google.privacy.dlp.v2.InspectConfig;
import com.google.privacy.dlp.v2.InspectJobConfig;
import com.google.privacy.dlp.v2.Likelihood;
import com.google.privacy.dlp.v2.LocationName;
import com.google.privacy.dlp.v2.StorageConfig;
import com.google.privacy.dlp.v2.StorageConfig.TimespanConfig;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class JobsCreate {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String gcsPath = "gs://" + "your-bucket-name" + "path/to/file.txt";
    createJobs(projectId, gcsPath);
  }

  // Creates a DLP Job
  public static void createJobs(String projectId, String gcsPath) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) {

      // Set autoPopulateTimespan to true to scan only new content
      boolean autoPopulateTimespan = true;
      TimespanConfig timespanConfig =
          TimespanConfig.newBuilder()
              .setEnableAutoPopulationOfTimespanConfig(autoPopulateTimespan)
              .build();

      // Specify the GCS file to be inspected.
      CloudStorageOptions cloudStorageOptions =
          CloudStorageOptions.newBuilder()
              .setFileSet(CloudStorageOptions.FileSet.newBuilder().setUrl(gcsPath))
              .build();
      StorageConfig storageConfig =
          StorageConfig.newBuilder()
              .setCloudStorageOptions(cloudStorageOptions)
              .setTimespanConfig(timespanConfig)
              .build();

      // Specify the type of info the inspection will look for.
      // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types
      List<InfoType> infoTypes =
          Stream.of("EMAIL_ADDRESS", "PERSON_NAME", "LOCATION", "PHONE_NUMBER")
              .map(it -> InfoType.newBuilder().setName(it).build())
              .collect(Collectors.toList());
      // The minimum likelihood required before returning a match:
      // See: https://cloud.google.com/dlp/docs/likelihood
      Likelihood minLikelihood = Likelihood.UNLIKELY;

      // The maximum number of findings to report (0 = server maximum)
      InspectConfig.FindingLimits findingLimits =
          InspectConfig.FindingLimits.newBuilder().setMaxFindingsPerItem(100).build();

      InspectConfig inspectConfig =
          InspectConfig.newBuilder()
              .addAllInfoTypes(infoTypes)
              .setIncludeQuote(true)
              .setMinLikelihood(minLikelihood)
              .setLimits(findingLimits)
              .build();

      // Specify the action that is triggered when the job completes.
      Action.PublishSummaryToCscc publishSummaryToCscc =
          Action.PublishSummaryToCscc.getDefaultInstance();
      Action action = Action.newBuilder().setPublishSummaryToCscc(publishSummaryToCscc).build();

      // Configure the inspection job we want the service to perform.
      InspectJobConfig inspectJobConfig =
          InspectJobConfig.newBuilder()
              .setInspectConfig(inspectConfig)
              .setStorageConfig(storageConfig)
              .addActions(action)
              .build();

      // Construct the job creation request to be sent by the client.
      CreateDlpJobRequest createDlpJobRequest =
          CreateDlpJobRequest.newBuilder()
              .setParent(LocationName.of(projectId, "global").toString())
              .setInspectJob(inspectJobConfig)
              .build();

      // Send the job creation request and process the response.
      DlpJob createdDlpJob = dlpServiceClient.createDlpJob(createDlpJobRequest);
      System.out.println("Job created successfully: " + createdDlpJob.getName());
    }
  }
}

새 작업 트리거 만들기

새 Cloud DLP 작업 트리거를 만들려면 다음 안내를 따르세요.

콘솔

  1. Cloud Console에서 Cloud DLP를 엽니다.

    Cloud DLP UI로 이동

  2. 만들기 메뉴에서 작업 또는 작업 트리거를 선택합니다.

    또는 다음 버튼을 클릭합니다.

    새 작업 트리거 만들기

작업 트리거 만들기 페이지에는 다음 섹션이 포함되어 있습니다.

입력 데이터 선택

이름

작업 트리거의 이름을 입력합니다. 문자, 숫자, 하이픈을 사용할 수 있습니다. 작업 트리거 이름 지정은 선택사항입니다. 이름을 입력하지 않으면 Cloud DLP가 작업 트리거에 고유 번호 식별자를 부여합니다.

위치

스토리지 유형 메뉴에서 스캔할 데이터를 저장할 저장소 종류를 선택합니다.

  • Cloud Storage: 스캔할 버킷의 URL을 입력하거나 위치 유형 메뉴에서 포함/제외를 선택한 다음 찾아보기를 클릭하여 스캔할 버킷 또는 하위 폴더로 이동합니다. 재귀적으로 폴더 스캔 체크박스를 선택하여 지정된 디렉터리와 포함된 모든 디렉터리를 스캔합니다. 지정된 디렉터리만 스캔하고 포함된 하위 디렉터리는 스캔하지 않으려면 이 체크박스를 선택하지 마세요.
  • BigQuery: 스캔할 프로젝트, 데이터세트, 테이블의 식별자를 입력하세요.
  • Datastore: 스캔할 프로젝트, 네임스페이스(선택사항), 종류의 식별자를 입력하세요.

샘플링

샘플링은 데이터가 매우 많은 경우 리소스를 절약할 수 있는 선택적인 방법입니다.

샘플링에서는 선택된 데이터를 모두 스캔할지 아니면 특정 비율을 지정하여 데이터를 일부만 스캔할지 선택할 수 있습니다. 샘플링은 스캔하는 스토리지 저장소 유형에 따라 다르게 작동합니다.

  • BigQuery의 경우에는 스캔에 포함하도록 지정한 파일 비율에 따라 선택된 전체 행의 일부를 샘플링할 수 있습니다.
  • Cloud Storage의 경우 파일별로 스캔할 최대 바이트 크기에 지정된 크기를 초과하는 파일이 있으면, Cloud DLP가 최대 파일 크기까지만 파일을 스캔하고, 다음 파일로 이동합니다.

샘플링을 사용하려면 첫 번째 메뉴에서 다음 옵션 중 하나를 선택합니다.

  • 위에서부터 샘플링 시작: Cloud DLP가 데이터의 시작 부분에서 부분 스캔을 시작합니다. BigQuery의 경우 첫 번째 행에서 스캔을 시작합니다. Cloud Storage의 경우 각 파일의 시작 부분에서 스캔을 시작하고, Cloud DLP가 지정된 최대 파일 크기(위 참조)까지 스캔했으면 스캔을 중지합니다.
  • 임의 위치에서 샘플링 시작: Cloud DLP가 데이터 내의 무작위 위치에서 부분 스캔을 시작합니다. BigQuery의 경우 무작위 행에서 스캔을 시작합니다. Cloud Storage의 경우 이 설정은 지정된 최대 크기를 초과하는 파일에만 적용됩니다. Cloud DLP는 전체 파일 중에서 최대 파일 크기 미만의 파일을 스캔하고, 최대 파일 크기 이상의 파일은 최댓값까지만 스캔합니다.

부분 스캔을 수행하려면 스캔하려는 데이터의 비율도 선택해야 합니다. 슬라이더를 사용하여 비율을 설정하세요.

고급 구성

Cloud Storage 버킷 또는 BigQuery 테이블 스캔을 위한 작업 트리거를 만들 때 고급 구성을 지정하여 검색 범위를 좁힐 수 있습니다. 구성 가능한 옵션은 다음과 같습니다.

  • 파일(Cloud Storage만 해당): 텍스트, 바이너리, 이미지 파일이 포함된 스캔 대상 파일 유형입니다.
  • 식별 필드(BigQuery만 해당): 테이블 내의 고유한 행 식별자입니다.
  • Cloud Storage의 경우 파일별로 스캔할 최대 바이트 크기에 지정된 크기를 초과하는 파일이 있으면, Cloud DLP가 최대 파일 크기까지만 파일을 스캔하고, 다음 파일로 이동합니다.

샘플링을 사용하려면 스캔할 데이터의 비율을 선택합니다. 슬라이더를 사용하여 비율을 설정하세요. 그런 다음 첫 번째 메뉴에서 다음 옵션 중 하나를 선택합니다.

  • 위에서부터 샘플링 시작: Cloud DLP가 데이터의 시작 부분에서 부분 스캔을 시작합니다. BigQuery의 경우 첫 번째 행에서 스캔을 시작합니다. Cloud Storage의 경우 각 파일의 시작 부분에서 스캔을 시작하고, Cloud DLP가 지정된 최대 파일 크기(위 참조)까지 스캔했으면 스캔을 중지합니다.
  • 임의 위치에서 샘플링 시작: Cloud DLP가 데이터 내의 무작위 위치에서 부분 스캔을 시작합니다. BigQuery의 경우 무작위 행에서 스캔을 시작합니다. Cloud Storage의 경우 이 설정은 지정된 최대 크기를 초과하는 파일에만 적용됩니다. Cloud DLP는 전체 파일 중에서 최대 파일 크기 미만의 파일을 스캔하고, 최대 파일 크기 이상의 파일은 최댓값까지만 스캔합니다.

파일

Cloud Storage에 저장된 파일의 경우, 파일에서 스캔에 포함할 유형을 지정할 수 있습니다.

바이너리, 텍스트, 이미지, Microsoft Word, PDF, Apache Avro 파일 중에서 선택할 수 있습니다. Cloud DLP가 Cloud Storage 버킷에서 스캔할 수 있는 파일 확장자의 전체 목록은 FileType의 API 참조 페이지에 포함되어 있습니다. 바이너리를 선택하면 Cloud DLP가 인식되지 않는 유형의 파일을 스캔합니다.

식별 필드

BigQuery의 테이블의 경우 식별 필드에서 Cloud DLP가 특정 필드에 값이 있는 행만 스캔하도록 지정할 수 있습니다.

필드를 추가하려면 식별 필드 추가를 클릭합니다. 필드 이름을 입력합니다. 필요에 따라 중첩된 필드를 지정하려면 점 표기법을 사용합니다.

필드는 원하는 만큼 추가할 수 있습니다. 필드를 삭제하려면 삭제하려는 필드 옆에 있는 항목 삭제(휴지통 아이콘)를 클릭합니다.

감지 구성

감지 구성 섹션에서는 스캔할 민감한 정보 유형을 지정합니다. 이 섹션을 완료하는 것은 선택사항입니다. 이 섹션을 건너뛰면 Cloud DLP가 ALL_BASIC infoType 감지기에 해당하는 가장 일반적인 옵션을 사용하여 데이터에서 일반적인 유형의 민감한 정보를 스캔합니다.

템플릿

선택적으로 Cloud DLP 템플릿을 사용하여 이전에 지정한 구성 정보를 재사용할 수 있습니다.

사용할 템플릿을 이미 만든 경우 템플릿 이름 필드를 클릭하여 기존 검사 템플릿 목록을 확인합니다. 사용하려는 템플릿 이름을 선택하거나 입력합니다.

템플릿 만들기에 대한 자세한 내용은 Cloud DLP 검사 템플릿 만들기를 참조하세요.

InfoType

InfoType 감지기는 특정 유형의 민감한 정보를 찾습니다. 예를 들어 Cloud DLP에 기본 제공되는 US_SOCIAL_SECURITY_NUMBER infoType 감지기는 미국 사회 보장 번호를 찾습니다. 기본 제공 infoType 감지기 외에 고유 한 커스텀 infoType 감지기도 만들 수 있습니다.

InfoTypes에서 스캔할 데이터 유형에 해당하는 infoType 감지기를 선택합니다. 또한 모든 기본 infoType을 스캔하려면 이 필드를 비워둘 수 있습니다. 각 감지기에 대한 자세한 내용은 InfoType 감지기 참조를 확인하세요.

또한 커스텀 infoType 섹션에 커스텀 infoType 감지기를 추가하고 검사 규칙 세트 섹션에서 기본 제공 infoType 감지기와 커스텀 infoType 감지기를 모두 맞춤설정할 수 있습니다.

커스텀 infoType

To add a custom infoType detector:

  1. Click Add custom infoType.
  2. Choose the type of custom infoType detector you want to create:
    • Words or phrases: Matches on one or more words or phrases that you enter into the field. Use this custom infoType when you have just a few words or phrases to search for. Give your custom infoType a name, and then, under List of words or phrases, type the word or phrase you want Cloud DLP to match on. To search on multiple words or phrases, press Enter after each one. For more information, see Creating a regular custom dictionary detector.
    • Dictionary path: Searches your content for items in a list of words and phrases. The list is stored in a text file in Cloud Storage. Use this custom infoType when you have anywhere from a few to several hundred thousand words or phrases to search for. This method is also useful if your list contains sensitive elements and you don't want to store them inside of a job or template. Give your custom infoType a name, and then, under Dictionary location, enter or browse to the Cloud Storage path where the dictionary file is stored. For more information, see Creating a regular custom dictionary detector.
    • Regex: Matches content based on a regular expression. Give your custom infoType a name, and then, in the Regex field, enter a regex pattern to match words and phrases. See the supported regex syntax.
    • Stored infoType: This option adds a stored custom dictionary detector, which is a kind of dictionary detector that is built from either a large text file stored in Cloud Storage or a single column of a BigQuery table. Use this kind of custom infoType when you have anywhere from several hundred thousand to tens of millions of words or phrases to search for. Be aware that this is the only option in this menu for which you must have already created the stored infoType to use it. Give your custom infoType a name (different from the name you gave the stored infoType), and then, in the Stored infoType field, enter the name of the stored infoType. For more information about creating stored custom dictionaries, see Creating a stored custom dictionary detector.

Click Add custom infoType again to add additional custom infoType detectors.

검사 규칙 세트

Inspection rulesets allow you to customize both built-in and custom infoType detectors using context rules. The two types of inspection rules are:

To add a new ruleset, first specify one or more built-in or custom infoType detectors in the InfoTypes section. These are the infoType detectors that your rulesets will be modifying. Then, do the following:

  1. Click in the Choose infoTypes field. The infoType or infoTypes you specified previously appear below the field in a menu, as shown here:
  2. Screenshot of the DLP UI's inspection rulesets configuration.
  3. Choose an infoType from the menu, and then click Add rule. A menu appears with the two options Hotword rule and Exclusion rule.

For hotword rules, choose Hotword rules. Then, do the following:

  1. In the Hotword field, enter a regular expression that Cloud DLP should look for.
  2. From the Hotword proximity menu, choose whether the hotword you entered is found before or after the chosen infoType.
  3. In Hotword distance from infoType, enter the approximate number of characters between the hotword and the chosen infoType.
  4. In Confidence level adjustment, choose whether to assign matches a fixed likelihood level, or to increase or decrease the default likelihood level by a certain amount.

For exclusion rules, choose Exclusion rules. Then, do the following:

  1. In the Exclude field, enter a regular expression (regex) that Cloud DLP should look for.
  2. From the Matching type menu, choose one of the following:
    • Full match: The finding must completely match the regex.
    • Partial match: A substring of the finding can match the regex.
    • Inverse match: The finding doesn't match the regex.

You can add additional hotword or exclusion rules and rulesets to further refine your scan results.

신뢰도 기준

Cloud DLP가 민감한 정보의 잠재적인 일치 항목을 감지할 때마다 일치 항목에 'Very unlikely'에서 'Very likely' 범위의 가능성 값을 할당합니다. 여기서 가능성 값을 설정하면 Cloud DLP는 이 가능성 값 이상에 해당하는 데이터만 비교하게 됩니다.

기본값인 '가능성 있음'은 대부분의 용도에 적합합니다. 일반적으로 결과가 너무 많이 검색되면 슬라이더를 위로 이동합니다. 일치 항목 결과가 너무 적으면 슬라이더를 아래로 이동합니다.

완료되었으면 계속을 클릭합니다.

작업 추가

작업 추가 단계에서 작업 완료 후 Cloud DLP가 수행할 작업을 선택합니다.

선택 가능한 옵션은 다음과 같습니다.

  • BigQuery에 저장: 이 옵션은 검색 결과를 BigQuery 테이블에 저장합니다. BigQuery에 저장되는 검색 결과에는 각 검색 결과의 위치 및 일치 가능성에 대한 세부정보가 포함됩니다. 검색 결과를 저장하지 않으면 검색 결과 개수 및 infoType에 대한 통계만 완료된 작업에 포함됩니다. 테이블 ID를 지정하지 않으면 BigQuery가 새 테이블에 기본 이름을 지정합니다. 기존 테이블을 지정하면 검색 결과가 여기에 추가됩니다. 각 일치 결과에 상황별 텍스트를 포함하려면 인용 포함 체크박스를 선택합니다.
  • Pub/Sub에 게시: 이 옵션은 작업이 완료될 때 Pub/Sub에 알림 메시지를 보냅니다. 새 주제를 클릭하여 알림을 게시하려는 주제 이름을 하나 이상 지정합니다.
  • Google Cloud Security Command Center에 게시: 이 옵션은 결과 요약을 Security Command Center에 게시합니다. 자세한 내용은 Cloud DLP 스캔 결과를 Security Command Center로 보내기를 참조하세요.
  • Data Catalog에 게시: Google Cloud의 메타데이터 관리 서비스 인 Data Catalog로 검사 결과를 보내려면 이 옵션을 선택합니다.
  • Stackdriver에 게시: Google Cloud의 작업 제품군인 Cloud Monitoring으로 검사 결과를 보내려면 이 옵션을 선택합니다.
  • 이메일로 알림: 이 옵션은 작업이 완료될 때 Cloud DLP가 프로젝트 소유자 및 편집자에게 이메일을 보내도록 설정합니다.

작업 선택을 마쳤으면 계속을 클릭합니다.

일정

일정 섹션에서 다음 두 가지를 수행할 수 있습니다.

  • 시간 범위 지정: 이 옵션은 스캔할 파일 또는 행을 날짜로 제한합니다. 시작 시간을 클릭하여 포함할 가장 빠른 타임스탬프를 지정합니다. 모든 파일을 지정하려면 이 값을 비워 둡니다. 종료 시간을 클릭하여 포함할 가장 늦은 파일 타임스탬프를 지정합니다. 타임스탬프 상한값을 지정하지 않으려면 이 값을 비워 둡니다.
  • 주기적인 일정으로 작업을 실행하는 트리거 만들기: 이 옵션은 작업 트리거를 만들고 개발자가 지정한 작업을 주기적인 일정에 따라 실행하도록 설정합니다. 기본값은 최솟값이기도 한 24시간입니다. 최댓값은 60일입니다. Cloud DLP가 새 파일 또는 행만 스캔하도록 하려면 새 콘텐츠만 스캔 체크박스를 선택합니다.

검토

검토 섹션에는 방금 지정한 작업 설정이 JSON 형식으로 요약되어 있습니다.

만들기를 클릭하여 작업 트리거를 만듭니다(일정을 지정한 경우). 상태 및 기타 정보가 포함된 작업 트리거의 정보 페이지가 나타납니다. 작업이 현재 실행 중이면 취소 버튼을 클릭하여 작업을 중지할 수 있습니다. 삭제를 클릭하여 작업 트리거를 삭제할 수도 있습니다.

기본 Cloud DLP 페이지로 돌아가려면 Cloud Console에서 뒤로 화살표를 클릭합니다.

프로토콜

작업 트리거는 DLP API에서 JobTrigger 리소스로 표시됩니다. JobTrigger 리소스의 projects.jobTriggers.create 메서드를 사용하여 새 작업 트리거를 만들 수 있습니다.

이 샘플 JSON은 지정된 Cloud DLP REST 엔드포인트에 대한 POST 요청으로 보낼 수 있습니다. 이 JSON 예시는 Cloud DLP에서 작업 트리거를 만드는 방법을 보여줍니다. 여기서 트리거되는 작업은 Datastore 검사 스캔입니다. 생성되는 작업 트리거는 86,400초(또는 24시간)마다 실행됩니다.

아래에 포함된 API 탐색기를 사용하여 빠르게 시도해 볼 수 있습니다. API 탐색기에서 생성된 것이라도, 요청이 성공하면 새로운 일정의 작업 트리거가 생성됩니다. JSON을 사용하여 Cloud DLP API로 요청을 전송하는 방법에 대한 일반적인 정보는 JSON 빠른 시작을 참조하세요.

JSON 입력:

{
  "jobTrigger":{
    "displayName":"JobTrigger1",
    "description":"Starts a DLP scan job of a Datastore kind",
    "triggers":[
      {
        "schedule":{
          "recurrencePeriodDuration":"86400s"
        }
      }
    ],
    "status":"HEALTHY",
    "inspectJob":{
      "storageConfig":{
        "datastoreOptions":{
          "kind":{
            "name":"Example-Kind"
          },
          "partitionId":{
            "projectId":"[PROJECT_ID]",
            "namespaceId":"[NAMESPACE_ID]"
          }
        }
      },
      "inspectConfig":{
        "infoTypes":[
          {
            "name":"PHONE_NUMBER"
          }
        ],
        "excludeInfoTypes":false,
        "includeQuote":true,
        "minLikelihood":"LIKELY"
      },
      "actions":[
        {
          "saveFindings":{
            "outputConfig":{
              "table":{
                "projectId":"[PROJECT_ID]",
                "datasetId":"[BIGQUERY_DATASET_NAME]",
                "tableId":"[BIGQUERY_TABLE_NAME]"
              }
            }
          }
        }
      ]
    }
  }
}

JSON 출력:

다음 출력은 작업 트리거가 성공적으로 만들어졌음을 나타냅니다.

{
  "name":"projects/[PROJECT_ID]/jobTriggers/[JOB_TRIGGER_NAME]",
  "displayName":"JobTrigger1",
  "description":"Starts a DLP scan job of a Datastore kind",
  "inspectJob":{
    "storageConfig":{
      "datastoreOptions":{
        "partitionId":{
          "projectId":"[PROJECT_ID]",
          "namespaceId":"[NAMESPACE_ID]"
        },
        "kind":{
          "name":"Example-Kind"
        }
      }
    },
    "inspectConfig":{
      "infoTypes":[
        {
          "name":"PHONE_NUMBER"
        }
      ],
      "minLikelihood":"LIKELY",
      "limits":{

      },
      "includeQuote":true
    },
    "actions":[
      {
        "saveFindings":{
          "outputConfig":{
            "table":{
              "projectId":"[PROJECT_ID]",
              "datasetId":"[BIGQUERY_DATASET_NAME]",
              "tableId":"[BIGQUERY_TABLE_NAME]"
            }
          }
        }
      }
    ]
  },
  "triggers":[
    {
      "schedule":{
        "recurrencePeriodDuration":"86400s"
      }
    }
  ],
  "createTime":"2018-11-30T01:52:41.171857Z",
  "updateTime":"2018-11-30T01:52:41.171857Z",
  "status":"HEALTHY"
}

자바


import com.google.cloud.dlp.v2.DlpServiceClient;
import com.google.privacy.dlp.v2.CloudStorageOptions;
import com.google.privacy.dlp.v2.CreateJobTriggerRequest;
import com.google.privacy.dlp.v2.InfoType;
import com.google.privacy.dlp.v2.InspectConfig;
import com.google.privacy.dlp.v2.InspectJobConfig;
import com.google.privacy.dlp.v2.JobTrigger;
import com.google.privacy.dlp.v2.LocationName;
import com.google.privacy.dlp.v2.Schedule;
import com.google.privacy.dlp.v2.StorageConfig;
import com.google.privacy.dlp.v2.StorageConfig.TimespanConfig;
import com.google.protobuf.Duration;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class TriggersCreate {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String gcsPath = "gs://" + "your-bucket-name" + "path/to/file.txt";
    createTrigger(projectId, gcsPath);
  }

  public static void createTrigger(String projectId, String gcsPath) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) {

      // Set autoPopulateTimespan to true to scan only new content
      boolean autoPopulateTimespan = true;
      TimespanConfig timespanConfig =
          TimespanConfig.newBuilder()
              .setEnableAutoPopulationOfTimespanConfig(autoPopulateTimespan)
              .build();

      // Specify the GCS file to be inspected.
      CloudStorageOptions cloudStorageOptions =
          CloudStorageOptions.newBuilder()
              .setFileSet(CloudStorageOptions.FileSet.newBuilder().setUrl(gcsPath))
              .build();
      StorageConfig storageConfig =
          StorageConfig.newBuilder()
              .setCloudStorageOptions(cloudStorageOptions)
              .setTimespanConfig(timespanConfig)
              .build();

      // Specify the type of info the inspection will look for.
      // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types
      List<InfoType> infoTypes =
          Stream.of("PHONE_NUMBER", "EMAIL_ADDRESS", "CREDIT_CARD_NUMBER")
              .map(it -> InfoType.newBuilder().setName(it).build())
              .collect(Collectors.toList());

      InspectConfig inspectConfig = InspectConfig.newBuilder().addAllInfoTypes(infoTypes).build();

      // Configure the inspection job we want the service to perform.
      InspectJobConfig inspectJobConfig =
          InspectJobConfig.newBuilder()
              .setInspectConfig(inspectConfig)
              .setStorageConfig(storageConfig)
              .build();

      // Set scanPeriod to the number of days between scans (minimum: 1 day)
      int scanPeriod = 1;

      // Optionally set a display name of max 100 chars and a description of max 250 chars
      String displayName = "Daily Scan";
      String description = "A daily inspection for personally identifiable information.";

      // Schedule scan of GCS bucket every scanPeriod number of days (minimum = 1 day)
      Duration duration = Duration.newBuilder().setSeconds(scanPeriod * 24 * 3600).build();
      Schedule schedule = Schedule.newBuilder().setRecurrencePeriodDuration(duration).build();
      JobTrigger.Trigger trigger = JobTrigger.Trigger.newBuilder().setSchedule(schedule).build();
      JobTrigger jobTrigger =
          JobTrigger.newBuilder()
              .setInspectJob(inspectJobConfig)
              .setDisplayName(displayName)
              .setDescription(description)
              .setStatus(JobTrigger.Status.HEALTHY)
              .addTriggers(trigger)
              .build();

      // Create scan request to be sent by client
      CreateJobTriggerRequest createJobTriggerRequest =
          CreateJobTriggerRequest.newBuilder()
              .setParent(LocationName.of(projectId, "global").toString())
              .setJobTrigger(jobTrigger)
              .build();

      // Send the scan request and process the response
      JobTrigger createdJobTrigger = dlpServiceClient.createJobTrigger(createJobTriggerRequest);

      System.out.println("Created Trigger: " + createdJobTrigger.getName());
      System.out.println("Display Name: " + createdJobTrigger.getDisplayName());
      System.out.println("Description: " + createdJobTrigger.getDescription());
    }
  }
}

Node.js

// Imports the Google Cloud Data Loss Prevention library
const DLP = require('@google-cloud/dlp');

// Instantiates a client
const dlp = new DLP.DlpServiceClient();

// The project ID to run the API call under
// const projectId = 'my-project';

// (Optional) The name of the trigger to be created.
// const triggerId = 'my-trigger';

// (Optional) A display name for the trigger to be created
// const displayName = 'My Trigger';

// (Optional) A description for the trigger to be created
// const description = "This is a sample trigger.";

// The name of the bucket to scan.
// const bucketName = 'YOUR-BUCKET';

// Limit scan to new content only.
// const autoPopulateTimespan = true;

// How often to wait between scans, in days (minimum = 1 day)
// const scanPeriod = 1;

// The infoTypes of information to match
// const infoTypes = [{ name: 'PHONE_NUMBER' }, { name: 'EMAIL_ADDRESS' }, { name: 'CREDIT_CARD_NUMBER' }];

// The minimum likelihood required before returning a match
// const minLikelihood = 'LIKELIHOOD_UNSPECIFIED';

// The maximum number of findings to report per request (0 = server maximum)
// const maxFindings = 0;

async function createTrigger() {
  // Get reference to the bucket to be inspected
  const storageItem = {
    cloudStorageOptions: {
      fileSet: {url: `gs://${bucketName}/*`},
    },
    timeSpanConfig: {
      enableAutoPopulationOfTimespanConfig: autoPopulateTimespan,
    },
  };

  // Construct job to be triggered
  const job = {
    inspectConfig: {
      infoTypes: infoTypes,
      minLikelihood: minLikelihood,
      limits: {
        maxFindingsPerRequest: maxFindings,
      },
    },
    storageConfig: storageItem,
  };

  // Construct trigger creation request
  const request = {
    parent: `projects/${projectId}/locations/global`,
    jobTrigger: {
      inspectJob: job,
      displayName: displayName,
      description: description,
      triggers: [
        {
          schedule: {
            recurrencePeriodDuration: {
              seconds: scanPeriod * 60 * 60 * 24, // Trigger the scan daily
            },
          },
        },
      ],
      status: 'HEALTHY',
    },
    triggerId: triggerId,
  };

  // Run trigger creation request
  const [trigger] = await dlp.createJobTrigger(request);
  console.log(`Successfully created trigger ${trigger.name}.`);
}

createTrigger();

Python

def create_trigger(
    project,
    bucket,
    scan_period_days,
    info_types,
    trigger_id=None,
    display_name=None,
    description=None,
    min_likelihood=None,
    max_findings=None,
    auto_populate_timespan=False,
):
    """Creates a scheduled Data Loss Prevention API inspect_content trigger.
    Args:
        project: The Google Cloud project id to use as a parent resource.
        bucket: The name of the GCS bucket to scan. This sample scans all
            files in the bucket using a wildcard.
        scan_period_days: How often to repeat the scan, in days.
            The minimum is 1 day.
        info_types: A list of strings representing info types to look for.
            A full list of info type categories can be fetched from the API.
        trigger_id: The id of the trigger. If omitted, an id will be randomly
            generated.
        display_name: The optional display name of the trigger.
        description: The optional description of the trigger.
        min_likelihood: A string representing the minimum likelihood threshold
            that constitutes a match. One of: 'LIKELIHOOD_UNSPECIFIED',
            'VERY_UNLIKELY', 'UNLIKELY', 'POSSIBLE', 'LIKELY', 'VERY_LIKELY'.
        max_findings: The maximum number of findings to report; 0 = no maximum.
        auto_populate_timespan: Automatically populates time span config start
            and end times in order to scan new content only.
    Returns:
        None; the response from the API is printed to the terminal.
    """

    # Import the client library
    import google.cloud.dlp

    # Instantiate a client.
    dlp = google.cloud.dlp_v2.DlpServiceClient()

    # Prepare info_types by converting the list of strings into a list of
    # dictionaries (protos are also accepted).
    info_types = [{"name": info_type} for info_type in info_types]

    # Construct the configuration dictionary. Keys which are None may
    # optionally be omitted entirely.
    inspect_config = {
        "info_types": info_types,
        "min_likelihood": min_likelihood,
        "limits": {"max_findings_per_request": max_findings},
    }

    # Construct a cloud_storage_options dictionary with the bucket's URL.
    url = "gs://{}/*".format(bucket)
    storage_config = {
        "cloud_storage_options": {"file_set": {"url": url}},
        # Time-based configuration for each storage object.
        "timespan_config": {
            # Auto-populate start and end times in order to scan new objects
            # only.
            "enable_auto_population_of_timespan_config": auto_populate_timespan
        },
    }

    # Construct the job definition.
    job = {"inspect_config": inspect_config, "storage_config": storage_config}

    # Construct the schedule definition:
    schedule = {
        "recurrence_period_duration": {"seconds": scan_period_days * 60 * 60 * 24}
    }

    # Construct the trigger definition.
    job_trigger = {
        "inspect_job": job,
        "display_name": display_name,
        "description": description,
        "triggers": [{"schedule": schedule}],
        "status": google.cloud.dlp_v2.JobTrigger.Status.HEALTHY,
    }

    # Convert the project id into a full resource id.
    parent = f"projects/{project}"

    # Call the API.
    response = dlp.create_job_trigger(
        request={"parent": parent, "job_trigger": job_trigger, "trigger_id": trigger_id}
    )

    print("Successfully created trigger {}".format(response.name))

Go

import (
	"context"
	"fmt"
	"io"

	dlp "cloud.google.com/go/dlp/apiv2"
	"github.com/golang/protobuf/ptypes/duration"
	dlppb "google.golang.org/genproto/googleapis/privacy/dlp/v2"
)

// createTrigger creates a trigger with the given configuration.
func createTrigger(w io.Writer, projectID string, triggerID, displayName, description, bucketName string, infoTypeNames []string) error {
	// projectID := "my-project-id"
	// triggerID := "my-trigger"
	// displayName := "My Trigger"
	// description := "My trigger description"
	// bucketName := "my-bucket"
	// infoTypeNames := []string{"US_SOCIAL_SECURITY_NUMBER"}

	ctx := context.Background()

	client, err := dlp.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("dlp.NewClient: %v", err)
	}

	// Convert the info type strings to a list of InfoTypes.
	var infoTypes []*dlppb.InfoType
	for _, it := range infoTypeNames {
		infoTypes = append(infoTypes, &dlppb.InfoType{Name: it})
	}

	// Create a configured request.
	req := &dlppb.CreateJobTriggerRequest{
		Parent:    fmt.Sprintf("projects/%s/locations/global", projectID),
		TriggerId: triggerID,
		JobTrigger: &dlppb.JobTrigger{
			DisplayName: displayName,
			Description: description,
			Status:      dlppb.JobTrigger_HEALTHY,
			// Triggers control when the job will start.
			Triggers: []*dlppb.JobTrigger_Trigger{
				{
					Trigger: &dlppb.JobTrigger_Trigger_Schedule{
						Schedule: &dlppb.Schedule{
							Option: &dlppb.Schedule_RecurrencePeriodDuration{
								RecurrencePeriodDuration: &duration.Duration{
									Seconds: 10 * 60 * 60 * 24, // 10 days in seconds.
								},
							},
						},
					},
				},
			},
			// Job configures the job to run when the trigger runs.
			Job: &dlppb.JobTrigger_InspectJob{
				InspectJob: &dlppb.InspectJobConfig{
					InspectConfig: &dlppb.InspectConfig{
						InfoTypes:     infoTypes,
						MinLikelihood: dlppb.Likelihood_POSSIBLE,
						Limits: &dlppb.InspectConfig_FindingLimits{
							MaxFindingsPerRequest: 10,
						},
					},
					StorageConfig: &dlppb.StorageConfig{
						Type: &dlppb.StorageConfig_CloudStorageOptions{
							CloudStorageOptions: &dlppb.CloudStorageOptions{
								FileSet: &dlppb.CloudStorageOptions_FileSet{
									Url: "gs://" + bucketName + "/*",
								},
							},
						},
						// Time-based configuration for each storage object. See more at
						// https://cloud.google.com/dlp/docs/reference/rest/v2/InspectJobConfig#TimespanConfig
						TimespanConfig: &dlppb.StorageConfig_TimespanConfig{
							// Auto-populate start and end times in order to scan new objects only.
							EnableAutoPopulationOfTimespanConfig: true,
						},
					},
				},
			},
		},
	}

	// Send the request.
	resp, err := client.CreateJobTrigger(ctx, req)
	if err != nil {
		return fmt.Errorf("CreateJobTrigger: %v", err)
	}
	fmt.Fprintf(w, "Successfully created trigger: %v", resp.GetName())
	return nil
}

PHP

/**
 * Create a Data Loss Prevention API job trigger.
 */
use Google\Cloud\Dlp\V2\DlpServiceClient;
use Google\Cloud\Dlp\V2\JobTrigger;
use Google\Cloud\Dlp\V2\JobTrigger\Trigger;
use Google\Cloud\Dlp\V2\JobTrigger\Status;
use Google\Cloud\Dlp\V2\InspectConfig;
use Google\Cloud\Dlp\V2\InspectJobConfig;
use Google\Cloud\Dlp\V2\Schedule;
use Google\Cloud\Dlp\V2\CloudStorageOptions;
use Google\Cloud\Dlp\V2\CloudStorageOptions_FileSet;
use Google\Cloud\Dlp\V2\StorageConfig;
use Google\Cloud\Dlp\V2\StorageConfig_TimespanConfig;
use Google\Cloud\Dlp\V2\InfoType;
use Google\Cloud\Dlp\V2\Likelihood;
use Google\Cloud\Dlp\V2\InspectConfig\FindingLimits;
use Google\Protobuf\Duration;

/** Uncomment and populate these variables in your code */
// $callingProjectId = 'The project ID to run the API call under';
// $bucketName = 'The name of the bucket to scan';
// $triggerId = '';   // (Optional) The name of the trigger to be created';
// $displayName = ''; // (Optional) The human-readable name to give the trigger';
// $description = ''; // (Optional) A description for the trigger to be created';
// $scanPeriod = 1; // (Optional) How often to wait between scans, in days (minimum = 1 day)
// $autoPopulateTimespan = true; // (Optional) Automatically limit scan to new content only
// $maxFindings = 0; // (Optional) The maximum number of findings to report per request (0 = server maximum)

// Instantiate a client.
$dlp = new DlpServiceClient();

// ----- Construct job config -----
// The infoTypes of information to match
$personNameInfoType = (new InfoType())
    ->setName('PERSON_NAME');
$phoneNumberInfoType = (new InfoType())
    ->setName('PHONE_NUMBER');
$infoTypes = [$personNameInfoType, $phoneNumberInfoType];

// The minimum likelihood required before returning a match
$minLikelihood = likelihood::LIKELIHOOD_UNSPECIFIED;

// Specify finding limits
$limits = (new FindingLimits())
    ->setMaxFindingsPerRequest($maxFindings);

// Create the inspectConfig object
$inspectConfig = (new InspectConfig())
    ->setMinLikelihood($minLikelihood)
    ->setLimits($limits)
    ->setInfoTypes($infoTypes);

// Create triggers
$duration = (new Duration())
    ->setSeconds($scanPeriod * 60 * 60 * 24);

$schedule = (new Schedule())
    ->setRecurrencePeriodDuration($duration);

$triggerObject = (new Trigger())
    ->setSchedule($schedule);

// Create the storageConfig object
$fileSet = (new CloudStorageOptions_FileSet())
    ->setUrl('gs://' . $bucketName . '/*');

$storageOptions = (new CloudStorageOptions())
    ->setFileSet($fileSet);

// Auto-populate start and end times in order to scan new objects only.
$timespanConfig = (new StorageConfig_TimespanConfig())
    ->setEnableAutoPopulationOfTimespanConfig($autoPopulateTimespan);

$storageConfig = (new StorageConfig())
    ->setCloudStorageOptions($storageOptions)
    ->setTimespanConfig($timespanConfig);

// Construct the jobConfig object
$jobConfig = (new InspectJobConfig())
    ->setInspectConfig($inspectConfig)
    ->setStorageConfig($storageConfig);

// ----- Construct trigger object -----
$jobTriggerObject = (new JobTrigger())
    ->setTriggers([$triggerObject])
    ->setInspectJob($jobConfig)
    ->setStatus(Status::HEALTHY)
    ->setDisplayName($displayName)
    ->setDescription($description);

// Run trigger creation request
$parent = "projects/$callingProjectId/locations/global";
$trigger = $dlp->createJobTrigger($parent, $jobTriggerObject, [
    'triggerId' => $triggerId
]);

// Print results
printf('Successfully created trigger %s' . PHP_EOL, $trigger->getName());

C#


using Google.Api.Gax.ResourceNames;
using Google.Cloud.Dlp.V2;
using System;
using System.Collections.Generic;
using static Google.Cloud.Dlp.V2.CloudStorageOptions.Types;
using static Google.Cloud.Dlp.V2.InspectConfig.Types;
using static Google.Cloud.Dlp.V2.JobTrigger.Types;
using static Google.Cloud.Dlp.V2.StorageConfig.Types;

public class TriggersCreate
{
    public static JobTrigger Create(
        string projectId,
        string bucketName,
        Likelihood minLikelihood,
        int maxFindings,
        bool autoPopulateTimespan,
        int scanPeriod,
        IEnumerable<InfoType> infoTypes,
        string triggerId,
        string displayName,
        string description)
    {
        var dlp = DlpServiceClient.Create();

        var jobConfig = new InspectJobConfig
        {
            InspectConfig = new InspectConfig
            {
                MinLikelihood = minLikelihood,
                Limits = new FindingLimits
                {
                    MaxFindingsPerRequest = maxFindings
                },
                InfoTypes = { infoTypes }
            },
            StorageConfig = new StorageConfig
            {
                CloudStorageOptions = new CloudStorageOptions
                {
                    FileSet = new FileSet
                    {
                        Url = $"gs://{bucketName}/*"
                    }
                },
                TimespanConfig = new TimespanConfig
                {
                    EnableAutoPopulationOfTimespanConfig = autoPopulateTimespan
                }
            }
        };

        var jobTrigger = new JobTrigger
        {
            Triggers =
            {
                new Trigger
                {
                    Schedule = new Schedule
                    {
                        RecurrencePeriodDuration = new Google.Protobuf.WellKnownTypes.Duration
                        {
                            Seconds = scanPeriod * 60 * 60 * 24
                        }
                    }
                }
            },
            InspectJob = jobConfig,
            Status = Status.Healthy,
            DisplayName = displayName,
            Description = description
        };

        var response = dlp.CreateJobTrigger(
            new CreateJobTriggerRequest
            {
                Parent = new LocationName(projectId, "global").ToString(),
                JobTrigger = jobTrigger,
                TriggerId = triggerId
            });

        Console.WriteLine($"Successfully created trigger {response.Name}");
        return response;
    }
}

모든 작업 나열

현재 프로젝트의 모든 작업을 나열하는 방법은 다음과 같습니다.

Console

  1. Cloud Console에서 Cloud DLP를 엽니다.

    Cloud DLP UI로 이동

  2. 작업 및 작업 트리거 탭에서 모든 작업 탭을 클릭합니다.

Console에 작업 식별자, 상태, 생성 시간, 종료 시간을 포함한 현재 프로젝트의 모든 작업 목록이 표시됩니다. 결과 요약을 포함한 모든 작업에 대한 자세한 정보는 식별자를 클릭하여 확인할 수 있습니다.

프로토콜

DlpJob 리소스에는 모든 작업을 나열하는 데 사용할 수 있는 projects.dlpJobs.list 메서드가 있습니다.

프로젝트에 현재 정의된 모든 작업을 나열하려면 다음과 같이 dlpJobs 엔드포인트에 GET 요청을 보냅니다.

URL:

GET https://dlp.googleapis.com/v2/projects/[PROJECT-ID]/dlpJobs?key={YOUR_API_KEY}

다음 JSON 출력은 반환된 작업 중 하나를 나열합니다. 작업 구조는 DlpJob 리소스의 구조를 반영합니다.

JSON 출력:

{
  "jobs":[
    {
      "name":"projects/[PROJECT-ID]/dlpJobs/i-5270277269264714623",
      "type":"INSPECT_JOB",
      "state":"DONE",
      "inspectDetails":{
        "requestedOptions":{
          "snapshotInspectTemplate":{
          },
          "jobConfig":{
            "storageConfig":{
              "cloudStorageOptions":{
                "fileSet":{
                  "url":"[CLOUD-STORAGE-URL]"
                },
                "fileTypes":[
                  "FILE_TYPE_UNSPECIFIED"
                ],
                "filesLimitPercent":100
              },
              "timespanConfig":{
                "startTime":"2019-09-08T22:43:16.623Z",
                "enableAutoPopulationOfTimespanConfig":true
              }
            },
            "inspectConfig":{
              "infoTypes":[
                {
                  "name":"US_SOCIAL_SECURITY_NUMBER"
                },
                {
                  "name":"CANADA_SOCIAL_INSURANCE_NUMBER"
                }
              ],
              "minLikelihood":"LIKELY",
              "limits":{
              },
              "includeQuote":true
            },
            "actions":[
              {
                "saveFindings":{
                  "outputConfig":{
                    "table":{
                      "projectId":"[PROJECT-ID]",
                      "datasetId":"[DATASET-ID]",
                      "tableId":"[TABLE-ID]"
                    }
                  }
                }
              }
            ]
          }
        },
        "result":{
          ...
        }
      },
      "createTime":"2019-09-09T22:43:16.918Z",
      "startTime":"2019-09-09T22:43:16.918Z",
      "endTime":"2019-09-09T22:43:53.091Z",
      "jobTriggerName":"projects/[PROJECT-ID]/jobTriggers/sample-trigger2"
    },
    ...

아래에 포함된 API 탐색기를 사용하여 빠르게 시도해 볼 수 있습니다. JSON을 사용하여 Cloud DLP API로 요청을 전송하는 방법에 대한 일반적인 정보는 JSON 빠른 시작을 참조하세요.

자바


import com.google.cloud.dlp.v2.DlpServiceClient;
import com.google.privacy.dlp.v2.DlpJob;
import com.google.privacy.dlp.v2.DlpJobType;
import com.google.privacy.dlp.v2.ListDlpJobsRequest;
import com.google.privacy.dlp.v2.LocationName;
import java.io.IOException;

public class JobsList {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    listJobs(projectId);
  }

  // Lists DLP jobs
  public static void listJobs(String projectId) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) {

      // Construct the request to be sent by the client.
      // For more info on filters and job types,
      // see https://cloud.google.com/dlp/docs/reference/rest/v2/projects.dlpJobs/list
      ListDlpJobsRequest listDlpJobsRequest =
          ListDlpJobsRequest.newBuilder()
              .setParent(LocationName.of(projectId, "global").toString())
              .setFilter("state=DONE")
              .setType(DlpJobType.valueOf("INSPECT_JOB"))
              .build();

      // Send the request to list jobs and process the response
      DlpServiceClient.ListDlpJobsPagedResponse response =
          dlpServiceClient.listDlpJobs(listDlpJobsRequest);

      System.out.println("DLP jobs found:");
      for (DlpJob dlpJob : response.getPage().getValues()) {
        System.out.println(dlpJob.getName() + " -- " + dlpJob.getState());
      }
    }
  }
}

Node.js

// Imports the Google Cloud Data Loss Prevention library
const DLP = require('@google-cloud/dlp');

// Instantiates a client
const dlp = new DLP.DlpServiceClient();

// The project ID to run the API call under
// const projectId = 'my-project';

// The filter expression to use
// For more information and filter syntax, see https://cloud.google.com/dlp/docs/reference/rest/v2/projects.dlpJobs/list
// const filter = `state=DONE`;

// The type of job to list (either 'INSPECT_JOB' or 'RISK_ANALYSIS_JOB')
// const jobType = 'INSPECT_JOB';
async function listJobs() {
  // Construct request for listing DLP scan jobs
  const request = {
    parent: `projects/${projectId}/locations/global`,
    filter: filter,
    type: jobType,
  };

  // Run job-listing request
  const [jobs] = await dlp.listDlpJobs(request);
  jobs.forEach(job => {
    console.log(`Job ${job.name} status: ${job.state}`);
  });
}

listJobs();

Python

def list_dlp_jobs(project, filter_string=None, job_type=None):
    """Uses the Data Loss Prevention API to lists DLP jobs that match the
        specified filter in the request.
    Args:
        project: The project id to use as a parent resource.
        filter: (Optional) 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 resource name of the trigger that
                                   created job.
            * Supported fields for risk analysis jobs:
                - `state` - RUNNING|CANCELED|FINISHED|FAILED
            * 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)
        type: (Optional) The type of job. Defaults to 'INSPECT'.
            Choices:
            DLP_JOB_TYPE_UNSPECIFIED
            INSPECT_JOB: The job inspected content for sensitive data.
            RISK_ANALYSIS_JOB: The job executed a Risk Analysis computation.

    Returns:
        None; the response from the API is printed to the terminal.
    """

    # Import the client library.
    import google.cloud.dlp

    # Instantiate a client.
    dlp = google.cloud.dlp_v2.DlpServiceClient()

    # Convert the project id into a full resource id.
    parent = f"projects/{project}"

    # Job type dictionary
    job_type_to_int = {
        "DLP_JOB_TYPE_UNSPECIFIED": google.cloud.dlp.DlpJobType.DLP_JOB_TYPE_UNSPECIFIED,
        "INSPECT_JOB": google.cloud.dlp.DlpJobType.INSPECT_JOB,
        "RISK_ANALYSIS_JOB": google.cloud.dlp.DlpJobType.RISK_ANALYSIS_JOB,
    }
    # If job type is specified, convert job type to number through enums.
    if job_type:
        job_type = job_type_to_int[job_type]

    # Call the API to get a list of jobs.
    response = dlp.list_dlp_jobs(
        request={"parent": parent, "filter": filter_string, "type": job_type}
    )

    # Iterate over results.
    for job in response:
        print("Job: %s; status: %s" % (job.name, job.state.name))

Go

import (
	"context"
	"fmt"
	"io"

	dlp "cloud.google.com/go/dlp/apiv2"
	"google.golang.org/api/iterator"
	dlppb "google.golang.org/genproto/googleapis/privacy/dlp/v2"
)

// listJobs lists jobs matching the given optional filter and optional jobType.
func listJobs(w io.Writer, projectID, filter, jobType string) error {
	// projectID := "my-project-id"
	// filter := "`state` = FINISHED"
	// jobType := "RISK_ANALYSIS_JOB"
	ctx := context.Background()
	client, err := dlp.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("dlp.NewClient: %v", err)
	}

	// Create a configured request.
	req := &dlppb.ListDlpJobsRequest{
		Parent: fmt.Sprintf("projects/%s/locations/global", projectID),
		Filter: filter,
		Type:   dlppb.DlpJobType(dlppb.DlpJobType_value[jobType]),
	}
	// Send the request and iterate over the results.
	it := client.ListDlpJobs(ctx, req)
	for {
		j, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return fmt.Errorf("Next: %v", err)
		}
		fmt.Fprintf(w, "Job %v status: %v\n", j.GetName(), j.GetState())
	}
	return nil
}

PHP

/**
 * List Data Loss Prevention API jobs corresponding to a given filter.
 */
use Google\Cloud\Dlp\V2\DlpServiceClient;
use Google\Cloud\Dlp\V2\DlpJobType;

/** Uncomment and populate these variables in your code */
// $callingProjectId = 'The project ID to run the API call under';
// $filter = 'The filter expression to use';

// Instantiate a client.
$dlp = new DlpServiceClient();

// The type of job to list (either 'INSPECT_JOB' or 'REDACT_JOB')
$jobType = DlpJobType::INSPECT_JOB;

// Run job-listing request
// For more information and filter syntax,
// @see https://cloud.google.com/dlp/docs/reference/rest/v2/projects.dlpJobs/list
$parent = "projects/$callingProjectId/locations/global";
$response = $dlp->listDlpJobs($parent, [
  'filter' => $filter,
  'type' => $jobType
]);

// Print job list
$jobs = $response->iterateAllElements();
foreach ($jobs as $job) {
    printf('Job %s status: %s' . PHP_EOL, $job->getName(), $job->getState());
    $infoTypeStats = $job->getInspectDetails()->getResult()->getInfoTypeStats();

    if (count($infoTypeStats) > 0) {
        foreach ($infoTypeStats as $infoTypeStat) {
            printf(
                '  Found %s instance(s) of type %s' . PHP_EOL,
                $infoTypeStat->getCount(),
                $infoTypeStat->getInfoType()->getName()
            );
        }
    } else {
        print('  No findings.' . PHP_EOL);
    }
}

C#


using Google.Api.Gax;
using Google.Api.Gax.ResourceNames;
using Google.Cloud.Dlp.V2;

public class JobsList
{
    public static PagedEnumerable<ListDlpJobsResponse, DlpJob> ListDlpJobs(string projectId, string filter, DlpJobType jobType)
    {
        var dlp = DlpServiceClient.Create();

        var response = dlp.ListDlpJobs(new ListDlpJobsRequest
        {
            Parent = new LocationName(projectId, "global").ToString(),
            Filter = filter,
            Type = jobType
        });

        // Uncomment to print jobs
        // foreach (var job in response)
        // {
        //     Console.WriteLine($"Job: {job.Name} status: {job.State}");
        // }

        return response;
    }
}

모든 작업 트리거 나열

현재 프로젝트의 모든 작업 트리거를 나열하려면 다음 안내를 따르세요.

Console

  1. Cloud Console에서 Cloud DLP를 엽니다.

    Cloud DLP UI로 이동

  2. 작업 및 작업 트리거 탭에서 작업 트리거 탭을 클릭합니다.

Console에 현재 프로젝트의 모든 작업 트리거 목록이 표시됩니다.

프로토콜

JobTrigger 리소스에는 모든 작업 트리거를 나열하는 데 사용할 수 있는 projects.jobTriggers.list 메서드가 있습니다.

프로젝트에 현재 정의된 모든 작업 트리거를 나열하려면 다음과 같이 jobTriggers 엔드포인트에 GET 요청을 보냅니다.

URL:

GET https://dlp.googleapis.com/v2/projects/[PROJECT-ID]/jobTriggers?key={YOUR_API_KEY}

다음 JSON 출력은 이전 섹션에서 만든 작업 트리거를 나열합니다. 작업 트리거의 구조는 JobTrigger 리소스의 구조를 반영합니다.

JSON 출력:

{
  "jobTriggers":[
    {
      "name":"projects/[PROJECT_ID]/jobTriggers/[JOB_TRIGGER_NAME]",
      "displayName":"JobTrigger1",
      "description":"Starts a DLP scan job of a Datastore kind",
      "inspectJob":{
        "storageConfig":{
          "datastoreOptions":{
            "partitionId":{
              "projectId":"[PROJECT_ID]",
              "namespaceId":"[NAMESPACE_ID]"
            },
            "kind":{
              "name":"Example-Kind"
            }
          }
        },
        "inspectConfig":{
          "infoTypes":[
            {
              "name":"PHONE_NUMBER"
            }
          ],
          "minLikelihood":"LIKELY",
          "limits":{

          },
          "includeQuote":true
        },
        "actions":[
          {
            "saveFindings":{
              "outputConfig":{
                "table":{
                  "projectId":"[PROJECT_ID]",
                  "datasetId":"[BIGQUERY_DATASET_NAME]",
                  "tableId":"[BIGQUERY_TABLE_NAME]"
                }
              }
            }
          }
        ]
      },
      "triggers":[
        {
          "schedule":{
            "recurrencePeriodDuration":"86400s"
          }
        }
      ],
      "createTime":"2018-11-30T01:52:41.171857Z",
      "updateTime":"2018-11-30T01:52:41.171857Z",
      "status":"HEALTHY"
    },

    ...

],
  "nextPageToken":"KkwKCQjivJ2UpPreAgo_Kj1wcm9qZWN0cy92ZWx2ZXR5LXN0dWR5LTE5NjEwMS9qb2JUcmlnZ2Vycy8xNTA5NzEyOTczMDI0MDc1NzY0"
}

아래에 포함된 API 탐색기를 사용하여 빠르게 시도해 볼 수 있습니다. JSON을 사용하여 Cloud DLP API로 요청을 전송하는 방법에 대한 일반적인 정보는 JSON 빠른 시작을 참조하세요.

자바


import com.google.cloud.dlp.v2.DlpServiceClient;
import com.google.privacy.dlp.v2.JobTrigger;
import com.google.privacy.dlp.v2.ListJobTriggersRequest;
import com.google.privacy.dlp.v2.LocationName;
import java.io.IOException;

class TriggersList {
  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    listTriggers(projectId);
  }

  public static void listTriggers(String projectId) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) {
      // Build the request to be sent by the client
      ListJobTriggersRequest listJobTriggersRequest =
          ListJobTriggersRequest.newBuilder()
              .setParent(LocationName.of(projectId, "global").toString())
              .build();

      // Use the client to send the API request.
      DlpServiceClient.ListJobTriggersPagedResponse response =
          dlpServiceClient.listJobTriggers(listJobTriggersRequest);

      // Parse the response and process the results
      System.out.println("DLP triggers found:");
      for (JobTrigger trigger : response.getPage().getValues()) {
        System.out.println("Trigger: " + trigger.getName());
        System.out.println("\tCreated: " + trigger.getCreateTime());
        System.out.println("\tUpdated: " + trigger.getUpdateTime());
        if (trigger.getDisplayName() != null) {
          System.out.println("\tDisplay name: " + trigger.getDisplayName());
        }
        if (trigger.getDescription() != null) {
          System.out.println("\tDescription: " + trigger.getDescription());
        }
        System.out.println("\tStatus: " + trigger.getStatus());
        System.out.println("\tError count: " + trigger.getErrorsCount());
      }
      ;
    }
  }
}

Node.js

  // Imports the Google Cloud Data Loss Prevention library
  const DLP = require('@google-cloud/dlp');

  // Instantiates a client
  const dlp = new DLP.DlpServiceClient();

  // The project ID to run the API call under
  // const projectId = 'my-project'

  async function listTriggers() {
    // Construct trigger listing request
    const request = {
      parent: `projects/${projectId}/locations/global`,
    };

    // Helper function to pretty-print dates
    const formatDate = date => {
      const msSinceEpoch = parseInt(date.seconds, 10) * 1000;
      return new Date(msSinceEpoch).toLocaleString('en-US');
    };

    // Run trigger listing request
    const [triggers] = await dlp.listJobTriggers(request);
    triggers.forEach(trigger => {
      // Log trigger details
      console.log(`Trigger ${trigger.name}:`);
      console.log(`  Created: ${formatDate(trigger.createTime)}`);
      console.log(`  Updated: ${formatDate(trigger.updateTime)}`);
      if (trigger.displayName) {
        console.log(`  Display Name: ${trigger.displayName}`);
      }
      if (trigger.description) {
        console.log(`  Description: ${trigger.description}`);
      }
      console.log(`  Status: ${trigger.status}`);
      console.log(`  Error count: ${trigger.errors.length}`);
    });
  }

  listTriggers();
}

main(...process.argv.slice(2));
process.on('unhandledRejection', err => {
  console.error(err.message);
  process.exitCode = 1;
});

Python

def list_triggers(project):
    """Lists all Data Loss Prevention API triggers.
    Args:
        project: The Google Cloud project id to use as a parent resource.
    Returns:
        None; the response from the API is printed to the terminal.
    """

    # Import the client library
    import google.cloud.dlp

    # Instantiate a client.
    dlp = google.cloud.dlp_v2.DlpServiceClient()

    # Convert the project id into a full resource id.
    parent = f"projects/{project}"

    # Call the API.
    response = dlp.list_job_triggers(request={"parent": parent})

    for trigger in response:
        print("Trigger {}:".format(trigger.name))
        print("  Created: {}".format(trigger.create_time))
        print("  Updated: {}".format(trigger.update_time))
        if trigger.display_name:
            print("  Display Name: {}".format(trigger.display_name))
        if trigger.description:
            print("  Description: {}".format(trigger.discription))
        print("  Status: {}".format(trigger.status))
        print("  Error count: {}".format(len(trigger.errors)))

Go

import (
	"context"
	"fmt"
	"io"
	"time"

	dlp "cloud.google.com/go/dlp/apiv2"
	"github.com/golang/protobuf/ptypes"
	"google.golang.org/api/iterator"
	dlppb "google.golang.org/genproto/googleapis/privacy/dlp/v2"
)

// listTriggers lists the triggers for the given project.
func listTriggers(w io.Writer, projectID string) error {
	// projectID := "my-project-id"

	ctx := context.Background()

	client, err := dlp.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("dlp.NewClient: %v", err)
	}

	// Create a configured request.
	req := &dlppb.ListJobTriggersRequest{
		Parent: fmt.Sprintf("projects/%s/locations/global", projectID),
	}
	// Send the request and iterate over the results.
	it := client.ListJobTriggers(ctx, req)
	for {
		t, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return fmt.Errorf("Next: %v", err)
		}
		fmt.Fprintf(w, "Trigger %v\n", t.GetName())
		c, err := ptypes.Timestamp(t.GetCreateTime())
		if err != nil {
			return fmt.Errorf("CreateTime Timestamp: %v", err)
		}
		fmt.Fprintf(w, "  Created: %v\n", c.Format(time.RFC1123))
		u, err := ptypes.Timestamp(t.GetUpdateTime())
		if err != nil {
			return fmt.Errorf("UpdateTime Timestamp: %v", err)
		}
		fmt.Fprintf(w, "  Updated: %v\n", u.Format(time.RFC1123))
		fmt.Fprintf(w, "  Display Name: %q\n", t.GetDisplayName())
		fmt.Fprintf(w, "  Description: %q\n", t.GetDescription())
		fmt.Fprintf(w, "  Status: %v\n", t.GetStatus())
		fmt.Fprintf(w, "  Error Count: %v\n", len(t.GetErrors()))
	}

	return nil
}

PHP

/**
 * List Data Loss Prevention API job triggers.
 */
use Google\Cloud\Dlp\V2\DlpServiceClient;

/** Uncomment and populate these variables in your code */
// $callingProjectId = 'The project ID to run the API call under';

// Instantiate a client.
$dlp = new DlpServiceClient();

$parent = "projects/$callingProjectId/locations/global";

// Run request
$response = $dlp->listJobTriggers($parent);

// Print results
$triggers = $response->iterateAllElements();
foreach ($triggers as $trigger) {
    printf('Trigger %s' . PHP_EOL, $trigger->getName());
    printf('  Created: %s' . PHP_EOL, $trigger->getCreateTime()->getSeconds());
    printf('  Updated: %s' . PHP_EOL, $trigger->getUpdateTime()->getSeconds());
    printf('  Display Name: %s' . PHP_EOL, $trigger->getDisplayName());
    printf('  Description: %s' . PHP_EOL, $trigger->getDescription());
    printf('  Status: %s' . PHP_EOL, $trigger->getStatus());
    printf('  Error count: %s' . PHP_EOL, count($trigger->getErrors()));
    $timespanConfig = $trigger->getInspectJob()->getStorageConfig()->getTimespanConfig();
    printf('  Auto-populates timespan config: %s' . PHP_EOL,
        ($timespanConfig && $timespanConfig->getEnableAutoPopulationOfTimespanConfig() ? 'yes' : 'no'));
}

C#


using Google.Api.Gax;
using Google.Api.Gax.ResourceNames;
using Google.Cloud.Dlp.V2;
using System;

public class TriggersList
{
    public static PagedEnumerable<ListJobTriggersResponse, JobTrigger> List(string projectId)
    {
        var dlp = DlpServiceClient.Create();

        var response = dlp.ListJobTriggers(
            new ListJobTriggersRequest
            {
                Parent = new LocationName(projectId, "global").ToString(),
            });

        foreach (var trigger in response)
        {
            Console.WriteLine($"Name: {trigger.Name}");
            Console.WriteLine($"  Created: {trigger.CreateTime}");
            Console.WriteLine($"  Updated: {trigger.UpdateTime}");
            Console.WriteLine($"  Display Name: {trigger.DisplayName}");
            Console.WriteLine($"  Description: {trigger.Description}");
            Console.WriteLine($"  Status: {trigger.Status}");
            Console.WriteLine($"  Error count: {trigger.Errors.Count}");
        }

        return response;
    }
}

작업 삭제

프로젝트에서 결과가 포함된 작업을 삭제하려면 다음 작업을 수행하세요. 이 작업은 외부(예: BigQuery)에 저장된 모든 결과를 변경하지 않습니다.

Console

  1. Cloud Console에서 Cloud DLP를 엽니다.

    Cloud DLP UI로 이동

  2. 작업 및 작업 트리거 탭에서 모든 작업 탭을 클릭합니다. Google Cloud Console에 현재 프로젝트의 모든 작업 목록이 표시됩니다.

  3. 삭제할 작업 트리거의 액션 열에서 작업 더보기 메뉴(세로로 정렬된 세 개의 점으로 표시됨) 를 클릭한 다음 삭제를 클릭합니다.

또는 작업 목록에서 삭제할 작업의 식별자를 클릭합니다. 작업의 세부정보 페이지에서 삭제를 클릭합니다.

프로토콜

현재 프로젝트에서 작업을 삭제하려면 다음과 같이 dlpJobs 엔드포인트에 DELETE 요청을 보냅니다. [JOB-IDENTIFIER] 필드를 i-로 시작하는 작업 식별자로 바꿉니다.

URL:

DELETE https://dlp.googleapis.com/v2/projects/[PROJECT-ID]/dlpJobs/[JOB-IDENTIFIER]?key={YOUR_API_KEY}

요청이 성공하면 Cloud DLP API가 성공 응답을 반환합니다. 작업이 성공적으로 삭제되었는지 확인하려면 모든 작업을 나열합니다.

아래에 포함된 API 탐색기를 사용하여 빠르게 시도해 볼 수 있습니다. JSON을 사용하여 Cloud DLP API로 요청을 전송하는 방법에 대한 일반적인 정보는 JSON 빠른 시작을 참조하세요.

자바


import com.google.cloud.dlp.v2.DlpServiceClient;
import com.google.privacy.dlp.v2.DeleteDlpJobRequest;
import com.google.privacy.dlp.v2.DlpJobName;
import java.io.IOException;

public class JobsDelete {
  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String jobId = "your-job-id";
    deleteJobs(projectId, jobId);
  }

  // Deletes a DLP Job with the given jobId
  public static void deleteJobs(String projectId, String jobId) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) {

      // Construct the complete job name from the projectId and jobId
      DlpJobName jobName = DlpJobName.of(projectId, jobId);

      // Construct the job deletion request to be sent by the client.
      DeleteDlpJobRequest deleteDlpJobRequest =
          DeleteDlpJobRequest.newBuilder().setName(jobName.toString()).build();

      // Send the job deletion request
      dlpServiceClient.deleteDlpJob(deleteDlpJobRequest);
      System.out.println("Job deleted successfully.");
    }
  }
}

Node.js

// Imports the Google Cloud Data Loss Prevention library
const DLP = require('@google-cloud/dlp');

// Instantiates a client
const dlp = new DLP.DlpServiceClient();

// The project ID to run the API call under
// const projectId = 'my-project';

// The name of the job whose results should be deleted
// Parent project ID is automatically extracted from this parameter
// const jobName = 'projects/my-project/dlpJobs/X-#####'

function deleteJob() {
  // Construct job deletion request
  const request = {
    name: jobName,
  };

  // Run job deletion request
  dlp
    .deleteDlpJob(request)
    .then(() => {
      console.log(`Successfully deleted job ${jobName}.`);
    })
    .catch(err => {
      console.log(`Error in deleteJob: ${err.message || err}`);
    });
}

deleteJob();

Python

def delete_dlp_job(project, job_name):
    """Uses the Data Loss Prevention API to delete a long-running DLP job.
    Args:
        project: The project id to use as a parent resource.
        job_name: The name of the DlpJob resource to be deleted.

    Returns:
        None; the response from the API is printed to the terminal.
    """

    # Import the client library.
    import google.cloud.dlp

    # Instantiate a client.
    dlp = google.cloud.dlp_v2.DlpServiceClient()

    # Convert the project id and job name into a full resource id.
    name = f"projects/{project}/dlpJobs/{job_name}"

    # Call the API to delete job.
    dlp.delete_dlp_job(request={"name": name})

    print("Successfully deleted %s" % job_name)

Go

import (
	"context"
	"fmt"
	"io"

	dlp "cloud.google.com/go/dlp/apiv2"
	dlppb "google.golang.org/genproto/googleapis/privacy/dlp/v2"
)

// deleteJob deletes the job with the given name.
func deleteJob(w io.Writer, jobName string) error {
	// jobName := "job-example"
	ctx := context.Background()
	client, err := dlp.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("dlp.NewClient: %v", err)
	}
	req := &dlppb.DeleteDlpJobRequest{
		Name: jobName,
	}
	if err = client.DeleteDlpJob(ctx, req); err != nil {
		return fmt.Errorf("DeleteDlpJob: %v", err)
	}
	fmt.Fprintf(w, "Successfully deleted job")
	return nil
}

PHP

/**
 * Delete results of a Data Loss Prevention API job
 */
use Google\Cloud\Dlp\V2\DlpServiceClient;

/** Uncomment and populate these variables in your code */
// $jobId = 'The name of the job whose results should be deleted';

// Instantiate a client.
$dlp = new DlpServiceClient();

// Run job-deletion request
// The Parent project ID is automatically extracted from this parameter
$dlp->deleteDlpJob($jobId);

// Print status
printf('Successfully deleted job %s' . PHP_EOL, $jobId);

C#


using System;
using Google.Cloud.Dlp.V2;

public class JobsDelete
{
    public static void DeleteJob(string jobName)
    {
        var dlp = DlpServiceClient.Create();

        dlp.DeleteDlpJob(new DeleteDlpJobRequest
        {
            Name = jobName
        });

        Console.WriteLine($"Successfully deleted job {jobName}.");
    }
}

작업 트리거 삭제

작업 트리거를 삭제하려면 다음 안내를 따르세요.

Console

  1. Cloud Console에서 Cloud DLP를 엽니다.

    Cloud DLP UI로 이동

  2. 작업 및 작업 트리거 탭에서 작업 트리거 탭을 클릭합니다. 그러면 Console에 현재 프로젝트의 모든 작업 트리거 목록이 표시됩니다.

  3. 삭제할 작업 트리거의 액션 열에서 작업 더보기 메뉴(세로로 정렬된 세 개의 점으로 표시됨) 를 클릭한 다음 삭제를 클릭합니다.

또는 작업 트리거 목록에서 삭제하려는 작업 트리거 이름을 클릭합니다. 작업 트리거의 세부정보 페이지에서 삭제를 클릭합니다.

프로토콜

현재 프로젝트에서 작업을 삭제하려면 다음과 같이 jobTriggers 엔드포인트에 DELETE 요청을 보냅니다. [JOB-TRIGGER-NAME] 필드를 작업 트리거의 이름으로 바꿉니다.

URL:

DELETE https://dlp.googleapis.com/v2/projects/[PROJECT-ID]/jobTriggers/[JOB-TRIGGER-NAME]?key={YOUR_API_KEY}

요청이 성공하면 Cloud DLP API가 성공 응답을 반환합니다. 작업 트리거가 성공적으로 삭제되었는지 확인하려면 모든 작업 트리거를 나열합니다.

아래에 포함된 API 탐색기를 사용하여 빠르게 시도해 볼 수 있습니다. JSON을 사용하여 Cloud DLP API로 요청을 전송하는 방법에 대한 일반적인 정보는 JSON 빠른 시작을 참조하세요.

자바

import com.google.cloud.dlp.v2.DlpServiceClient;
import com.google.privacy.dlp.v2.DeleteJobTriggerRequest;
import com.google.privacy.dlp.v2.ProjectJobTriggerName;
import java.io.IOException;

class TriggersDelete {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String triggerId = "your-trigger-id";
    deleteTrigger(projectId, triggerId);
  }

  public static void deleteTrigger(String projectId, String triggerId) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) {

      // Get the full trigger name from the given triggerId and ProjectId
      ProjectJobTriggerName triggerName = ProjectJobTriggerName.of(projectId, triggerId);

      // Construct the trigger deletion request to be sent by the client
      DeleteJobTriggerRequest deleteJobTriggerRequest =
          DeleteJobTriggerRequest.newBuilder().setName(triggerName.toString()).build();

      // Send the trigger deletion request
      dlpServiceClient.deleteJobTrigger(deleteJobTriggerRequest);
      System.out.println("Trigger deleted: " + triggerName.toString());
    }
  }
}

Node.js

// Imports the Google Cloud Data Loss Prevention library
const DLP = require('@google-cloud/dlp');

// Instantiates a client
const dlp = new DLP.DlpServiceClient();

// The project ID to run the API call under
// const projectId = 'my-project'

// The name of the trigger to be deleted
// Parent project ID is automatically extracted from this parameter
// const triggerId = 'projects/my-project/triggers/my-trigger';

async function deleteTrigger() {
  // Construct trigger deletion request
  const request = {
    name: triggerId,
  };

  // Run trigger deletion request
  await dlp.deleteJobTrigger(request);
  console.log(`Successfully deleted trigger ${triggerId}.`);
}

deleteTrigger();

Python

def delete_trigger(project, trigger_id):
    """Deletes a Data Loss Prevention API trigger.
    Args:
        project: The id of the Google Cloud project which owns the trigger.
        trigger_id: The id of the trigger to delete.
    Returns:
        None; the response from the API is printed to the terminal.
    """

    # Import the client library
    import google.cloud.dlp

    # Instantiate a client.
    dlp = google.cloud.dlp_v2.DlpServiceClient()

    # Convert the project id into a full resource id.
    parent = f"projects/{project}"

    # Combine the trigger id with the parent id.
    trigger_resource = "{}/jobTriggers/{}".format(parent, trigger_id)

    # Call the API.
    dlp.delete_job_trigger(request={"name": trigger_resource})

    print("Trigger {} successfully deleted.".format(trigger_resource))

if __name__ == "__main__":
    default_project = os.environ.get("GOOGLE_CLOUD_PROJECT")

    parser = argparse.ArgumentParser(description=__doc__)
    subparsers = parser.add_subparsers(
        dest="action", help="Select which action to perform."
    )
    subparsers.required = True

    parser_create = subparsers.add_parser("create", help="Create a trigger.")
    parser_create.add_argument(
        "bucket", help="The name of the GCS bucket containing the file."
    )
    parser_create.add_argument(
        "scan_period_days",
        type=int,
        help="How often to repeat the scan, in days. The minimum is 1 day.",
    )
    parser_create.add_argument(
        "--trigger_id",
        help="The id of the trigger. If omitted, an id will be randomly " "generated",
    )
    parser_create.add_argument(
        "--display_name", help="The optional display name of the trigger."
    )
    parser_create.add_argument(
        "--description", help="The optional description of the trigger."
    )
    parser_create.add_argument(
        "--project",
        help="The Google Cloud project id to use as a parent resource.",
        default=default_project,
    )
    parser_create.add_argument(
        "--info_types",
        nargs="+",
        help="Strings representing info types to look for. A full list of "
        "info categories and types is available from the API. Examples "
        'include "FIRST_NAME", "LAST_NAME", "EMAIL_ADDRESS". '
        "If unspecified, the three above examples will be used.",
        default=["FIRST_NAME", "LAST_NAME", "EMAIL_ADDRESS"],
    )
    parser_create.add_argument(
        "--min_likelihood",
        choices=[
            "LIKELIHOOD_UNSPECIFIED",
            "VERY_UNLIKELY",
            "UNLIKELY",
            "POSSIBLE",
            "LIKELY",
            "VERY_LIKELY",
        ],
        help="A string representing the minimum likelihood threshold that "
        "constitutes a match.",
    )
    parser_create.add_argument(
        "--max_findings",
        type=int,
        help="The maximum number of findings to report; 0 = no maximum.",
    )
    parser_create.add_argument(
        "--auto_populate_timespan", type=bool, help="Limit scan to new content only.",
    )

    parser_list = subparsers.add_parser("list", help="List all triggers.")
    parser_list.add_argument(
        "--project",
        help="The Google Cloud project id to use as a parent resource.",
        default=default_project,
    )

    parser_delete = subparsers.add_parser("delete", help="Delete a trigger.")
    parser_delete.add_argument("trigger_id", help="The id of the trigger to delete.")
    parser_delete.add_argument(
        "--project",
        help="The Google Cloud project id to use as a parent resource.",
        default=default_project,
    )

    args = parser.parse_args()

    if args.action == "create":
        create_trigger(
            args.project,
            args.bucket,
            args.scan_period_days,
            args.info_types,
            trigger_id=args.trigger_id,
            display_name=args.display_name,
            description=args.description,
            min_likelihood=args.min_likelihood,
            max_findings=args.max_findings,
            auto_populate_timespan=args.auto_populate_timespan,
        )
    elif args.action == "list":
        list_triggers(args.project)
    elif args.action == "delete":
        delete_trigger(args.project, args.trigger_id)

Go

import (
	"context"
	"fmt"
	"io"

	dlp "cloud.google.com/go/dlp/apiv2"
	dlppb "google.golang.org/genproto/googleapis/privacy/dlp/v2"
)

// deleteTrigger deletes the given trigger.
func deleteTrigger(w io.Writer, triggerID string) error {
	// projectID := "my-project-id"
	// triggerID := "my-trigger"

	ctx := context.Background()

	client, err := dlp.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("dlp.NewClient: %v", err)
	}

	req := &dlppb.DeleteJobTriggerRequest{
		Name: triggerID,
	}

	if err := client.DeleteJobTrigger(ctx, req); err != nil {
		return fmt.Errorf("DeleteJobTrigger: %v", err)
	}
	fmt.Fprintf(w, "Successfully deleted trigger %v", triggerID)
	return nil
}

PHP

/**
 * Delete a Data Loss Prevention API job trigger.
 */
use Google\Cloud\Dlp\V2\DlpServiceClient;

/** Uncomment and populate these variables in your code */
// $callingProjectId = 'The project ID to run the API call under';
// $triggerId = 'The name of the trigger to be deleted.';

// Instantiate a client.
$dlp = new DlpServiceClient();

// Run request
// The Parent project ID is automatically extracted from this parameter
$triggerName = "projects/$callingProjectId/locations/global/jobTriggers/$triggerId";
$response = $dlp->deleteJobTrigger($triggerName);

// Print the results
printf('Successfully deleted trigger %s' . PHP_EOL, $triggerName);

C#


using Google.Cloud.Dlp.V2;
using System;

public class TriggersDelete
{

    public static void Delete(string triggerName)
    {
        var dlp = DlpServiceClient.Create();

        dlp.DeleteJobTrigger(
            new DeleteJobTriggerRequest
            {
                Name = triggerName
            });

        Console.WriteLine($"Successfully deleted trigger {triggerName}.");
    }
}

일자리를 찾으세요.

프로젝트에서 결과가 포함된 작업을 가져오려면 다음 작업을 수행하세요. 이 작업은 외부(예: BigQuery)에 저장된 모든 결과를 변경하지 않습니다.

프로토콜

현재 프로젝트에서 작업을 가져오려면 여기 나온 것처럼 GET 요청을 dlpJobs 엔드포인트로 보냅니다. [JOB-IDENTIFIER] 필드를 i-로 시작하는 작업 식별자로 바꿉니다.

URL:

GET https://dlp.googleapis.com/v2/projects/[PROJECT-ID]/dlpJobs/[JOB-IDENTIFIER]?key={YOUR_API_KEY}

요청이 성공하면 Cloud DLP API가 성공 응답을 반환합니다.

아래에 포함된 API 탐색기를 사용하여 빠르게 시도해 볼 수 있습니다. JSON을 사용하여 Cloud DLP API로 요청을 전송하는 방법에 대한 일반적인 정보는 JSON 빠른 시작을 참조하세요.

자바


import com.google.cloud.dlp.v2.DlpServiceClient;
import com.google.privacy.dlp.v2.DlpJobName;
import com.google.privacy.dlp.v2.GetDlpJobRequest;
import java.io.IOException;

public class JobsGet {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String jobId = "your-job-id";
    getJobs(projectId, jobId);
  }

  // Gets a DLP Job with the given jobId
  public static void getJobs(String projectId, String jobId) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (DlpServiceClient dlpServiceClient = DlpServiceClient.create()) {

      // Construct the complete job name from the projectId and jobId
      DlpJobName jobName = DlpJobName.of(projectId, jobId);

      // Construct the get job request to be sent by the client.
      GetDlpJobRequest getDlpJobRequest =
          GetDlpJobRequest.newBuilder().setName(jobName.toString()).build();

      // Send the get job request
      dlpServiceClient.getDlpJob(getDlpJobRequest);
      System.out.println("Job got successfully.");
    }
  }
}

기존 작업 트리거 업데이트

작업 트리거 만들기, 나열, 삭제 외에 기존 작업 트리거 업데이트도 수행할 수 있습니다. 기존 작업 트리거의 구성을 변경하려면 다음 안내를 따르세요.

Console

  1. Cloud Console에서 Cloud DLP를 엽니다.

    Cloud DLP UI로 이동

  2. 작업 트리거 탭을 클릭합니다. 콘솔에 현재 프로젝트의 모든 작업 트리거 목록이 표시됩니다.

  3. 삭제하려는 작업 트리거의 작업 열에서 더보기 를 클릭한 후 세부정보 보기를 클릭합니다.

  4. 작업 트리거의 세부정보 페이지에서 수정을 클릭합니다.

  5. 트리거 편집 페이지에서 입력 데이터의 위치, 템플릿, infoType, 가능성과 같은 감지 세부정보, 모든 스캔 후 작업, 작업 트리거의 일정을 변경할 수 있습니다. 변경이 완료되었으면 저장을 클릭합니다.

프로토콜

projects.jobTriggers.patch 메서드를 사용하여 새 JobTrigger 값을 Cloud DLP API에 보내고 이러한 값을 지정된 작업 트리거 내에서 업데이트할 수 있습니다.

예를 들어 다음과 같은 간단한 작업 트리거가 있다고 가정해 보겠습니다. 이 JSON은 작업 트리거를 나타내며, 현재 프로젝트의 작업 트리거 엔드포인트에 GET 요청을 보낸 후 반환되었습니다.

JSON 출력:

{
  "name":"projects/[PROJECT_ID]/jobTriggers/[JOB_TRIGGER_NAME]",
  "inspectJob":{
    "storageConfig":{
      "cloudStorageOptions":{
        "fileSet":{
          "url":"gs://dlptesting/*"
        },
        "fileTypes":[
          "FILE_TYPE_UNSPECIFIED"
        ],
        "filesLimitPercent":100
      },
      "timespanConfig":{
        "enableAutoPopulationOfTimespanConfig":true
      }
    },
    "inspectConfig":{
      "infoTypes":[
        {
          "name":"US_SOCIAL_SECURITY_NUMBER"
        }
      ],
      "minLikelihood":"POSSIBLE",
      "limits":{

      }
    },
    "actions":[
      {
        "jobNotificationEmails":{

        }
      }
    ]
  },
  "triggers":[
    {
      "schedule":{
        "recurrencePeriodDuration":"86400s"
      }
    }
  ],
  "createTime":"2019-03-06T21:19:45.774841Z",
  "updateTime":"2019-03-06T21:19:45.774841Z",
  "status":"HEALTHY"
}

다음 JSON은 지정된 엔드포인트에 PATCH 요청으로 전송되었을 때, 지정된 작업 트리거를 스캔할 새 infoType 및 새로운 최솟값 가능성으로 업데이트합니다. 또한 updateMask 속성을 지정해야 하며, 해당 값은 FieldMask 형식이어야 합니다.

JSON 입력:

PATCH https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/jobTriggers/[JOB_TRIGGER_NAME]?key={YOUR_API_KEY}

{
  "jobTrigger":{
    "inspectJob":{
      "inspectConfig":{
        "infoTypes":[
          {
            "name":"US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER"
          }
        ],
        "minLikelihood":"LIKELY"
      }
    }
  },
  "updateMask":"inspectJob(inspectConfig(infoTypes,minLikelihood))"
}

이 JSON을 지정된 URL로 보내면 업데이트된 작업 트리거를 나타내는 다음 결과가 반환됩니다. 원래 infoType과 가능성 값이 새 값으로 바뀌었습니다.

JSON 출력:

{
  "name":"projects/[PROJECT_ID]/jobTriggers/[JOB_TRIGGER_NAME]",
  "inspectJob":{
    "storageConfig":{
      "cloudStorageOptions":{
        "fileSet":{
          "url":"gs://dlptesting/*"
        },
        "fileTypes":[
          "FILE_TYPE_UNSPECIFIED"
        ],
        "filesLimitPercent":100
      },
      "timespanConfig":{
        "enableAutoPopulationOfTimespanConfig":true
      }
    },
    "inspectConfig":{
      "infoTypes":[
        {
          "name":"US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER"
        }
      ],
      "minLikelihood":"LIKELY",
      "limits":{

      }
    },
    "actions":[
      {
        "jobNotificationEmails":{

        }
      }
    ]
  },
  "triggers":[
    {
      "schedule":{
        "recurrencePeriodDuration":"86400s"
      }
    }
  ],
  "createTime":"2019-03-06T21:19:45.774841Z",
  "updateTime":"2019-03-06T21:27:01.650183Z",
  "lastRunTime":"1970-01-01T00:00:00Z",
  "status":"HEALTHY"
}

아래에 포함된 API 탐색기를 사용하여 빠르게 시도해 볼 수 있습니다. JSON을 사용하여 Cloud DLP API로 요청을 전송하는 방법에 대한 일반적인 정보는 JSON 빠른 시작을 참조하세요.

작업 트리거 사용

이 섹션에서는 작업 트리거를 사용하여 새 콘텐츠만 스캔하는 방법, 그리고 Cloud Functions를 사용하여 Cloud Storage로 파일을 업로드할 때마다 작업을 트리거하는 방법을 설명합니다.

새 콘텐츠만 스캔

Cloud Storage 또는 BigQuery에 저장된 파일의 기간 날짜를 자동으로 설정하는 옵션도 설정할 수 있습니다. TimespanConfig 객체를 자동 채우기로 설정하면 Cloud DLP가 마지막 트리거 실행 후 추가되었거나 수정된 데이터만 스캔합니다.

...
  timespan_config {
        enable_auto_population_of_timespan_config: true
      }
...

파일 업로드 시 작업 트리거

Google Cloud는 Cloud DLP에 기본 제공되는 작업 트리거 지원 외에도 DLP 작업을 통합하거나 트리거하는 데 사용할 수있는 다양한 구성요소를 제공합니다. 예를 들어 Cloud Functions를 사용하여 Cloud Storage에 파일이 업로드될 때마다 DLP 스캔을 트리거할 수 있습니다.

이를 위한 단계별 안내는 Cloud Storage에 업로드되는 데이터 분류 자동화를 참조하세요.