このページでは、アクセス制御リスト(ACL)を使用してバケットとオブジェクトへのアクセスを制御する方法について説明します。ACL は、バケットとオブジェクトへのアクセス権を持つユーザーと各ユーザーのアクセスレベルを定義するために使用できるメカニズムです。
リソースへのアクセス制御に ACL を使用する必要があるかどうかについては、ACL の概要をご覧ください。
必要なロール
ACL の作成と管理に必要な権限を取得するには、ACL の作成と管理を行うオブジェクトが含まれているバケットに対するストレージ管理者(roles/storage.admin
)IAM ロールを付与するよう管理者に依頼してください。
この事前定義ロールには、ACL の作成と管理に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
storage.buckets.get
storage.buckets.list
- この権限は、Google Cloud コンソールを使用してこのページのタスクを実行する場合にのみ必要です。
storage.buckets.setIamPolicy
storage.buckets.update
storage.objects.get
storage.objects.getIamPolicy
storage.objects.setIamPolicy
storage.objects.update
カスタムロールを使用して、これらの権限を取得することもできます。
バケットに対するロールの付与については、バケットで IAM を使用するをご覧ください。
ACL の設定または変更
コンソール
Google Cloud コンソールで、Cloud Storage ブラウザに移動します。
Cloud Storage ブラウザに移動バケットのリストで、ACL を変更するオブジェクトが存在するバケットの名前をクリックします。
ACL を設定または変更するオブジェクトの名前をクリックします。
[アクセス権を編集] をクリックします。
権限ダイアログが開き、オブジェクトの現在の ACL が表示されます。
[+ エントリを追加] をクリックします。
アクセス権を付与するエンティティの種類を選択します。
[エンティティ] は、権限を付与する対象の種類(ユーザーやグループなど)を指定します。[エンティティ] に指定できる値の一覧については、アクセス制御のスコープをご覧ください。
[名前] に値を入力します。
[名前] は、特定のユーザー、グループ、その他のエンティティ タイプを識別します。[名前] に指定できる値の一覧については、アクセス制御のスコープをご覧ください。
[エンティティ] と [名前] の組み合わせにより、権限の適用対象が定義されます。
[アクセス権] の値を選択します。
[アクセス権] は、オブジェクトに設定する権限を定義します。[アクセス権] に指定できる値の一覧については、アクセス制御の権限をご覧ください。
[保存] をクリックします。
失敗した Cloud Storage オペレーションの詳細なエラー情報を Google Cloud コンソールで確認する方法については、トラブルシューティングをご覧ください。
コマンドライン
オブジェクトに対する個別の権限付与を追加、変更、削除するには、目的のフラグを指定して objects update
コマンドを使用します。
gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME FLAG
ここで
BUCKET_NAME
は、変更が適用されるオブジェクトを含むバケットの名前です。例:example-travel-maps
OBJECT_NAME
は、変更が適用されるオブジェクトの名前です。例:paris.jpg
FLAG
は、次のいずれかです。--add-acl-grant
と、追加または変更に必要な権限。例:--add-acl-grant=entity=user-jane@gmail.com,role=READER
--remove-acl-grant
と、アクセス権を削除するエンティティ。例:--remove-acl-grant=user-jane@gmail.com
オブジェクトのすべての ACL を置き換えるには:
JSON 形式または YAML 形式のファイルで ACL を定義します。
objects update
コマンドを使用し、--acl-file
フラグを指定します。gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME --acl-file=FILE_LOCATION
ここで
BUCKET_NAME
は、ACL が適用されるオブジェクトを含むバケットの名前です。例:example-travel-maps
OBJECT_NAME
は、ACL が適用されるオブジェクトの名前です。例:paris.jpg
FILE_LOCATION
は、定義した ACL を含むファイルのローカルパスです。例:Desktop/acls.json
サンプル ACL ファイルの内容を以下に示します。これらの 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" } ]
クライアント ライブラリ
C++
詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、オブジェクトに ACL を追加する例です。
以下は、ACL をオブジェクトから削除する例です。
C#
詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、オブジェクトに ACL を追加する例です。
以下は、ACL をオブジェクトから削除する例です。
Go
詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、オブジェクトに ACL を追加する例です。
以下は、ACL をオブジェクトから削除する例です。
Java
詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、オブジェクトに ACL を追加する例です。
以下は、ACL をオブジェクトから削除する例です。
Node.js
詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、オブジェクトに ACL を追加する例です。
以下は、ACL をオブジェクトから削除する例です。
PHP
詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、オブジェクトに ACL を追加する例です。
以下は、ACL をオブジェクトから削除する例です。
Python
詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、オブジェクトに ACL を追加する例です。
以下は、ACL をオブジェクトから削除する例です。
Ruby
詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、オブジェクトに ACL を追加する例です。
以下は、ACL をオブジェクトから削除する例です。
REST API
JSON API
オブジェクトを作成するとき、リクエストの本文に acl[]
プロパティを指定するか、insertリクエストに predefinedAcl
クエリ パラメータを指定できます。既存のオブジェクトに対しては、patch リクエストまたはupdate リクエストに acl[]
プロパティまたは predefinedAcl
クエリ パラメータを指定します。
オブジェクトの ACL プロパティの定義については、ObjectAccessControls
リソースをご覧ください。
ACL を JSON ファイル内に定義します。
たとえば、ACL がプロジェクト
867489160491
のオーナーとユーザーjane@gmail.com
にOWNER
権限を付与し、gs-announce
グループのメンバーにREADER
を付与するとします。この場合、次のコンテンツを含むacls.json
という名前のファイルを作成できます。{ "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" } ] }
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 $(gcloud auth print-access-token)" \ https://storage.googleapis.com/storage/v1/b/example-travel-maps/o/paris.jpg
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 を変更します。
たとえば、次の cURL コマンドは、ドキュメント acls.xml
に含まれる XML ペイロードをバケット example-travel-maps
内の paris.jpg
オブジェクトに適用します。
curl -X PUT --data-binary @acls.xml \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://storage.googleapis.com/example-travel-maps/paris.jpg?acl
XML ドキュメントに次の 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="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 をバケットまたはオブジェクトに適用するには、Google Cloud CLI、JSON API、XML API のいずれかを使用します。
新しいオブジェクトの場合
定義済み ACL を、オブジェクトのアップロード時にオブジェクトに適用するには:
コンソール
Google Cloud コンソールを使用して、定義済み ACL を適用することはできません。代わりに gcloud storage
を使用してください。
コマンドライン
gcloud storage cp
コマンドを使用し、--predefined-acl
フラグを指定します。
gcloud storage cp OBJECT gs://BUCKET_NAME --predefined-acl=PREDEFINED_ACL
たとえば、オブジェクト paris.jpg
をバケット example-travel-maps
にアップロードするときに定義済み ACL bucketOwnerRead
を適用するには、次のようにします。
gcloud storage cp paris.jpg gs://example-travel-maps --predefined-acl=bucketOwnerRead
REST API
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 $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/upload/storage/v1/b/example-travel-maps/o?name=paris.jpg&predefinedAcl=bucketOwnerRead"
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 $(gcloud auth print-access-token)" \ https://storage.googleapis.com/example-travel-maps/paris.jpg
既存のバケットまたはオブジェクトの場合
既存のバケットやオブジェクトに定義済み ACL を適用することもできます。これは、定義済み ACL を別のものに変更したい場合や、カスタム ACL を定義済み ACL に更新したい場合に便利です。
コンソール
Google Cloud コンソールを使用して、定義済み ACL を適用することはできません。代わりに gcloud storage
を使用してください。
コマンドライン
objects update
コマンドを使用し、--predefined-acl
フラグを指定します。
gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME --predefined-acl=PREDEFINED_ACL_NAME
たとえば、定義済み ACL private
をバケット example-travel-maps
のオブジェクト paris.jpg
に適用するには、次のようにします。
gcloud storage objects update gs://example-travel-maps/paris.jpg --predefined-acl=private
REST API
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 $(gcloud auth print-access-token)" \ https://storage.googleapis.com/storage/v1/b/example-travel-maps/o/paris.jpg?predefinedAcl=private
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 $(gcloud auth print-access-token)" \ -H "x-goog-acl: private" \ https://storage.googleapis.com/example-travel-maps/paris.jpg?acl
デフォルト オブジェクト ACL を設定する
新しいオブジェクトを作成するたびに ACL を設定しなくても済むように、バケットにデフォルト オブジェクト ACL を設定できます。その後は、そのバケットに追加される、ACL が明示的に指定されていないすべての新しいオブジェクトについて、デフォルトが適用されます。たとえば、あるユーザー グループのみが特定のバケット内のほとんどのオブジェクトへのアクセス権を所有するように指定するとします。デフォルト オブジェクト ACL を変更して、オブジェクトをバケットに追加できます。これらの追加されたオブジェクトには、指定したデフォルト オブジェクト ACL が自動的に適用されます。ただし、特定のオブジェクトに異なる ACL を指定することもできます。その場合はデフォルト ACL が適用されません。
バケットのデフォルト オブジェクト ACL を表示、変更するには:
コンソール
Google Cloud コンソールを使用して、デフォルト オブジェクト ACL を設定することはできません。代わりに gcloud storage
を使用してください。
コマンドライン
buckets describe
コマンドを--format
フラグとともに使用して、バケットのデフォルト オブジェクト ACL を取得します。gcloud storage buckets describe gs://BUCKET_NAME --format="default(default_acl)"
ここで、
BUCKET_NAME
は、デフォルトのオブジェクト ACL を表示するバケットの名前です。例:my-bucket
目的のフラグを指定して
buckets update
コマンドを実行し、バケットのデフォルト オブジェクト ACL を変更します。gcloud storage buckets update gs://BUCKET_NAME FLAG
ここで
BUCKET_NAME
は、デフォルト オブジェクト ACL を変更するバケットの名前です。例:my-bucket
FLAG
は、次のいずれかです。--add-default-object-acl-grant
と、バケットの全体的なデフォルト オブジェクト ACL に追加する権限。--default-object-acl-file
と、バケットの新しいデフォルト オブジェクト ACL を定義するローカル ファイルのパス。--predefined-default-object-acl
と、バケットの既存のデフォルト オブジェクト ACL を置き換える事前定義オブジェクト ACL の名前。--remove-default-object-acl-grant
とバケットのデフォルト オブジェクト ACL 全体から削除するエンティティ。
クライアント ライブラリ
C++
詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、デフォルト オブジェクト ACL をバケットに追加する例です。
以下は、デフォルト オブジェクト ACL をバケットから削除する例です。
C#
詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、バケットのデフォルト オブジェクト ACL を出力する例です。
以下は、デフォルト オブジェクト ACL をバケットに追加する例です。
以下は、デフォルト オブジェクト ACL をバケットから削除する例です。
Go
詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、デフォルト オブジェクト ACL をバケットに追加する例です。
以下は、デフォルト オブジェクト ACL をバケットから削除する例です。
Java
詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、デフォルト オブジェクト ACL をバケットに追加する例です。
以下は、デフォルト オブジェクト ACL をバケットから削除する例です。
Node.js
詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、デフォルト オブジェクト ACL をバケットに追加する例です。
以下は、デフォルト オブジェクト ACL をバケットから削除する例です。
PHP
詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、デフォルト オブジェクト ACL をバケットに追加する例です。
以下は、デフォルト オブジェクト ACL をバケットから削除する例です。
Python
詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、デフォルト オブジェクト ACL をバケットに追加する例です。
以下は、デフォルト オブジェクト ACL をバケットから削除する例です。
Ruby
詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、デフォルト オブジェクト ACL をバケットに追加する例です。
以下は、デフォルト オブジェクト ACL をバケットから削除する例です。
REST API
JSON API
GET リクエストを使ってデフォルト オブジェクト ACL を取得します。例:
curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?projection=full
patch リクエストを使用して、デフォルト オブジェクト ACL を置き換えます。たとえば、次のリクエストでは、バケット
example-travel-maps
のデフォルト オブジェクト ACL が、defacls.json
で指定した ACL に置き換えられます。curl -X PATCH --data @defacls.json -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-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 $(gcloud auth print-access-token)" \ https://storage.googleapis.com/BUCKET_NAME?defaultObjectAcl
バケットをスコープに設定して
PUT
リクエストを使用します。?defaultObjectAcl
パラメータを使用して、acls.xml
に指定されている ACL に、デフォルト オブジェクト ACL を置き換えます。次に例を示します。curl -X PUT --data-binary @acls.xml -H "Authorization: Bearer $(gcloud auth print-access-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 を設定することはできません。代わりに gcloud storage
を使用してください。
コマンドライン
buckets update
コマンドを使用し、--predefined-default-object-acl
フラグを指定します。
gcloud storage buckets update gs://BUCKET_NAME --predefined-default-object-acl=PREDEFINED_ACL
ここで
BUCKET_NAME
は、デフォルト オブジェクト ACL を変更するバケットの名前です。例:my-bucket
PREDEFINED_ACL
は、有効な定義済み ACL の名前です。例:projectPrivate
REST API
JSON API
PUT リクエストと predefinedAcl
パラメータを使用します。
次に例を示します。
curl -X PUT -H "Content-Length: 0" -H "Authorization: Bearer $(gcloud auth print-access-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 $(gcloud auth print-access-token)" \ http://storage.googleapis.com/BUCKET_NAME?defaultObjectAcl
新しく作成したバケットのデフォルト オブジェクト ACL
次の例は、リクエストの一部として独自のデフォルト オブジェクト ACL を指定していない場合に、新しく作成したバケットに自動的に適用されるデフォルト オブジェクト ACL を示しています。バケットのデフォルト オブジェクト ACL が変更されたかどうかを確認するには、バケットの現在のデフォルト オブジェクト ACL を次の例と比較してください。
コンソール
Google Cloud コンソールを使用して、デフォルト オブジェクト ACL を操作することはできません。代わりに gcloud storage
を使用してください。
コマンドライン
次の例で、プロジェクト ID は "123412341234" です。実際のプロジェクト ID は違ったものになります。
defaultObjectAcl: – entity: project-owners-123412341234 etag: CAE= kind: storage#objectAccessControl projectTeam: projectNumber: '123412341234' team: owners role: OWNER – entity: project-editors-123412341234 etag: CAE= kind: storage#objectAccessControl projectTeam: projectNumber: '123412341234' team: editors role: OWNER – entity: project-viewers-123412341234 etag: CAE= kind: storage#objectAccessControl projectTeam: projectNumber: '123412341234' team: viewers role: READER
REST API
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 コンソールで確認する方法については、トラブルシューティングをご覧ください。
コマンドライン
オブジェクトの ACL を取得するには、
--format
フラグを指定してobjects describe
コマンドを使用します。gcloud storage objects describe gs://BUCKET_NAME/OBJECT_NAME --format="default(acl)"
ここで
BUCKET_NAME
は、ACL を表示するオブジェクトが含まれるバケットの名前です。例:my-bucket
OBJECT_NAME
は、ACL を表示するオブジェクトの名前です。例:paris.jpg
クライアント ライブラリ
C++
詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、オブジェクトの ACL を取得する例です。
C#
詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、オブジェクトの ACL を取得する例です。
Go
詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、オブジェクトの ACL を取得する例です。
Java
詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、オブジェクトの ACL を取得する例です。
Node.js
詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、オブジェクトの ACL を取得する例です。
PHP
詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、オブジェクトの ACL を取得する例です。
Python
詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、オブジェクトの ACL を取得する例です。
Ruby
詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
以下は、オブジェクトの ACL を取得する例です。
REST API
JSON API
オブジェクトに対する
OWNER
権限があることを確認します。GET
リクエストを使用してオブジェクトの ACL を取得します。オブジェクトの ACL が JSON 形式で返され、レスポンスの本文に添付されます。
たとえば、バケット example-travel-maps
内のオブジェクト paris.jpg
の ACL を返すには、次のように使用します。
curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \ 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 $(gcloud auth print-access-token)" \ 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 使用時のベスト プラクティスについて学習する。