Rendre des données publiques

Cette page vous explique comment rendre vos objets lisibles par tous sur l'Internet public. Pour savoir comment accéder aux données rendues publiques, consultez la page Accéder aux données publiques.

Rendre des objets individuels lisibles publiquement

Pour rendre certains objets lisibles par tous sur l'Internet public :

Console

  1. Ouvrez le navigateur Cloud Storage dans Google Cloud Console.
    Ouvrir le navigateur Cloud Storage
  2. Dans la liste des buckets, cliquez sur le nom du bucket contenant l'objet que vous souhaitez rendre public, puis accédez à l'objet s'il se trouve dans un sous-répertoire.

  3. Cliquez sur le menu Autres actions () associé à l'objet que vous souhaitez rendre public.

  4. Dans le menu déroulant, sélectionnez Modifier les autorisations.

  5. Dans la fenêtre qui apparaît en superposition, cliquez sur le bouton + Add item (+ Ajouter un élément).

  6. Ajoutez une autorisation pour allUsers.

    • Sélectionnez Utilisateur pour le champ Entité.
    • Saisissez allUsers pour le champ Nom.
    • Sélectionnez Lecteur pour le champ Accès.
  7. Cliquez sur Enregistrer.

Une fois le partage public effectué, un lien s'affiche dans la colonne Accès public. Vous pouvez cliquer sur cette icône pour obtenir l'URL de l'objet.

gsutil

Exécutez la commande gsutil acl ch :

gsutil acl ch -u AllUsers:R gs://[BUCKET_NAME]/[OBJECT_NAME]

Où :

  • [BUCKET_NAME] est le nom du bucket contenant l'objet que vous souhaitez rendre public. Exemple : my-bucket
  • [OBJECT_NAME] est le nom de l'objet que vous souhaitez rendre public. Par exemple, pets/dog.png.

Si l'opération réussit, la réponse se présente comme suit :

Updated ACL on gs://[BUCKET_NAME]/[OBJECT_NAME]

Exemples de code

C++

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage C++.

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string object_name) {
  StatusOr<gcs::ObjectMetadata> updated = client.PatchObject(
      bucket_name, object_name, gcs::ObjectMetadataPatchBuilder(),
      gcs::PredefinedAcl::PublicRead());

  if (!updated) {
    throw std::runtime_error(updated.status().message());
  }

  std::cout << "Object updated. The full metadata after the update is: "
            << *updated << "\n";
}

C#

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage C#.

private void MakePublic(string bucketName, string objectName)
{
    var storage = StorageClient.Create();
    var storageObject = storage.GetObject(bucketName, objectName);
    storageObject.Acl = storageObject.Acl ?? new List<ObjectAccessControl>();
    storage.UpdateObject(storageObject, new UpdateObjectOptions
    {
        PredefinedAcl = PredefinedObjectAcl.PublicRead
    });
    Console.WriteLine(objectName + " is now public and can be fetched from " +
        storageObject.MediaLink);
}

Go

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage Go.

acl := client.Bucket(bucket).Object(object).ACL()
if err := acl.Set(ctx, storage.AllUsers, storage.RoleReader); err != nil {
	return err
}

Java

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage Java.

import com.google.cloud.storage.Acl;
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class MakeObjectPublic {
  public static void makeObjectPublic(String projectId, String bucketName, String objectName) {
    // String projectId = "your-project-id";
    // String bucketName = "your-bucket-name";
    // String objectName = "your-object-name";
    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    BlobId blobId = BlobId.of(bucketName, objectName);
    storage.createAcl(blobId, Acl.of(Acl.User.ofAllUsers(), Acl.Role.READER));

    System.out.println(
        "Object " + objectName + " in bucket " + bucketName + " was made publicly readable");
  }
}

Node.js

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage Node.js.

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

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

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const filename = 'File to make public, e.g. file.txt';

// Makes the file public
await storage
  .bucket(bucketName)
  .file(filename)
  .makePublic();

console.log(`gs://${bucketName}/${filename} is now public.`);

PHP

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage PHP.

use Google\Cloud\Storage\StorageClient;

/**
 * Make an object publically accessible.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 *
 * @return void
 */
function make_public($bucketName, $objectName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $object->update(['acl' => []], ['predefinedAcl' => 'PUBLICREAD']);
    printf('gs://%s/%s is now public' . PHP_EOL, $bucketName, $objectName);
}

Python

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage Python.

from google.cloud import storage

def make_blob_public(bucket_name, blob_name):
    """Makes a blob publicly accessible."""
    # bucket_name = "your-bucket-name"
    # blob_name = "your-object-name"

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

    blob.make_public()

    print(
        "Blob {} is publicly accessible at {}".format(
            blob.name, blob.public_url
        )
    )

Ruby

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage Ruby.

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# file_name   = "Name of file in Google Cloud Storage to make public"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.bucket bucket_name
file    = bucket.file file_name

file.acl.public!

puts "#{file.name} is publicly accessible at #{file.public_url}"

API REST

API JSON

  1. Obtenez un jeton d'autorisation d'accès sur la page OAuth 2.0 Playground. Configurez Playground de façon à utiliser vos propres identifiants OAuth.
  2. Créez un fichier .json contenant les informations suivantes :

    {
      "entity": "allUsers",
      "role": "READER"
    }
  3. Exécutez cURL pour appeler l'API JSON avec une requête Insert ACL :

    curl -X POST --data-binary @[JSON_FILE_NAME].json \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]/o/[OBJECT_NAME]/acl"

    Où :

    • [JSON_FILE_NAME] correspond au nom du fichier que vous avez créé à l'étape 2.
    • [OAUTH2_TOKEN] correspond au jeton d'accès que vous avez généré à l'étape 1.
    • [BUCKET_NAME] est le nom du bucket contenant l'objet que vous souhaitez rendre public. Exemple : my-bucket
    • [OBJECT_NAME] est le nom de l'objet que vous souhaitez rendre public. Par exemple, pets/dog.png.

API XML

  1. Obtenez un jeton d'autorisation d'accès sur la page OAuth 2.0 Playground. Configurez Playground de façon à utiliser vos propres identifiants OAuth.
  2. Créez un fichier .xml contenant les informations suivantes :

    <AccessControlList>
      <Entries>
        <Entry>
          <Scope type="AllUsers"/>
          <Permission>READ</Permission>
        </Entry>
      </Entries>
    </AccessControlList>
  3. Exécutez cURL pour appeler l'API XML avec une requête Set Object ACL :

    curl -X PUT --data-binary @[XML_FILE_NAME].xml \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/[BUCKET_NAME]/[OBJECT_NAME]?acl"

    Où :

    • [XML_FILE_NAME] correspond au nom du fichier que vous avez créé à l'étape 2.
    • [OAUTH2_TOKEN] correspond au jeton d'accès que vous avez généré à l'étape 1.
    • [BUCKET_NAME] est le nom du bucket contenant l'objet que vous souhaitez rendre public. Exemple : my-bucket
    • [OBJECT_NAME] est le nom de l'objet que vous souhaitez rendre public. Par exemple, pets/dog.png.

Rendre des groupes d'objets lisibles publiquement

Pour rendre tous les objets d'un bucket lisibles par tous sur l'Internet public :

Console

  1. Ouvrez le navigateur Cloud Storage dans Google Cloud Console.
    Ouvrir le navigateur Cloud Storage
  2. Dans la liste des buckets, cliquez sur le nom de celui que vous souhaitez rendre public.

  3. Sélectionnez l'onglet Autorisations en haut de la page.

  4. Cliquez sur le bouton Ajouter des membres.

    La boîte de dialogue Ajouter des membres s'affiche.

  5. Dans le champ Nouveaux membres, saisissez allUsers.

  6. Dans la liste déroulante Rôles, sélectionnez le sous-menu Cloud Storage, puis cliquez sur l'option Lecteur des objets de l'espace de stockage.

  7. Cliquez sur Save.

Une fois le partage public effectué, un lien s'affiche pour chaque objet dans la colonne Accès public. Vous pouvez cliquer sur cette icône pour obtenir l'URL de l'objet.

gsutil

Exécutez la commande gsutil iam ch :

gsutil iam ch allUsers:objectViewer gs://[BUCKET_NAME]

[BUCKET_NAME] est le nom du bucket dont vous souhaitez rendre les objets publics. Exemple : my-bucket

API REST

API JSON

  1. Obtenez un jeton d'autorisation d'accès sur la page OAuth 2.0 Playground. Configurez Playground de façon à utiliser vos propres identifiants OAuth.
  2. Créez un fichier .json contenant les informations suivantes :

    {
      "bindings":[
        {
          "role": "roles/storage.objectViewer",
          "members":["allUsers"]
        }
      ]
    }
  3. Exécutez cURL pour appeler l'API JSON avec une requête de bucket PUT :

    curl -X PUT --data-binary @[JSON_FILE_NAME].json \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]/iam"

    Où :

    • [JSON_FILE_NAME] correspond au nom du fichier que vous avez créé à l'étape 2.
    • [OAUTH2_TOKEN] correspond au jeton d'accès que vous avez généré à l'étape 1.
    • [BUCKET_NAME] est le nom du bucket dont vous souhaitez rendre les objets publics. Exemple : my-bucket

API XML

Il n'est pas possible de rendre tous les objets d'un bucket lisibles publiquement avec l'API XML. Utilisez plutôt gsutil ou l'API JSON.

Étapes suivantes