Começar a usar o Cloud Storage

Rede de Display do Google e O Video 360 armazena automaticamente os arquivos da leitura de entidades no Google Cloud Storage. Esses arquivos só podem ser acessados por que receberam acesso.

Criar um projeto

Crie e configure um projeto da seguinte maneira:

  1. Acesse a página de APIs ativadas do Console de APIs do Google.

    Se ainda não tiver feito login no Google, você será solicitado a fazer login.

  2. Na lista suspensa do projeto, selecione um projeto existente ou crie um novo.
    • Se você já tiver vários projetos, selecione o projeto para a qual você quer ativar o Google Cloud Storage. Em seguida, selecione Continuar.
    • Ou, se você não tiver um projeto, selecione Criar um novo projeto, digite um nome para o projeto e selecione Criar.

      Observação: alguns identificadores de recurso (como IDs de projeto) podem ser retidos após o fim da vida útil do projeto. Por isso, evite armazenar informações sensíveis em recursos identificadores.

  3. Na lista de APIs ativadas, verifique se o componente Google Cloud Storage está listado. Se ela não estiver na lista, clique na guia APIs do Google, pesquise e selecione a opção Storage e clique em Ativar API.

    Observe que, para a maioria dos projetos, o componente Google Cloud Storage já está ativado. Se você planeja para acessar o Google Cloud Storage usando a API JSON e, em seguida, verifique também se a API JSON do Google Cloud Storage está ativada.

  4. Ative o faturamento do projeto.

    Antes de usar o Google Cloud Storage, você precisa ativar o faturamento dos seus projeto, se ainda não o fez. A ativação do faturamento não necessariamente significa que você será cobrado. Para mais informações, consulte Preços.

    1. Ainda no projeto de armazenamento em nuvem, clique no menu da galeria no canto superior esquerdo e selecione Faturamento.
    2. Se você ainda não tem uma conta de faturamento, siga as instruções para criar uma nova conta de faturamento.
    3. Se você tiver uma conta de faturamento, Selecione-a e clique em Definir conta.

No Console de APIs do Google, permaneça no mesmo projeto e vá para a próxima seção.

Configurar o acesso ao Cloud Storage

  1. Ainda no Console de APIs do Google, dentro do projeto requerido, clique no menu de galeria na no canto superior esquerdo, selecione APIs e Serviços e em Credenciais. No(s) dia(s) Página de credenciais, procure Chaves da conta de serviço.

    Encontre o endereço de e-mail da chave da conta de serviço:

    1. Selecione o link Gerenciar contas de serviço (à direita da seção "Chaves da conta de serviço").
    2. O endereço de e-mail pode ser visualizado na página Permissões resultante.

    Se não houver chaves de conta de serviço, crie uma nova conta de serviço:

    1. Selecione o menu suspenso Criar credenciais e escolha Chave da conta de serviço.
    2. No menu suspenso Conta de serviço, escolha Nova conta de serviço.
    3. Digite um Nome para a conta de serviço. O ID da conta de serviço é exibido gerada a partir do nome e do nome do projeto.
    4. Anote o endereço de e-mail do ID da conta de serviço gserviceaccount.com. Ela não é exibida na página "Credenciais" depois que você seleciona Criar.
    5. Na seção Tipo de chave, escolha JSON.
    6. Clique em Criar. O arquivo JSON com o par de chaves pública/privada da conta é salvo sua pasta "Downloads". Essa chave é usada para autenticar seu aplicativo na API e assinar todas as solicitações que envia à API. Armazene o arquivo JSON gerado em um local seguro. em algum lugar onde seu aplicativo possa acessá-lo.
  2. Entre em contato com a equipe de Display & A equipe de suporte do Video 360 precisa solicitar a ativação dos arquivos da Leitura de entidades e/ou a API Google Bid Manager.

    Depois que a equipe de suporte confirmar o acesso, crie um Grupo do Google dedicado. (ou grupos) e atualize os seguintes campos em Exibir e Detalhes do parceiro do Video 360 (somente os usuários com acesso no nível do parceiro poderão fazer estas atualizações):

    • Grupo do Google de leitura de registros
      O grupo somente leitura tem permissões apenas para ler arquivos e listar o conteúdo dos buckets de armazenamento.
    • Grupo do Google de gerenciamento de registros
      O grupo de gerenciamento tem todas as permissões do grupo somente leitura, mas também pode alterar as ACLs dos arquivos nos buckets. Até mesmo o grupo de gerenciamento não tem permissão alterar ACLs de bloco nem permissão para criar, modificar ou excluir arquivos.

    Depois que o grupo do Google for adicionado, você poderá adicionar e remover usuários do grupo conforme necessário. sem qualquer envolvimento adicional da equipe de Display e Equipe de suporte do Video 360 somente esses usuários que estão no grupo terão acesso aos seus dados.

Acessar seus dados

Acessar dados usando gsutil

A ferramenta gsutil é um aplicativo de linha de comando que permite acessar os Dados do Google Cloud Storage com facilidade, sem necessidade de programação do usuário. É possível, por exemplo, usar o gsutil como parte de um script ou arquivo de lote em vez de criar aplicativos personalizados.

Para começar a usar a gsutil, leia a documentação dela. Você ainda precisará se autenticar usando o OAuth 2 como antes, mas a própria gsutil solicitará as credenciais na primeira vez que você usá-las e, em seguida, armazená-las para uso posterior.

Acessar dados de forma programática

O Google Cloud Storage tem APIs para muitas linguagens de programação que permitem acesse seus dados de forma programática. O exemplo abaixo mostra como realizar Faça o download de um dos arquivos da leitura de entidades. do Google Cloud Storage. Lembre-se de que apenas o público Os arquivos da leitura de entidades são armazenados no bucket gdbm-public; privado Os arquivos da leitura de entidades serão armazenados em buckets específicos do parceiro e do anunciante.

Java

O exemplo a seguir usa a API Google de cliente de APIs do Google para Java, o que torna o acesso aos dados mantidos no Google o Cloud Storage. Além da principal biblioteca cliente geral de APIs do Google, você também precisa fazer o download biblioteca para a API Cloud Storage.

Primeiro, configure as credenciais que serão usadas na comunicação com a API para receber autorização para acessar seus dados. Isso é feito criando um Credential objeto que usa o endereço de e-mail developer.gserviceaccount.com da conta de serviço como ServiceAccountId e também carrega o arquivo de chave privada que foi baixado no Console de APIs do Google ao criar a conta de serviço. Isso garantirá que todos futuras solicitações à API são assinadas com a chave privada da conta de serviço:

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();

Depois de criar o objeto Credential, você pode usá-lo para instanciar uma novo objeto Storage que pode ser usado em todas as solicitações futuras para o API Google Cloud Storage:

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

Agora que você tem um novo objeto Storage, já pode começar a fazer solicitações para a API. Aqui você está fazendo uma solicitação para recuperar um item específico bucketObjectName. do bucket bucket. A biblioteca lida com o download HTTP do arquivo da no Google Cloud Storage. Em seguida, basta imprimir o conteúdo no console:

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

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

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

Os valores para bucket e bucketObjectName variam de acordo com a parte da API que você está acessando; consulte a seção apropriada sobre nomenclatura e convenções de segurança.

C#

O exemplo a seguir usa Biblioteca cliente de APIs do Google para .NET, que simplifica e facilita o acesso aos dados no Google Cloud Storage.

Primeiro, configure as credenciais que serão usadas na comunicação com a API para receber autorização de acesso aos seus dados. Para fazer isso, crie um objeto AssertionFlowClient que usa o endereço de e-mail developer.gserviceaccount.com da conta de serviço como ServiceAccountId e também carrega o arquivo de chave privada baixado do Console de APIs do Google durante a criação da conta de serviço.

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()
};

Depois de criar o objeto AssertionFlowClient, use-o para instanciar um novo objeto OAuth2Authenticator que pode ser usado para instanciar uma nova instância Storage para todas as solicitações futuras à API do Google Cloud Storage:

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

Agora que você tem um novo objeto Storage, já pode começar a fazer solicitações à API. Aqui você faz uma solicitação para recuperar um item específico, bucketObjectName, do bucket bucket. Usamos padrões Classes da biblioteca de cliente .NET para processar o download HTTP da Google Cloud Storage, mas é necessário lidar manualmente com o caso em que há um redirecionamento para garantir que sempre haja o Authorization correto cabeçalho presente na solicitação:

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();
}

O conteúdo da resposta pode ser lido no objeto HttpWebResponse. via GetResponseStream, como de costume. Seus valores para bucket e bucketObjectName varia de acordo com a parte da API que você está acessando. consulte a seção apropriada sobre convenções de nomenclatura.

Apêndice: amostras completas

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;
        }

    }
}