Membuat data tersedia untuk publik

Halaman ini menunjukkan cara membuat objek yang Anda miliki dapat dibaca oleh semua orang di internet publik. Untuk mempelajari cara mengakses data yang telah dipublikasikan, lihat Mengakses Data Publik.

Saat sebuah objek dibagikan secara publik, setiap pengguna yang memiliki pengetahuan tentang URI objek dapat mengakses objek tersebut selama objek tersebut bersifat publik.

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan agar objek dapat dibaca oleh publik, minta administrator untuk memberi Anda peran berikut untuk bucket yang berisi data yang ingin Anda publikasikan:

  • Untuk membuat semua objek dalam bucket dapat dibaca oleh publik: Storage Admin (roles/storage.admin)

  • Untuk membuat setiap objek dapat dibaca oleh publik: Storage Object Admin (roles/storage.objectAdmin)

    • Jika berencana menggunakan konsol Google Cloud, Anda memerlukan peran Storage Admin (roles/storage.admin), bukan peran Storage Object Admin.

Peran ini berisi izin yang diperlukan untuk membuat objek bersifat publik. Untuk melihat izin yang diperlukan, luaskan bagian Izin yang diperlukan:

Izin yang diperlukan

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

Izin berikut hanya diperlukan untuk menggunakan Konsol Google Cloud guna melakukan tugas di halaman ini:

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

Anda mungkin juga bisa mendapatkan izin ini dengan peran standar atau peran khusus lainnya.

Untuk petunjuk cara memberikan peran pada bucket, lihat Menggunakan IAM dengan bucket.

Membuat semua objek dalam bucket dapat dibaca oleh publik

Agar semua objek dalam bucket dapat dibaca oleh semua orang di internet publik, berikan peran Storage Object Viewer (roles/storage.objectViewer) kepada akun utama allUsers:

Konsol

  1. Di Konsol Google Cloud, buka halaman Bucket Cloud Storage.

    Buka Buckets

  2. Dalam daftar bucket, klik nama bucket yang ingin Anda tampilkan kepada publik.

  3. Pilih tab Permissions di dekat bagian atas halaman.

  4. Di bagian Permissions, klik tombol Grant access.

    Dialog Berikan akses akan muncul.

  5. Di kolom New principals, masukkan allUsers.

  6. Di drop-down Select a role, masukkan Storage Object Viewer di kotak filter lalu pilih Storage Object Viewer dari hasil yang difilter.

  7. Klik Simpan.

  8. Klik Allow public access.

Setelah akses publik diberikan, Copy URL akan muncul untuk setiap objek di kolom public access. Anda dapat mengklik tombol ini untuk mendapatkan URL publik untuk objek tersebut.

Untuk mempelajari cara mendapatkan informasi error mendetail tentang operasi Cloud Storage yang gagal di Konsol Google Cloud, lihat Pemecahan masalah.

Command line

  1. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

    Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.

  2. Di lingkungan pengembangan Anda, jalankan perintah buckets add-iam-policy-binding:

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

    Dengan BUCKET_NAME adalah nama bucket yang objeknya ingin Anda tampilkan kepada publik. Contoh, my-bucket.

Library klien

C++

Untuk mengetahui informasi selengkapnya, lihatDokumentasi referensi Cloud Storage C++ API.

Untuk melakukan autentikasi ke Cloud Storage, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

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#

Untuk mengetahui informasi selengkapnya, lihatDokumentasi referensi Cloud Storage C# API.

Untuk melakukan autentikasi ke Cloud Storage, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.


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

Untuk mengetahui informasi selengkapnya, lihatDokumentasi referensi Cloud Storage Go API.

Untuk melakukan autentikasi ke Cloud Storage, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

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

Untuk mengetahui informasi selengkapnya, lihatDokumentasi referensi Cloud Storage Java API.

Untuk melakukan autentikasi ke Cloud Storage, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

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

Untuk mengetahui informasi selengkapnya, lihatDokumentasi referensi Cloud Storage Node.js API.

Untuk melakukan autentikasi ke Cloud Storage, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

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

Untuk mengetahui informasi selengkapnya, lihatDokumentasi referensi Cloud Storage PHP API.

Untuk melakukan autentikasi ke Cloud Storage, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

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

Untuk mengetahui informasi selengkapnya, lihatDokumentasi referensi Cloud Storage Python API.

Untuk melakukan autentikasi ke Cloud Storage, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

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

Untuk mengetahui informasi selengkapnya, lihatDokumentasi referensi Cloud Storage Ruby API.

Untuk melakukan autentikasi ke Cloud Storage, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

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

Anda dapat menggunakan resource Terraform untuk menjadikan semua objek dalam bucket bersifat publik.

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

REST API

JSON API

  1. Menginstal dan melakukan inisialisasi gcloud CLI , yang memungkinkan Anda membuat token akses untuk header Authorization.

  2. Buat file JSON yang berisi informasi berikut:

    {
      "bindings":[
        {
          "role": "roles/storage.objectViewer",
          "members":["allUsers"]
        }
      ]
    }
  3. Gunakan cURL untuk memanggil JSON API dengan permintaan Bucket PUT:

    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"

    Dengan keterangan:

    • JSON_FILE_NAME adalah jalur untuk file yang Anda buat di Langkah 2.
    • BUCKET_NAME adalah nama bucket dengan objek yang ingin Anda tampilkan kepada publik. Contoh, my-bucket.

XML API

Anda tidak bisa membuat agar semua objek dalam bucket dapat dibaca secara publik dengan XML API. Gunakan Konsol Google Cloud atau gcloud storage.

Membuat sebagian bucket dapat dibaca oleh publik

Gunakan folder terkelola untuk mengontrol akses ke objek yang awalan namanya cocok dengan nama folder terkelola. Misalnya, folder terkelola bernama my-folder dapat digunakan untuk mengontrol akses ke objek bernama my-folder/cats.jpg dan my-folder/dogs.jpg.

Agar objek tersebut dapat diakses secara publik, buat folder terkelola terlebih dahulu, lalu tetapkan kebijakan IAM di folder yang memberikan peran Storage Object Viewer (roles/storage.objectViewer) ke allUsers:

Konsol

  1. Di Konsol Google Cloud, buka halaman Bucket Cloud Storage.

    Buka Bucket

  2. Klik nama bucket yang berisi objek yang ingin Anda tampilkan kepada publik.

  3. Buat folder, menggunakan langkah-langkah berikut:

    1. Klik tombol Create folder.

    2. Masukkan Nama untuk folder. Setelah folder dikonversi menjadi folder terkelola, objek yang namanya diawali dengan nama ini akan tunduk pada peran IAM yang ditetapkan di folder.

    3. Klik Create.

  4. Konversikan folder menjadi folder terkelola, menggunakan langkah-langkah berikut:

    1. Di panel yang menampilkan konten bucket, temukan nama folder yang Anda buat, lalu klik ikon Opsi lainnya .

    2. Klik Edit akses.

    3. Di jendela yang muncul, klik Aktifkan.

  5. Tambahkan kebijakan IAM ke folder yang memberikan peran Storage Object Viewer (roles/storage.objectViewer) kepada allUsers, menggunakan langkah-langkah berikut:

    1. Jika panel Permissions untuk folder terkelola belum terbuka, klik ikon More options untuk folder terkelola, lalu klik Edit access.

    2. Di panel Permissions, klik tombol Add principal.

    3. Di kolom New principals, masukkan allUsers.

    4. Di drop-down Select a role, masukkan Storage Object Viewer di kotak filter, lalu pilih Storage Object Viewer dari hasil yang difilter.

    5. Klik Simpan.

    6. Klik Allow public access.

Setelah akses publik diberikan, Copy URL akan muncul untuk setiap objek yang berlaku di kolom public access. Anda dapat mengklik tombol ini untuk mendapatkan URL publik bagi objek tersebut.

Untuk mempelajari cara mendapatkan informasi error mendetail tentang operasi Cloud Storage yang gagal di Konsol Google Cloud, lihat Pemecahan masalah.

Command line

  1. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

    Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.

  2. Di lingkungan pengembangan Anda, buat folder terkelola menggunakan perintah gcloud storage managed-folders create:

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

    Dengan keterangan:

    • BUCKET_NAME adalah nama bucket tempat Anda ingin membuat folder terkelola. Contoh, my-bucket.

    • MANAGED_FOLDER_NAME adalah nama folder dikelola yang ingin Anda buat. Contoh, my-managed-folder.

  3. Di lingkungan pengembangan Anda, tambahkan allUsers ke kebijakan IAM folder terkelola menggunakan perintah 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

    Dengan keterangan:

    • BUCKET_NAME adalah nama bucket yang berisi folder terkelola tempat Anda menambahkan kebijakan IAM. Contoh, my-bucket.
    • MANAGED_FOLDER_NAME adalah nama folder terkelola yang ingin Anda tambahkan akses publik. Contoh, my-managed-folder.

REST API

JSON API

  1. Menginstal dan melakukan inisialisasi gcloud CLI , yang memungkinkan Anda membuat token akses untuk header Authorization.

  2. Buat file JSON yang berisi informasi berikut:

    {
      "name": "MANAGED_FOLDER_NAME"
    }

    Dengan MANAGED_FOLDER_NAME adalah nama folder terkelola yang ingin Anda buat. Contoh, my-managed-folder.

  3. Gunakan cURL untuk memanggil JSON API dengan permintaan 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"

    Dengan keterangan:

    • JSON_FILE_NAME adalah jalur untuk file yang Anda buat di langkah sebelumnya.
    • BUCKET_NAME adalah nama bucket tempat Anda ingin membuat folder terkelola. Contoh, my-bucket.
  4. Buat file JSON yang berisi informasi berikut:

    {
      "bindings":[
        {
          "role": "roles/storage.objectViewer",
          "members":["allUsers"]
        }
      ]
    }
  5. Gunakan cURL untuk memanggil JSON API dengan permintaan 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"

    Dengan keterangan:

    • JSON_FILE_NAME adalah jalur untuk file yang Anda buat di langkah sebelumnya.
    • BUCKET_NAME adalah nama bucket yang berisi folder terkelola tempat Anda menambahkan kebijakan IAM. Contoh, my-bucket.
    • MANAGED_FOLDER_NAME adalah nama folder terkelola tempat Anda menambahkan kebijakan IAM. Contoh, my-managed-folder.

XML API

XML API tidak mendukung penggunaan folder terkelola. Gunakan alat yang berbeda, seperti Konsol Google Cloud, atau tetapkan ACL pada setiap objek menggunakan permintaan Set Object ACL. Berikut adalah contoh file ACL yang akan memberikan akses allUsers ke objek:

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

Langkah selanjutnya