アクセス制御リスト(ACL)の作成と管理

このページでは、アクセス制御リスト(ACL)を使用してバケットとオブジェクトへのアクセスを制御する方法について説明します。ACL は、バケットとオブジェクトへのアクセス権を持つユーザーと各ユーザーのアクセスのレベルを定義するために使用できるメカニズムです。ACL の詳細については、ACL の概要をご覧ください。

バケットとオブジェクトへのアクセスを制御するその他の方法については、アクセス制御の概要をご覧ください。

始める前に

ACL を使用すべきか

ほとんどの場合、リソースへのアクセスを制御する方法としては Cloud Identity and Access Management(Cloud IAM)が推奨されます。その理由は、IAM を使用すればすべての Google Cloud Platform にわたるエンタープライズ クラスのアクセス制御が可能であり、親リソース(プロジェクトなど)に付与された権限を子リソース(バケットやオブジェクトなど)に継承できるためです。Cloud Storage で Cloud IAM を使用するためのガイドとして、Cloud IAM 権限の使用をご覧ください。

ACL を使用した方がよいのは、バケット内の個々のオブジェクトへのアクセス権をカスタマイズしなければならない場合です。Cloud IAM 権限はバケット内のすべてのオブジェクトに適用されるため、このような場合には適していません。ただしその場合でも、バケット内のすべてのオブジェクトに共通するアクセス権については Cloud IAM を使用することをおすすめします。これにより、人手の必要な細かい管理作業の量が軽減されます。

ACL を設定する必要はあるか

バケットまたはオブジェクトに設定する権限によっては、ACL の設定が不要な場合があります。バケットとオブジェクトはデフォルトの ACL で作成され、その中にバケットやオブジェクトに設定する権限がすでに含まれている場合があります。

以下の指針を使用して、ACL を設定すべきかどうかを判断してください。

バケットの場合

Console

新しいバケットは事前定義された project-privateACL を使用して作成されます。 異なる権限がバケットに必要な場合は、ACL を設定します

gsutil

新しいバケットは project-private として追加されます。異なる権限がバケットに必要な場合は、ACL を設定します

JSON API

デフォルトで、新しいバケットは project-private として追加されています。異なる権限がバケットに必要な場合は、ACL を設定します

XML API

新しいバケットは project-private として追加されます。異なる権限がバケットに必要な場合は、ACL を設定します

前述のように、すべてのバケットにはデフォルト オブジェクト ACL があり、そのバケットにアップロードされたオブジェクトのうち、定義済み ACL がない、もしくはリクエストで ACL が指定されていない(JSON API を使用している場合)すべてのオブジェクトに適用されます。詳しくは デフォルト オブジェクト ACL をご覧ください。

オブジェクトの場合

Console

アップロードされたオブジェクトの ACL は、バケット オブジェクトの ACL と同じになり、アップロードしたユーザーが ACL のオーナーとして追加されます。それとは異なる権限がオブジェクトに必要な場合は、ACL を設定します

gsutil

新しいオブジェクトは、バケットのデフォルト オブジェクト ACL を使って追加されます。すでにクラウドに保存されているオブジェクトをコピーする場合は、-p オプションを使用してこの動作をオーバーライドできます。

JSON API

デフォルトで、新しいオブジェクトはバケットのデフォルト オブジェクト ACL を使って追加されます。

XML API

新しいオブジェクトは、バケットのデフォルト オブジェクト ACL を使って追加されます。

どのインターフェースを使用するか

以下の例は、Google Cloud Platform Console、gsutil コマンドライン ツール、Cloud Storage クライアント ライブラリ、XML API および JSON API のそれぞれを使用してアクセス制御の設定を行う方法を示したものです。

  • アクセス制御に不慣れで、個々のオブジェクトの ACL を変更するだけの場合は、GCP Console を使用します。

  • アクセス制御に不慣れで、バケットとオブジェクトの ACL を変更する場合は、gsutil を使用します。

  • いずれかの Cloud Storage クライアント ライブラリを使用したことがある場合は、そのクライアント ライブラリを使用して ACL を管理します。

  • API を使って ACL を指定する場合は、HTTP リクエストを行った経験が必要です。好きなツールやアプリケーションを使って HTTP リクエストを送信できます。例では、cURL ツールを使用します。cURL の例で使用する認証トークンは、OAuth 2.0 Playground から取得できます。

ACL の設定

ACL の設定と取得を行うために使用するツールまたは API によって、使用する ACL 構文が決まります。 ACL 構文は異なって見えても、含まれる ACL 情報(つまり、権限スコープに付与するエントリ)は同じです。

Console

  1. GCP Console の Cloud Storage ブラウザに移動します。
    Cloud Storage ブラウザに移動

  2. ACL を変更する対象のオブジェクトに移動します。

  3. オブジェクトのプルダウン メニューから [権限を編集] を選択します。

    次のような権限ダイアログが表示されます。

    この ACL には次の 4 つのエントリが含まれています。

    • 最初のエントリは、特定のプロジェクト(プロジェクト番号が 867489140601 のプロジェクト)のすべてのオーナーに、このオブジェクトに対する「オーナー」アクセス権を付与します。
    • 2 番目のエントリは、特定のプロジェクト(プロジェクト番号が 867489140601 のプロジェクト)のすべての編集者にも、このオブジェクトに対する「オーナー」アクセス権を付与します。
    • 3 番目のエントリは、特定のプロジェクト(プロジェクト番号が 867489140601 のプロジェクト)のすべての閲覧者に、このオブジェクトに対する「読み取り」アクセス権を付与します。
    • 4 番目のエントリは、オブジェクトをアップロードしたユーザーに、オブジェクトに対する「オーナー」アクセス権を付与します。オブジェクトをアップロードしたユーザーは、常に「オーナー」として設定され、削除できません。
  4. [項目を追加] をクリックします。

  5. アクセス権を付与する [エンティティ] の種類を選択します。

    [エンティティ] は、権限を付与する対象の種類(ユーザーやグループなど)を指定します。[エンティティ] に指定できる値の一覧については、アクセス制御のスコープをご覧ください。

  6. [名前] に値を入力します。

    [名前] は、特定のユーザー、グループ、その他のエンティティ タイプを識別します。[名前] に指定できる値の一覧については、アクセス制御のスコープをご覧ください。

    [エンティティ] と [名前] の組み合わせにより、権限の適用対象が定義されます。

  7. [アクセス権] の値を選択します。

    [アクセス権] は、オブジェクトに設定する権限を定義します。 [アクセス権] に指定できる値の一覧については、アクセス制御の権限をご覧ください。

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

gsutil

gsutil acl を使用して ACL を指定します。

  • 個々の権限を指定するには:

    gsutil acl ch -u [USER_EMAIL]:[PERMISSION] gs://[BUCKET_NAME]

  • ACL テンプレートを指定するには:

    gsutil acl set [CANNED_ACL_NAME] gs://[BUCKET_NAME]

  • JSON 形式で ACL を指定するには:

    gsutil acl set [JSON_FILE] gs://[bucket-name]

    ただし、[JSON_FILE] には、JSON 形式で指定された ACL が含まれます。

コードサンプル

C++

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

以下は、バケットに ACL を追加する例です。

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string entity) {
  StatusOr<gcs::BucketAccessControl> patched_acl =
      client.PatchBucketAcl(bucket_name, entity,
                            gcs::BucketAccessControlPatchBuilder().set_role(
                                gcs::BucketAccessControl::ROLE_OWNER()));

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

  std::cout << "ACL entry for " << patched_acl->entity() << " in bucket "
            << patched_acl->bucket() << " is now " << *patched_acl << "\n";
}

以下は、オブジェクトに ACL を追加する例です。

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string object_name,
   std::string entity) {
  StatusOr<gcs::ObjectAccessControl> patched_acl =
      client.CreateObjectAcl(bucket_name, object_name, entity,
                             gcs::ObjectAccessControl::ROLE_OWNER());

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

  std::cout << "ACL entry for " << patched_acl->entity() << " in object "
            << patched_acl->object() << " in bucket " << patched_acl->bucket()
            << " is now " << *patched_acl << "\n";
}

C#

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

以下は、バケットに ACL を追加する例です。

private void AddBucketOwner(string bucketName, string userEmail)
{
    var storage = StorageClient.Create();
    var bucket = storage.GetBucket(bucketName, new GetBucketOptions()
    {
        Projection = Projection.Full
    });
    if (null == bucket.Acl)
    {
        bucket.Acl = new List<BucketAccessControl>();
    }
    bucket.Acl.Add(new BucketAccessControl()
    {
        Bucket = bucketName,
        Entity = $"user-{userEmail}",
        Role = "OWNER",
    });
    var updatedBucket = storage.UpdateBucket(bucket, new UpdateBucketOptions()
    {
        // Avoid race conditions.
        IfMetagenerationMatch = bucket.Metageneration,
    });
}

以下は、オブジェクトに ACL を追加する例です。

private void AddObjectOwner(string bucketName, string objectName,
    string userEmail)
{
    var storage = StorageClient.Create();
    var storageObject = storage.GetObject(bucketName, objectName,
        new GetObjectOptions() { Projection = Projection.Full });
    if (null == storageObject.Acl)
    {
        storageObject.Acl = new List<ObjectAccessControl>();
    }
    storageObject.Acl.Add(new ObjectAccessControl()
    {
        Bucket = bucketName,
        Entity = $"user-{userEmail}",
        Role = "OWNER",
    });
    var updatedObject = storage.UpdateObject(storageObject, new UpdateObjectOptions()
    {
        // Avoid race conditions.
        IfMetagenerationMatch = storageObject.Metageneration,
    });
}

Go

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

以下は、バケットに ACL を追加する例です。

func addBucketACL(client *storage.Client, bucket string) error {
	ctx := context.Background()

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

以下は、オブジェクトに ACL を追加する例です。

func addObjectACL(client *storage.Client, bucket, object string) error {
	ctx := context.Background()

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

Java

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

以下は、バケットに ACL を追加する例です。

Acl acl = storage.createAcl(bucketName, Acl.of(User.ofAllAuthenticatedUsers(), Role.READER));

以下は、オブジェクトに ACL を追加する例です。

BlobId blobId = BlobId.of(bucketName, blobName, blobGeneration);
Acl acl = storage.createAcl(blobId, Acl.of(User.ofAllAuthenticatedUsers(), Role.READER));

Node.js

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

以下は、バケットに ACL を追加する例です。

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

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

/**
 * TODO(developer): Uncomment the following line before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const userEmail = 'Email of user to add, e.g. developer@company.com';

// Makes the user an owner of the bucket. You can use addAllUsers(),
// addDomain(), addProject(), addGroup(), and addAllAuthenticatedUsers()
// to grant access to different types of entities. You can also use "readers"
// and "writers" to grant different roles.
await storage.bucket(bucketName).acl.owners.addUser(userEmail);

console.log(`Added user ${userEmail} as an owner on bucket ${bucketName}.`);

以下は、オブジェクトに ACL を追加する例です。

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

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

/**
 * TODO(developer): Uncomment the following line before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const filename = 'Name of file to access, e.g. file.txt';
// const userEmail = 'Email of user to add, e.g. developer@company.com';

// Makes the user an owner of the file. You can use addAllUsers(),
// addDomain(), addProject(), addGroup(), and addAllAuthenticatedUsers()
// to grant access to different types of entities. You can also use "readers"
// and "writers" to grant different roles.
await storage
  .bucket(bucketName)
  .file(filename)
  .acl.owners.addUser(userEmail);

console.log(`Added user ${userEmail} as an owner on file ${filename}.`);

PHP

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

以下は、バケットに ACL を追加する例です。

use Google\Cloud\Storage\StorageClient;

/**
 * Add an entity and role to a bucket's ACL.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $entity The entity to update access controls for.
 * @param string $role The permissions to add for the specified entity. May
 *        be one of 'OWNER', 'READER', or 'WRITER'.
 * @param array $options
 *
 * @return void
 */
function add_bucket_acl($bucketName, $entity, $role, $options = [])
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $acl = $bucket->acl();
    $acl->add($entity, $role, $options);
    printf('Added %s (%s) to gs://%s ACL' . PHP_EOL, $entity, $role, $bucketName);
}

以下は、オブジェクトに ACL を追加する例です。

use Google\Cloud\Storage\StorageClient;

/**
 * Add an entity and role to an object's ACL.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 * @param string $entity The entity to update access controls for.
 * @param string $role The permissions to add for the specified entity. May
 *        be one of 'OWNER', 'READER', or 'WRITER'.
 * @param array $options
 *
 * @return void
 */
function add_object_acl($bucketName, $objectName, $entity, $role, $options = [])
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $acl = $object->acl();
    $acl->add($entity, $role, $options);
    printf('Added %s (%s) to gs://%s/%s ACL' . PHP_EOL, $entity, $role, $bucketName, $objectName);
}

Python

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

以下は、バケットに ACL を追加する例です。

def add_bucket_owner(bucket_name, user_email):
    """Adds a user as an owner on the given bucket."""
    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)

    # Reload fetches the current ACL from Cloud Storage.
    bucket.acl.reload()

    # You can also use `group()`, `domain()`, `all_authenticated()` and `all()`
    # to grant access to different types of entities.
    # You can also use `grant_read()` or `grant_write()` to grant different
    # roles.
    bucket.acl.user(user_email).grant_owner()
    bucket.acl.save()

    print('Added user {} as an owner on bucket {}.'.format(
        user_email, bucket_name))

以下は、オブジェクトに ACL を追加する例です。

def add_blob_owner(bucket_name, blob_name, user_email):
    """Adds a user as an owner on the given blob."""
    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(blob_name)

    # Reload fetches the current ACL from Cloud Storage.
    blob.acl.reload()

    # You can also use `group`, `domain`, `all_authenticated` and `all` to
    # grant access to different types of entities. You can also use
    # `grant_read` or `grant_write` to grant different roles.
    blob.acl.user(user_email).grant_owner()
    blob.acl.save()

    print('Added user {} as an owner on blob {} in bucket {}.'.format(
        user_email, blob_name, bucket_name))

Ruby

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

以下は、バケットに ACL を追加する例です。

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# email       = "Google Cloud Storage ACL Entity email"

require "google/cloud/storage"

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

bucket.acl.add_owner email

puts "Added OWNER permission for #{email} to #{bucket_name}"

以下は、オブジェクトに ACL を追加する例です。

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# file_name   = "Name of a file in the Storage bucket"
# email       = "Google Cloud Storage ACL Entity email"

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.add_owner email

puts "Added OWNER permission for #{email} to #{file_name}"

JSON API

バケットを作成するとき、insert リクエストに acl[] プロパティを指定できます。既存のバケットに対しては、patch リクエストまたは update リクエストに acl[] プロパティを指定します。

オブジェクトを作成するとき、リクエストの本文に acl[] プロパティを指定するか、insertリクエストに predefinedAcl クエリ パラメータを指定できます。既存のオブジェクトに対しては、patch リクエストまたはupdateリクエストに プロパティまたは predefinedAcl クエリ パラメータを指定します。

バケット ACL とオブジェクトの ACL プロパティの定義については、それぞれ BucketAccessControlsObjectAccessControls リソースをご覧ください。

さまざまなバケット ACL エントリの例を次に示します。

"acl": [
{
"kind": "storage#bucketAccessControl",
"id": "example-bucket/project-owners-123412341234",
"selfLink": "https://www.googleapis.com/storage/v1/b/example-bucket/acl/project-owners-123412341234",
"bucket": "example-bucket",
"entity": "project-owners-123412341234",
"role": "OWNER",
"projectTeam": {
       "projectNumber": "123412341234",
       "team": "owners"
},
"etag": "CDk="
},
{
"kind": "storage#bucketAccessControl",
"id": "example-bucket/project-editors-123412341234",
"selfLink": "https://www.googleapis.com/storage/v1/b/example-bucket/acl/project-editors-123412341234",
"bucket": "example-bucket",
"entity": "project-editors-123412341234",
"role": "OWNER",
"projectTeam": {
     "projectNumber": "123412341234",
     "team": "editors"
},
"etag": "CDk="
},
{
"kind": "storage#bucketAccessControl",
"id": "example-bucket/project-viewers-123412341234",
"selfLink": "https://www.googleapis.com/storage/v1/b/example-bucket/acl/project-viewers-123412341234",
"bucket": "example-bucket",
"entity": "project-viewers-123412341234",
"role": "READER",
"projectTeam": {
     "projectNumber": "123412341234",
     "team": "viewers"
},
"etag": "CDk="
},
{
"kind": "storage#bucketAccessControl",
"id": "example-bucket/group-gs-announce@googlegroups.com",
"selfLink": "https://www.googleapis.com/storage/v1/b/example-bucket/acl/group-gs-announce@googlegroups.com",
"bucket": "example-bucket",
"entity": "group-gs-announce@googlegroups.com",
"role": "READER",
"email": "gs-announce@googlegroups.com",
"etag": "CDk="
},
{
"kind": "storage#bucketAccessControl",
"id": "example-bucket/user-jane@gmail.com",
"selfLink": "https://www.googleapis.com/storage/v1/b/example-bucket/acl/user-jane@gmail.com",
"bucket": "example-bucket",
"entity": "user-jane@gmail.com",
"role": "READER",
"email": "jane@gmail.com",
"etag": "CDk="
},
{
"kind": "storage#bucketAccessControl",
"id": "example-bucket/allUsers",
"selfLink": "https://www.googleapis.com/storage/v1/b/example-bucket/acl/allUsers",
"bucket": "example-bucket",
"entity": "allUsers",
"role": "READER",
"etag": "CDk="
},
{
"kind": "storage#bucketAccessControl",
"id": "example-bucket/allAuthenticatedUsers",
"selfLink": "https://www.googleapis.com/storage/v1/b/example-bucket/acl/allAuthenticatedUsers",
"bucket": "example-bucket",
"entity": "allAuthenticatedUsers",
"role": "READER",
"etag": "CDk="
}
]

XML API

XML API では、ACL を XML 形式で扱います。バケットとオブジェクトの ACL を変更するには、XML ドキュメントをリクエストの本文に添付する必要があります。 バケットとオブジェクトの ACL を取得すると、XML ドキュメントが返されます。XML ドキュメントには、バケットまたはオブジェクトの個々の ACL エントリが格納されています。

  • PUT Bucket リクエストを使ってバケットを作成した後、?acl パラメータ付きでもう一度 PUT Bucket リクエストを使用し、バケットの ACL を変更します。

  • PUT Object リクエストを使用してオブジェクトをアップロードした後、?acl パラメータまたは x-googl-acl リクエスト ヘッダー付きでもう一度 PUT リクエストを使用し、ACL を変更します。

XML API に次の ACL 構文を使用します。

要素 説明
AccessControlList Entries 要素と Owner 要素のコンテナ。
Owner DisplayName 要素と ID 要素のコンテナ。オブジェクトは、それをアップロードしたユーザーが常に所有するため、この要素はオブジェクトには不要です。この要素は、Amazon S3 ACL 構文を移行シナリオで使う場合に使用します。

Amazon Simple Storage Service™ および Amazon S3™ は、米国およびその他の国における Amazon.com, Inc. またはその関連会社の商標です。
ID バケット オーナーの Google Cloud Storage ID。
DisplayName 現在は実装されていません。この値は常に空の文字列です。
Entries ゼロ個以上の Entry 要素のコンテナ。
Entry Scope 要素と Permission 要素のコンテナ。Entry に含めるのは 1 つの Scope と 1 つの Permission 要素だけにする必要があります。
Scope ACL のスコープを定義する IDEmailAddressDomain 要素のコンテナ。この要素は次のいずれかの値を格納する type 属性を持っている必要があります。UserByIDUserByEmailGroupByIDGroupByEmailGroupByDomainAllUsersAllAuthenticatedUsers
ID 権限エントリが ID で指定される場合の、利用者の ID。
EmailAddress 権限エントリがメールで指定される場合の利用者のメール識別子。
Domain 権限エントリがメールで指定される場合の利用者のドメイン識別子。
Name 指定できるオプション要素、またはスコープが UserByEmail または GroupByEmail の場合に自動的に追加できるオプション要素。
Permission 付与される権限 READWRITEFULL_CONTROL

XML API を使って ACL の作業を行う場合には、以下の点に注意してください。

  • 前述の XML 形式のみを使用できます。
  • 重複するスコープは設定できません。

    ACL XML には複数のエントリを指定できますが。スコープが重複するエントリを設定することはできません。たとえば、同じスコープ要素 jane@example.com を持つ 2 個のエントリを設定することはできません。

さまざまなバケット ACL エントリの例を以下に示します。

<?xml version="1.0" encoding="UTF-8"?>
<AccessControlList>
<Owner>
    <ID>00b4903a9721...</ID>
</Owner>
<Entries>
    <Entry>
      <Scope type="GroupById">
        <ID>00b4903a9722...</ID>
      </Scope>
      <Permission>FULL_CONTROL</Permission>
    </Entry>
    <Entry>
      <Scope type="GroupById">
        <ID>00b4903a9723...</ID>
      </Scope>
      <Permission>FULL_CONTROL</Permission>
    </Entry>
    <Entry>
      <Scope type="GroupById">
        <ID>00b4903a9724...</ID>
      </Scope>
      <Permission>READ</Permission>
    </Entry>
    <Entry>
      <Scope type="GroupByDomain">
        <Domain>example.com</Domain>
      </Scope>
      <Permission>READ</Permission>
    </Entry>
    <Entry>
      <Scope type="GroupByEmail">
        <EmailAddress>gs-announce@googlegroups.com</EmailAddress>
      </Scope>
      <Permission>READ</Permission>
    </Entry>
    <Entry>
      <Scope type="UserByEmail">
        <EmailAddress>jane@gmail.com</EmailAddress>
        <Name>jane</Name>
      </Scope>
      <Permission>READ</Permission>
    </Entry>
    <Entry>
      <Scope type="AllUsers"/>
      <Permission>READ</Permission>
    </Entry>
    <Entry>
      <Scope type="AllAuthenticatedUsers"/>
      <Permission>READ</Permission>
    </Entry>
</Entries>
</AccessControlList>

ACL XML での Name 要素の設定

バケットまたはオブジェクトから ACL を取得すると、<Name> 要素が一部のエントリに追加されている場合があります。たとえば、エントリが次のようになっている場合があります。

<Entry>
    <Scope type="UserByEmail">
      <EmailAddress>jane@gmail.com</EmailAddress>
      <Name>Jane</Name>
    </Scope>
    <Permission>FULL_CONTROL</Permission>
</Entry>

オプションであるこれらの <Name> 要素は、次の 2 つの状況下で追加されます。

  1. バケットまたはオブジェクトの ACL に要素として <Name> が含まれている場合

    ACL を設定するとき、ACL エントリに <Name> 要素を含めることができます。<Name> 要素にはいずれの値も指定できます。指定した値は、ACL が削除または上書きされるまで Cloud Storage に保存されます。この方法は、Google Cloud Storage ID など、簡単に識別できない識別子を使用している場合に便利です。

  2. UserByEmail または GroupByEmail のスコープに Google 公開プロフィールが含まれている場合

    これらのスコープのどちらかを使用していて、<Name> 要素を指定していない場合、Cloud Storage は、メールアドレスに関連付けられているユーザーまたはメールの Google グループに、公開名を含む Google 公開プロフィールが設定されているかどうかをチェックします。Google 公開プロフィールが設定されている場合は、Cloud Storage によりその公開名が <Name> 要素に自動的に追加されます。

定義済み ACL の適用

ACL 全体を設定する際は、前述のようにエントリを一度に 1 個ずつ指定することもできますが、定義済み ACL を使用することで、特定のシナリオ向けにカスタマイズされた複数のエントリを自動的に適用できます。定義済み ACL をバケットまたはオブジェクトに適用するには、gsutil、JSON API、XML API のいずれかを使用します。

新しいオブジェクトの場合

定義済み ACL を、オブジェクトのアップロード時にオブジェクトに適用するには:

Console

GCP Console を使用して、定義済み ACL を適用することはできません。代わりに gsutil を使用してください。

gsutil

事前定義された ACL を適用するには、gsutil cp コマンドで -a オプションを使用します。

gsutil cp -a [PREDEFINED_ACL] [OBJECT] gs://[BUCKET_NAME]

たとえば、オブジェクト paris.jpg をバケット example-travel-maps にアップロードするときに定義済み ACL bucket-owner-read を適用するには、次のようにします。

gsutil cp -a bucket-owner-read paris.jpg gs://example-travel-maps

JSON API

事前定義された ACL を適用するには、insertリクエストに predefinedAcl クエリ文字列パラメータを使用します。

たとえば、オブジェクト paris.jpg をバケット example-travel-maps にアップロードするときに定義済み ACL bucketOwnerRead を適用するには、次のようにします。

curl -X POST --data-binary @paris.jpg -H "Content-Type: image/jpeg" 
-H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg"
"https://www.googleapis.com/upload/storage/v1/b/example-travel-maps/o?name=paris.jpg&predefinedAcl=bucketOwnerRead"

リクエストは次の例のようになります。

POST /upload/storage/v1/b/example-travel-maps/o?name=paris.jpg&amppredefinedAcl=bucketOwnerRead HTTP/1.1
Host: www.googleapis.com
Content-Type: image/jpeg
Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg
Content-Length: 12345
Date: Fri, 10 Oct 2014 00:02:38 GMT

XML API

事前定義された ACL を適用するには、Put Object リクエストで x-goog-acl ヘッダーを使用します。

たとえば、オブジェクト paris.jpg をバケット example-travel-maps にアップロードするときに定義済み ACL bucket-owner-read を適用するには、次のようにします。

curl -X PUT --upload-file paris.jpg -H "x-goog-acl: bucket-owner-read" 
-H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg"
https://storage.googleapis.com/example-travel-maps/paris.jpg

リクエストは次の例のようになります。

PUT /paris.jpg HTTP/1.1
Host: example-travel-maps.storage.googleapis.com
Date: Thu, 09 Oct 2014 23:06:08 GMT
Content-Length: 12345
Content-Type: image/jpg
x-goog-acl: bucket-owner-read
Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg
 
12345 bytes in entity body

既存のバケットまたはオブジェクトの場合

既存のバケットやオブジェクトに定義済み ACL を適用することもできます。これは、定義済み ACL を別のものに変更したい場合や、カスタム ACL を定義済み ACL に更新したい場合に便利です。

Console

GCP Console を使用して、定義済み ACL を適用することはできません。代わりに gsutil を使用してください。

gsutil

事前定義された ACL を適用するには、gsutil acl set コマンドを使用します。

gsutil acl set [PREDEFINED_ACL] gs://[BUCKET_NAME]/[OBJECT_NAME]

たとえば、定義済み ACL private をバケット example-travel-maps のオブジェクト paris.jpg に適用するには、次のようにします。

gsutil acl set private gs://example-travel-maps/paris.jpg

JSON API

事前定義された ACL を適用するには、patch リクエストに predefinedAcl クエリ文字列パラメータを使用し、空の acl プロパティを指定します。

たとえば、定義済み ACL private をバケット example-travel-maps のオブジェクト paris.jpg に適用するには、次のようにします。

curl -X PATCH --data '{"acl": []}'  -H "Content-Type: application/json" 
-H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg"
https://www.googleapis.com/storage/v1/b/example-travel-maps/o/paris.jpg?predefinedAcl=private

リクエストは次の例のようになります。

PATCH /storage/v1/b/example-travel-maps/o/paris.jpg?predefinedAcl=private HTTP/1.1
Host: www.googleapis.com
Content-Type: application/json
Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg
Content-Length: 11
Date: Fri, 10 Oct 2014 18:57:59 GMT

XML API

PUT Object リクエストに x-goog-acl ヘッダーを使用し、acl クエリ文字列パラメータを指定します。ただし、リクエストには XML ドキュメントを含めないでください。

たとえば、定義済み ACL private をバケット example-travel-maps のオブジェクト paris.jpg に適用するには、次のようにします。

curl -X PUT -H "Content-Length: 0" 
-H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg"
-H "x-goog-acl: private" https://storage.googleapis.com/example-travel-maps/paris.jpg?acl

リクエストは次の例のようになります。

PUT /paris.jpg?acl HTTP/1.1
Host: example-travel-maps.storage.googleapis.com
Date: Thu, 09 Oct 2014 23:14:59 GMT
Content-Length: 0
x-goog-acl: private
Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg
 
empty entity body

デフォルト オブジェクト ACL の設定

新しいオブジェクトを作成するたびに ACL を設定しなくても済むように、バケットにデフォルト オブジェクト ACL を設定できます。その後は、そのバケットに追加される、ACL が明示的に指定されていないすべての新しいオブジェクトについて、デフォルトが適用されます。たとえば、あるユーザー グループのみが特定のバケット内のほとんどのオブジェクトへのアクセス権を所有するように指定するとします。デフォルト オブジェクト ACL を変更して、オブジェクトをバケットに追加できます。これらの追加されたオブジェクトには、指定したデフォルト オブジェクト ACL が自動的に適用されます。ただし、特定のオブジェクトに異なる ACL を指定することもできます。その場合はデフォルト ACL が適用されません。

バケットのデフォルト オブジェクト ACL を表示、変更するには:

Console

GCP Console を使用して、デフォルト オブジェクト ACL を設定することはできません。代わりに gsutil を使用してください。

gsutil

  1. gsutil defacl を使用してデフォルト オブジェクト ACL を取得します。

    gsutil defacl get gs://[BUCKET_NAME]

  2. gsutil defacl ch または gsutil defacl set を使用してデフォルト オブジェクト ACL を変更します。

    たとえば、次のコマンドラインでは、jane@gmail.com がバケット example-travel-maps のデフォルト オブジェクト ACL に追加されます。

    gsutil defacl ch -u jane@gmail.com:READER gs://example-travel-maps

    デフォルト オブジェクト ACL をファイルから指定することもできます。詳細については、gsutil defacl のヘルプをご覧ください。

コードサンプル

C++

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

以下は、デフォルト オブジェクト ACL をバケットに追加する例です。

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string entity,
   std::string role) {
  StatusOr<gcs::ObjectAccessControl> default_object_acl =
      client.CreateDefaultObjectAcl(bucket_name, entity, role);

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

  std::cout << "Role " << default_object_acl->role()
            << " will be granted default to " << default_object_acl->entity()
            << " on any new object created on bucket "
            << default_object_acl->bucket() << "\n"
            << "Full attributes: " << *default_object_acl << "\n";
}

以下は、デフォルト オブジェクト ACL をバケットから削除する例です。

namespace gcs = google::cloud::storage;
[](gcs::Client client, std::string bucket_name, std::string entity) {
  google::cloud::Status status =
      client.DeleteDefaultObjectAcl(bucket_name, entity);

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

  std::cout << "Deleted ACL entry for " << entity << " in bucket "
            << bucket_name << "\n";
}

C#

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

以下は、デフォルト オブジェクト ACL をバケットに追加する例です。

private void AddBucketDefaultOwner(string bucketName, string userEmail)
{
    var storage = StorageClient.Create();
    var bucket = storage.GetBucket(bucketName, new GetBucketOptions()
    {
        Projection = Projection.Full
    });
    if (null == bucket.Acl)
    {
        bucket.Acl = new List<BucketAccessControl>();
    }
    if (null == bucket.DefaultObjectAcl)
    {
        bucket.DefaultObjectAcl = new List<ObjectAccessControl>();
    }
    bucket.DefaultObjectAcl.Add(new ObjectAccessControl()
    {
        Bucket = bucketName,
        Entity = $"user-{userEmail}",
        Role = "OWNER",
    });
    var updatedBucket = storage.UpdateBucket(bucket, new UpdateBucketOptions()
    {
        // Avoid race conditions.
        IfMetagenerationMatch = bucket.Metageneration,
    });
}

以下は、デフォルト オブジェクト ACL をバケットから削除する例です。

private void RemoveBucketDefaultOwner(string bucketName, string userEmail)
{
    var storage = StorageClient.Create();
    var bucket = storage.GetBucket(bucketName, new GetBucketOptions()
    {
        Projection = Projection.Full
    });
    if (null == bucket.DefaultObjectAcl)
        return;
    if (null == bucket.Acl)
    {
        bucket.Acl = new List<BucketAccessControl>();
    }
    bucket.DefaultObjectAcl = bucket.DefaultObjectAcl.Where((acl) =>
         !(acl.Entity == $"user-{userEmail}" && acl.Role == "OWNER")
        ).ToList();
    var updatedBucket = storage.UpdateBucket(bucket, new UpdateBucketOptions()
    {
        // Avoid race conditions.
        IfMetagenerationMatch = bucket.Metageneration,
    });
}

Go

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

以下は、デフォルト オブジェクト ACL をバケットに追加する例です。

func addDefaultBucketACL(client *storage.Client, bucket string) error {
	ctx := context.Background()

	acl := client.Bucket(bucket).DefaultObjectACL()
	if err := acl.Set(ctx, storage.AllAuthenticatedUsers, storage.RoleReader); err != nil {
		return err
	}
	return nil
}

以下は、デフォルト オブジェクト ACL をバケットから削除する例です。

func deleteDefaultBucketACL(client *storage.Client, bucket string) error {
	ctx := context.Background()

	acl := client.Bucket(bucket).DefaultObjectACL()
	if err := acl.Delete(ctx, storage.AllAuthenticatedUsers); err != nil {
		return err
	}
	return nil
}

Java

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

以下は、デフォルト オブジェクト ACL をバケットに追加する例です。

Acl acl =
    storage.createDefaultAcl(bucketName, Acl.of(User.ofAllAuthenticatedUsers(), Role.READER));

以下は、デフォルト オブジェクト ACL をバケットから削除する例です。

boolean deleted = storage.deleteDefaultAcl(bucketName, User.ofAllAuthenticatedUsers());
if (deleted) {
  // the acl entry was deleted
} else {
  // the acl entry was not found
}

Node.js

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

以下は、デフォルト オブジェクト ACL をバケットに追加する例です。

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

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

/**
 * TODO(developer): Uncomment the following line before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const userEmail = 'Email of user to add, e.g. developer@company.com';

// Makes the user an owner in the default ACL of the bucket. You can use
// addAllUsers(), addDomain(), addProject(), addGroup(), and
// addAllAuthenticatedUsers() to grant access to different types of entities.
// You can also use "readers" and "writers" to grant different roles.
await storage.bucket(bucketName).acl.default.owners.addUser(userEmail);

console.log(`Added user ${userEmail} as an owner on bucket ${bucketName}.`);

以下は、デフォルト オブジェクト ACL をバケットから削除する例です。

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

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

/**
 * TODO(developer): Uncomment the following line before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const userEmail = 'Email of user to remove, e.g. developer@company.com';

// Removes the user from the access control list of the bucket. You can use
// deleteAllUsers(), deleteDomain(), deleteProject(), deleteGroup(), and
// deleteAllAuthenticatedUsers() to remove access for different types of entities.
await storage.bucket(bucketName).acl.default.owners.deleteUser(userEmail);

console.log(`Removed user ${userEmail} from bucket ${bucketName}.`);

PHP

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

以下は、デフォルト オブジェクト ACL をバケットに追加する例です。

use Google\Cloud\Storage\StorageClient;

/**
 * Add an entity and role to a bucket's default ACL.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $entity The entity to update access controls for.
 * @param string $role The permissions to add for the specified entity. May
 *        be one of 'OWNER', 'READER', or 'WRITER'.
 * @param array $options
 *
 * @return void
 */
function add_bucket_default_acl($bucketName, $entity, $role, $options = [])
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $acl = $bucket->defaultAcl();
    $acl->add($entity, $role, $options);
    printf('Added %s (%s) to gs://%s default ACL' . PHP_EOL, $entity, $role, $bucketName);
}

以下は、デフォルト オブジェクト ACL をバケットから削除する例です。

use Google\Cloud\Storage\StorageClient;

/**
 * Delete an entity from a bucket's default ACL.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $entity the name of the entity to remove from the ACL.
 * @param array $options
 *
 * @return void
 */
function delete_bucket_default_acl($bucketName, $entity, $options = [])
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $acl = $bucket->defaultAcl();
    $acl->delete($entity, $options);
    printf('Deleted %s from gs://%s default ACL' . PHP_EOL, $entity, $bucketName);
}

Python

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

以下は、デフォルト オブジェクト ACL をバケットに追加する例です。

def add_bucket_default_owner(bucket_name, user_email):
    """Adds a user as an owner in the given bucket's default object access
    control list."""
    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)

    # Reload fetches the current ACL from Cloud Storage.
    bucket.acl.reload()

    # You can also use `group`, `domain`, `all_authenticated` and `all` to
    # grant access to different types of entities. You can also use
    # `grant_read` or `grant_write` to grant different roles.
    bucket.default_object_acl.user(user_email).grant_owner()
    bucket.default_object_acl.save()

    print('Added user {} as an owner in the default acl on bucket {}.'.format(
        user_email, bucket_name))

以下は、デフォルト オブジェクト ACL をバケットから削除する例です。

def remove_bucket_default_owner(bucket_name, user_email):
    """Removes a user from the access control list of the given bucket's
    default object access control list."""
    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)

    # Reload fetches the current ACL from Cloud Storage.
    bucket.acl.reload()

    # You can also use `group`, `domain`, `all_authenticated` and `all` to
    # remove access for different types of entities.
    bucket.default_object_acl.user(user_email).revoke_read()
    bucket.default_object_acl.user(user_email).revoke_write()
    bucket.default_object_acl.user(user_email).revoke_owner()
    bucket.default_object_acl.save()

    print('Removed user {} from the default acl of bucket {}.'.format(
        user_email, bucket_name))

Ruby

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

以下は、デフォルト オブジェクト ACL をバケットに追加する例です。

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# email       = "Google Cloud Storage ACL Entity email"

require "google/cloud/storage"

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

bucket.default_acl.add_owner email

puts "Added default OWNER permission for #{email} to #{bucket_name}"

以下は、デフォルト オブジェクト ACL をバケットから削除する例です。

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# email       = "Google Cloud Storage ACL Entity email"

require "google/cloud/storage"

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

bucket.default_acl.delete email

puts "Removed default ACL permissions for #{email} from #{bucket_name}"

JSON API

  1. GET リクエストを使ってデフォルト オブジェクト ACL を取得します。例:

    curl -X GET -H "Authorization: Bearer [OAUTH2_TOKEN]" 
    https://www.googleapis.com/storage/v1/b/[BUCKET_NAME]?projection=full

  2. patch リクエストを使用して、デフォルト オブジェクト ACL を置き換えます。たとえば、次のリクエストでは、バケット example-travel-maps のデフォルト オブジェクト ACL が、defacls.json で指定された ACL に置き換えられます。

    curl -X PATCH --data @defacls.json -H "Content-Type: application/json" -H "Authorization: Bearer [OAUTH2_TOKEN]" 
    https://www.googleapis.com/storage/v1/b/example-travel-maps

    以下に defacls.json の例を示します。

    {
    "defaultObjectAcl": [
    {
    "email": "jane@gmail.com",
    "entity": "user-jane@gmail.com",
    "role": "READER"
    }
    ]
    }

XML API

  1. GET リクエストを使用して、デフォルト オブジェクト ACL を取得します。リクエストのスコープはバケットと ?defaultObjectAcl パラメータです。例:

    curl -X GET -H "Authorization: Bearer [OAUTH2_TOKEN]" 
    https://storage.googleapis.com/[BUCKET_NAME]?defaultObjectAcl

  2. バケットをスコープに設定して PUT リクエストを使用します。?defaultObjectAcl パラメータを使用して、acls.xml に指定されている ACL に、デフォルト オブジェクト ACL を置き換えます。例:

    curl -X PUT --data-binary @acls.xml -H "Authorization: Bearer [OAUTH2_TOKEN]" 
    http://storage.googleapis.com/[BUCKET_NAME]?defaultObjectAcl

    以下に acls.xml の例を示します。

    <AccessControlList>
    <Entries>
    <Entry>
    <Permission>FULL_CONTROL</Permission>
    <Scope type="GroupByEmail">
    <EmailAddress>travel-companions@googlegroups.com</EmailAddress>
    </Scope>
    </Entry>
    </Entries>
    </AccessControlList>

ACL の構文については、ACL の設定をご覧ください。 定義済み ACL をデフォルト オブジェクト ACL として指定することもできます。

バケットのデフォルト オブジェクト ACL を定義済み ACL に設定するには:

Console

GCP Console を使用して、デフォルト オブジェクト ACL を設定することはできません。代わりに gsutil を使用してください。

gsutil

事前定義された ACL の名前を指定して、gsutil defacl コマンドを使用します。

たとえば、バケット example-travel-mapsproject-privateにデフォルト オブジェクト ACL を設定するには、次のコマンドを実行します。

gsutil defacl set project-private gs://example-travel-maps

JSON API

PUT リクエストと predefinedAcl パラメータを使用します。

例:

curl -X PUT -H "Content-Length: 0" -H "Authorization: Bearer [OAUTH2_TOKEN]" 
https://www.googleapis.com/storage/v1/b/[BUCKET_NAME]?predefinedAcl=private

XML API

バケットをスコープに設定して ?defaultObjectAcl パラメータと x-goog-acl ヘッダーを設定し、PUT リクエストを使用します。

例:

curl -X PUT -H "x-goog-acl: project-private" -H "Content-Length: 0" -H "Authorization: Bearer [OAUTH2_TOKEN]" 
http://storage.googleapis.com/[BUCKET_NAME]?defaultObjectAcl

新たに作成されたバケットのデフォルト オブジェクト ACL

新たに作成されたバケットのデフォルト オブジェクト ACL を以下に示します。バケットのデフォルト オブジェクト ACL とこれらの ACL を比較して、バケット デフォルト オブジェクト ACL が変更されていないかを確認します。

Console

GCP Console を使用して、デフォルト オブジェクト ACL を操作することはできません。 代わりに gsutil を使用してください。

gsutil

次の例で、プロジェクト ID は "123412341234" です。実際のプロジェクト ID は違ったものになります。

[
{
"entity": "project-owners-123412341234",
"projectTeam": {
  "projectNumber": "123412341234",
  "team": "owners"
},
"role": "OWNER"
},
{
"entity": "project-editors-123412341234",
"projectTeam": {
  "projectNumber": "123412341234",
  "team": "editors"
},
"role": "OWNER"
},
{
"entity": "project-viewers-123412341234",
"projectTeam": {
  "projectNumber": "123412341234",
  "team": "viewers"
},
"role": "READER"
}
]

JSON API

次の例で、プロジェクト ID は "123412341234" です。実際のプロジェクト ID は違ったものになります。

defaultObjectAcl": [
{
"kind": "storage#objectAccessControl",
"entity": "project-owners-123412341234",
"role": "OWNER",
"projectTeam": {
"projectNumber": "123412341234",
"team": "owners"
}
},
{
"kind": "storage#objectAccessControl",
"entity": "project-editors-123412341234",
"role": "OWNER",
"projectTeam": {
"projectNumber": "123412341234",
"team": "editors"
}
},
{
"kind": "storage#objectAccessControl",
"entity": "project-viewers-123412341234",
"role": "READER",
"projectTeam": {
"projectNumber": "123412341234",
"team": "viewers"
}
}
]

XML API

次の例で、プロジェクトの役割 ID は「00b4903a97...」で始まっています。実際のプロジェクト ID は違ったものになります。

<?xml version='1.0' encoding='UTF-8'?>
<AccessControlList>
<Entries>
<Entry>
  <Scope type='GroupById'>
    <ID>00b4903a9721...</ID>
  </Scope>
  <Permission>FULL_CONTROL</Permission>
</Entry>
<Entry>
  <Scope type='GroupById'>
    <ID>00b4903a9722...</ID>
  </Scope>
  <Permission>FULL_CONTROL</Permission>
</Entry>
<Entry>
  <Scope type='GroupById'>
    <ID>00b4903a9723...</ID>
  </Scope>
  <Permission>READ</Permission>
</Entry>
</Entries>
</AccessControlList>

新たに作成したバケットのデフォルト オブジェクト ACL は定義済みの projectPrivate ACL と同等であるので注意してください。

ACL の取得

既存のバケットまたはオブジェクトの ACL を取得するには:

Console

  1. GCP Console の Cloud Storage ブラウザに移動します。
    Cloud Storage ブラウザに移動

  2. ACL を表示する対象のオブジェクトに移動します。

  3. オブジェクトのプルダウン メニューから [権限を編集] を選択します。

    権限ダイアログにオブジェクトの権限が表示されます。

gsutil

gsutil acl get を使用してオブジェクトの ACL を返します。

たとえば、バケット example-travel-maps 内のオブジェクト paris.jpg の ACL を返すには、次のように使用します。

gsutil acl get gs://example-travel-maps/paris.jpg

レスポンスの例:

[
{
    "entity": "project-owners-123412341234",
    "projectTeam": {
      "projectNumber": "123412341234",
      "team": "owners"
    },
    "role": "OWNER"
},
{
    "entity": "project-editors-123412341234",
    "projectTeam": {
      "projectNumber": "123412341234",
      "team": "editors"
    },
    "role": "OWNER"
},
{
    "entity": "project-viewers-123412341234",
    "projectTeam": {
      "projectNumber": "123412341234",
      "team": "viewers"
    },
    "role": "READER"
},
{
    "email": "gs-announce@googlegroups.com",
    "entity": "group-gs-announce@googlegroups.com",
    "role": "READER"
},
{
    "email": "jane@gmail.com",
    "entity": "user-jane@gmail.com",
    "role": "READER"
},
{
    "entity": "allUsers",
    "role": "READER"
},
{
    "entity": "allAuthenticatedUsers",
    "role": "READER"
}
]

バケットの ACL を返すには:

gsutil acl get gs://[BUCKET_NAME]

gsutil acl get を使って gsutil でバケットとオブジェクトの ACL を 返す場合、その形式は ACL 設定時に使用する JSON 形式と同じです。JSON 形式の ACL は entityrole などの JSON API プロパティ名を使用します。

出力の解釈方法や gsutil help acls の実行方法については、JSON API の構文を参照してください。

コードサンプル

C++

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

以下は、バケットの ACL を取得する例です。

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name) {
  StatusOr<std::vector<gcs::BucketAccessControl>> items =
      client.ListBucketAcl(bucket_name);

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

  std::cout << "ACLs for bucket=" << bucket_name << "\n";
  for (gcs::BucketAccessControl const& acl : *items) {
    std::cout << acl.role() << ":" << acl.entity() << "\n";
  }
}

以下は、オブジェクトの ACL を取得する例です。

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string object_name) {
  StatusOr<std::vector<gcs::ObjectAccessControl>> items =
      client.ListObjectAcl(bucket_name, object_name);

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

  std::cout << "ACLs for object=" << object_name << " in bucket "
            << bucket_name << "\n";
  for (gcs::ObjectAccessControl const& acl : *items) {
    std::cout << acl.role() << ":" << acl.entity() << "\n";
  }
}

C#

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

以下は、バケットの ACL を取得する例です。

private void PrintBucketAcl(string bucketName)
{
    var storage = StorageClient.Create();
    var bucket = storage.GetBucket(bucketName, new GetBucketOptions()
    {
        Projection = Projection.Full
    });
    if (bucket.Acl != null)
        foreach (var acl in bucket.Acl)
        {
            Console.WriteLine($"{acl.Role}:{acl.Entity}");
        }
}

以下は、オブジェクトの ACL を取得する例です。

private void PrintObjectAcl(string bucketName, string objectName)
{
    var storage = StorageClient.Create();
    var storageObject = storage.GetObject(bucketName, objectName,
        new GetObjectOptions() { Projection = Projection.Full });
    if (storageObject.Acl != null)
    {
        foreach (var acl in storageObject.Acl)
        {
            Console.WriteLine($"{acl.Role}:{acl.Entity}");
        }
    }
}

Go

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

以下は、バケットの ACL を取得する例です。

func bucketACL(client *storage.Client, bucket string) error {
	ctx := context.Background()

	rules, err := client.Bucket(bucket).ACL().List(ctx)
	if err != nil {
		return err
	}
	for _, rule := range rules {
		fmt.Printf("ACL rule: %v\n", rule)
	}
	return nil
}

以下は、オブジェクトの ACL を取得する例です。

func objectACL(client *storage.Client, bucket, object string) error {
	ctx := context.Background()

	rules, err := client.Bucket(bucket).Object(object).ACL().List(ctx)
	if err != nil {
		return err
	}
	for _, rule := range rules {
		fmt.Printf("ACL rule: %v\n", rule)
	}
	return nil
}

Java

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

以下は、バケットの ACL を取得する例です。

Acl acl = storage.getAcl(bucketName, User.ofAllAuthenticatedUsers());

以下は、オブジェクトの ACL を取得する例です。

BlobId blobId = BlobId.of(bucketName, blobName, blobGeneration);
Acl acl = storage.getAcl(blobId, User.ofAllAuthenticatedUsers());

Node.js

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

以下は、バケットの ACL を取得する例です。

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

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

/**
 * TODO(developer): Uncomment the following line before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';

// Gets the ACL for the bucket
const [acls] = await storage.bucket(bucketName).acl.get();

acls.forEach(acl => {
  console.log(`${acl.role}: ${acl.entity}`);
});

以下は、オブジェクトの ACL を取得する例です。

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

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

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

// Gets the ACL for the file
const [acls] = await storage
  .bucket(bucketName)
  .file(filename)
  .acl.get();

acls.forEach(acl => {
  console.log(`${acl.role}: ${acl.entity}`);
});

PHP

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

以下は、バケットの ACL を取得する例です。

use Google\Cloud\Storage\StorageClient;

/**
 * Print all entities and roles for a bucket's ACL.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 *
 * @return Google\Cloud\Storage\Acl the ACL for the Cloud Storage bucket.
 */
function get_bucket_acl($bucketName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $acl = $bucket->acl();
    foreach ($acl->get() as $item) {
        printf('%s: %s' . PHP_EOL, $item['entity'], $item['role']);
    }
}

以下は、オブジェクトの ACL を取得する例です。

use Google\Cloud\Storage\StorageClient;

/**
 * Print all entities and roles for an object's ACL.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 *
 * @return void
 */
function get_object_acl($bucketName, $objectName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $acl = $object->acl();
    foreach ($acl->get() as $item) {
        printf('%s: %s' . PHP_EOL, $item['entity'], $item['role']);
    }
}

Python

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

以下は、バケットの ACL を取得する例です。

def print_bucket_acl(bucket_name):
    """Prints out a bucket's access control list."""
    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)

    for entry in bucket.acl:
        print('{}: {}'.format(entry['role'], entry['entity']))

以下は、オブジェクトの ACL を取得する例です。

def print_blob_acl(bucket_name, blob_name):
    """Prints out a blob's access control list."""
    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(blob_name)

    for entry in blob.acl:
        print('{}: {}'.format(entry['role'], entry['entity']))

Ruby

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

以下は、バケットの ACL を取得する例です。

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"

require "google/cloud/storage"

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

puts "ACL for #{bucket_name}:"

bucket.acl.owners.each do |owner|
  puts "OWNER #{owner}"
end

bucket.acl.writers.each do |writer|
  puts "WRITER #{writer}"
end

bucket.acl.readers.each do |reader|
  puts "READER #{reader}"
end

以下は、オブジェクトの ACL を取得する例です。

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# file_name   = "Name of a file in the Storage bucket"
# email       = "Google Cloud Storage ACL Entity email"

require "google/cloud/storage"

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

puts "ACL for #{file_name} in #{bucket_name}:"

file.acl.owners.each do |owner|
  puts "OWNER #{owner}"
end

file.acl.readers.each do |reader|
  puts "READER #{reader}"
end

JSON API

  1. バケットまたはオブジェクトに対する OWNER 権限を持っていることを確認します。

  2. GET リクエストを使用してバケットまたはオブジェクトの ACL を取得します。

    オブジェクトの ACL が JSON 形式で返され、レスポンスの本文に添付されます。

たとえば、バケット example-travel-maps 内のオブジェクト paris.jpg の ACL を返すには、次のように使用します。

curl -X GET -H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg" 
https://www.googleapis.com/storage/v1/b/example-travel-maps/o/paris.jpg?projection=full

次のようなレスポンスが表示されます。

{
"kind": "storage#object",
"id": "example-travel-maps/paris.jpg/1412805837131000",
"selfLink": "https://www.googleapis.com/storage/v1/b/example-travel-maps/o/paris.jpg",
"name": "paris.jpg",
"bucket": "example-travel-maps",
...
"acl": [
{
...
"entity": "project-owners-867489160491",
"role": "OWNER",
"projectTeam": {
    "projectNumber": "867489160491",
    "team": "owners"
},
...
},
{
...
"entity": "user-jane@gmail.com",
"role": "OWNER",
"email": "jane@gmail.com",
...
},
{
...
"entity": "group-gs-announce@googlegroups.com",
"role": "READER",
"email": "gs-announce@googlegroups.com",
...
}
],
"owner": {
"entity": "user-jane@gmail.com"
},
...
}

objectAccessControls リソースの GET メソッドを使用してオブジェクトの ACL の個々のエントリを返すこともできます。

XML API

  1. バケットまたはオブジェクトに対する FULL_CONTROL 権限を持っていることを確認します。

  2. GET Object リクエストで acl クエリ文字列パラメータを使用して、バケットまたはオブジェクトの ACL を取得します。

ACL は XML で記述され、レスポンスの本文に添付されます。

たとえば、バケット example-travel-maps 内のオブジェクト paris.jpg の ACL を返すには、次のように使用します。

curl -X GET -H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg" 
https://storage.googleapis.com/example-travel-maps/paris.jpg?acl

次のようなレスポンスが表示されます。

<?xml version="1.0" encoding="UTF-8"?>
<AccessControlList>
<Owner>
<ID>84fac329bceSAMPLE777d5d22b8SAMPLE77d85ac2SAMPLE2dfcf7c4adf34da46</ID>
<Name>Owner Name</Name>
</Owner>
<Entries>
<Entry>
  <Scope type="UserById">
    <ID>84fac329bceSAMPLE777d5d22b8SAMPLE77d85ac2SAMPLE2dfcf7c4adf34da46</ID>
    <Name>Name</Name>
  </Scope>
  <Permission>FULL_CONTROL</Permission>
</Entry>
<Entry>
  <Scope type="UserByEmail">
    <EmailAddress>jane@gmail.com</EmailAddress>
    <Name>Jane</Name>
  </Scope>
  <Permission>FULL_CONTROL</Permission>
</Entry>
<Entry>
  <Scope type="GroupByEmail">
    <EmailAddress>gs-announce@googlegroups.com</EmailAddress>
  </Scope>
  <Permission>READ</Permission>
</Entry>
</Entries>
</AccessControlList>

また、ObjectAccessControls リソースの JSON GET メソッドを使用してオブジェクトの特定の ACL エントリを返すこともできます。

ACL の変更

既存のオブジェクトまたはバケットの ACL を変更するには:

Console

  1. GCP Console の Cloud Storage ブラウザに移動します。
    Cloud Storage ブラウザに移動

  2. ACL を変更する対象のオブジェクトに移動します。

  3. オブジェクトのプルダウン メニューから [権限を編集] を選択します。

    権限ダイアログにオブジェクトの権限が表示されます。

次の例は、jane@gmail.com ユーザーにオブジェクト paris.jpg に対する OWNER 権限を付与し、gs-announce グループのメンバーに READER 権限を付与する方法を示しています。

オブジェクト paris.jpg に対する ACL の設定

gsutil

  1. ファイルに ACL を定義します。

  2. ACL ファイルを gsutil acl set に渡し、ACL を設定するオブジェクトを指定します。

たとえば、ファイル acls.txt から、バケット example-travel-maps 内の paris.jpg という名前のオブジェクトに ACL を適用するには、次のようにします。

gsutil acl set acl.txt gs://example-travel-maps/paris.jpg

acl.txt の内容は次のとおりです:これらの ACL は、プロジェクト 867489160491 のオーナーとユーザー jane@gmail.com にオブジェクト paris.jpg に対する OWNER 権限を付与し、gs-announce グループのメンバーにこのオブジェクトに対する READER 権限を付与します。

[
{
"entity": "project-owners-867489160491",
"role": "OWNER",
"projectTeam": {
    "projectNumber": "867489160491",
    "team": "owners"
},
},
{
"entity": "user-jane@gmail.com",
"email": "jane@gmail.com",
"role": "OWNER"
},
{
"entity": "group-gs-announce@googlegroups.com",
"email": "gs-announce@googlegroups.com",
"role": "READER"
}
]

このオブジェクトに対し、個別の許可を使って同じ ACL を設定することもできます。 たとえば、jane@gmail.com ユーザーに READER アクセス権に付与するには、次のようにします。

gsutil acl ch -u jane@gmail.com:READ gs://example-travel-maps/paris.jpg
.

コードサンプル

C++

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

以下は、ACL をバケットから削除する例です。

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string entity) {
  StatusOr<gcs::BucketMetadata> original_metadata =
      client.GetBucketMetadata(bucket_name, gcs::Projection::Full());

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

  std::vector<gcs::BucketAccessControl> original_acl =
      original_metadata->acl();
  auto it = std::find_if(original_acl.begin(), original_acl.end(),
                         [entity](const gcs::BucketAccessControl& entry) {
                           return entry.entity() == entity &&
                                  entry.role() ==
                                      gcs::BucketAccessControl::ROLE_OWNER();
                         });

  if (it == original_acl.end()) {
    std::cout << "Could not find entity " << entity
              << " with role OWNER in bucket " << bucket_name << "\n";
    return;
  }

  gcs::BucketAccessControl owner = *it;
  google::cloud::Status status =
      client.DeleteBucketAcl(bucket_name, owner.entity());

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

  std::cout << "Deleted ACL entry for " << owner.entity() << " in bucket "
            << bucket_name << "\n";
}

以下は、ACL をオブジェクトから削除する例です。

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string object_name,
   std::string entity) {
  StatusOr<gcs::ObjectMetadata> original_metadata = client.GetObjectMetadata(
      bucket_name, object_name, gcs::Projection::Full());

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

  std::vector<gcs::ObjectAccessControl> original_acl =
      original_metadata->acl();
  auto it = std::find_if(original_acl.begin(), original_acl.end(),
                         [entity](const gcs::ObjectAccessControl& entry) {
                           return entry.entity() == entity &&
                                  entry.role() ==
                                      gcs::ObjectAccessControl::ROLE_OWNER();
                         });

  if (it == original_acl.end()) {
    std::cout << "Could not find entity " << entity << " for file "
              << object_name << " with role OWNER in bucket " << bucket_name
              << "\n";
    return;
  }

  gcs::ObjectAccessControl owner = *it;
  google::cloud::Status status =
      client.DeleteObjectAcl(bucket_name, object_name, owner.entity());

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

  std::cout << "Deleted ACL entry for " << owner.entity() << " for file "
            << object_name << " in bucket " << bucket_name << "\n";
}

C#

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

以下は、ACL をバケットから削除する例です。

private void RemoveBucketOwner(string bucketName, string userEmail)
{
    var storage = StorageClient.Create();
    var bucket = storage.GetBucket(bucketName, new GetBucketOptions()
    {
        Projection = Projection.Full
    });
    if (null == bucket.Acl)
        return;
    bucket.Acl = bucket.Acl.Where((acl) =>
        !(acl.Entity == $"user-{userEmail}" && acl.Role == "OWNER")
        ).ToList();
    var updatedBucket = storage.UpdateBucket(bucket, new UpdateBucketOptions()
    {
        // Avoid race conditions.
        IfMetagenerationMatch = bucket.Metageneration,
    });
}

以下は、ACL をオブジェクトから削除する例です。

private void RemoveObjectOwner(string bucketName, string objectName,
    string userEmail)
{
    var storage = StorageClient.Create();
    var storageObject = storage.GetObject(bucketName, objectName,
        new GetObjectOptions() { Projection = Projection.Full });
    if (null == storageObject.Acl)
        return;
    storageObject.Acl = storageObject.Acl.Where((acl) =>
        !(acl.Entity == $"user-{userEmail}" && acl.Role == "OWNER")
        ).ToList();
    var updatedObject = storage.UpdateObject(storageObject, new UpdateObjectOptions()
    {
        // Avoid race conditions.
        IfMetagenerationMatch = storageObject.Metageneration,
    });
}

Go

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

以下は、ACL をバケットから削除する例です。

func deleteBucketACL(client *storage.Client, bucket string) error {
	ctx := context.Background()

	acl := client.Bucket(bucket).ACL()
	if err := acl.Delete(ctx, storage.AllAuthenticatedUsers); err != nil {
		return err
	}
	return nil
}

以下は、ACL をオブジェクトから削除する例です。

func deleteObjectACL(client *storage.Client, bucket, object string) error {
	ctx := context.Background()

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

Java

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

以下は、ACL をバケットから削除する例です。

boolean deleted = storage.deleteAcl(bucketName, User.ofAllAuthenticatedUsers());
if (deleted) {
  // the acl entry was deleted
} else {
  // the acl entry was not found
}

以下は、ACL をオブジェクトから削除する例です。

BlobId blobId = BlobId.of(bucketName, blobName, blobGeneration);
boolean deleted = storage.deleteAcl(blobId, User.ofAllAuthenticatedUsers());
if (deleted) {
  // the acl entry was deleted
} else {
  // the acl entry was not found
}

Node.js

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

以下は、ACL をバケットから削除する例です。

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

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

/**
 * TODO(developer): Uncomment the following line before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const userEmail = 'Email of user to remove, e.g. developer@company.com';

// Removes the user from the access control list of the bucket. You can use
// deleteAllUsers(), deleteDomain(), deleteProject(), deleteGroup(), and
// deleteAllAuthenticatedUsers() to remove access for different types of entities.
await storage.bucket(bucketName).acl.owners.deleteUser(userEmail);

console.log(`Removed user ${userEmail} from bucket ${bucketName}.`);

以下は、ACL をオブジェクトから削除する例です。

async function removeFileOwner(bucketName, filename, userEmail) {
  // Imports the Google Cloud client library
  const {Storage} = require('@google-cloud/storage');

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

  /**
   * TODO(developer): Uncomment the following line before running the sample.
   */
  // const bucketName = 'Name of a bucket, e.g. my-bucket';
  // const filename = 'Name of file to access, e.g. file.txt';
  // const userEmail = 'Email of user to remove, e.g. developer@company.com';

  // Removes the user from the access control list of the file. You can use
  // deleteAllUsers(), deleteDomain(), deleteProject(), deleteGroup(), and
  // deleteAllAuthenticatedUsers() to remove access for different types of entities.
  await storage
    .bucket(bucketName)
    .file(filename)
    .acl.owners.deleteUser(userEmail);

  console.log(`Removed user ${userEmail} from file ${filename}.`);

PHP

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

以下は、ACL をバケットから削除する例です。

use Google\Cloud\Storage\StorageClient;

/**
 * Delete an entity from a bucket's default ACL.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $entity the name of the entity to remove from the ACL.
 * @param array $options
 *
 * @return void
 */
function delete_bucket_acl($bucketName, $entity, $options = [])
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $acl = $bucket->acl();
    $acl->delete($entity, $options);
    printf('Deleted %s from gs://%s ACL' . PHP_EOL, $entity, $bucketName);
}

以下は、ACL をオブジェクトから削除する例です。

use Google\Cloud\Storage\StorageClient;

/**
 * Delete an entity from an object's ACL.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 * @param string $entity The entity to update access controls for.
 * @param array $options
 *
 * @return void
 */
function delete_object_acl($bucketName, $objectName, $entity, $options = [])
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $acl = $object->acl();
    $acl->delete($entity, $options);
    printf('Deleted %s from gs://%s/%s ACL' . PHP_EOL, $entity, $bucketName, $objectName);
}

Python

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

以下は、ACL をバケットから削除する例です。

def remove_bucket_owner(bucket_name, user_email):
    """Removes a user from the access control list of the given bucket."""
    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)

    # Reload fetches the current ACL from Cloud Storage.
    bucket.acl.reload()

    # You can also use `group`, `domain`, `all_authenticated` and `all` to
    # remove access for different types of entities.
    bucket.acl.user(user_email).revoke_read()
    bucket.acl.user(user_email).revoke_write()
    bucket.acl.user(user_email).revoke_owner()
    bucket.acl.save()

    print('Removed user {} from bucket {}.'.format(
        user_email, bucket_name))

以下は、ACL をオブジェクトから削除する例です。

def remove_blob_owner(bucket_name, blob_name, user_email):
    """Removes a user from the access control list of the given blob in the
    given bucket."""
    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(blob_name)

    # You can also use `group`, `domain`, `all_authenticated` and `all` to
    # remove access for different types of entities.
    blob.acl.user(user_email).revoke_read()
    blob.acl.user(user_email).revoke_write()
    blob.acl.user(user_email).revoke_owner()
    blob.acl.save()

    print('Removed user {} from blob {} in bucket {}.'.format(
        user_email, blob_name, bucket_name))

Ruby

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

以下は、ACL をバケットから削除する例です。

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# email       = "Google Cloud Storage ACL Entity email"

require "google/cloud/storage"

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

bucket.acl.delete email

puts "Removed ACL permissions for #{email} from #{bucket_name}"

以下は、ACL をオブジェクトから削除する例です。

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# file_name   = "Name of a file in the Storage bucket"
# email       = "Google Cloud Storage ACL Entity email"

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.delete email

puts "Removed ACL permissions for #{email} from #{file_name}"

JSON API

  1. ACL を JSON ファイル内に定義します。

  2. JSON ファイルを含む patch リクエストを送信し、ACL を設定するオブジェクトを指定します。

たとえば、次の cURL コマンドは、ドキュメント acls.json に含まれる JSON ペイロードをバケット example-travel-maps 内の paris.jpg オブジェクトに適用します。

curl -X PATCH --data @acls.json -H "Content-Type: application/json" 
-H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg"
https://www.googleapis.com/storage/v1/b/example-travel-maps/o/paris.jpg

ACL がプロジェクト 867489160491 のオーナーとユーザー jane@gmail.comOWNER 権限を付与し、gs-announce グループのメンバーに READER 権限を付与する場合、リクエストは次のようになります。

PATCH /storage/v1/b/example-travel-maps/o/paris.jpg HTTP/1.1
Host: www.googleapis.com
Content-Type: application/json
Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg
Content-Length: 597
Date: Wed, 08 Oct 2014 22:37:58 GMT
{
"acl": [
{
"entity": "project-owners-867489160491",
"role": "OWNER",
"projectTeam": {
    "projectNumber": "867489160491",
    "team": "owners"
},
{
"entity": "user-jane@gmail.com",
"role": "OWNER",
"email": "jane@gmail.com"
},
{
"entity": "group-gs-announce@googlegroups.com",
"role": "READER",
"email": "gs-announce@googlegroups.com"
}
]
}

XML API

  1. ACL を XML ドキュメント内に定義します。

  2. acl クエリ文字列パラメータと、それに対応する XML ドキュメントを使用して、PUT Object リクエストを送信します。

次の cURL コマンドは、ドキュメント acls.xml に含まれる XML ペイロードをバケット example-travel-maps 内の paris.jpg という名前のオブジェクトに適用します。

curl -X PUT --data-binary @acls.xml 
-H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg"
https://storage.googleapis.com/example-travel-maps/paris.jpg?acl

ACL が jane@gmail.com ユーザーに FULL_CONTROL 権限を付与し、gs-announce グループのメンバーに READ 権限を付与する場合、リクエストは次のようになります。

PUT /paris.jpg?acl HTTP/1.1
Host: example-travel-maps.storage.googleapis.com
Date: Sat, 20 Feb 2010 08:31:08 GMT
Content-Length: 589
Content-Type=application/xml
Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg
 
<?xml version='1.0' encoding='utf-8'?>
<AccessControlList>
<Owner>
<ID>84fac329bceSAMPLE777d5d22b8SAMPLE77d85ac2SAMPLE2dfcf7c4adf34da46</ID>
</Owner>
<Entries>
<Entry>
<Permission>FULL_CONTROL</Permission>
<Scope type="UserById">
  <ID>84fac329bceSAMPLE777d5d22b8SAMPLE77d85ac2SAMPLE2dfcf7c4adf34da46</ID>
</Scope>
</Entry>
<Entry>
<Scope type="UserByEmail">
  <EmailAddress>jane@gmail.com</EmailAddress>
  <Name>Jane</Name>
</Scope>
<Permission>FULL_CONTROL</Permission>
</Entry>
<Entry>
<Scope type="GroupByEmail">
  <EmailAddress>gs-announce@googlegroups.com</EmailAddress>
</Scope>
<Permission>READ</Permission>
</Entry>
</Entries>
</AccessControlList>

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。