Pubblicazione dei dati

Questa pagina mostra come rendere leggibili i tuoi oggetti da parte di chiunque su internet. Per scoprire come accedere ai dati che sono stati resi pubblici, consulta la pagina 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 visualizzare le autorizzazioni esattamente richieste, espandi la sezione Autorizzazioni richieste:

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 utilizzare la console Google Cloud per eseguire le attività in questa pagina:

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

Potresti anche ottenere queste autorizzazioni con altri ruoli predefiniti o 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 in un bucket da parte di chiunque su internet, concedi al principale allUsers il ruolo Visualizzatore oggetti Storage (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 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.

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, 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 cuyos oggetti vuoi rendere pubblici. Ad esempio, my-bucket.

Librerie client

C++

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

Per autenticarti a Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.

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 saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage C#.

Per autenticarti a Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.


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 saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage Go.

Per autenticarti a Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.

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 autenticarti a Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.

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 saperne di più, consulta Configurare l'autenticazione per le librerie client.

/**
 * 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 saperne di più, consulta Configurare l'autenticazione per le librerie client.

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 saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage Python.

Per autenticarti a Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.

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 saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage Ruby.

Per autenticarti a Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.

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 rendere pubblici tutti gli oggetti in un bucket.

# 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 inizializzatogcloud CLI, 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 una 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 cuyos oggetti vuoi rendere pubblici. Ad esempio, my-bucket.

API XML

La leggibilità pubblica di tutti gli oggetti in un bucket non è supportata dall'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 utilizzata per controllare l'accesso agli oggetti denominati my-folder/cats.jpg e my-folder/dogs.jpg.

Per rendere questi oggetti accessibili pubblicamente, crea prima la cartella gestita e poi imposta una policy IAM sulla cartella che conceda a allUsers il ruolo Visualizzatore oggetti Storage (roles/storage.objectViewer):

Console

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

    Vai a Bucket

  2. Fai clic sul nome del bucket contenente gli oggetti che vuoi pubblicare.

  3. Crea una cartella seguendo questa procedura:

    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, individua il nome della 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 una policy IAM alla cartella che concede a allUsers il ruolo visualizzatore oggetti Storage (roles/storage.objectViewer) seguendo i passaggi che seguono:

    1. Se il riquadro Autorizzazioni per la cartella gestita non è ancora aperto, fai clic sull'icona Altre opzioni per la cartella gestita e poi 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 del filtro e seleziona Visualizzatore oggetti Storage tra i risultati filtrati.

    5. Fai clic su Salva.

    6. Fai clic su Consenti accesso pubblico.

Una volta concesso l'accesso pubblico, viene visualizzato Copia URL per ogni oggetto applicabile nella colonna Accesso pubblico. 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 il 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 della cartella gestita che vuoi creare. Ad esempio, my-managed-folder.

  3. Nell'ambiente di sviluppo, aggiungi allUsers al criterio IAM della cartella gestita utilizzando il 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 a cui aggiungi il criterio IAM. 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 installato e inizializzatogcloud CLI, che consente di generare 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 una richiesta 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.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 a cui aggiungi il criterio IAM. Ad esempio, my-bucket.
    • MANAGED_FOLDER_NAME è il nome della 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. Di seguito è riportato un esempio di file ACL che concederebbe a allUsers l'accesso a un oggetto:

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

Passaggi successivi