Tornar os dados públicos

Esta página mostra como tornar os objetos que possui legíveis para todos na Internet pública e como remover o acesso público do seu contentor. Para saber como aceder a dados que foram tornados públicos, consulte o artigo Aceder a dados públicos.

Quando um objeto é partilhado publicamente, qualquer utilizador com conhecimento do URI do objeto pode aceder ao objeto enquanto este for público.

Funções necessárias

Para receber as autorizações necessárias para tornar os objetos publicamente legíveis, peça ao seu administrador que lhe conceda as seguintes funções para o contentor que contém os dados que quer tornar públicos:

  • Para tornar todos os objetos num contentor publicamente legíveis: administrador de armazenamento (roles/storage.admin)

  • Para tornar objetos individuais legíveis publicamente: Storage Object Admin (roles/storage.objectAdmin)

    • Se planeia usar a Trusted Cloud consola, precisa da função de administrador do armazenamento (roles/storage.admin) em vez da função de administrador do objeto de armazenamento.
  • Para remover o acesso público de todos os objetos num contentor: administrador de armazenamento (roles/storage.admin)

Estas funções contêm as autorizações necessárias para tornar os objetos públicos. Para ver as autorizações exatas necessárias, expanda a secção Autorizações necessárias:

Autorizaçõ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 seguintes autorizações só são necessárias para usar a Trusted Cloud consola para realizar as tarefas nesta página:

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

Também pode conseguir estas autorizações com outras funções predefinidas ou funções personalizadas.

Para obter instruções sobre como conceder funções em contentores, consulte o artigo Use o IAM com contentores.

Tornar todos os objetos num contentor legíveis publicamente

Para tornar todos os objetos num contentor legíveis para todos na Internet pública, conceda ao principal allUsers a função Storage Object Viewer (roles/storage.objectViewer):

.

Consola

  1. Na Trusted Cloud consola, aceda à página Recipientes do Cloud Storage.

    Aceda a Recipientes

  2. Na lista de contentores, clique no nome do contentor que quer tornar público.

  3. Selecione o separador Permissões junto à parte superior da página.

  4. Na secção Autorizações, clique no botão Conceder acesso.

    É apresentada a caixa de diálogo Conceder acesso.

  5. No campo Novos principais, introduza allUsers.

  6. No menu pendente Selecionar uma função, introduza Storage Object Viewer na caixa de filtro e selecione Visualizador de objetos do Storage nos resultados filtrados.

  7. Clique em Guardar.

  8. Clique em Permitir acesso público.

Depois de conceder o acesso público, é apresentado um botão Copiar URL para cada objeto na coluna acesso público. Pode clicar neste botão para obter o URL público do objeto. O URL público é diferente do link que recebe se clicar com o botão direito do rato num objeto. Ambos os links dão acesso a um objeto, mas o URL público funciona sem que o utilizador tenha de iniciar sessão numa conta de utilizador. Consulte os pontos finais de pedido para mais informações.

Para saber como obter informações detalhadas sobre erros relativos a operações do Cloud Storage falhadas na Trusted Cloud consola, consulte a secção Resolução de problemas.

Para saber como resolver o erro de política da organização e o erro de autorização, consulte o artigo Resolva problemas ao tornar os dados públicos.

Linha de comandos

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

    Activate Cloud Shell

    At the bottom of the Trusted 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 programação, execute o comando buckets add-iam-policy-binding:

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

    Onde BUCKET_NAME é o nome do contentor cujos objetos quer tornar públicos. Por exemplo, my-bucket.

  3. Bibliotecas cliente

    C++

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

    Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

    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 C# do Cloud Storage.

    Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

    
    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 Go do Cloud Storage.

    Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

    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 Java do Cloud Storage.

    Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

    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 Node.js do Cloud Storage.

    Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

    /**
     * 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 PHP do Cloud Storage.

    Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

    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 Python do Cloud Storage.

    Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

    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 Ruby do Cloud Storage.

    Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

    Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

    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

    Pode usar um recurso do Terraform para tornar públicos todos os objetos num contentor.

    # 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 lhe permite gerar um token de acesso para o cabeçalho Authorization.

    2. Crie um ficheiro JSON que contenha as seguintes informações:

      {
        "bindings":[
          {
            "role": "roles/storage.objectViewer",
            "members":["allUsers"]
          }
        ]
      }
    3. Use cURL para chamar a API JSON com um pedido de PUT contentor:

      curl -X PUT --data-binary @JSON_FILE_NAME \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://storage.s3nsapis.fr/storage/v1/b/BUCKET_NAME/iam"

      Onde:

      • JSON_FILE_NAME é o caminho do ficheiro que criou no passo 2.
      • BUCKET_NAME é o nome do contentor cujos objetos quer tornar públicos. Por exemplo, my-bucket.

    API XML

    Tornar todos os objetos num contentor legíveis publicamente não é suportado pela API XML. Use a Trusted Cloud consola ou o gcloud storage.

Torne uma parte de um contentor publicamente legível

Use uma pasta gerida para controlar o acesso a objetos cujo prefixo do nome corresponda ao nome da pasta gerida. Por exemplo, pode usar uma pasta gerida com o nome my-folder para controlar o acesso a objetos com os nomes my-folder/cats.jpg e my-folder/dogs.jpg.

Para tornar esses objetos acessíveis publicamente, primeiro, crie a pasta gerida e, em seguida, defina uma política de IAM na pasta que conceda à conta de serviço do Google Cloud Storage a função de visualizador de objetos do Storage (roles/storage.objectViewer):allUsers

Consola

  1. Na Trusted Cloud consola, aceda à página Recipientes do Cloud Storage.

    Aceda a Recipientes

  2. Clique no nome do contentor que contém os objetos que quer tornar públicos.

  3. Crie uma pasta através dos seguintes passos:

    1. Clique no botão Criar pasta.

    2. Introduza o Nome da pasta. Depois de a pasta ser convertida numa pasta gerida, os objetos cujo nome comece por este nome vão estar sujeitos às funções da IAM definidas na pasta.

    3. Clique em Criar.

  4. Converta a pasta numa pasta gerida através dos seguintes passos:

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

    2. Clique em Editar acesso.

    3. Na janela apresentada, clique em Ativar.

  5. Adicione uma política de IAM à pasta que conceda a função allUsersStorage Object Viewer (roles/storage.objectViewer), seguindo os passos abaixo:

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

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

    3. No campo Novos principais, introduza allUsers.

    4. No menu pendente Selecionar uma função, introduza Storage Object Viewer na caixa de filtro e selecione Visualizador de objetos do Storage nos resultados filtrados.

    5. Clique em Guardar.

    6. Clique em Permitir acesso público.

Depois de conceder o acesso público, é apresentado um botão Copiar URL para cada objeto aplicável na coluna acesso público. Pode clicar neste botão para obter o URL público do objeto. O URL público é diferente do link que obtém se clicar com o botão direito do rato num objeto. Ambos os links dão acesso a um objeto, mas o URL público funciona sem que o utilizador tenha de iniciar sessão numa conta de utilizador. Consulte os pontos finais de pedido para mais informações.

Para saber como obter informações detalhadas sobre erros relativos a operações do Cloud Storage falhadas na Trusted Cloud consola, consulte a secção Resolução de problemas.

Para saber como resolver o erro de política da organização e o erro de autorização, consulte o artigo Resolva problemas ao tornar os dados públicos.

Linha de comandos

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

    Activate Cloud Shell

    At the bottom of the Trusted 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 gerida com o comando gcloud storage managed-folders create:

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

    Onde:

    • BUCKET_NAME é o nome do contentor no qual quer criar uma pasta gerida. Por exemplo, my-bucket.

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

  3. No seu ambiente de desenvolvimento, adicione allUsers à política de IAM da pasta gerida através do 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

    Onde:

    • BUCKET_NAME é o nome do contentor que contém a pasta gerida à qual está a adicionar a política de IAM. Por exemplo, my-bucket.
    • MANAGED_FOLDER_NAME é o nome da pasta gerida à qual quer adicionar acesso público. Por exemplo, my-managed-folder.
  4. APIs REST

    API JSON

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

    2. Crie um ficheiro JSON que contenha as seguintes informações:

      {
        "name": "MANAGED_FOLDER_NAME"
      }

      Onde MANAGED_FOLDER_NAME é o nome da pasta gerida que quer criar. Por exemplo, my-managed-folder.

    3. Use cURL para chamar a API JSON com um pedido 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.s3nsapis.fr/storage/v1/b/BUCKET_NAME/managedFolders"

      Onde:

      • JSON_FILE_NAME é o caminho para o ficheiro que criou no passo anterior.
      • BUCKET_NAME é o nome do contentor no qual quer criar uma pasta gerida. Por exemplo, my-bucket.
    4. Crie um ficheiro JSON que contenha as seguintes informações:

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

      curl -X PUT --data-binary @JSON_FILE_NAME \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://storage.s3nsapis.fr/storage/v1/b/BUCKET_NAME/managedFolders/MANAGED_FOLDER_NAME/iam"

      Onde:

      • JSON_FILE_NAME é o caminho para o ficheiro que criou no passo anterior.
      • BUCKET_NAME é o nome do contentor que contém a pasta gerida à qual está a adicionar a política de IAM. Por exemplo, my-bucket.
      • MANAGED_FOLDER_NAME é o nome da pasta gerida à qual está a adicionar a política de IAM. Por exemplo, my-managed-folder.

    API XML

    A API XML não suporta o trabalho com pastas geridas. Use uma ferramenta diferente, como a Trusted Cloud consola, ou defina ACLs em objetos individuais através de pedidos Set Object ACL. Segue-se um exemplo de um ficheiro de LCA que concederia acesso de allUsers a um objeto:

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

Remova o acesso público de todos os objetos num contentor

Para remover o acesso público a todos os objetos num contentor, remova a política de IAM que concede a função de allUsersLeitor de objetos do Storageroles/storage.objectViewer:

Consola

  1. Na Trusted Cloud consola, aceda à página Recipientes do Cloud Storage.

    Aceda a Recipientes

  2. Na lista de contentores, clique no nome do contentor do qual quer remover o acesso público.

  3. Selecione o separador Autorizações.

    A política IAM que se aplica ao contentor aparece na secção Autorizações.

  4. No separador Vista por responsáveis, selecione a caixa de verificação do responsável que está a remover.allUsers

  5. Clique no botão - Remover acesso.

  6. Na janela de sobreposição apresentada, clique em Confirmar.

Para saber como obter informações detalhadas sobre erros relativos a operações do Cloud Storage falhadas na Trusted Cloud consola, consulte a secção Resolução de problemas.

Linha de comandos

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

    Activate Cloud Shell

    At the bottom of the Trusted 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, execute o comando buckets remove-iam-policy-binding:

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

    Em que BUCKET_NAME é o nome do contentor ao qual está a revogar o acesso. Por exemplo, my-bucket.

    APIs REST

    JSON

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

    2. Aplique a política existente ao seu contentor. Para o fazer, use cURL para chamar a API JSON com um pedido GET getIamPolicy:

      curl -X GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      "https://storage.s3nsapis.fr/storage/v1/b/BUCKET_NAME/iam"

      Em que BUCKET_NAME é o nome do contentor cuja política de IAM quer ver. Por exemplo, my-bucket.

    3. Crie um ficheiro JSON que contenha a política que recuperou no passo anterior e edite o ficheiro para remover a associação do principal à política.allUsers

    4. Use cURL para chamar a API JSON com um pedido PUT setIamPolicy:

      curl -X PUT --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://storage.s3nsapis.fr/storage/v1/b/BUCKET_NAME/iam"

      Onde:

      • JSON_FILE_NAME é o caminho para o ficheiro que criou no passo 3.

      • BUCKET_NAME é o nome do contentor do qual quer remover o acesso. Por exemplo, my-bucket.

O que se segue?