Usar retenções de objeto

Visão geral

Use retenções de objetos para proteger os dados do Cloud Storage contra exclusão ou substituição. Essas retenções ajudam você a atender aos requisitos de conformidade regulamentar ou de descoberta legal. É possível aplicar retenções temporárias e baseadas em eventos a objetos individuais. Além disso, é possível configurar buckets para aplicar retenções baseadas em eventos a novos objetos por padrão.

Nesta página, você verá como usar as retenções de objeto, incluindo a colocação de retenções por padrão em novos objetos e a colocação de retenções em objetos individuais.

Permissões necessárias

Antes de usar esse recurso no Cloud Storage, você precisa ter permissão suficiente para visualizar e atualizar buckets e objetos no Cloud Storage:

  • Se você é proprietário do projeto que contém o bucket, provavelmente já tem as permissões necessárias.

  • Para usar o IAM, é necessário ter as permissões storage.buckets.update, storage.buckets.get, storage.objects.update e storage.objects.get do bucket pertinente. Consulte Como usar permissões do IAM para instruções sobre como conseguir um papel, como Administrador do Storage, que tenha essas permissões.

  • Se você usar ACLs, precisará da permissão PROPRIETÁRIO no bucket em questão e nos objetos dentro dele. Consulte Como configurar ACLs para instruções sobre como fazer isso.

Ativar a propriedade de retenção baseada em evento padrão

As tarefas a seguir mostram como configurar e visualizar a propriedade de retenção baseada em eventos padrão em um bucket. Quando essa propriedade é ativada, novos objetos adicionados ao bucket recebem automaticamente uma retenção baseada em evento.

Configurar a propriedade de retenção baseada em evento padrão

Para ativar ou desativar a propriedade de retenção baseada em eventos padrão para um bucket, siga estas instruções:

Console

  1. No console do Google Cloud , acesse a página Buckets do Cloud Storage.

    Acessar buckets

  2. Na lista de buckets, clique no nome daquele em que você quer definir a propriedade de retenção baseada em eventos padrão.

  3. Selecione a guia Proteção na parte superior da página.

    O status atual do bucket aparece na seção Opção de retenção baseada em evento padrão.

  4. Na seção Opção de retenção baseada em evento padrão, clique no status atual para alterá-lo.

    O status aparece como Ativado ou Desativado.

Para saber como acessar informações detalhadas de erro sobre operações do Cloud Storage com falha no Google Cloud console, consulte Solução de problemas.

Linha de comando

Use o comando gcloud storage buckets update com a flag apropriada:

gcloud storage buckets update gs://BUCKET_NAME FLAG

Em que:

  • BUCKET_NAME é o nome do bucket pertinente. Por exemplo, my-bucket.

  • FLAG é --default-event-based-hold para ativar retenções de objeto padrão baseadas em eventos ou --no-default-event-based-hold para desativá-las.

Bibliotecas de cliente

C++

Para mais informações, consulte a documentação de referência da API Cloud Storage C++.

Para se autenticar no Cloud Storage, configure o Application Default Credentials. Saiba mais em Configurar a autenticação para bibliotecas de cliente.

O exemplo a seguir ativa retenções padrão baseadas em eventos em um bucket:

namespace gcs = ::google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string const& bucket_name) {
  StatusOr<gcs::BucketMetadata> original =
      client.GetBucketMetadata(bucket_name);
  if (!original) throw std::move(original).status();

  StatusOr<gcs::BucketMetadata> patched = client.PatchBucket(
      bucket_name,
      gcs::BucketMetadataPatchBuilder().SetDefaultEventBasedHold(true),
      gcs::IfMetagenerationMatch(original->metageneration()));
  if (!patched) throw std::move(patched).status();

  std::cout << "The default event-based hold for objects in bucket "
            << bucket_name << " is "
            << (patched->default_event_based_hold() ? "enabled" : "disabled")
            << "\n";
}

O exemplo a seguir desativa as retenções padrão baseadas em eventos em um bucket:

namespace gcs = ::google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string const& bucket_name) {
  StatusOr<gcs::BucketMetadata> original =
      client.GetBucketMetadata(bucket_name);

  if (!original) throw std::move(original).status();
  StatusOr<gcs::BucketMetadata> patched = client.PatchBucket(
      bucket_name,
      gcs::BucketMetadataPatchBuilder().SetDefaultEventBasedHold(false),
      gcs::IfMetagenerationMatch(original->metageneration()));
  if (!patched) throw std::move(patched).status();

  std::cout << "The default event-based hold for objects in bucket "
            << bucket_name << " is "
            << (patched->default_event_based_hold() ? "enabled" : "disabled")
            << "\n";
}

C#

Saiba mais na documentação de referência C# da API Cloud Storage.

Para se autenticar no Cloud Storage, configure o Application Default Credentials. Saiba mais em Configurar a autenticação para bibliotecas de cliente.

O exemplo a seguir ativa retenções padrão baseadas em eventos em um bucket:


using Google.Apis.Storage.v1.Data;
using Google.Cloud.Storage.V1;
using System;

public class EnableBucketDefaultEventBasedHoldSample
{
    public Bucket EnableBucketDefaultEventBasedHold(string bucketName = "your-unique-bucket-name")
    {
        var storage = StorageClient.Create();
        var bucket = storage.GetBucket(bucketName);
        bucket.DefaultEventBasedHold = true;
        bucket = storage.UpdateBucket(bucket);
        Console.WriteLine($"Default event-based hold was enabled for {bucketName}");
        return bucket;
    }
}

O exemplo a seguir desativa as retenções padrão baseadas em eventos em um bucket:


using Google.Apis.Storage.v1.Data;
using Google.Cloud.Storage.V1;
using System;

public class DisableDefaultEventBasedHoldSample
{
    public Bucket DisableDefaultEventBasedHold(string bucketName = "your-unique-bucket-name")
    {
        var storage = StorageClient.Create();
        var bucket = storage.GetBucket(bucketName);
        bucket.DefaultEventBasedHold = false;
        bucket = storage.UpdateBucket(bucket);
        Console.WriteLine($"Default event-based hold was disabled for {bucketName}");
        return bucket;
    }
}

Go

Saiba mais na documentação de referência Go da API Cloud Storage.

Para se autenticar no Cloud Storage, configure o Application Default Credentials. Saiba mais em Configurar a autenticação para bibliotecas de cliente.

O exemplo a seguir ativa retenções padrão baseadas em eventos em um bucket:

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

	"cloud.google.com/go/storage"
)

// enableDefaultEventBasedHold sets event-based hold to true.
func enableDefaultEventBasedHold(w io.Writer, bucketName string) error {
	// bucketName := "bucket-name"
	ctx := context.Background()
	client, err := storage.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("storage.NewClient: %w", err)
	}
	defer client.Close()

	ctx, cancel := context.WithTimeout(ctx, time.Second*10)
	defer cancel()

	bucket := client.Bucket(bucketName)
	bucketAttrsToUpdate := storage.BucketAttrsToUpdate{
		DefaultEventBasedHold: true,
	}
	if _, err := bucket.Update(ctx, bucketAttrsToUpdate); err != nil {
		return fmt.Errorf("Bucket(%q).Update: %w", bucketName, err)
	}
	fmt.Fprintf(w, "Default event-based hold was enabled for %v\n", bucketName)
	return nil
}

O exemplo a seguir desativa as retenções padrão baseadas em eventos em um bucket:

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

	"cloud.google.com/go/storage"
)

// disableDefaultEventBasedHold sets event-based hold to false.
func disableDefaultEventBasedHold(w io.Writer, bucketName string) error {
	// bucketName := "bucket-name"
	ctx := context.Background()
	client, err := storage.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("storage.NewClient: %w", err)
	}
	defer client.Close()

	ctx, cancel := context.WithTimeout(ctx, time.Second*10)
	defer cancel()