Erste Schritte mit Cloud Storage

Google Display & Video 360 speichert Lesedateien automatisch in Google Cloud Storage. Diese Dateien sind nur für Konten zugänglich, denen Zugriff gewährt wurde.

Projekt erstellen

So erstellen und konfigurieren Sie ein Projekt:

  1. Rufen Sie die Seite mit den für die Google API Console aktivierten APIs auf.

    Wenn Sie noch nicht bei Google angemeldet sind, werden Sie dazu aufgefordert.

  2. Wählen Sie aus der Drop-down-Liste ein vorhandenes Projekt aus oder erstellen Sie ein neues.
    • Wenn Sie mehrere vorhandene Projekte haben, wählen Sie das Projekt aus, für das Sie Google Cloud Storage aktivieren möchten. Wählen Sie dann Weiter aus.
    • Wenn du kein Projekt hast, wähle Neues Projekt erstellen aus, gib einen Projektnamen ein und wähle Erstellen aus.

      Hinweis: Einige Ressourcenkennungen (z. B. Projekt-IDs) können über die Lebensdauer Ihres Projekts hinaus beibehalten werden. Vermeiden Sie es deshalb, vertrauliche Informationen in Ressourcen-IDs zu speichern.

  3. In der Liste Aktivierte APIs muss die Google Cloud Storage-Komponente aufgeführt sein. Ist dies nicht der Fall, klicken Sie auf den Tab Google APIs, suchen Sie nach der Google Cloud Storage-Komponente, wählen Sie sie aus und klicken Sie auf API aktivieren.

    Beachten Sie, dass die Google Cloud Storage-Komponente für die meisten Projekte bereits aktiviert ist. Wenn Sie über die JSON API auf Google Cloud Storage zugreifen möchten, prüfen Sie auch, ob die Google Cloud Storage JSON API aktiviert ist.

  4. Aktivieren Sie die Abrechnung für das Projekt.

    Bevor Sie Google Cloud Storage verwenden können, müssen Sie die Abrechnung für Ihr Projekt aktivieren, falls Sie dies noch nicht getan haben. Wenn Sie die Abrechnung aktivieren, werden Ihnen nicht zwangsläufig Kosten in Rechnung gestellt. Weitere Informationen finden Sie unter Preise.

    1. Klicken Sie im Cloud Storage-Projekt oben links auf das Galeriemenü und wählen Sie Abrechnung aus.
    2. Falls Sie noch kein Rechnungskonto haben, folgen Sie der Anleitung zum Erstellen eines neuen Rechnungskontos.
    3. Wenn Sie bereits ein Rechnungskonto haben, wählen Sie es und dann Konto festlegen aus.

Bleiben Sie in der Google API Console im selben Projekt und fahren Sie mit dem nächsten Abschnitt fort.

Zugriff auf Cloud Storage einrichten

  1. Klicken Sie in der Google API Console im erforderlichen Projekt oben links auf das Galeriemenü, wählen Sie APIs und Dienste aus und klicken Sie dann auf Anmeldedaten. Suchen Sie auf der Seite „Anmeldedaten“ nach Dienstkontoschlüsseln.

    Suchen Sie die E-Mail-Adresse des Dienstkontoschlüssels:

    1. Klicken Sie rechts neben dem Abschnitt „Dienstkontoschlüssel“ auf den Link Dienstkonten verwalten.
    2. Die E-Mail-Adresse wird dann auf der Seite Berechtigungen angezeigt.

    Wenn keine Dienstkontoschlüssel vorhanden sind, erstellen Sie ein neues Dienstkonto:

    1. Wählen Sie im Drop-down-Menü Anmeldedaten erstellen die Option Dienstkontoschlüssel aus.
    2. Wählen Sie im Drop-down-Menü Dienstkonto die Option Neues Dienstkonto aus.
    3. Geben Sie einen Namen für das Dienstkonto ein. Die Dienstkonto-ID wird automatisch aus dem Namen und dem Projektnamen generiert.
    4. Notieren Sie die E-Mail-Adresse des Dienstkontos mit der ID gserviceaccount.com. Es wird nicht mehr auf der Seite „Anmeldedaten“ angezeigt, nachdem Sie Erstellen ausgewählt haben.
    5. Wählen Sie im Abschnitt Schlüsseltyp die Option JSON aus.
    6. Klicken Sie auf Erstellen. Die JSON-Datei mit dem öffentlichen/privaten Schlüsselpaar des Kontos wird im Ordner „Downloads“ gespeichert. Mit diesem Schlüssel wird Ihre Anwendung bei der API authentifiziert und alle Anfragen signiert, die sie an die API sendet. Speichern Sie die generierte JSON-Datei an einem sicheren Ort, an dem Ihre Anwendung darauf zugreifen kann.
  2. Wenden Sie sich an das Display & Video 360-Supportteam, um die Aktivierung von Entity Read-Dateien und/oder der Google Bid Manager API anzufordern.

    Nachdem das Supportteam den Zugriff bestätigt hat, erstellen Sie eine oder mehrere eigene Google-Gruppen und aktualisieren Sie die folgenden Felder in den Details zum Display & Video 360-Partner. Hinweis: Nur Nutzer mit Zugriff auf Partnerebene können diese Aktualisierungen vornehmen:

    • Google-Gruppe „Log lesen“
      Die Gruppe mit Lesezugriff hat nur Berechtigungen zum Lesen von Dateien und zum Auflisten der Inhalte der Storage-Buckets.
    • Google-Gruppe "Logverwaltung"
      Die Verwaltungsgruppe verfügt über alle Berechtigungen der schreibgeschützten Gruppe, kann jedoch auch die ACLs von Dateien in den Buckets ändern. Beachten Sie, dass auch die Verwaltungsgruppe nicht berechtigt ist, Bucket-ACLs zu ändern. Sie hat auch keine Berechtigung, Dateien zu erstellen, zu ändern oder zu löschen.

    Nachdem die Google-Gruppe hinzugefügt wurde, können Sie Nutzer nach Bedarf ohne weitere Beteiligung des Display & Video 360-Supportteams zu Ihrer Gruppe hinzufügen oder daraus entfernen. Nur die Nutzer, die zu Ihrer Gruppe gehören, haben Zugriff auf Ihre Daten.

Auf Daten zugreifen

Mit gsutil auf Daten zugreifen

Das gsutil-Tool ist eine Befehlszeilenanwendung, mit der Sie ohne Programmiererfahrung einfach auf Ihre Google Cloud Storage-Daten zugreifen können. Sie können beispielsweise gsutil als Teil eines Skripts oder einer Batchdatei verwenden, anstatt benutzerdefinierte Anwendungen zu erstellen.

Informationen zu den ersten Schritten mit gsutil finden Sie in der gsutil-Dokumentation. Sie müssen sich immer noch mit OAuth 2 authentifizieren, aber gsutil selbst fordert Sie bei der ersten Verwendung zur Eingabe der Anmeldedaten auf und speichert sie zur späteren Verwendung.

Programmatisch auf Daten zugreifen

Google Cloud Storage bietet APIs für viele Programmiersprachen, mit denen Sie programmatisch auf Ihre Daten zugreifen können. Im folgenden Beispiel wird gezeigt, wie Sie eine der Lesedateien aus Google Cloud Storage einfach herunterladen. Denken Sie daran, dass nur die öffentlichen Lesedateien im Bucket gdbm-public gespeichert sind. Ihre privaten Lesedateien werden in partner- und werbetreibendenspezifischen Buckets gespeichert.

Java

Im folgenden Beispiel wird die Google APIs-Clientbibliothek für Java verwendet, die den Zugriff auf Daten in Google Cloud Storage erleichtert. Zusätzlich zur allgemeinen Google APIs-Clientbibliothek müssen Sie auch die separate Bibliothek für die Cloud Storage API herunterladen.

Sie müssen zuerst die Anmeldedaten für die Kommunikation mit der API einrichten, um die Autorisierung für den Zugriff auf Ihre Daten zu erhalten. Dazu wird ein Credential-Objekt erstellt, das die developer.gserviceaccount.com-E-Mail-Adresse des Dienstkontos als ServiceAccountId verwendet und die private Schlüsseldatei lädt, die beim Erstellen des Dienstkontos aus der Google API Console heruntergeladen wurde. Dadurch wird sichergestellt, dass alle zukünftigen Anfragen an die API mit dem privaten Schlüssel des Dienstkontos signiert werden:

NetHttpTransport HTTP_TRANSPORT = new NetHttpTransport();
JacksonFactory JSON_FACTORY = new JacksonFactory();

...

Credential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
   .setJsonFactory(JSON_FACTORY)
   .setServiceAccountId("...@developer.gserviceaccount.com")
   .setServiceAccountScopes(StorageScopes.DEVSTORAGE_READ_ONLY)
   .setServiceAccountPrivateKeyFromP12File(new File("...-privatekey.p12"))
   .build();

Nachdem Sie das Credential-Objekt erstellt haben, können Sie damit ein neues Storage-Objekt instanziieren, das Sie für alle zukünftigen Anfragen an die Google Cloud Storage API verwenden können:

Storage storage = new Storage(HTTP_TRANSPORT, JSON_FACTORY, credential);

Da Sie nun ein neues Storage-Objekt haben, können Sie Anfragen an die API senden. Hier stellen Sie eine Anfrage zum Abrufen eines bestimmten Elements bucketObjectName aus dem Bucket bucket. Die Bibliothek verarbeitet den HTTP-Download der Datei aus Google Cloud Storage und Sie können den Inhalt dann einfach in der Console ausgeben:

Get bucketObject = storage.objects().get(bucketName, bucketObjectName);

ByteArrayOutputStream output = new ByteArrayOutputStream();
bucketObject.getMediaHttpDownloader().setDirectDownloadEnabled(true);
bucketObject.executeAndDownloadTo(output);

System.out.println(output.toString());

Die Werte für bucket und bucketObjectName hängen davon ab, auf welchen Teil der API Sie zugreifen. Weitere Informationen finden Sie im entsprechenden Abschnitt zu Namenskonventionen.

C#

Im folgenden Beispiel wird die Google APIs-Clientbibliothek für .NET verwendet, die den Zugriff auf Daten in Google Cloud Storage erleichtert.

Sie müssen zuerst die Anmeldedaten für die Kommunikation mit der API einrichten, um die Autorisierung für den Zugriff auf Ihre Daten zu erhalten. Dazu wird ein AssertionFlowClient-Objekt erstellt, das die developer.gserviceaccount.com-E-Mail-Adresse des Dienstkontos als ServiceAccountId verwendet und außerdem die Datei mit dem privaten Schlüssel lädt, die beim Erstellen des Dienstkontos aus der Google API Console heruntergeladen wurde.

string keyPath = @"...-privatekey.p12";
X509Certificate2 certificate = new X509Certificate2(keyPath, "notasecret", X509KeyStorageFlags.Exportable);
var provider = new AssertionFlowClient(GoogleAuthenticationServer.Description, certificate)
{
    ServiceAccountId = "...@developer.gserviceaccount.com",
    Scope = StorageService.Scopes.DevstorageRead_only.GetStringValue()
};

Nachdem Sie das AssertionFlowClient-Objekt erstellt haben, können Sie damit ein neues OAuth2Authenticator-Objekt instanziieren, mit dem Sie eine neue Storage-Instanz für alle zukünftigen Anfragen an die Google Cloud Storage API instanziieren können:

var auth = new OAuth2Authenticator<AssertionFlowClient>(provider, AssertionFlowClient.GetState);
StorageService service = new StorageService(auth);

Da Sie nun ein neues Storage-Objekt haben, können Sie Anfragen an die API senden. Hier stellen Sie eine Anfrage zum Abrufen eines bestimmten Elements, bucketObjectName, aus dem Bucket bucket. Für den HTTP-Download aus Google Cloud Storage werden die Standardklassen der .NET-Clientbibliotheken verwendet. Falls eine Weiterleitung aber vorhanden ist, müssen Sie dies manuell tun, damit in der Anfrage immer der richtige Authorization-Header vorhanden ist:

var results = service.Objects.Get(bucketName, bucketObjectName).Fetch();

HttpWebRequest request = createRequest(results.Media.Link, auth);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

// Handle redirects manually to ensure that the Authorization header is present if
// your request is redirected.
if (response.StatusCode == HttpStatusCode.TemporaryRedirect)
{
    request = createRequest(response.Headers["Location"], auth);
    response = (HttpWebResponse)request.GetResponse();
}

Der Inhalt der Antwort kann dann wie gewohnt über die GetResponseStream aus dem HttpWebResponse-Objekt gelesen werden. Die Werte für bucket und bucketObjectName hängen davon ab, auf welchen Teil der API Sie zugreifen. Weitere Informationen finden Sie im entsprechenden Abschnitt zu Namenskonventionen.

Anhang: Vollständige Beispiele

Java

/*
 * Copyright (c) 2013 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0.
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
package com.google.bidmanager.api.samples;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStreamReader;

import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.storage.Storage;
import com.google.api.services.storage.Storage.Objects.Get;
import com.google.api.services.storage.StorageScopes;

/**
 * A simple class that demonstrates how to download a specific object from a bucket using a
 * service account
 */
public class ServiceDownload {

  /**
   * This is the HTTP Transport object used for automatically refreshing access tokens.
   */
  static final NetHttpTransport HTTP_TRANSPORT = new NetHttpTransport();

  /**
   * This is the JSON factory used for parsing refresh token responses.Your first requirement
   */
  static final JacksonFactory JSON_FACTORY = new JacksonFactory();

  /**
   * The main method will attempt to download a specific named object from the gdbm-public bucket
   * using a service account.
   *
   * @param args Not used.
   */
  public static void main(String[] args) {

    try {
      // Prompt the user for the details of the object to download.
      System.out.print("Name of object to download, e.g. entity/20130430.0.Browser.json:");
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      String bucketObjectName = in.readLine();
      in.close();
      String bucketName = "gdbm-public";

      Credential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
           .setJsonFactory(JSON_FACTORY)
           .setServiceAccountId("...@developer.gserviceaccount.com")
           .setServiceAccountScopes(StorageScopes.DEVSTORAGE_READ_ONLY)
           .setServiceAccountPrivateKeyFromP12File(
               new File("...-privatekey.p12"))
           .build();

      Storage storage = new Storage(HTTP_TRANSPORT, JSON_FACTORY, credential);

      Get bucketObject = storage.objects().get(bucketName, bucketObjectName);

      ByteArrayOutputStream output = new ByteArrayOutputStream();
      bucketObject.getMediaHttpDownloader().setDirectDownloadEnabled(true);
      bucketObject.executeAndDownloadTo(output);
      System.out.println(output.toString());

    } catch (Exception e) {
      System.err.println("Unexpected exception caught: " + e.getMessage());
      e.printStackTrace();
    }

  }


}

C#

/*
 * Copyright (c) 2013 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0.
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Security.Cryptography.X509Certificates;

using DotNetOpenAuth.OAuth2;

using Google.Apis;
using Google.Apis.Requests;
using Google.Apis.Authentication.OAuth2;
using Google.Apis.Authentication.OAuth2.DotNetOpenAuth;
using Google.Apis.Storage.v1beta1;
using Google.Apis.Storage.v1beta1.Data;
using Google.Apis.Util;

namespace ApiSamples
{
    /// <summary>
    /// A simple class that demonstrates how to download a specific object from a bucket using a
    /// service account
    /// </summary>
    class ServiceDownload
    {
        /// <summary>
        /// The main method will attempt to download a specific named object from the
        /// gdbm-public bucket using a service account.
        /// </summary>
        /// <param name="args">Not used.</param>
        public static void Main(string[] args)
        {

            // Prompt the user for the details of the object to download
            Console.WriteLine("Name of object to download, e.g. entity/20130430.0.Browser.json:");
            string bucketObjectName = Console.ReadLine();
            string bucketName = "gdbm-public";

            try
            {
                string keyPath = @"...-privatekey.p12";
                X509Certificate2 certificate = new X509Certificate2(keyPath, "notasecret", X509KeyStorageFlags.Exportable);
                var provider = new AssertionFlowClient(GoogleAuthenticationServer.Description, certificate)
                {
                    ServiceAccountId = "...@developer.gserviceaccount.com",
                    Scope = StorageService.Scopes.DevstorageRead_only.GetStringValue()
                };
                var auth = new OAuth2Authenticator<AssertionFlowClient>(provider, AssertionFlowClient.GetState);

                StorageService service = new StorageService(auth);
                var results = service.Objects.Get(bucketName, bucketObjectName).Fetch();

                HttpWebRequest request = createRequest(results.Media.Link, auth);
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                // Handle redirects manully to ensure that the Authorization header is present if
                // our request is redirected.
                if (response.StatusCode == HttpStatusCode.TemporaryRedirect)
                {
                    request = createRequest(response.Headers["Location"], auth);
                    response = (HttpWebResponse)request.GetResponse();
                }

                Stream stream = response.GetResponseStream();
                StreamReader reader = new StreamReader(stream);
                String data = reader.ReadToEnd();
                Console.Write(data);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unexpected exception caught: " + e.Message);
                Console.Write(e.StackTrace);
            }
            Console.ReadKey();
        }

        /// <summary>
        /// Generate a HttpWebRequest for the given URL with the appropriate OAuth2 authorization
        /// header applied.  The HttpWebRequest object returned has its AllowAutoRedirect option
        /// disabled to allow us to manually handle redirects.
        /// </summary>
        /// <param name="url">URL that is to be requested with this object</param>
        /// <param name="auth">The OAuth2Authenticator instance that contains the appropriate keys.</param>
        /// <returns>HttpWebRequest object ready to be used to make requests to the API</returns>
        private static HttpWebRequest createRequest(string url, OAuth2Authenticator<AssertionFlowClient> auth)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Headers.Add("Authorization", "Bearer " + auth.State.AccessToken);
            request.AllowAutoRedirect = false;
            return request;
        }

    }
}