このページでは、アクセス制御リスト(ACL)を使用してバケットとオブジェクトへのアクセスを制御する方法について説明します。ACL は、バケットとオブジェクトへのアクセス権を持つユーザーと各ユーザーのアクセスレベルを定義するために使用できるメカニズムです。
リソースへのアクセス制御に ACL を使用する必要があるかどうかについては、ACL の概要をご覧ください。
ACL の設定
コンソール
Google Cloud コンソールで、Cloud Storage ブラウザに移動します。
Cloud Storage ブラウザに移動ACL を変更する対象のオブジェクトに移動します。
オブジェクトに関連付けられた [その他の操作] メニュー(
)から [アクセス権を編集] をクリックします。
次のような権限ダイアログが表示されます。
この ACL には次の 4 つのエントリが含まれています。
- 最初のエントリは、特定のプロジェクト(プロジェクト番号が 867489140601 のプロジェクト)のすべてのオーナーに、このオブジェクトに対する「オーナー」アクセス権を付与します。
- 2 番目のエントリは、特定のプロジェクト(プロジェクト番号が 867489140601 のプロジェクト)のすべての編集者にも、このオブジェクトに対する「オーナー」アクセス権を付与します。
- 3 番目のエントリは、特定のプロジェクト(プロジェクト番号が 867489140601 のプロジェクト)のすべての閲覧者に、このオブジェクトに対する「読み取り」アクセス権を付与します。
- 4 番目のエントリは、オブジェクトをアップロードしたユーザーに、オブジェクトに対する「オーナー」アクセス権を付与します。オブジェクトをアップロードしたユーザーは、常に「オーナー」として設定され、削除できません。
[項目を追加] をクリックします。
アクセス権を付与する [エンティティ] の種類を選択します。
[エンティティ] は、権限を付与する対象の種類(ユーザーやグループなど)を指定します。[エンティティ] に指定できる値の一覧については、アクセス制御のスコープをご覧ください。
[名前] に値を入力します。
[名前] は、特定のユーザー、グループ、その他のエンティティ タイプを識別します。[名前] に指定できる値の一覧については、アクセス制御のスコープをご覧ください。
[エンティティ] と [名前] の組み合わせにより、権限の適用対象が定義されます。
[アクセス権] の値を選択します。
[アクセス権] は、オブジェクトに設定する権限を定義します。[アクセス権] に指定できる値の一覧については、アクセス制御の権限をご覧ください。
[保存] をクリックします。
失敗した Cloud Storage オペレーションの詳細なエラー情報を Google Cloud コンソールで確認する方法については、トラブルシューティングをご覧ください。
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 を追加する例です。
以下は、オブジェクトに ACL を追加する例です。
C#
詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。
以下は、バケットに ACL を追加する例です。
以下は、オブジェクトに ACL を追加する例です。
Go
詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
以下は、バケットに ACL を追加する例です。
以下は、オブジェクトに ACL を追加する例です。
Java
詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
以下は、バケットに ACL を追加する例です。
以下は、オブジェクトに ACL を追加する例です。
Node.js
詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。
以下は、バケットに ACL を追加する例です。
以下は、オブジェクトに ACL を追加する例です。
PHP
詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。
以下は、バケットに ACL を追加する例です。
以下は、オブジェクトに ACL を追加する例です。
Python
詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
以下は、バケットに ACL を追加する例です。
以下は、オブジェクトに ACL を追加する例です。
Ruby
詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。
以下は、バケットに ACL を追加する例です。
以下は、オブジェクトに ACL を追加する例です。
JSON API
バケットを作成するとき、insert リクエストに acl[]
プロパティを指定できます。既存のバケットに対しては、patch リクエストまたは update リクエストに acl[]
プロパティを指定します。
オブジェクトを作成するとき、リクエストの本文に acl[]
プロパティを指定するか、insertリクエストに predefinedAcl
クエリ パラメータを指定できます。既存のオブジェクトに対しては、patch リクエストまたはupdateリクエストに acl[]
プロパティまたは predefinedAcl
クエリ パラメータを指定します。
バケット ACL とオブジェクトの 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 構文を使用します。
要素 | 説明 |
---|---|
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 のスコープを定義する ID 、EmailAddress 、Domain 要素のコンテナ。この要素は次のいずれかの値を格納する type 属性を持っている必要があります。UserByID 、UserByEmail 、GroupByID 、GroupByEmail 、GroupByDomain 、AllUsers 、AllAuthenticatedUsers 。 |
ID |
権限エントリが ID で指定される場合の、利用者の ID。 |
EmailAddress |
権限エントリがメールで指定される場合の利用者のメール識別子。 |
Domain |
権限エントリがメールで指定される場合の利用者のドメイン識別子。 |
Name |
指定できるオプション要素、またはスコープが UserByEmail または GroupByEmail の場合に自動的に追加できるオプション要素。 |
Permission |
付与される権限 READ 、WRITE 、FULL_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 つの状況下で追加されます。
バケットまたはオブジェクトの ACL に要素として
<Name>
が含まれている場合。ACL を設定するとき、ACL エントリに
<Name>
要素を含めることができます。<Name>
要素にはいずれの値も指定できます。指定した値は、ACL が削除または置換されるまで Cloud Storage に保存されます。この方法は、Google Cloud Storage ID など、簡単に識別できない識別子を使用している場合に便利です。UserByEmail
またはGroupByEmail
のスコープに Google 公開プロフィールが含まれている場合。これらのスコープのどちらかを使用していて、
<Name>
要素を指定していない場合、Cloud Storage は、メールアドレスに関連付けられているユーザーまたはメールの Google グループに、公開名を含む Google 公開プロフィールが設定されているかどうかをチェックします。Google 公開プロフィールが設定されている場合は、Cloud Storage によりその公開名が<Name>
要素に自動的に追加されます。
定義済み ACL を適用する
ACL 全体を設定する際は、前述のようにエントリを一度に 1 個ずつ指定することもできますが、定義済み ACL を使用することで、特定のシナリオ向けにカスタマイズされた複数のエントリを自動的に適用できます。定義済み ACL をバケットまたはオブジェクトに適用するには、gsutil、JSON API、XML API のいずれかを使用します。
新しいオブジェクトの場合
定義済み ACL を、オブジェクトのアップロード時にオブジェクトに適用するには:
コンソール
Google Cloud コンソールを使用して、定義済み 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://storage.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&predefinedAcl=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 に更新したい場合に便利です。
コンソール
Google Cloud コンソールを使用して、定義済み 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://storage.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 を表示、変更するには:
コンソール
Google Cloud コンソールを使用して、デフォルト オブジェクト ACL を設定することはできません。代わりに gsutil を使用してください。
gsutil
gsutil defacl
を使用してデフォルト オブジェクト ACL を取得します。gsutil defacl get gs://BUCKET_NAME
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 をバケットに追加する例です。
以下は、デフォルト オブジェクト ACL をバケットから削除する例です。
C#
詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。
以下は、バケットのデフォルト オブジェクト ACL を出力する例です。
以下は、デフォルト オブジェクト ACL をバケットに追加する例です。
以下は、デフォルト オブジェクト ACL をバケットから削除する例です。
Go
詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
以下は、デフォルト オブジェクト ACL をバケットに追加する例です。
以下は、デフォルト オブジェクト ACL をバケットから削除する例です。
Java
詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
以下は、デフォルト オブジェクト ACL をバケットに追加する例です。
以下は、デフォルト オブジェクト ACL をバケットから削除する例です。
Node.js
詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。
以下は、デフォルト オブジェクト ACL をバケットに追加する例です。
以下は、デフォルト オブジェクト ACL をバケットから削除する例です。
PHP
詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。
以下は、デフォルト オブジェクト ACL をバケットに追加する例です。
以下は、デフォルト オブジェクト ACL をバケットから削除する例です。
Python
詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
以下は、デフォルト オブジェクト ACL をバケットに追加する例です。
以下は、デフォルト オブジェクト ACL をバケットから削除する例です。
Ruby
詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。
以下は、デフォルト オブジェクト ACL をバケットに追加する例です。
以下は、デフォルト オブジェクト ACL をバケットから削除する例です。
JSON API
GET リクエストを使ってデフォルト オブジェクト ACL を取得します。例:
curl -X GET -H "Authorization: Bearer OAUTH2_TOKEN"
https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?projection=fullpatch リクエストを使用して、デフォルト オブジェクト 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://storage.googleapis.com/storage/v1/b/example-travel-maps以下に
defacls.json
の例を示します。{ "defaultObjectAcl": [ { "email": "jane@gmail.com", "entity": "user-jane@gmail.com", "role": "READER" } ] }
XML API
GET
リクエストを使用して、デフォルト オブジェクト ACL を取得します。リクエストのスコープはバケットと?defaultObjectAcl
パラメータです。例:curl -X GET -H "Authorization: Bearer OAUTH2_TOKEN"
https://storage.googleapis.com/BUCKET_NAME?defaultObjectAclバケットをスコープに設定して
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 に設定するには:
コンソール
Google Cloud コンソールを使用して、デフォルト オブジェクト ACL を設定することはできません。代わりに gsutil を使用してください。
gsutil
事前定義された ACL の名前を指定して、gsutil defacl
コマンドを使用します。
たとえば、バケット example-travel-maps
のproject-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://storage.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 が変更されていないかを確認します。
コンソール
Google Cloud コンソールを使用して、デフォルト オブジェクト 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 を取得するには:
コンソール
Google Cloud コンソールで、Cloud Storage ブラウザに移動します。
Cloud Storage ブラウザに移動ACL を表示する対象のオブジェクトに移動します。
オブジェクトのプルダウン メニューから [アクセス権を編集] を選択します。
権限ダイアログにオブジェクトの権限が表示されます。
失敗した Cloud Storage オペレーションの詳細なエラー情報を Google Cloud コンソールで確認する方法については、トラブルシューティングをご覧ください。
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 は entity
や role
などの JSON API プロパティ名を使用します。
出力の解釈方法や gsutil help acls
の実行方法については、JSON API の構文を参照してください。
クライアント ライブラリ
C++
詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。
以下は、バケットの ACL を取得する例です。
以下は、オブジェクトの ACL を取得する例です。
C#
詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。
以下は、バケットの ACL を取得する例です。
以下は、オブジェクトの ACL を取得する例です。
Go
詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
以下は、バケットの ACL を取得する例です。
以下は、オブジェクトの ACL を取得する例です。
Java
詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
以下は、バケットの ACL を取得する例です。
以下は、オブジェクトの ACL を取得する例です。
Node.js
詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。
以下は、バケットの ACL を取得する例です。
以下は、オブジェクトの ACL を取得する例です。
PHP
詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。
以下は、バケットの ACL を取得する例です。
以下は、オブジェクトの ACL を取得する例です。
Python
詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
以下は、バケットの ACL を取得する例です。
以下は、オブジェクトの ACL を取得する例です。
Ruby
詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。
以下は、バケットの ACL を取得する例です。
以下は、オブジェクトの ACL を取得する例です。
JSON API
バケットまたはオブジェクトに対する
OWNER
権限を持っていることを確認します。GET
リクエストを使用してバケットまたはオブジェクトの ACL を取得します。オブジェクトの ACL が JSON 形式で返され、レスポンスの本文に添付されます。
たとえば、バケット example-travel-maps
内のオブジェクト paris.jpg
の ACL を返すには、次のように使用します。
curl -X GET -H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg"
https://storage.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
バケットまたはオブジェクトに対する
FULL_CONTROL
権限を持っていることを確認します。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 を変更するには:
コンソール
Google Cloud コンソールで、Cloud Storage ブラウザに移動します。
Cloud Storage ブラウザに移動ACL を変更する対象のオブジェクトに移動します。
オブジェクトのプルダウン メニューから [アクセス権を編集] を選択します。
権限ダイアログにオブジェクトの権限が表示されます。
次の例は、jane@gmail.com
ユーザーにオブジェクト paris.jpg
に対する OWNER
権限を付与し、gs-announce
グループのメンバーに READER
権限を付与する方法を示しています。
失敗した Cloud Storage オペレーションの詳細なエラー情報を Google Cloud コンソールで確認する方法については、トラブルシューティングをご覧ください。
gsutil
ファイルに ACL を定義します。
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 をバケットから削除する例です。
以下は、ACL をオブジェクトから削除する例です。
C#
詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。
以下は、ACL をバケットから削除する例です。
以下は、ACL をオブジェクトから削除する例です。
Go
詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
以下は、ACL をバケットから削除する例です。
以下は、ACL をオブジェクトから削除する例です。
Java
詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
以下は、ACL をバケットから削除する例です。
以下は、ACL をオブジェクトから削除する例です。
Node.js
詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。
以下は、ACL をバケットから削除する例です。
以下は、ACL をオブジェクトから削除する例です。
PHP
詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。
以下は、ACL をバケットから削除する例です。
以下は、ACL をオブジェクトから削除する例です。
Python
詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
以下は、ACL をバケットから削除する例です。
以下は、ACL をオブジェクトから削除する例です。
Ruby
詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。
以下は、ACL をバケットから削除する例です。
以下は、ACL をオブジェクトから削除する例です。
JSON API
ACL を JSON ファイル内に定義します。
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://storage.googleapis.com/storage/v1/b/example-travel-maps/o/paris.jpg
ACL がプロジェクト 867489160491
のオーナーとユーザー jane@gmail.com
に OWNER
権限を付与し、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
ACL を XML ドキュメント内に定義します。
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>
次のステップ
- ACL について学習する。
- 統一バケットレベルのアクセスを使用してアクセス制御を簡素化する方法を学習する。
- ACL 使用時のベスト プラクティスについて学習する。