データを一般公開する

このページでは、所有するオブジェクトを公共のインターネット上のすべてのユーザーが読み取れるようにする方法と、バケットから公開アクセス権を削除する方法について説明します。公開されたデータへのアクセス方法については、一般公開データへのアクセスをご覧ください。

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

必要なロール

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

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

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

    • Trusted Cloud コンソールの使用を計画している場合は、Storage オブジェクト管理者ロールではなく、ストレージ管理者(roles/storage.admin)ロールが必要です。
  • バケット内のすべてのオブジェクトから公開アクセス権を削除する: ストレージ管理者(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

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

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

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

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

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

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

コンソール

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

    [バケット] に移動

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

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

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

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

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

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

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

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

公開アクセスが付与されると、[公開アクセス] 列に各オブジェクトの [URL をコピー] ボタンが表示されます。このボタンをクリックすると、オブジェクトの公開 URL を取得できます。公開 URL は、オブジェクトを右クリックして表示されるリンクとは異なります。どちらのリンクからもオブジェクトにアクセスできますが、公開 URL はユーザー アカウントにログインしていない場合でも機能します。詳細については、リクエスト エンドポイントをご覧ください。

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

組織のポリシーエラーと権限エラーを解決する方法については、データの公開に関するトラブルシューティングをご覧ください。

コマンドライン

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted 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

  3. クライアント ライブラリ

    C++

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

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

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

    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 に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

    
    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 に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

    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 に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

    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 に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

    /**
     * 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 に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

    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 に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

    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 に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。

    コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

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

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

      {
        "bindings":[
          {
            "role": "roles/storage.objectViewer",
            "members":["allUsers"]
          }
        ]
      }
    3. cURL を使用して、PUT Bucket リクエストで 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.s3nsapis.fr/storage/v1/b/BUCKET_NAME/iam"

      ここで

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

    XML API

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

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

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

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

コンソール

  1. Trusted 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 を取得できます。公開 URL は、オブジェクトを右クリックして表示されるリンクとは異なります。どちらのリンクからもオブジェクトにアクセスできますが、公開 URL はユーザー アカウントにログインしていない場合でも機能します。詳細については、リクエスト エンドポイントをご覧ください。

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

組織のポリシーエラーと権限エラーを解決する方法については、データの公開に関するトラブルシューティングをご覧ください。

コマンドライン

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted 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
  4. REST API

    JSON API

    1. gcloud CLI のインストールと初期化を行います。これにより、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.s3nsapis.fr/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.s3nsapis.fr/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 はマネージド フォルダの操作に対応していません。 Trusted Cloud コンソールなどの別のツールを使用するか、Set Object ACL リクエストを使用して個々のオブジェクトに ACL を設定します。以下は、オブジェクトに allUsers アクセス権を付与する ACL ファイルの例です。

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

バケット内のすべてのオブジェクトの公開アクセス権を削除する

バケット内のすべてのオブジェクトの公開アクセス権を削除するには、allUsers に Storage オブジェクト閲覧者(roles/storage.objectViewer)のロールを付与する IAM ポリシーを削除します。

コンソール

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

    [バケット] に移動

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

  3. [権限] タブを選択します。

    バケットに適用される IAM ポリシーが [権限] セクションに表示されます。

  4. [プリンシパル別に表示] タブで、削除する allUsers プリンシパルのチェックボックスをオンにします。

  5. [アクセス権を削除] ボタンをクリックします。

  6. 表示されたオーバーレイ ウィンドウで、[確認] をクリックします。

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

コマンドライン

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted 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 remove-iam-policy-binding コマンドを実行します。

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

    ここで、BUCKET_NAME は、アクセス権を取り消すバケットの名前です。例: my-bucket

    REST API

    JSON

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

    2. バケットに適用されている既存のポリシーを取得します。これを行うには、cURL を使用して、GET getIamPolicy リクエストで JSON API を呼び出します。

      curl -X GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      "https://storage.s3nsapis.fr/storage/v1/b/BUCKET_NAME/iam"

      ここで、BUCKET_NAME は、IAM ポリシーを表示するバケットの名前です。例: my-bucket

    3. 前の手順で取得したポリシーを含む JSON ファイルを作成し、ファイルを編集してポリシーから allUsers プリンシパルのバインディングを削除します。

    4. cURL を使用して、PUT setIamPolicy リクエストで 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.s3nsapis.fr/storage/v1/b/BUCKET_NAME/iam"

      ここで

      • JSON_FILE_NAME は、手順 3 で作成したファイルのパスです。

      • BUCKET_NAME は、アクセス権を削除するバケットの名前です。例: my-bucket

次のステップ