Pubblicazione dei dati

Questa pagina mostra come rendere gli oggetti di tua proprietà leggibili a tutti su nella rete internet pubblica. Per scoprire come accedere ai dati che sono stati resi pubblici, consulta Accedere ai dati pubblici.

Quando un oggetto viene condiviso pubblicamente, qualsiasi utente che conosca l'URI dell'oggetto può accedervi finché l'oggetto è pubblico.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per rendere gli oggetti leggibili pubblicamente, chiedi all'amministratore di concederti i seguenti ruoli per il bucket che contiene i dati che vuoi rendere pubblici:

  • Per rendere pubblicamente leggibili tutti gli oggetti di un bucket: Amministratore archiviazione (roles/storage.admin)

  • Per rendere pubblicamente leggibili i singoli oggetti: Storage Object Admin (roles/storage.objectAdmin)

    • Se prevedi di utilizzare la console Google Cloud, devi disporre del ruolo Amministratore di archiviazione (roles/storage.admin) anziché del ruolo Amministratore di oggetti archiviazione.

Questi ruoli contengono le autorizzazioni necessarie per rendere pubblici gli oggetti. Per vedere le le autorizzazioni esatte richieste, espandi la sezione Autorizzazioni obbligatorie sezione:

Autorizzazioni obbligatorie

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

Le seguenti autorizzazioni sono necessarie solo per l'utilizzo Console Google Cloud per eseguire le attività in questa pagina:

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

Potresti riuscire a ottenere queste autorizzazioni anche con altri ruoli predefiniti o ruoli personalizzati.

Per istruzioni su come concedere i ruoli ai bucket, consulta Utilizzare IAM con i bucket.

Rendere pubblicamente leggibili tutti gli oggetti in un bucket

Per rendere leggibili tutti gli oggetti di un bucket su internet pubblica, concedi all'entità allUsers il Visualizzatore oggetti Storage Ruolo (roles/storage.objectViewer):

Console

  1. Nella console Google Cloud, vai alla pagina Bucket in Cloud Storage.

    Vai a Bucket

  2. Nell'elenco dei bucket, fai clic sul nome del bucket da rendere pubblico.

  3. Seleziona la scheda Autorizzazioni nella parte superiore della pagina.

  4. Nella sezione Autorizzazioni, fai clic sul Pulsante Concedi l'accesso.

    Viene visualizzata la finestra di dialogo Concedi l'accesso.

  5. Nel campo Nuove entità, inserisci allUsers.

  6. Nel menu a discesa Seleziona un ruolo, inserisci Storage Object Viewer nella casella di filtro e seleziona Visualizzatore oggetti Storage dai risultati filtrati.

  7. Fai clic su Salva.

  8. Fai clic su Consenti accesso pubblico.

Una volta concesso l'accesso pubblico, viene visualizzato Copia URL per ogni oggetto nella colonna Accesso pubblico. Puoi fare clic su questo pulsante per ottenere l'URL pubblico per l'oggetto.

Scopri come ottenere informazioni dettagliate sugli errori di Cloud Storage non riusciti nella console Google Cloud, vedi Risoluzione dei problemi.

Riga di 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. Nell'ambiente di sviluppo, esegui il comando buckets add-iam-policy-binding:

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

    Dove BUCKET_NAME è il nome del bucket di cui vuoi rendere pubblici gli oggetti. Ad esempio, my-bucket.

Librerie client

C++

Per ulteriori informazioni, consulta API Cloud Storage C++ documentazione di riferimento.

Per autenticarti a Cloud Storage, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

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#

Per ulteriori informazioni, consulta API Cloud Storage C# documentazione di riferimento.

Per autenticarti a Cloud Storage, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.


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

Per ulteriori informazioni, consulta API Cloud Storage Go documentazione di riferimento.

Per autenticarti a Cloud Storage, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

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

Per saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage Java.

Per eseguire l'autenticazione su Cloud Storage, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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

Per saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage Node.js.

Per autenticarti a Cloud Storage, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

/**
 * 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

Per saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage PHP.

Per autenticarti a Cloud Storage, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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

Per ulteriori informazioni, consulta API Cloud Storage Python documentazione di riferimento.

Per autenticarti a Cloud Storage, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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

Per ulteriori informazioni, consulta API Cloud Storage Ruby documentazione di riferimento.

Per autenticarti a Cloud Storage, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

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

Puoi utilizzare una risorsa Terraform per creare tutti gli oggetti in una pubblico.

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

API REST

API JSON

  1. Avere installato e inizializzato l'interfaccia a riga di comando gcloud, che consente di generare un token di accesso per l'intestazione Authorization.

  2. Crea un file JSON contenente le seguenti informazioni:

    {
      "bindings":[
        {
          "role": "roles/storage.objectViewer",
          "members":["allUsers"]
        }
      ]
    }
  3. Utilizza cURL per chiamare l'API JSON con un Richiesta 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"

    Dove:

    • JSON_FILE_NAME è il percorso del file che hai creato nel passaggio 2.
    • BUCKET_NAME è il nome del bucket di cui vuoi rendere pubblici gli oggetti. Ad esempio, my-bucket.

API XML

La possibilità di rendere pubblicamente leggibili tutti gli oggetti di un bucket non è supportata l'API XML. Utilizza la console Google Cloud o gcloud storage.

Rendere pubblicamente leggibile una parte di un bucket

Utilizza una cartella gestita per controllare l'accesso agli oggetti il cui prefisso del nome corrisponde al nome della cartella gestita. Ad esempio, una cartella gestita denominata my-folder può essere utilizzato per controllare l'accesso agli oggetti denominati my-folder/cats.jpg e my-folder/dogs.jpg.

Per rendere questi oggetti accessibili pubblicamente, devi prima creare la cartella gestita e quindi imposta un criterio IAM sulla cartella che concede a allUsers il Ruolo Visualizzatore oggetti Storage (roles/storage.objectViewer):

Console

  1. Nella console Google Cloud, vai alla pagina Bucket di Cloud Storage.

    Vai a Bucket

  2. Fai clic sul nome del bucket che contiene gli oggetti da rendere pubblici.

  3. Per creare una cartella, procedi nel seguente modo:

    1. Fai clic sul pulsante Crea cartella.

    2. Inserisci il nome della cartella. Una volta convertita la cartella in una cartella gestita, gli oggetti il cui nome inizia con questo nome saranno soggetti ai ruoli IAM impostati sulla cartella.

    3. Fai clic su Crea.

  4. Converti la cartella in una cartella gestita seguendo questa procedura:

    1. Nel riquadro che mostra i contenuti del bucket, trova il nome del bucket cartella che hai creato e fai clic sull'icona Altre opzioni .

    2. Fai clic su Modifica accesso.

    3. Nella finestra visualizzata, fai clic su Attiva.

  5. Aggiungi alla cartella un criterio IAM che conceda a allUsers il ruolo Visualizzatore oggetti Storage (roles/storage.objectViewer) seguendo i passaggi che seguono:

    1. Se il riquadro Autorizzazioni della tua cartella gestita non è ancora visibile apri, fai clic sull'icona Altre opzioni per la versione gestita cartella e fai clic su Modifica accesso.

    2. Nel riquadro Autorizzazioni, fai clic sul pulsante Aggiungi entità.

    3. Nel campo Nuove entità, inserisci allUsers.

    4. Nel menu a discesa Seleziona un ruolo, inserisci Storage Object Viewer. nella casella di filtro e seleziona Visualizzatore oggetti Storage dal risultati filtrati.

    5. Fai clic su Salva.

    6. Fai clic su Consenti accesso pubblico.

Una volta concesso l'accesso pubblico, viene visualizzato il messaggio Copia URL per ogni applicabile nella colonna public access. Puoi fare clic su questo pulsante per ottenere l'URL pubblico dell'oggetto.

Per scoprire come ottenere informazioni dettagliate sugli errori relativi alle operazioni di Cloud Storage non riuscite nella console Google Cloud, consulta la sezione Risoluzione dei problemi.

Riga di 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. Nell'ambiente di sviluppo, crea una cartella gestita utilizzando Comando gcloud storage managed-folders create:

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

    Dove:

    • BUCKET_NAME è il nome del bucket in cui vuoi creare una cartella gestita. Ad esempio, my-bucket.

    • MANAGED_FOLDER_NAME è il nome dell'account gestito cartella che vuoi creare. Ad esempio, my-managed-folder.

  3. Nell'ambiente di sviluppo, aggiungi allUsers al file i criteri IAM utilizzando 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

    Dove:

    • BUCKET_NAME è il nome del bucket contenente la cartella gestita che stai aggiungendo criteri. Ad esempio, my-bucket.
    • MANAGED_FOLDER_NAME è il nome della cartella gestita a cui vuoi aggiungere l'accesso pubblico. Ad esempio: my-managed-folder.

API REST

API JSON

  1. Avere gcloud CLI installato e inizializzato, che consente generi un token di accesso per l'intestazione Authorization.

  2. Crea un file JSON contenente le seguenti informazioni:

    {
      "name": "MANAGED_FOLDER_NAME"
    }

    Dove MANAGED_FOLDER_NAME è il nome della cartella gestita che vuoi creare. Ad esempio, my-managed-folder.

  3. Utilizza cURL per chiamare l'API JSON con una richiesta 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"

    Dove:

    • JSON_FILE_NAME è il percorso del file che hai creato nel passaggio precedente.
    • BUCKET_NAME è il nome del bucket in cui vuoi creare una cartella gestita. Ad esempio: my-bucket.
  4. Crea un file JSON contenente le seguenti informazioni:

    {
      "bindings":[
        {
          "role": "roles/storage.objectViewer",
          "members":["allUsers"]
        }
      ]
    }
  5. Utilizza cURL per chiamare l'API JSON con un Richiesta setIamPolicy Cartella gestita:

    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"

    Dove:

    • JSON_FILE_NAME è il percorso del file che hai creato nel passaggio precedente.
    • BUCKET_NAME è il nome del bucket contenente la cartella gestita che stai aggiungendo criteri. Ad esempio, my-bucket.
    • MANAGED_FOLDER_NAME è il nome del cartella gestita a cui stai aggiungendo il criterio IAM. Ad esempio, my-managed-folder.

API XML

L'API XML non supporta il lavoro con le cartelle gestite. Utilizza un strumento diverso, come la console Google Cloud, o imposta gli ACL su singoli oggetti utilizzando le richieste Set Object ACL. Le seguenti è un esempio di file ACL che concederà a allUsers l'accesso a un oggetto:

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

Passaggi successivi