Speicher und Datenbanken von Google Cloud auf sensible Daten prüfen

Die korrekte Verwaltung sensibler Daten, die in einem Speicher-Repository gespeichert sind, beginnt mit der Speicherklassifizierung: Sie identifizieren, wo sich Ihre sensiblen Daten im Repository befinden, um welche Art von sensiblen Daten es sich handelt und wie sie genutzt werden. Dieses Wissen kann Ihnen helfen, Berechtigungen für die Zugriffssteuerung und Freigabe richtig festzulegen, und in einen ständigen Überwachungsplan einfließen.

Mit Schutz sensibler Daten können sensible Daten, die an einem Cloud Storage-Speicherort, in einer Datastore-Art oder in einer BigQuery-Tabelle gespeichert sind, erkannt und klassifiziert werden. Beim Scannen von Dateien an Cloud Storage-Speicherorten unterstützt Sensitive Data Protection das Scannen von Binär-, Text-, Bild-, Microsoft Word-, Microsoft Excel-, Microsoft PowerPoint-, PDF- und Apache Avro-Dateien. Dateitypen, die nicht erkannt werden, werden als Binärdateien gescannt. Weitere Informationen zu unterstützten Dateitypen finden Sie unter Unterstützte Dateitypen.

Wenn Sie Speicher und Datenbanken auf sensible Daten prüfen möchten, geben Sie den Speicherort der Daten und die Art von sensiblen Daten an, nach denen der Schutz sensibler Daten suchen soll. Sensitive Data Protection initiiert einen Job, der die Daten am angegebenen Speicherort prüft und dann Details zu den im Inhalt erkannten infoTypes, Wahrscheinlichkeitswerten und weitere Details zur Verfügung stellt.

Sie können eine Speicher- und Datenbankinspektion mithilfe von Sensitive Data Protection in der Google Cloud -Console, über die RESTful DLP API oder programmatisch in mehreren Programmiersprachen mithilfe einer Sensitive Data Protection-Clientbibliothek einrichten.

Dieses Thema umfasst:

  • Best Practices zum Einrichten von Scans von Google Cloud Speicher-Repositories und Datenbanken.
  • Eine Anleitung zum Einrichten eines Inspektionsscans mithilfe des Schutzes sensibler Daten in der Google Cloud Console und (optional) zum Planen sich periodisch wiederholender Inspektionsscans.
  • JSON- und Codebeispiele für jeden Google Cloud Speicher-Repository-Typ: (Cloud Storage, Firestore im Datastore-Modus (Datastore) und BigQuery).
  • Eine detaillierte Übersicht über die Konfigurationsoptionen für Scanjobs.
  • Eine Anleitung zum Abrufen von Scanergebnissen und zum Verwalten der Scanjobs, die bei jeder erfolgreichen API-Anfrage erstellt werden.

Best Practices

Zu scannende Assets identifizieren und priorisieren

Es ist wichtig, dass Sie Ihre Assets evaluieren und angeben, welche davon die höchste Priorität für Scanvorgänge haben. Wahrscheinlich wird der Rückstand der zu klassifizierenden Daten anfangs groß sein und keine Möglichkeit bestehen, alle Daten sofort zu scannen. Wählen Sie also zuerst Daten aus, die das höchste Risiko bergen. Dazu gehören beispielsweise Daten, die häufig abgerufen oder allgemein zugänglich bzw. unbekannt sind.

Zugriff auf Ihre Daten für den Schutz sensibler Daten gewähren

Sensitive Data Protection muss auf die zu scannenden Daten zugreifen können. Achten Sie also darauf, dass das Dienstkonto für den Schutz sensibler Daten Lesezugriff auf Ihre Ressourcen hat.

Umfang der ersten Scans beschränken

Die besten Ergebnisse erzielen Sie, wenn Sie den Umfang der ersten Jobs beschränken und nicht alle Daten scannen. Beginnen Sie mit einer einzigen Tabelle, einem einzigen Bucket oder einigen Dateien und verwenden Sie die Probenahme. Wenn Sie den Umfang der ersten Scans beschränken, können Sie die zu aktivierenden Detektoren und die eventuell erforderlichen Ausschlussregeln besser bestimmen, um falsch positive Ergebnisse zu reduzieren und damit aussagekräftigere Ergebnisse zu erhalten. Vermeiden Sie es, alle infoTypes zu aktivieren, wenn Sie nicht alle benötigen, da falsch positive oder unbrauchbare Ergebnisse die Risikoeinschätzung erschweren. Obwohl infoTypes wie DATE, TIME, DOMAIN_NAME und URL in bestimmten Szenarien nützlich sind, ergeben sie in einem breiten Spektrum von Ergebnissen Übereinstimmungen, sodass deren Aktivierung für große Datenscans unter Umständen nicht sinnvoll ist.

Wenn Sie eine strukturierte Datei wie eine CSV-, TSV- oder Avro-Datei testen, muss die Stichprobengröße groß genug sein, um den vollständigen Header und eine Datenzeile der Datei abzudecken. Weitere Informationen finden Sie unter Strukturierte Dateien im strukturierten Parsing-Modus scannen.

Scans planen

Verwenden Sie Job-Trigger in Sensitive Data Protection, um täglich, wöchentlich oder vierteljährlich automatisch Scans auszuführen und Ergebnisse zu generieren. Sie können diese Scans auch so konfigurieren, dass nur Daten geprüft werden, die sich seit dem letzten Scan geändert haben. Dies kann Zeit sparen und Kosten senken. Wenn Sie Scans regelmäßig ausführen, lassen sich Trends oder Anomalien in den Scanergebnissen leichter erkennen.

Joblatenz

Für Jobs und Job-Trigger werden keine Service Level Objectives (SLOs) garantiert. Die Latenz hängt von mehreren Faktoren ab: der zu scannenden Datenmenge, dem zu scannenden Speicher-Repository, dem Typ und der Anzahl der infoTypes, nach denen Sie suchen, der Region, in der der Job verarbeitet wird, und den in dieser Region verfügbaren Rechenressourcen. Daher kann die Latenz von Inspektionsjobs nicht im Voraus bestimmt werden.

Versuchen Sie Folgendes, um die Joblatenz zu reduzieren:

  • Wenn Sampling für Ihren Job oder Job-Trigger verfügbar ist, aktivieren Sie es.
  • Aktivieren Sie nicht benötigte infoTypes. Die folgenden infoTypes können in bestimmten Szenarien nützlich sein, führen aber dazu, dass Anfragen viel langsamer ausgeführt werden als Anfragen, die sie nicht enthalten:

    • PERSON_NAME
    • FEMALE_NAME
    • MALE_NAME
    • FIRST_NAME
    • LAST_NAME
    • DATE_OF_BIRTH
    • LOCATION
    • STREET_ADDRESS
    • ORGANIZATION_NAME
  • Geben Sie infoTypes immer explizit an. Verwenden Sie keine leere infoTypes-Liste.

  • Verwenden Sie nach Möglichkeit eine andere Verarbeitungsregion.

Wenn nach dem Ausprobieren dieser Techniken weiterhin Latenzprobleme bei Jobs auftreten, sollten Sie anstelle von Jobs content.inspect- oder content.deidentify-Anfragen verwenden. Diese Methoden sind im Service Level Agreement enthalten. Weitere Informationen finden Sie im Service Level Agreement für den Schutz sensibler Daten.

Hinweis

Für die Anleitung in diesem Thema wird Folgendes vorausgesetzt:

Die Speicherklassifizierung erfordert den folgenden OAuth-Bereich: https://www.googleapis.com/auth/cloud-platform. Weitere Informationen finden Sie unter Bei der DLP API authentifizieren.

Cloud Storage-Speicherort prüfen

Sie können eine Inspektion zum Schutz sensibler Daten eines Cloud Storage-Speicherorts mithilfe der Google Cloud -Konsole, der DLP API über REST- oder RPC-Anfragen oder programmatisch in mehreren Programmiersprachen mithilfe einer Clientbibliothek einrichten. Informationen zu den Parametern, die in den folgenden JSON- und Codebeispielen enthalten sind, finden Sie weiter unten im Abschnitt Speicherinspektion konfigurieren.

Sensitive Data Protection verwendet Dateiendungen und Medientypen (MIME-Typen), um die zu scannenden Dateitypen und die anzuwendenden Scanmodi zu identifizieren. Beispiel: Sensitive Data Protection scannt eine .txt-Datei im Nur-Text-Modus, auch wenn die Datei als CSV-Datei strukturiert ist, die normalerweise im Modus für strukturiertes Parsen gescannt wird.

So richten Sie einen Scanjob für einen Cloud Storage-Bucket mithilfe von Sensitive Data Protection ein:

Console

In diesem Abschnitt wird beschrieben, wie Sie einen Cloud Storage-Bucket oder -Ordner untersuchen. Wenn Sie auch möchten, dass Sensitive Data Protection eine de-identifizierte Kopie Ihrer Daten erstellt, lesen Sie den Abschnitt Sensible Cloud Storage-Daten mit der Google Cloud Console de-identifizieren.

  1. Rufen Sie in der Google Cloud Console im Bereich „Schutz sensibler Daten“ die Seite Job oder Job-Trigger erstellen auf.

    Zur Seite „Job oder Job-Trigger erstellen“

  2. Geben Sie die Informationen zum Job für den Schutz sensibler Daten ein und klicken Sie auf Weiter, um die einzelnen Schritte auszuführen:

    • Geben Sie für Eingabedaten auswählen einen Namen für den Job im Feld Name ein. Wählen Sie unter Speicherort im Menü Speichertyp die Option "Cloud Storage" aus und geben Sie dann den Speicherort der zu scannenden Daten ein. Der Bereich Probenahme ist zur Ausführung eines Beispielscans für Ihre Daten vorkonfiguriert. Sie können das Feld Prozentsatz der innerhalb des Buckets gescannten Objekte anpassen, um bei großen Datenmengen Ressourcen zu sparen. Weitere Informationen finden Sie unter Eingabedaten auswählen.

    • (Optional) Unter Erkennung konfigurieren können Sie festlegen, nach welchen Datentypen (infoTypes) gesucht werden soll. Sie haben die Möglichkeit, einen vordefinierten infoType aus der Liste oder eine Vorlage (sofern vorhanden) auszuwählen. Weitere Informationen finden Sie unter Erkennung konfigurieren.

    • Wählen Sie unter Add actions (Aktionen hinzufügen) eine oder mehrere Aktionen aus, die Sensitive Data Protection nach Abschluss des Jobs ausführen soll. Weitere Informationen finden Sie unter Aktionen für die Überprüfung oder Risikoanalyse aktivieren.

      Klicken Sie nach der Auswahl der Aktionen auf Weiter.

    • (Optional) Übernehmen Sie für Zeitplan die Menüoption Keiner, wenn der Scan nur einmal ausgeführt werden soll. Klicken Sie auf Trigger zum Ausführen des Jobs nach einem regelmäßigen Zeitplan erstellen, um die regelmäßige Ausführung von Scans zu planen. Weitere Informationen finden Sie unter Zeitplan.

  3. Klicken Sie auf Erstellen.

  4. Nach Abschluss des Jobs zum Schutz sensibler Daten werden Sie zur Seite mit den Jobdetails weitergeleitet und per E-Mail benachrichtigt. Sie können sich die Ergebnisse der Inspektion auf der Seite mit den Jobdetails ansehen.

  5. (Optional) Wenn Sie Ergebnisse zum Schutz sensibler Daten in BigQuery veröffentlichen möchten, klicken Sie auf der Seite Jobdetails auf Ergebnisse in BigQuery ansehen, um die Tabelle in der BigQuery-Web-UI zu öffnen. Anschließend können Sie die Tabelle abfragen und Ihre Ergebnisse analysieren. Weitere Informationen zum Abfragen Ihrer Ergebnisse in BigQuery finden Sie unter Ergebnisse zum Schutz sensibler Daten in BigQuery abfragen.

Protokoll

Es folgt ein JSON-Beispiel, das in einer POST-Anfrage an den angegebenen Sensitive Data Protection-REST-Endpunkt gesendet werden kann. In diesem JSON-Beispiel wird veranschaulicht, wie die DLP API zum Prüfen von Cloud Storage-Buckets verwendet wird. Informationen zu den Parametern, die in der Anfrage enthalten sind, finden Sie weiter unten im Abschnitt Speicherinspektion konfigurieren.

Sie können dies in APIs Explorer auf der Referenzseite für content.inspect schnell ausprobieren:

Zu APIs Explorer

Beachten Sie, dass bei erfolgreicher Ausführung einer Anfrage ein neuer Scanjob erstellt wird, auch in APIs Explorer. Informationen zum Steuern von Scanjobs finden Sie weiter unten in diesem Thema unter Inspektionsergebnisse abrufen. Allgemeine Informationen zur Verwendung von JSON zum Senden von Anfragen an die DLP API finden Sie in der JSON-Kurzanleitung.

JSON-Eingabe:

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

{
  "inspectJob":{
    "storageConfig":{
      "cloudStorageOptions":{
        "fileSet":{
          "url":"gs://[BUCKET-NAME]/*"
        },
        "bytesLimitPerFile":"1073741824"
      },
      "timespanConfig":{
        "startTime":"2017-11-13T12:34:29.965633345Z",
        "endTime":"2018-01-05T04:45:04.240912125Z"
      }
    },
    "inspectConfig":{
      "infoTypes":[
        {
          "name":"PHONE_NUMBER"
        }
      ],
      "excludeInfoTypes":false,
      "includeQuote":true,
      "minLikelihood":"LIKELY"
    },
    "actions":[
      {
        "saveFindings":{
          "outputConfig":{
            "table":{
              "projectId":"[PROJECT-ID]",
              "datasetId":"[DATASET-ID]"
            }
          }
        }
      }
    ]
  }
}

JSON-Ausgabe:

{
  "name":"projects/[PROJECT-ID]/dlpJobs/[JOB-ID]",
  "type":"INSPECT_JOB",
  "state":"PENDING",
  "inspectDetails":{
    "requestedOptions":{
      "snapshotInspectTemplate":{

      },
      "jobConfig":{
        "storageConfig":{
          "cloudStorageOptions":{
            "fileSet":{
              "url":"gs://[BUCKET-NAME]/*"
            },
            "bytesLimitPerFile":"1073741824"
          },
          "timespanConfig":{
            "startTime":"2017-11-13T12:34:29.965633345Z",
            "endTime":"2018-01-05T04:45:04.240912125Z"
          }
        },
        "inspectConfig":{
          "infoTypes":[
            {
              "name":"PHONE_NUMBER"
            }
          ],
          "minLikelihood":"LIKELY",
          "limits":{

          },
          "includeQuote":true
        },
        "actions":[
          {
            "saveFindings":{
              "outputConfig":{
                "table":{
                  "projectId":"[PROJECT-ID]",
                  "datasetId":"[DATASET-ID]",
                  "tableId":"[NEW-TABLE-ID]"
                }
              }
            }
          }
        ]
      }
    }
  },
  "createTime":"2018-11-07T18:01:14.225Z"
}

Java

Informationen zum Installieren und Verwenden der Clientbibliothek für Sensitive Data Protection finden Sie unter Sensitive Data Protection-Clientbibliotheken.

Richten Sie zur Authentifizierung bei Sensitive Data Protection die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


import com.google.api.core.SettableApiFuture;
import com.google.cloud.dlp.v2.DlpServiceClient;
import com.google.cloud.pubsub.v1.AckReplyConsumer;
import com.google.cloud.pubsub.v1.MessageReceiver;
import com.google.cloud.pubsub.v1.Subscriber;
import com.google.privacy.dlp.v2.Action;
import com.google.privacy.dlp.v2.CloudStorageOptions;
import com.google.privacy.dlp.v2.CloudStorageOptions.FileSet;
import com.google.privacy.dlp.v2.CreateDlpJobRequest;
import com.google.privacy.dlp.v2.DlpJob;
import com.google.privacy.dlp.v2.GetDlpJobRequest;
import com.google.privacy.dlp.v2.InfoType;
import com.google.privacy.dlp.v2.InfoTypeStats;
import com.google.privacy.dlp.v2.InspectConfig;
import com.google.privacy.dlp.v2.InspectDataSourceDetails;
import com.google.privacy.dlp.v2.InspectJobConfig;
import com.google.privacy.dlp.v2.LocationName;
import com.google.privacy.dlp.v2.StorageConfig;
import com.google.pubsub.v1.ProjectSubscriptionName;
import com.google.pubsub.v1.PubsubMessage;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class InspectGcsFile {

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

  // Inspects a file in a Google Cloud Storage Bucket.
  public static void inspectGcsFile(
      String projectId, String gcsUri, String topicId, String subscriptionId)
      throws ExecutionException, InterruptedException, 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 dlp = DlpServiceClient.create()) {
      // Specify the GCS file to be inspected.
      CloudStorageOptions cloudStorageOptions =
          CloudStorageOptions.newBuilder().setFileSet(FileSet.newBuilder().setUrl(gcsUri)).build();

      StorageConfig storageConfig =
          StorageConfig.newBuilder().setCloudStorageOptions(cloudStorageOptions).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());

      // Specify how the content should be inspected.
      InspectConfig inspectConfig =
          InspectConfig.newBuilder().addAllInfoTypes(infoTypes).setIncludeQuote(true).build();