データの一般公開

このページでは、公共インターネット上ですべての人が閲覧できるオブジェクトの作成方法を示します。公開されたデータへのアクセス方法については、一般公開データへのアクセスをご覧ください。

個々のオブジェクトを公開する

公開インターネット上ですべての人が個々のオブジェクトを閲覧できるようにするには:

Console

  1. Google Cloud Console で Cloud Storage ブラウザを開きます。
    Cloud Storage ブラウザを開く
  2. 公開するオブジェクトが格納されているバケットの [アクセス制御] 列を確認します。列が [きめ細かい管理] になっている場合は、次の手順に進みます。列が [均一] になっている場合は、以下の手順を使用してバケット内の個々のオブジェクトを公開することはできません。代わりに、バケット内のすべてのオブジェクトに公開権限を付与するか、署名付き URL を使用します。

  3. 公開するオブジェクトを含むバケットの名前をクリックし、オブジェクトがサブディレクトリ内にあればそこに移動します。

  4. 公開するオブジェクトに関連付けられた [その他の操作] メニュー()をクリックします。

  5. プルダウン メニューから [権限を編集] を選択します。

  6. 表示されるオーバーレイで、[+ 項目を追加] ボタンをクリックします。

  7. allUsers の権限を追加します。

    • [エンティティ] には [ユーザー] を選択します。
    • [名前] に「allUsers」と入力します。
    • [アクセス権] には [読み取り] を選択します。
  8. [保存] をクリックします。

公開の状態で共有されると、[公開アクセス] 列にリンクアイコンが表示されます。このアイコンをクリックすると、オブジェクトの URL を取得できます。

gsutil

gsutil acl ch コマンドを使用します。

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

ここで

  • [BUCKET_NAME] は、公開するオブジェクトを含むバケットの名前です。たとえば、my-bucket です。
  • [OBJECT_NAME] は、公開するオブジェクトの名前です。たとえば、pets/dog.png です。

成功した場合は、次の例のようなレスポンスになります。

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

コードサンプル

C++

詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。

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#

詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。

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

詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。

ctx := context.Background()

    ctx, cancel := context.WithTimeout(ctx, time.Second*10)
    defer cancel()
    acl := client.Bucket(bucket).Object(object).ACL()
    if err := acl.Set(ctx, storage.AllUsers, storage.RoleReader); err != nil {
    	return err
    }

Java

詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。

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

詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。

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

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

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

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

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

    makePublic().catch(console.error);

PHP

詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。

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

詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。

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

詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。

# 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}"

REST API

JSON API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. 次の情報が含まれる .json ファイルを作成します。

    {
          "entity": "allUsers",
          "role": "READER"
        }
  3. cURL を使用して Insert ACL リクエストで JSON API を呼び出します。

    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"

    ここで

    • [JSON_FILE_NAME] は、手順 2 で作成したファイルの名前です。
    • [OAUTH2_TOKEN] は、手順 1 で作成したアクセス トークンです。
    • [BUCKET_NAME] は、公開するオブジェクトを含むバケットの名前です。たとえば、my-bucket です。
    • [OBJECT_NAME] は、公開するオブジェクトの名前です。たとえば、pets/dog.png です。

XML API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. 次の情報を含む .xml ファイルを作成します。

    <AccessControlList>
          <Entries>
            <Entry>
              <Scope type="AllUsers"/>
              <Permission>READ</Permission>
            </Entry>
          </Entries>
        </AccessControlList>
  3. cURL を使用して Set Object ACL リクエストで XML API を呼び出します。

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

    ここで

    • [XML_FILE_NAME] は、手順 2 で作成したファイルの名前です。
    • [OAUTH2_TOKEN] は、手順 1 で作成したアクセス トークンです。
    • [BUCKET_NAME] は、公開するオブジェクトを含むバケットの名前です。たとえば、my-bucket です。
    • [OBJECT_NAME] は、公開するオブジェクトの名前です。たとえば、pets/dog.png です。

バケット内のすべてのオブジェクトを公開する

公共インターネット上ですべての人がバケット内のすべてのオブジェクトを閲覧できるようにするには:

Console

  1. Google Cloud Console で Cloud Storage ブラウザを開きます。
    Cloud Storage ブラウザを開く
  2. バケットのリストで、公開するバケットの名前をクリックします。

  3. ページ上部にある [権限] タブを選択します。

  4. [メンバーを追加] ボタンをクリックします。

    [メンバーを追加] ダイアログ ボックスが表示されます。

  5. [新しいメンバー] フィールドに「allUsers」と入力します。

  6. [役割] プルダウン メニューで [ストレージ] サブメニューを選択し、[ストレージ オブジェクト閲覧者] オプションをクリックします。

  7. [保存] をクリックします。

公開の状態で共有されると、[公開アクセス] 列に各オブジェクトのリンクアイコンが表示されます。このアイコンをクリックすると、オブジェクトの URL を取得できます。

gsutil

gsutil iam ch コマンドを使用します。

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

ここで、[BUCKET_NAME] は、オブジェクトを公開するバケットの名前です。たとえば、my-bucket です。

REST API

JSON API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. 次の情報が含まれる .json ファイルを作成します。

    {
          "bindings":[
            {
              "role": "roles/storage.objectViewer",
              "members":["allUsers"]
            }
          ]
        }
  3. cURL を使用して PUT Bucket リクエストで JSON API を呼び出します。

    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"

    ここで

    • [JSON_FILE_NAME] は、手順 2 で作成したファイルの名前です。
    • [OAUTH2_TOKEN] は、手順 1 で作成したアクセス トークンです。
    • [BUCKET_NAME] は、オブジェクトを公開するバケットの名前です。たとえば、my-bucket です。

XML API

バケット内のすべてのオブジェクトを公開する場合、XML API は使用できません。gsutil または JSON API を使用してください。

次のステップ