Objektkontexte verwenden

Auf dieser Seite wird beschrieben, wie Sie Kontexte in Form von Schlüssel/Wert-Paaren an Cloud Storage-Objekte anhängen und verwalten.

Erforderliche Rollen abrufen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Objekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen und Verwalten von Objektkontexten benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Erstellen und Verwalten von Objektkontexten erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:

Erforderliche Berechtigungen

Die folgenden Berechtigungen sind erforderlich, um Objektkontexte zu erstellen und zu verwalten:

  • Objekt mit Objektkontexten erstellen:
    • storage.objects.create
    • storage.objects.createContext
  • Objektkontexte anhängen, aktualisieren und löschen:
    • storage.objects.update
    • storage.objects.createContext
    • storage.objects.updateContext
    • storage.objects.deleteContext
  • Objektkontexte ansehen:
    • storage.objects.get
    • storage.objects.list

Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Kontexte an neue Objekte anhängen

Kontexte an Objekte anhängen, wenn Sie neue Objekte in Cloud Storage-Buckets hochladen. Jeder Kontext besteht aus einem Schlüssel und einem Wert.

Befehlszeile

Wenn Sie beim Hochladen von Objekten mit dem Befehl gcloud alpha storage cp Kontexte anhängen möchten, verwenden Sie das Flag --custom-contexts:

gcloud alpha storage cp OBJECT_LOCATION gs://DESTINATION_BUCKET_NAME --custom-contexts=KEY=VALUE,...

Wobei:

  • OBJECT_LOCATION ist der lokale Pfad zu Ihrem Objekt. Beispiel: Desktop/dog.png.
  • DESTINATION_BUCKET_NAME ist der Name des Buckets, in den Sie das Objekt hochladen. Beispiel: my-bucket
  • KEY ist der Kontextschlüssel, der an ein Objekt angehängt werden soll. Beispiel: Department. Sie können mehrere durch Kommas getrennte Schlüssel/Wert-Paare angeben.
  • VALUE ist der Wert, der dem Kontextschlüssel zugeordnet werden soll. Beispiel: Human resources.

Alternativ können Sie eine JSON-Datei mit den Kontexten erstellen, die Sie den Objekten zuweisen möchten, und das Flag --custom-contexts-file verwenden:

  {
    "KEY": {
      "value": "VALUE"
    },
    ...
  }

Wobei:

  • KEY ist der Kontextschlüssel, der an ein Objekt angehängt werden soll. Beispiel: Department. Sie können mehrere Schlüssel/Wert-Paare angeben.
  • VALUE ist der Wert, der dem Kontextschlüssel zugeordnet werden soll. Beispiel: Human resources.

Wenn Sie beim Hochladen von Verzeichnissen mit dem Befehl gcloud alpha storage rsync Kontexte anhängen möchten, verwenden Sie das Flag --custom-contexts oder das Flag --custom-contexts-file:

gcloud alpha storage rsync DIRECTORY_LOCATION gs://DESTINATION_BUCKET_NAME --recursive --custom-contexts=KEY=VALUE,...

Wobei:

  • DIRECTORY_LOCATION ist der lokale Pfad zu Ihrem Verzeichnis. Beispiel: ~/my_directory.
  • DESTINATION_BUCKET_NAME ist der Name des Buckets, in den Sie das Verzeichnis hochladen. Beispiel: my-bucket
  • KEY ist der Kontextschlüssel, der an Objekte angehängt werden soll. Beispiel: Department. Sie können mehrere durch Kommas getrennte Schlüssel/Wert-Paare angeben.
  • VALUE ist der Wert, der dem Kontextschlüssel zugeordnet werden soll. Beispiel: Human resources.

JSON API

Wenn Sie beim Hochladen neuer Objekte Kontexte an Objekte anhängen möchten, verwenden Sie eine der folgenden Methoden:

Nehmen Sie das Feld contexts in die Objektmetadaten im JSON-Format auf:

  {
    "contexts": {
      "custom": {
        "KEY": {
          "value": "VALUE"
        },
        ...
      }
    }
  }

Wobei:

  • KEY ist der Kontextschlüssel, der an ein Objekt angehängt werden soll. Beispiel: Department. Sie können mehrere Schlüssel/Wert-Paare im custom-Objekt angeben.
  • VALUE ist der Wert, der dem Kontextschlüssel zugeordnet werden soll. Beispiel: Human resources.

Kontexte an ein vorhandenes Objekt anhängen oder ändern

Sie können Ihren vorhandenen Objekten in den Cloud Storage-Buckets neue Kontexte hinzufügen.

Befehlszeile

Führen Sie den Befehl gcloud alpha storage objects update aus:

gcloud alpha storage objects update gs://BUCKET_NAME/OBJECT_NAME CUSTOM_CONTEXTS_FLAG

Wobei:

  • BUCKET_NAME ist der Name des Buckets, der das Objekt enthält, für das Sie den Kontext bearbeiten möchten. Beispiel: my-bucket
  • OBJECT_NAME ist der Name des Objekts. Beispiel: pets/dog.png
  • CUSTOM_CONTEXTS_FLAG ist eines der folgenden Flags:

    • Verwenden Sie --custom-contexts=KEY=VALUE,... oder --custom-contexts-file=CUSTOM_CONTEXTS_FILE, um alle vorhandenen Kontexte zu ersetzen.

      Wobei:

      • KEY ist der Kontextschlüssel, der an ein Objekt angehängt werden soll. Beispiel: Department. Sie können mehrere Schlüssel/Wert-Paare angeben, die durch Kommas getrennt sind.
      • VALUE ist der Wert, der dem Kontextschlüssel zugeordnet werden soll. Beispiel: Human resources.
      • CUSTOM_CONTEXTS_FILE ist der Pfad zur JSON- oder YAML-Datei, die die Kontexte enthält, die Sie an das Objekt anhängen möchten.
    • Verwenden Sie --clear-custom-contexts, um alle vorhandenen Kontexte zu löschen.

    • Verwenden Sie eine Kombination aus --update-custom-contexts=KEY=VALUE,... und --remove-custom-contexts=KEY,..., um einzelne Kontexte hinzuzufügen, zu ändern oder zu löschen.

      Wobei:

      • KEY ist der Kontextschlüssel, den Sie an ein Objekt anhängen oder aus einem Objekt löschen möchten. Beispiel: Department.
      • VALUE ist der Wert, der dem Kontextschlüssel zugeordnet werden soll, den Sie an ein Objekt anhängen möchten. Beispiel: Human resources

Wenn der Vorgang erfolgreich ausgeführt wurde, sieht die Antwort in etwa so aus:

Patching gs://my-bucket/pets/dog.png#1560574162144861...
  Completed 1

Clientbibliotheken

Java

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Java API.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.


import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.BlobInfo.ObjectContexts;
import com.google.cloud.storage.BlobInfo.ObjectCustomContextPayload;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import com.google.common.collect.Maps;
import java.util.Map;

public class SetObjectContexts {
  public static void setObjectContexts(
      String projectId, String bucketName, String objectName, String key, String value)
      throws Exception {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID of your GCS bucket
    // String bucketName = "your-unique-bucket-name";

    // The ID of your GCS object
    // String objectName = "your-object-name";

    // The context key-value you want to add
    // String key = "your-context-key";
    // String value = "your-context-value";

    try (Storage storage =
        StorageOptions.newBuilder().setProjectId(projectId).build().getService()) {
      BlobId blobId = BlobId.of(bucketName, objectName);
      Blob blob = storage.get(blobId);
      if (blob == null) {
        System.out.println("The object " + objectName + " was not found in " + bucketName);
        return;
      }

      // Recommended: Set a generation-match precondition to avoid potential race
      // conditions and data corruptions. The request to update returns a 412 error if
      // the object's generation number does not match your precondition.
      Storage.BlobTargetOption precondition = Storage.BlobTargetOption.generationMatch();

      // This section demonstrates how to upsert, delete all, and delete a specific context.

      // To upsert a context (if the key already exists, its value is replaced;
      // otherwise, a new key-value pair is added):
      ObjectCustomContextPayload payload =
          ObjectCustomContextPayload.newBuilder().setValue(value).build();
      Map<String, ObjectCustomContextPayload> custom = Maps.newHashMap();
      custom.put(key, payload);
      ObjectContexts contexts = ObjectContexts.newBuilder().setCustom(custom).build();

      /*
       * To delete all existing contexts:
       * ObjectContexts contexts = ObjectContexts.newBuilder().setCustom(null).build();
       */

      /*
       * To delete a specific key from the context:
       * Map<String, ObjectCustomContextPayload> custom = Maps.newHashMap();
       * custom.put(key, null);
       * ObjectContexts contexts = ObjectContexts.newBuilder().setCustom(custom).build();
       */
      BlobInfo pendingUpdate = blob.toBuilder().setContexts(contexts).build();
      storage.update(pendingUpdate, precondition);

      System.out.println(
          "Updated custom contexts for object " + objectName + " in bucket " + bucketName);
    }
  }
}

JSON API

  1. Die gcloud CLI installieren und initialisieren, um ein Zugriffstoken für den Header Authorization zu generieren.

  2. Erstellen Sie eine JSON-Datei mit den Einstellungen für das Objekt, die die Konfigurationsfelder contexts für das Objekt enthalten muss.

    Verwenden Sie das folgende Format, um vorhandene Kontexte hinzuzufügen, zu ändern oder zu überschreiben:

      {
        "contexts": {
          "custom": {
            "KEY": {
              "value": "VALUE"
            },
            ...
          }
        }
      }

    Wobei:

    • KEY ist der Kontextschlüssel, der an ein Objekt angehängt werden soll. Beispiel: Department. Sie können mehrere Schlüssel/Wert-Paare im custom-Objekt angeben.
    • VALUE ist der Wert, der dem Kontextschlüssel zugeordnet werden soll. Beispiel: Human resources

    Verwenden Sie das folgende Format, um alle vorhandenen Kontexte zu löschen:

      {
        "contexts": {
          "custom": null
        }
      }

    Verwenden Sie das folgende Format, um einen bestimmten Schlüssel aus dem Kontext zu löschen:

      {
        "contexts": {
          "custom": {
            "KEY": null,
            ...
          }
        }
      }

    Wobei:

    KEY ist der Kontextschlüssel, den Sie aus einem Objekt löschen möchten. Beispiel: Department. Sie können mehrere Schlüssel angeben, die aus dem custom-Objekt gelöscht werden sollen.

  3. Verwenden Sie cURL, um die JSON API mit einer PATCH-Objektanfrage aufzurufen:

    curl -X PATCH --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME"

    Wobei:

    • JSON_FILE_NAME ist der Pfad zur Datei, die die Informationen zum Objektkontext enthält.
    • BUCKET_NAME ist der Name des Buckets, der das Objekt enthält, für das Sie den Kontext bearbeiten möchten. Beispiel: my-bucket
    • OBJECT_NAME ist der URL-codierte Name des Objekts. Beispiel: pets/dog.png, URL-codiert als pets%2Fdog.png.

Alternativ können Sie den Kontext eines Objekts mit einer PUT-Anfrage ersetzen. Mit der PUT-Objektanfrage werden auch andere Objektmetadaten ersetzt. Daher wird die Verwendung der PUT-Objektanfrage nicht empfohlen.

Objektkontexte ansehen

Sie können die Kontexte eines Objekts aufrufen, indem Sie die Objektmetadaten auflisten oder ein bestimmtes Objekt beschreiben.

Befehlszeile

Führen Sie den Befehl gcloud alpha storage objects describe aus:

gcloud alpha storage objects describe gs://BUCKET_NAME/OBJECT_NAME

Wobei:

  • BUCKET_NAME ist der Name des Buckets, der das Objekt enthält, dessen Kontext Sie ansehen möchten. Beispiel: my-bucket.
  • OBJECT_NAME ist der Name des Objekts, dessen Kontext Sie ansehen möchten. z. B. pets/dog.png.

Wenn der Vorgang erfolgreich war, sieht die Antwort in etwa so aus:

bucket: my-bucket
contexts:
  Department:
    createTime: '2023-01-01T00:00:00.000000+00:00'
    type: CUSTOM
    updateTime: '2023-01-01T00:00:00.000000+00:00'
    value: HR
  DataClassification:
    createTime: '2023-01-01T00:00:00.000000+00:00'
    type: CUSTOM
    updateTime: '2023-01-01T00:00:00.000000+00:00'
    value: Confidential
name: employees.txt

Clientbibliotheken

Java

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Java API.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.


import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobInfo.ObjectContexts;
import com.google.cloud.storage.BlobInfo.ObjectCustomContextPayload;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import java.util.Map;

public class GetObjectContexts {
  public static void getObjectContexts(String projectId, String bucketName, String objectName)
      throws Exception {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID of your GCS bucket
    // String bucketName = "your-unique-bucket-name";

    // The ID of your GCS object
    // String objectName = "your-object-name";

    try (Storage storage =
        StorageOptions.newBuilder().setProjectId(projectId).build().getService()) {

      Blob blob = storage.get(bucketName, objectName);
      if (blob == null) {
        System.out.println("The object " + objectName + " was not found in " + bucketName);
        return;
      }
      ObjectContexts objectContexts = blob.getContexts();

      if (objectContexts != null) {
        Map<String, ObjectCustomContextPayload> customContexts = objectContexts.getCustom();
        if (customContexts == null) {
          System.out.println("No custom contexts found for object: " + objectName);
          return;
        }
        // Print blob's object contexts
        System.out.println("\nCustom Contexts:");
        for (Map.Entry<String, ObjectCustomContextPayload> custom : customContexts.entrySet()) {
          System.out.println(custom.getKey() + "=" + custom.getValue());
        }
      }
    }
  }
}

JSON API

  1. Die gcloud CLI installieren und initialisieren, um ein Zugriffstoken für den Header Authorization zu generieren.

  2. Verwenden Sie cURL, um die JSON API mit einer GET-Objektanfrage aufzurufen:

    curl -X GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME"

    Wobei:

    • BUCKET_NAME ist der Name des Buckets, der das Objekt enthält, dessen Kontext Sie ansehen möchten. Beispiel: my-bucket
    • OBJECT_NAME ist der URL-codierte Name des Objekts, dessen Kontext Sie ansehen möchten. Beispiel: pets/dog.png, URL-codiert als pets%2Fdog.png.

    Wenn der Vorgang erfolgreich war, sieht die Antwort in etwa so aus:

      {
        "kind": "storage#object",
        "name": "employees.txt",
        "bucket": "my-bucket",
        "contexts": {
          "custom": {
            "Department": {
              "value": "HR",
              "createTime": "2023-01-01T00:00:00.000Z",
              "updateTime": "2023-01-01T00:00:00.000Z"
            },
            "DataClassification": {
              "value": "Confidential",
              "createTime": "2023-01-01T00:00:00.000Z",
              "updateTime": "2023-01-01T00:00:00.000Z"
            }
          }
        }
      }
      

Objekte nach Kontexten filtern

Objekte nach dem Vorhandensein von Objektkontextschlüsseln oder ihren spezifischen Werten filtern. Wenn Sie Objekte nach Kontexten filtern, können Sie bestimmte Gruppen von Objekten effizient finden und verwalten. Weitere Informationen finden Sie unter Objekte nach Kontexten filtern.

Objektkontexte bei Objektvorgängen verwalten

Objektkontexte bleiben standardmäßig erhalten, wenn Sie Objekte kopieren, neu schreiben, verfassen, verschieben oder wiederherstellen. Sie können Kontexte auch während der Vorgänge zum Kopieren, Umschreiben und Verfassen ändern.

Befehlszeile

Mit dem Befehl gcloud alpha storage cp, dem Befehl gcloud alpha storage rsync und dem Befehl gcloud alpha storage mv werden standardmäßig Kontexte aus dem Quellobjekt beibehalten. Verwenden Sie eines der folgenden Flags, um Kontexte während dieser Vorgänge zu ändern:

  • Die Flags --custom-contexts oder --custom-contexts-file zum Festlegen neuer Kontexte für das Zielobjekt.
  • Das Flag --clear-custom-contexts, um zu verhindern, dass Kontexte aus dem Quellobjekt an das Zielobjekt angehängt werden.
  • Eine Kombination der Flags --update-custom-contexts und --remove-custom-contexts, um einzelne Kontexte aus dem Quellobjekt zu ändern, bevor sie an das Zielobjekt angehängt werden.

Mit dem Befehl gcloud alpha storage objects compose werden Kontexte aus den Quellobjekten zusammengeführt und standardmäßig an die Zielobjekte angehängt. Cloud Storage löst Konflikte, indem Kontexten aus Quellobjekten, die später verarbeitet werden, Priorität eingeräumt wird. Weitere Informationen zum Verhalten des Objektkontexts während eines Kompositionsvorgangs finden Sie unter Kontexte für zusammengesetzte Objekte. Mit den Flags --custom-contexts oder --custom-contexts-file können Sie auch neue Kontexte für das Zielobjekt angeben.

JSON API

  • Wenn Sie Kontexte während eines copy- oder rewrite-Objektvorgangs ändern möchten, fügen Sie das Attribut contexts.custom in den Anfragetext ein. Wenn Sie diese Property nicht angeben, werden Kontexte aus dem Quellobjekt standardmäßig beibehalten.

  • Wenn Sie Objekte zusammenfügen, werden Kontexte aus Quellobjekten standardmäßig in das Zielobjekt zusammengeführt. Cloud Storage löst Konflikte, indem Kontexten aus Quellobjekten, die später verarbeitet werden, Priorität eingeräumt wird. Weitere Informationen zum Verhalten des Objektkontexts während eines Kompositionsvorgangs finden Sie unter Kontexte für zusammengesetzte Objekte. Sie können auch neue Kontexte für das Zielobjekt in der Eigenschaft destination.contexts.custom angeben.

Nächste Schritte