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

このページでは、アクセス制御リスト(ACL)を使用してバケットとオブジェクトへのアクセスを制御する方法について説明します。ACL は、バケットやオブジェクトへのアクセスを許可するユーザーとそのアクセスレベルを定義するための仕組みです。ACL の詳細については、ACL の概要をご覧ください。

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

始める前に

ACL を使用すべきか

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

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

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

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

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

バケットの場合

Console

新しいバケットは、事前に定義された project-private ACL を使用して作成されます。それとは異なる権限がバケットに必要な場合は、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 クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、バケットに 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 クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、バケットに 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 クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、バケットに 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 クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、バケットに 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.
storage
  .bucket(bucketName)
  .acl.owners.addUser(userEmail)
  .then(() => {
    console.log(
      `Added user ${userEmail} as an owner on bucket ${bucketName}.`
    );
  })
  .catch(err => {
    console.error('ERROR:', err);
  });

以下は、オブジェクトに 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.
storage
  .bucket(bucketName)
  .file(filename)
  .acl.owners.addUser(userEmail)
  .then(() => {
    console.log(`Added user ${userEmail} as an owner on file ${filename}.`);
  })
  .catch(err => {
    console.error('ERROR:', err);
  });

PHP

Cloud Storage クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、バケットに 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 クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、バケットに 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 クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、バケットに 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: 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: 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 リクエストに acl[] プロパティまたは predefinedAcl クエリ パラメータを指定します。

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

さまざまなバケット 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 構文を使用します。RELAX NG コンパクト構文形式スキーマには、Google ACL XML の詳しい書式設定要件が記載されています。

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

Amazon Simple Storage Service™ および Amazon S3™ は、米国およびその他の国における Amazon.com, Inc. またはその関連会社の商標です。
IDバケット オーナーの Google Cloud Storage ID。
DisplayName現在は実装されていません。この値は常に空の文字列です。
Entriesゼロ個以上の Entry 要素のコンテナ。
EntryScope 要素と Permission 要素のコンテナ。Entry には、1 つの Scope 要素と 1 つの Permission 要素のみが含まれている必要があります。
ScopeACL のスコープを定義する IDEmailAddressDomain 要素のコンテナ。この要素には、type 属性が 1 つ含まれており、値 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> 要素にはどのような値でも指定でき、Cloud Storage では ACL が削除または上書きされるまでこれらの値が保存されます。この方法は、Google Cloud Storage ID など、簡単に識別できない識別子を使用している場合に便利です。

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

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

定義済み ACL の適用

前述のように、一度に 1 個のエントリを指定して ACL 全体を指定するのではなく、定義済み 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] [OBJECT] gs://[BUCKET_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 を変更します。

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

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

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

コードサンプル

C#

Cloud Storage クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、デフォルト オブジェクト 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 クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、デフォルト オブジェクト 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 クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、デフォルト オブジェクト 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 クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、デフォルト オブジェクト 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.
storage
  .bucket(bucketName)
  .acl.default.owners.addUser(userEmail)
  .then(() => {
    console.log(
      `Added user ${userEmail} as an owner on bucket ${bucketName}.`
    );
  })
  .catch(err => {
    console.error('ERROR:', err);
  });

以下は、デフォルト オブジェクト 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.
storage
  .bucket(bucketName)
  .acl.default.owners.deleteUser(userEmail)
  .then(() => {
    console.log(`Removed user ${userEmail} from bucket ${bucketName}.`);
  })
  .catch(err => {
    console.error('ERROR:', err);
  });

PHP

Cloud Storage クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、デフォルト オブジェクト 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 クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、デフォルト オブジェクト 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 クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、デフォルト オブジェクト 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: 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: 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 コマンドを使用します。

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

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

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

次に例を示します。

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 を使ったときに返されるバケットとオブジェクトの ACL は、ACL を設定するときに使用できるものと同じ JSON 形式になっています。JSON 形式の ACL は、entityrole などの JSON API プロパティ名を使用します。

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

コードサンプル

C#

Cloud Storage クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、バケットの 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 クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、バケットの 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 クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、バケットの 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 クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、バケットの 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
storage
  .bucket(bucketName)
  .acl.get()
  .then(results => {
    const acls = results[0];

    acls.forEach(acl => {
      console.log(`${acl.role}: ${acl.entity}`);
    });
  })
  .catch(err => {
    console.error('ERROR:', err);
  });

以下は、オブジェクトの 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
storage
  .bucket(bucketName)
  .file(filename)
  .acl.get()
  .then(results => {
    const acls = results[0];

    acls.forEach(acl => {
      console.log(`${acl.role}: ${acl.entity}`);
    });
  })
  .catch(err => {
    console.error('ERROR:', err);
  });

PHP

Cloud Storage クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、バケットの 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 クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、バケットの 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 クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、バケットの 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: 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: 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 クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、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 クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、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 クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、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 クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、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.
storage
  .bucket(bucketName)
  .acl.owners.deleteUser(userEmail)
  .then(() => {
    console.log(`Removed user ${userEmail} from bucket ${bucketName}.`);
  })
  .catch(err => {
    console.error('ERROR:', err);
  });

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

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.
  storage
    .bucket(bucketName)
    .file(filename)
    .acl.owners.deleteUser(userEmail)
    .then(() => {
      console.log(`Removed user ${userEmail} from file ${filename}.`);
    })
    .catch(err => {
      console.error('ERROR:', err);
    });

PHP

Cloud Storage クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、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 クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、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 クライアントのインストールと作成の詳細については、Cloud Storage クライアント ライブラリをご覧ください。

以下は、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: 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: 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 コマンドは、バケット example-travel-maps 内の paris.jpg という名前のオブジェクトに、ドキュメント acls.json から JSON ペイロードを適用します。

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>

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

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

Cloud Storage ドキュメント