データを一般公開する

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

オブジェクトが公開されて共有されると、そのオブジェクトが公開されている限り、そのオブジェクトの URI を知っているすべてのユーザーがオブジェクトにアクセスできます。

必要なロール

オブジェクトを一般公開するために必要な権限を取得するには、公開するデータを含むバケットに対する次のロールを付与するよう管理者に依頼してください。

  • バケット内のすべてのオブジェクトを一般公開する: ストレージ管理者(roles/storage.admin

  • 個々のオブジェクトを一般公開する: Storage オブジェクト管理者(roles/storage.objectAdmin

    • Google Cloud コンソールの使用を予定している場合は、Storage オブジェクト管理者ロールではなく、ストレージ管理者(roles/storage.admin)ロールが必要です。

これらのロールには、オブジェクトを公開するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

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

次の権限は、Google Cloud コンソールを使用してこのページのタスクを実行する場合にのみ必要です。

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

これらの権限は、他の事前定義ロールカスタムロールを使用して取得することもできます。

バケットに対してロールを付与する手順については、バケットで IAM を使用するをご覧ください。

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

公共のインターネット上のすべてのユーザーがバケット内のすべてのオブジェクトを閲覧できるようにするには、プリンシパル allUsers に Storage オブジェクト閲覧者(roles/storage.objectViewer)のロールを付与します。

コンソール

  1. Google Cloud コンソールで、Cloud Storage の [バケット] ページに移動します。

    [バケット] に移動

  2. バケットのリストで、公開するバケットの名前をクリックします。

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

  4. [権限] セクションで、[ アクセスを許可] ボタンをクリックします。

    [アクセスを許可] ダイアログが表示されます。

  5. [新しいプリンシパル] フィールドに「allUsers」と入力します。

  6. [ロールを選択] プルダウンで、フィルタ ボックスに「Storage Object Viewer」と入力し、フィルタされた結果から [Storage オブジェクト閲覧者] を選択します。

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

  8. [一般公開アクセスを許可] をクリックします。

公開アクセスが付与されると、各オブジェクトの [公開アクセス] 列に [URL をコピー] が表示されます。このボタンをクリックすると、オブジェクトの公開 URL を取得できます。

失敗した Cloud Storage オペレーションの詳細なエラー情報を Google Cloud コンソールで確認する方法については、トラブルシューティングをご覧ください。

コマンドライン

  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. 開発環境で、buckets add-iam-policy-binding コマンドを実行します。

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

    ここで、BUCKET_NAME は、オブジェクトを公開するバケットの名前です。例: my-bucket

クライアント ライブラリ

C++

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

Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

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#

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

Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。


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

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

Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

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

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

Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

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

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

Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

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

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

Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

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

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

Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

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

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

Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。

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

バケット内のすべてのオブジェクトを公開するには、Terraform リソースを使用します。

# 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. Authorization ヘッダーのアクセス トークンを生成するには、gcloud CLI のインストールと初期化を行います。

    OAuth 2.0 Playground を使用してアクセス トークンを作成し、Authorization ヘッダーに含めることもできます。

  2. 次の情報が含まれる JSON ファイルを作成します。

    {
      "bindings":[
        {
          "role": "roles/storage.objectViewer",
          "members":["allUsers"]
        }
      ]
    }
  3. cURL を使用して JSON API を呼び出し、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"

    ここで

    • JSON_FILE_NAME は、手順 2 で作成したファイルのパスです。
    • BUCKET_NAME は、オブジェクトを公開するバケットの名前です。例: my-bucket

XML API

XML API では、バケット内のすべてのオブジェクトを公開して読み取り可能にすることはできません。Google Cloud コンソールまたは gcloud storage を使用します。

バケットの一部を一般公開する

マネージド フォルダを使用して、名前接頭辞がマネージド フォルダの名前と一致するオブジェクトへのアクセスを制御します。たとえば、my-folder という名前のマネージド フォルダを使用して、my-folder/cats.jpgmy-folder/dogs.jpg という名前のオブジェクトへのアクセスを制御できます。

このようなオブジェクトを一般公開するには、まずマネージド フォルダを作成し、allUsers にストレージ オブジェクト閲覧者(roles/storage.objectViewer)のロールを付与する IAM ポリシーをフォルダに設定します。

コンソール

  1. Google Cloud コンソールで、Cloud Storage の [バケット] ページに移動します。

    [バケット] に移動

  2. 公開するオブジェクトを含むバケットの名前をクリックします。

  3. 次の手順でフォルダを作成します。

    1. [フォルダを作成] ボタンをクリックします。

    2. フォルダの名前を入力します。フォルダがマネージド フォルダに変換されると、この名前で始まるオブジェクトには、フォルダに設定された IAM ロールが適用されます。

    3. [作成] をクリックします。

  4. 次の手順で、フォルダをマネージド フォルダに変換します。

    1. バケットのコンテンツを表示するペインで、作成したフォルダの名前を見つけ、その他のオプション アイコン をクリックします。

    2. [アクセス権を編集] をクリックします。

    3. 表示されたウィンドウで [有効にする] をクリックします。

  5. 次の手順で、allUsers にストレージ オブジェクト閲覧者(roles/storage.objectViewer)ロールを付与する IAM ポリシーをフォルダに追加します。

    1. マネージド フォルダの [権限] ペインがまだ開いていない場合は、マネージド フォルダのその他のオプション アイコン をクリックし、[アクセス権の編集] をクリックします。

    2. [権限] ペインで、 [プリンシパルを追加] ボタンをクリックします。

    3. [新しいプリンシパル] フィールドに「allUsers」と入力します。

    4. [ロールを選択] プルダウンで、フィルタ ボックスに「Storage Object Viewer」と入力し、フィルタ処理された結果から [Storage オブジェクト閲覧者] を選択します。

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

    6. [一般公開アクセスを許可] をクリックします。

公開アクセスが付与されると、各オブジェクトの [公開アクセス] 列に [URL をコピー] が表示されます。このボタンをクリックすると、オブジェクトの公開 URL を取得できます。

失敗した Cloud Storage オペレーションの詳細なエラー情報を Google Cloud コンソールで確認する方法については、トラブルシューティングをご覧ください。

コマンドライン

  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. 開発環境で、gcloud storage managed-folders create コマンドを使用してマネージド フォルダを作成します。

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

    ここで

    • BUCKET_NAME は、マネージド フォルダを作成するバケットの名前です。例: my-bucket

    • MANAGED_FOLDER_NAME は、作成するマネージド フォルダの名前です。例: my-managed-folder

  3. 開発環境で、gcloud storage managed-folders add-iam-policy-binding コマンドを使用して、マネージド フォルダの IAM ポリシーに allUsers を追加します。

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

    ここで

    • BUCKET_NAME は、IAM ポリシーを追加するマネージド フォルダを含むバケットの名前です。例: my-bucket
    • MANAGED_FOLDER_NAME は、一般公開を追加するマネージド フォルダの名前です。例: my-managed-folder

REST API

JSON API

  1. Authorization ヘッダーのアクセス トークンを生成するには、gcloud CLI のインストールと初期化を行います。

    OAuth 2.0 Playground を使用してアクセス トークンを作成し、Authorization ヘッダーに含めることもできます。

  2. 次の情報が含まれる JSON ファイルを作成します。

    {
      "name": "MANAGED_FOLDER_NAME"
    }

    ここで、MANAGED_FOLDER_NAME は、作成するマネージド フォルダの名前です。例: my-managed-folder

  3. cURL を使用して、Insert ManagedFolder リクエストで JSON API を呼び出します。

    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"

    ここで

    • JSON_FILE_NAME は、前の手順で作成したファイルのパスです。
    • BUCKET_NAME は、マネージド フォルダを作成するバケットの名前です。例: my-bucket
  4. 次の情報が含まれる JSON ファイルを作成します。

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

    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"

    ここで

    • JSON_FILE_NAME は、前の手順で作成したファイルのパスです。
    • BUCKET_NAME は、IAM ポリシーを追加するマネージド フォルダを含むバケットの名前です。例: my-bucket
    • MANAGED_FOLDER_NAME は、IAM ポリシーを追加するマネージド フォルダの名前です。例: my-managed-folder

XML API

XML API は、マネージド フォルダの操作をサポートしていません。Google Cloud コンソールなどの別のツールを使用するか、Set Object ACL リクエストを使用して個々のオブジェクトに ACL を設定します。以下は、オブジェクトに allUsers アクセス権を付与する ACL ファイルの例です。

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

次のステップ