Tornar dados públicos

Nesta página, você aprenderá como permitir que todos os usuários da Internet pública leiam seus objetos. Para saber como acessar dados públicos, consulte esta página.

Quando um objeto é compartilhado publicamente, qualquer usuário que saiba o URI dele poderá acessá-lo enquanto ele for público.

Funções exigidas

Para ter as permissões necessárias para tornar os objetos publicamente legíveis, peça ao administrador para conceder a você os seguintes papéis para o bucket que contém os dados que você quer tornar públicos:

  • Para ativar a leitura pública de todos os objetos em um bucket: Administrador do Storage (roles/storage.admin)

  • Para permitir a leitura pública de objetos individuais: Administrador de objetos do Storage (roles/storage.objectAdmin)

    • Se você planeja usar o console do Google Cloud, será necessário o papel Administrador do Storage (roles/storage.admin) em vez do papel Administrador de objetos do Storage.

Esses papéis contêm as permissões necessárias para tornar os objetos públicos. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:

Permissões necessárias

  • storage.buckets.get
  • storage.buckets.getIamPolicy
  • storage.buckets.setIamPolicy
  • storage.buckets.update
  • storage.objects.get
  • storage.objects.getIamPolicy
  • storage.objects.setIamPolicy
  • storage.objects.update

As permissões a seguir são necessárias apenas para usar o Console do Google Cloud para realizar as tarefas nesta página:

  • storage.buckets.list
  • storage.objects.list

Também é possível conseguir essas permissões com outros papéis predefinidos ou personalizados.

Para instruções sobre como conceder papéis nos buckets, consulte Usar o IAM com buckets.

Habilitar a leitura pública de todos os objetos em um bucket

Para tornar todos os objetos de um bucket legíveis para todos na Internet pública, conceda ao allUsers principal o papel Leitor de objetos do Storage (roles/storage.objectViewer):

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 do bucket que você quer tornar público.

  3. Selecione a guia Permissões na parte superior da página.

  4. Na seção Permissões, clique no botão Conceder acesso.

    A caixa de diálogo Conceder acesso será exibida.

  5. No campo Novos participantes, insira allUsers.

  6. Na lista suspensa Selecionar um papel, insira Storage Object Viewer na caixa de filtro e selecione Visualizador de objetos do Storage nos resultados filtrados.

  7. Clique em Salvar.

  8. Clique em Permitir acesso público.

Depois que o acesso público for concedido, Copiar URL aparecerá para cada objeto na coluna de acesso público. Clique nesse botão para ver o URL público do objeto.

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

Linha de comando

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. No ambiente para desenvolvedores, execute o comando buckets add-iam-policy-binding:

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=allUsers --role=roles/storage.objectViewer

    Em que BUCKET_NAME é o nome do bucket que contém os objetos que você quer tornar públicos. Por exemplo, my-bucket.

Bibliotecas de cliente

C++

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

Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

namespace gcs = ::google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string const& bucket_name) {
  auto current_policy = client.GetNativeBucketIamPolicy(
      bucket_name, gcs::RequestedPolicyVersion(3));
  if (!current_policy) throw std::move(current_policy).status();

  current_policy->set_version(3);
  current_policy->bindings().emplace_back(
      gcs::NativeIamBinding("roles/storage.objectViewer", {"allUsers"}));

  auto updated =
      client.SetNativeBucketIamPolicy(bucket_name, *current_policy);
  if (!updated) throw std::move(updated).status();

  std::cout << "Policy successfully updated: " << *updated << "\n";
}

C#

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

Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.


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

public class MakeBucketPublicSample
{
    public void MakeBucketPublic(string bucketName = "your-unique-bucket-name")
    {
        var storage = StorageClient.Create();

        Policy policy = storage.GetBucketIamPolicy(bucketName);

        policy.Bindings.Add(new Policy.BindingsData
        {
            Role = "roles/storage.objectViewer",
            Members = new List<string> { "allUsers" }
        });

        storage.SetBucketIamPolicy(bucketName, policy);
        Console.WriteLine(bucketName + " is now public ");
    }
}

Go

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

Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/iam"
	"cloud.google.com/go/iam/apiv1/iampb"
	"cloud.google.com/go/storage"
)

// setBucketPublicIAM makes all objects in a bucket publicly readable.
func setBucketPublicIAM(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()

	policy, err := client.Bucket(bucketName).IAM().V3().Policy(ctx)
	if err != nil {
		return fmt.Errorf("Bucket(%q).IAM().V3().Policy: %w", bucketName, err)
	}
	role := "roles/storage.objectViewer"
	policy.Bindings = append(policy.Bindings, &iampb.Binding{
		Role:    role,
		Members: []string{iam.AllUsers},
	})
	if err := client.Bucket(bucketName).IAM().V3().SetPolicy(ctx, policy); err != nil {
		return fmt.Errorf("Bucket(%q).IAM().SetPolicy: %w", bucketName, err)
	}
	fmt.Fprintf(w, "Bucket %v is now publicly readable\n", bucketName)
	return nil
}

Java

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

Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

import com.google.cloud.Identity;
import com.google.cloud.Policy;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import com.google.cloud.storage.StorageRoles;

public class MakeBucketPublic {
  public static void makeBucketPublic(String projectId, String bucketName) {
    // The ID of your GCP project
    // String projectId = "your-project-id";

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

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    Policy originalPolicy = storage.getIamPolicy(bucketName);
    storage.setIamPolicy(
        bucketName,
        originalPolicy
            .toBuilder()
            .addIdentity(StorageRoles.objectViewer(), Identity.allUsers()) // All users can view
            .build());

    System.out.println("Bucket " + bucketName + " is now publicly readable");
  }
}

Node.js

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

Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

async function makeBucketPublic() {
  await storage.bucket(bucketName).makePublic();

  console.log(`Bucket ${bucketName} is now publicly readable`);
}

makeBucketPublic().catch(console.error);

PHP

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

Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

use Google\Cloud\Storage\StorageClient;

/**
 * Update the specified bucket's IAM configuration to make it publicly accessible.
 *
 * @param string $bucketName The name of your Cloud Storage bucket.
 *        (e.g. 'my-bucket')
 */
function set_bucket_public_iam(string $bucketName): void
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);

    $policy = $bucket->iam()->policy(['requestedPolicyVersion' => 3]);
    $policy['version'] = 3;

    $role = 'roles/storage.objectViewer';
    $members = ['allUsers'];

    $policy['bindings'][] = [
        'role' => $role,
        'members' => $members
    ];

    $bucket->iam()->setPolicy($policy);

    printf('Bucket %s is now public', $bucketName);
}

Python

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

Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

from typing import List

from google.cloud import storage


def set_bucket_public_iam(
    bucket_name: str = "your-bucket-name",
    members: List[str] = ["allUsers"],
):
    """Set a public IAM Policy to bucket"""
    # bucket_name = "your-bucket-name"

    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)

    policy = bucket.get_iam_policy(requested_policy_version=3)
    policy.bindings.append(
        {"role": "roles/storage.objectViewer", "members": members}
    )

    bucket.set_iam_policy(policy)

    print(f"Bucket {bucket.name} is now publicly readable")

Ruby

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

Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

def set_bucket_public_iam bucket_name:
  # The ID of your GCS bucket
  # bucket_name = "your-unique-bucket-name"

  require "google/cloud/storage"

  storage = Google::Cloud::Storage.new
  bucket = storage.bucket bucket_name

  bucket.policy do |p|
    p.add "roles/storage.objectViewer", "allUsers"
  end

  puts "Bucket #{bucket_name} is now publicly readable"
end

Terraform

Use um recurso do Terraform para tornar todos os objetos em um bucket público.

# Make bucket public
resource "google_storage_bucket_iam_member" "member" {
  provider = google
  bucket   = google_storage_bucket.default.name
  role     = "roles/storage.objectViewer"
  member   = "allUsers"
}

APIs REST

API JSON

  1. Ter a CLI gcloud instalada e inicializada, o que permite gerar um token de acesso para o cabeçalho Authorization.

  2. Crie um arquivo JSON com as informações a seguir:

    {
      "bindings":[
        {
          "role": "roles/storage.objectViewer",
          "members":["allUsers"]
        }
      ]
    }
  3. Use cURL para chamar a API JSON com uma solicitação de PUT bucket:

    curl -X PUT --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/iam"

    Em que:

    • JSON_FILE_NAME é o caminho para o arquivo criado na Etapa 2.
    • BUCKET_NAME é o nome do bucket que contém os objetos que você quer tornar públicos. Por exemplo, my-bucket.

API XML

Não é possível ativar a leitura pública de todos os objetos em um bucket com a API XML. Use o console do Google Cloud ou o gcloud storage.

Tornar uma parte de um bucket publicamente legível

Use uma pasta gerenciada para controlar o acesso a objetos cujo prefixo de nome corresponde ao nome da pasta gerenciada. Por exemplo, uma pasta gerenciada chamada my-folder pode ser usada para controlar o acesso a objetos chamados my-folder/cats.jpg e my-folder/dogs.jpg

Para tornar esses objetos publicamente acessíveis, primeiro crie a pasta gerenciada e, em seguida, defina uma política do IAM na pasta que conceda ao allUsers o papel de Leitor de objetos do Storage (roles/storage.objectViewer):

Console

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

    Acessar buckets

  2. Clique no nome do bucket que contém os objetos que você quer tornar públicas.

  3. Crie uma pasta seguindo estas etapas:

    1. Clique no botão Criar pasta.

    2. Digite o Nome da pasta. Depois que a pasta for convertida em uma pasta gerenciada, os objetos cujos nomes começam com esse nome estarão sujeitos às funções do IAM definidas na pasta.

    3. Clique em Criar.

  4. Converta a pasta em uma gerenciada seguindo estas etapas:

    1. No painel que mostra o conteúdo do bucket, encontre o nome da pasta que você criou e clique no ícone Mais opções .

    2. Clique em Editar acesso.

    3. Na janela exibida, clique em Ativar.

  5. Adicione uma política do IAM à pasta que concede a allUsers o papel de Leitor de objetos do Storage (roles/storage.objectViewer), usando as seguintes etapas:

    1. Se o painel Permissões da pasta gerenciada ainda não estiver aberto, clique no ícone Mais opções da pasta gerenciada e em Editar acesso.

    2. No painel Permissões, clique no botão Adicionar principal .

    3. No campo Novos participantes, insira allUsers.

    4. Na lista suspensa Selecionar uma função, insira Storage Object Viewer na caixa de filtro e selecione Visualizador de objetos do Storage nos resultados filtrados.

    5. Clique em Salvar.

    6. Clique em Permitir acesso público.

Depois que o acesso público for concedido, Copiar URL aparecerá para cada objeto aplicável na coluna de acesso público. Clique nesse botão para ver o URL público do objeto.

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

Linha de comando

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. No seu ambiente de desenvolvimento, crie uma pasta gerenciada usando o Comando gcloud storage managed-folders create:

    gcloud storage managed-folders create gs://BUCKET_NAME/MANAGED_FOLDER_NAME/

    Em que:

    • BUCKET_NAME é o nome do bucket em que você quer criar uma pasta gerenciada. Por exemplo, my-bucket.

    • MANAGED_FOLDER_NAME é o nome da pasta gerenciada que você quer criar. Por exemplo, my-managed-folder.

  3. No seu ambiente de desenvolvimento, adicione allUsers à política do IAM usando o comando gcloud storage managed-folders add-iam-policy-binding:

    gcloud storage managed-folders add-iam-policy-binding gs://BUCKET_NAME/MANAGED_FOLDER_NAME --member=allUsers --role=roles/storage.objectViewer

    Em que:

    • BUCKET_NAME é o nome do bucket que contém a pasta gerenciada à qual você está adicionando a política do IAM. Por exemplo, my-bucket.
    • MANAGED_FOLDER_NAME é o nome da pasta gerenciada à qual você quer adicionar acesso público. Por exemplo, my-managed-folder.

APIs REST

API JSON

  1. Ter a CLI gcloud instalada e inicializada, o que permite gerar um token de acesso para o cabeçalho Authorization.

  2. Crie um arquivo JSON com as informações a seguir:

    {
      "name": "MANAGED_FOLDER_NAME"
    }

    Em que MANAGED_FOLDER_NAME é o nome da pasta gerenciada que você quer criar. Por exemplo, my-managed-folder.

  3. Use cURL para chamar a API JSON com uma solicitação Insert ManagedFolder:

    curl -X POST --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/managedFolders"

    Em que:

    • JSON_FILE_NAME é o caminho para o arquivo que você criou na etapa anterior.
    • BUCKET_NAME é o nome do bucket em que você quer criar uma pasta gerenciada. Por exemplo, my-bucket.
  4. Crie um arquivo JSON com as informações a seguir:

    {
      "bindings":[
        {
          "role": "roles/storage.objectViewer",
          "members":["allUsers"]
        }
      ]
    }
  5. Use cURL para chamar a API JSON com uma solicitação de ManagedFolder setIamPolicy:

    curl -X PUT --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/managedFolders/MANAGED_FOLDER_NAME/iam"

    Em que:

    • JSON_FILE_NAME é o caminho para o arquivo que você criou na etapa anterior.
    • BUCKET_NAME é o nome do bucket que contém a pasta gerenciada à qual você está adicionando a política do IAM. Por exemplo, my-bucket.
    • MANAGED_FOLDER_NAME é o nome da pasta gerenciada em que a política do IAM está sendo adicionada. Por exemplo, my-managed-folder.

API XML

A API XML não oferece suporte para trabalhar com pastas gerenciadas. Use uma ferramenta diferente, como o console do Google Cloud, ou defina ACLs em objetos individuais usando solicitações Set Object ACL. O seguinte é um exemplo de arquivo de ACL que concederia a allUsers acesso a um objeto:

<AccessControlList>
  <Entries>
    <Entry>
      <Scope type="AllUsers"/>
      <Permission>READ</Permission>
    </Entry>
  </Entries>
</AccessControlList>

A seguir