這個頁面說明如何使用存取控制清單 (ACL) 控制值區和物件的存取權。您可以使用 ACL 機制來定義有權存取值區和物件的對象和存取層級。
如要進一步瞭解是否應使用 ACL 控制資源存取權,請參閱 ACL 總覽。
必要的角色
如要取得建立及管理 ACL 的權限,請要求管理員在 bucket 中授予您「Storage 管理員」(roles/storage.admin) IAM 角色,該 bucket 包含您要建立及管理 ACL 的物件。
這個預先定義的角色具備建立及管理 ACL 所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
storage.buckets.getstorage.buckets.list- 只有在使用 Cloud de Confiance 控制台執行本頁工作時,才需要這項權限。
storage.buckets.setIamPolicystorage.buckets.updatestorage.objects.getstorage.objects.getIamPolicystorage.objects.setIamPolicystorage.objects.update
您也可以透過自訂角色取得這些權限。
如要瞭解如何授予 bucket 角色,請參閱「在 bucket 上設定及管理 IAM 政策」。
設定或修改 ACL
控制台
前往 Cloud de Confiance 控制台的 Cloud Storage 瀏覽器。
前往 Cloud Storage 瀏覽器在 bucket 清單中,點選含有要修改 ACL 物件的 bucket 名稱。
按一下要設定或修改 ACL 的物件名稱。
按一下「編輯權限」。
系統會開啟權限對話方塊,顯示物件目前的 ACL。
按一下「+ 新增項目」。
選擇要授予權限給哪類型的「Entity」(實體)。
實體指定取得權限的項目類型 (例如使用者或群組)。如需 Entity 支援的值清單,請參閱「存取控管範圍」。
在「Name」(名稱) 欄中輸入值。
「Name」(名稱) 欄可指定使用者、群組或其他實體類型。如需 Name 支援的值清單,請參閱「存取控管範圍」。
「Entity」(實體) 和「Name」(名稱) 兩者並用即可定義權限的適用對象。
在欄中選取「Access」(存取權)。
「Access」(存取權) 欄可定義您要指定給物件的權限。如需 Access 支援的值清單,請參閱「存取控管權限」。
按一下 [儲存]。
如要瞭解如何在 Cloud de Confiance 控制台中取得 Cloud Storage 作業失敗的詳細錯誤資訊,請參閱「疑難排解」。
指令列
如要新增、修改或移除物件的個別授權,請使用 objects update 指令並搭配相關旗標:
gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME FLAG
其中:
BUCKET_NAME是指包含修改物件的 bucket 名稱。例如:example-travel-maps。OBJECT_NAME是套用修改的物件名稱。例如:paris.jpg。FLAG是下列其中一項:--add-acl-grant,以及要新增或修改的授權。例如:--add-acl-grant=entity=user-example-service-account@example-project.s3ns.iam.gserviceaccount.com,role=READER。--remove-acl-grant,以及要移除存取權的實體。例如:--remove-acl-grant=user-example-service-account@example-project.s3ns.iam.gserviceaccount.com。
如要取代物件的所有 ACL,請按照下列步驟操作:
以 JSON 或 YAML 格式的檔案定義 ACL。
舉例來說,下列 ACL 會將物件
paris.jpg的OWNER權限授予專案867489160491的擁有者和使用者example-service-account@example-project.s3ns.iam.gserviceaccount.com,並將paris.jpg的READER權限授予gs-announce群組的成員:[ { "entity": "project-owners-867489160491", "role": "OWNER", "projectTeam": { "projectNumber": "867489160491", "team": "owners" }, }, { "entity": "user-example-service-account@example-project.s3ns.iam.gserviceaccount.com", "email": "example-service-account@example-project.s3ns.iam.gserviceaccount.com", "role": "OWNER" }, { "entity": "group-gs-announce@googlegroups.com", "email": "gs-announce@googlegroups.com", "role": "READER" } ]使用加上
--acl-file旗標的objects update指令:gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME --acl-file=FILE_LOCATION
其中:
BUCKET_NAME是 bucket 的名稱,其中包含 ACL 適用的物件。例如:example-travel-maps。OBJECT_NAME是 ACL 適用的物件名稱。例如:paris.jpg。FILE_LOCATION是包含您定義 ACL 的檔案本機路徑。例如:Desktop/acls.json。
用戶端程式庫
C++
詳情請參閱「Cloud Storage C++ API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下例示範如何新增 ACL 到物件:
下例示範如何從物件移除 ACL:
C#
詳情請參閱「Cloud Storage C# API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下例示範如何新增 ACL 到物件:
下例示範如何從物件移除 ACL:
Go
詳情請參閱 Cloud Storage Go API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下例示範如何新增 ACL 到物件:
下例示範如何從物件移除 ACL:
Java
詳情請參閱「Cloud Storage Java API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下例示範如何新增 ACL 到物件:
下例示範如何從物件移除 ACL:
Node.js
詳情請參閱 Cloud Storage Node.js API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下例示範如何新增 ACL 到物件:
下例示範如何從物件移除 ACL:
PHP
詳情請參閱 Cloud Storage PHP API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下例示範如何新增 ACL 到物件:
下例示範如何從物件移除 ACL:
Python
詳情請參閱「Cloud Storage Python API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下例示範如何新增 ACL 到物件:
下例示範如何從物件移除 ACL:
Ruby
詳情請參閱「Cloud Storage Ruby API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下例示範如何新增 ACL 到物件:
下例示範如何從物件移除 ACL:
Rust
下例示範如何新增 ACL 到物件:
下例示範如何從物件移除 ACL:
REST API
JSON API
建立物件時,您可以在要求主體或是 insert 要求的 predefinedAcl 查詢參數中指定 acl[] 屬性;針對現有物件,請在 patch 或 update 要求的 predefinedAcl 查詢參數中指定 acl[] 屬性。
如需物件 ACL 屬性的定義,請參閱 ObjectAccessControls 資源。
在 JSON 檔案中定義 ACL。
舉例來說,如果 ACL 授予專案
867489160491的擁有者和使用者example-service-account@example-project.s3ns.iam.gserviceaccount.comOWNER權限,並授予gs-announce群組的成員READER權限,則您可以建立名為acls.json的檔案,並在其中加入下列內容:{ "acl": [ { "entity": "project-owners-867489160491", "role": "OWNER", "projectTeam": { "projectNumber": "867489160491", "team": "owners" } }, { "entity": "user-example-service-account@example-project.s3ns.iam.gserviceaccount.com", "role": "OWNER", "email": "example-service-account@example-project.s3ns.iam.gserviceaccount.com" }, { "entity": "group-gs-announce@googlegroups.com", "role": "READER", "email": "gs-announce@googlegroups.com" } ] }傳送含有 JSON 檔案的 patch 要求,並指定要設定 ACL 的物件。
舉例來說,下列 curl 指令會將文件 acls.json 中的 JSON 酬載套用至 bucket 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.s3nsapis.fr/storage/v1/b/example-travel-maps/o/paris.jpg
XML API
在 XML API 中,您要使用 XML 格式的 ACL。您必須在要求主體附加 XML 文件,才能變更值區和物件 ACL。取得值區和物件 ACL 時,系統會傳回 XML 文件。XML 文件中將列出個別值區或物件 ACL 項目。
使用
PUTBucket 要求建立值區後,請透過另一個 PUT 值區要求搭配?acl參數變更值區 ACL。使用
PUTObject 要求上傳物件後,請透過另一個 PUT 要求搭配?acl參數或x-googl-acl要求標頭變更 ACL。
舉例來說,下列 curl 指令會將文件 acls.xml 中的 XML 酬載,套用至 bucket example-travel-maps 中名為 paris.jpg 的物件:
curl -X PUT --data-binary @acls.xml \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://storage.s3nsapis.fr/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 |
bucket 擁有者的 Cloud Storage ID。 |
DisplayName |
未實作。該值一律為空字串。 |
Entries |
零或更多 Entry 元素的容器。 |
Entry |
Scope 和 Permission 元素的容器。Entry 只能包含一個 Scope 和一個 Permission 元素。 |
Scope |
ID、EmailAddress 或 Domain 元素的容器,用來定義 ACL 範圍。這個元素必須包含 type 屬性,且屬性值必須是下列其中一項:UserByID、UserByEmail、GroupByID、GroupByDomain、AllUsers 或 AllAuthenticatedUsers。 |
ID |
以 ID 指定權限項目時,權限授予對象的 ID。 |
EmailAddress |
以電子郵件指定權限項目時,權限授予對象的電子郵件 ID。 |
Domain |
當權限項目是由網域指定時,受益人的網域 ID。 |
Name |
可指定的選用元素。 |
Permission |
授予的權限,包括 READ、WRITE 或 FULL_CONTROL。 |
透過 XML API 使用 ACL 時:
- 只能使用上述 XML 格式。
不得設定重複範圍。
ACL XML 中可以有很多項目,但您不能納入範圍重複的項目。例如,您不能有兩個具有相同範圍元素
jane@example.com的項目。
以下範例顯示不同的 bucket 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="UserByEmail">
<EmailAddress>example-service-account@example-project.s3ns.iam.gserviceaccount.com</EmailAddress>
<Name>Jefferson</Name>
</Scope>
<Permission>FULL_CONTROL</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>example-service-account@example-project.s3ns.iam.gserviceaccount.com</EmailAddress>
<Name>Jefferson</Name>
</Scope>
<Permission>FULL_CONTROL</Permission>
</Entry>
如果值區或物件的 ACL 包含 <Name> 做為元素,系統就會填入這些選用的 <Name> 元素:設定 ACL 時,您可以選擇在 ACL 項目中加入 <Name> 元素。您可以在 <Name> 元素中提供任何值,Cloud Storage 會記住這些值,直到 ACL 遭到移除或取代為止。如果您使用的 ID 不易辨識,這個方法就很實用。
套用預先定義的 ACL
您可以使用預先定義的 ACL,自動套用多個針對特定情境自訂的項目,不必像先前一樣一次指定整個 ACL。您可以使用 Google Cloud CLI、JSON API 或 XML API,將預先定義的 ACL 套用至 bucket 或物件。
針對新物件
在物件上傳期間將預先定義的 ACL 套用至物件:
控制台
您無法使用 Cloud de Confiance 控制台套用預先定義的 ACL,請改用 gcloud storage。
指令列
使用 gcloud storage cp 指令,並加上 --predefined-acl 旗標:
gcloud storage cp OBJECT gs://BUCKET_NAME --predefined-acl=PREDEFINED_ACL
舉例來說,如要在將物件 paris.jpg 上傳至 bucket example-travel-maps 時套用預先定義的 ACL bucketOwnerRead,請執行下列指令:
gcloud storage cp paris.jpg gs://example-travel-maps --predefined-acl=bucketOwnerRead
REST API
JSON API
在 insert 要求中使用 predefinedAcl 查詢字串參數,套用預先定義的 ACL。
舉例來說,如要在將物件 paris.jpg 上傳至 bucket 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.s3nsapis.fr/upload/storage/v1/b/example-travel-maps/o?name=paris.jpg&predefinedAcl=bucketOwnerRead"
XML API
在 Put Object 要求中使用 x-goog-acl 標頭,套用預先定義的 ACL。
舉例來說,如要在將物件 paris.jpg 上傳至 bucket 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.s3nsapis.fr/example-travel-maps/paris.jpg
針對現有值區或物件
您也可以對現有值區或物件套用預先定義的 ACL。當您想要從某個預先定義的 ACL 改用另一個,或想要上傳自訂 ACL 到預先定義的 ACL,就可以採取這種做法。
控制台
您無法使用 Cloud de Confiance 控制台套用預先定義的 ACL,請改用 gcloud storage。
指令列
使用加上 --predefined-acl 旗標的 objects update 指令:
gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME --predefined-acl=PREDEFINED_ACL_NAME
舉例來說,如要將預先定義的 ACL private 套用至 bucket example-travel-maps 中的物件 paris.jpg,請執行下列指令:
gcloud storage objects update gs://example-travel-maps/paris.jpg --predefined-acl=private
REST API
JSON API
使用 predefinedAcl 查詢字串參數,然後在 patch 要求中指定空的 acl 屬性,套用預先定義的 ACL。
例如,如要將預先定義的 ACL private 套用至 bucket 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.s3nsapis.fr/storage/v1/b/example-travel-maps/o/paris.jpg?predefinedAcl=private
XML API
在 Put Object 要求中,使用 x-goog-acl 標頭和 acl 查詢字串參數,但不要在要求中加入 XML 文件。
舉例來說,如要將預先定義的 ACL private 套用至 bucket 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.s3nsapis.fr/example-travel-maps/paris.jpg?acl
設定預設物件 ACL
如果不想每次新建物件時都要設定 ACL,您可以為值區設定預設物件 ACL。完成之後,新增到該值區的所有新物件如果沒有明確套用的 ACL,系統將套用預設的 ACL。舉例來說,您可能會想指定只讓特定群組的使用者存取特定值區中的大部分物件。您可以變更預設物件 ACL,然後新增物件到該值區。系統會自動將您指定的預設物件 ACL 套用至這些新增物件,但您可以為特定物件提供不同的 ACL,在這種情況下,系統不會將預設 ACL 套用至這些物件。
查看及變更值區的預設物件 ACL:
控制台
您無法使用 Cloud de Confiance 控制台設定預設物件 ACL,請改用 gcloud storage。
指令列
使用
buckets describe指令搭配--format旗標,擷取 bucket 的預設物件 ACL:gcloud storage buckets describe gs://BUCKET_NAME --format="default(default_acl)"
其中
BUCKET_NAME是要查看預設物件 ACL 的 bucket 名稱。例如:my-bucket。使用
buckets update指令搭配所需旗標,修改 bucket 的預設物件 ACL:gcloud storage buckets update gs://BUCKET_NAME FLAG
其中:
BUCKET_NAME是要修改預設物件 ACL 的 bucket 名稱。例如:my-bucket。FLAG是下列其中一項:--add-default-object-acl-grant,以及要新增至 bucket 整體預設物件 ACL 的授權。--default-object-acl-file,以及定義值區新預設物件 ACL 的本機檔案路徑。--predefined-default-object-acl和預先定義的物件 ACL 名稱,用於取代 bucket 現有的預設物件 ACL。--remove-default-object-acl-grant,以及要從該 bucket 的整體預設物件 ACL 中移除的實體。
用戶端程式庫
C++
詳情請參閱「Cloud Storage C++ API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下例示範如何新增預設物件 ACL 到值區:
下例示範如何從值區刪除預設物件 ACL:
C#
詳情請參閱「Cloud Storage C# API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下列範例會列印 bucket 的預設物件 ACL:
下例示範如何新增預設物件 ACL 到值區:
下例示範如何從值區刪除預設物件 ACL:
Go
詳情請參閱 Cloud Storage Go API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下例示範如何新增預設物件 ACL 到值區:
下例示範如何從值區刪除預設物件 ACL:
Java
詳情請參閱 Cloud Storage Java API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下例示範如何新增預設物件 ACL 到值區:
下例示範如何從值區刪除預設物件 ACL:
Node.js
詳情請參閱 Cloud Storage Node.js API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下例示範如何新增預設物件 ACL 到值區:
下例示範如何從值區刪除預設物件 ACL:
PHP
詳情請參閱「Cloud Storage PHP API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下例示範如何新增預設物件 ACL 到值區:
下例示範如何從值區刪除預設物件 ACL:
Python
詳情請參閱 Cloud Storage Python API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下例示範如何新增預設物件 ACL 到值區:
下例示範如何從值區刪除預設物件 ACL:
Ruby
詳情請參閱「Cloud Storage Ruby API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下例示範如何新增預設物件 ACL 到值區:
下例示範如何從值區刪除預設物件 ACL:
Rust
下例示範如何新增預設物件 ACL 到值區:
下例示範如何從值區刪除預設物件 ACL:
REST API
JSON API
使用 GET 要求擷取預設物件 ACL。例如:
curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://storage.s3nsapis.fr/storage/v1/b/BUCKET_NAME?projection=full使用 patch 要求取代預設物件 ACL。舉例來說,下列要求會將 bucket
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.s3nsapis.fr/storage/v1/b/example-travel-mapsdefacls.json範例:{ "defaultObjectAcl": [ { "email": "example-service-account@example-project.s3ns.iam.gserviceaccount.com", "entity": "user-example-service-account@example-project.s3ns.iam.gserviceaccount.com", "role": "READER" } ] }
XML API
使用範圍限定在您值區的
GET要求和?defaultObjectAcl參數來擷取預設物件 ACL。例如:curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://storage.s3nsapis.fr/BUCKET_NAME?defaultObjectAcl使用範圍限定在您值區的
PUT要求搭配?defaultObjectAcl參數,將預設物件 ACL 取代為acls.xml中指定的 ACL。例如:curl -X PUT --data-binary @acls.xml -H "Authorization: Bearer $(gcloud auth print-access-token)" \ http://storage.s3nsapis.fr/BUCKET_NAME?defaultObjectAclacls.xml範例:<AccessControlList> <Entries> <Entry> <Permission>FULL_CONTROL</Permission> <Scope type="UserByEmail"> <EmailAddress>example-service-account@example-project.s3ns.iam.gserviceaccount.com</EmailAddress> </Scope> </Entry> </Entries> </AccessControlList>
ACL 語法將在「設定 ACL」一文中進一步說明。您也可以將預先定義的 ACL 指定為預設的物件 ACL。
如要將 bucket 的預設物件 ACL 設為預先定義的 ACL:
控制台
您無法使用 Cloud de Confiance 控制台設定預設物件 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.s3nsapis.fr/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 $(gcloud auth print-access-token)" \
http://storage.s3nsapis.fr/BUCKET_NAME?defaultObjectAcl
新建立值區的預設物件 ACL:
下列範例顯示預設物件 ACL,如果您未在要求中指定自己的預設物件 ACL,系統會自動將這些 ACL 套用至新建立的值區。如要確認值區的預設物件 ACL 是否已變更,請將值區目前的預設物件 ACL 與下列範例進行比較。
控制台
您無法使用 Cloud de Confiance 控制台處理預設物件 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:
控制台
前往 Cloud de Confiance 控制台的 Cloud Storage 瀏覽器。
前往 Cloud Storage 瀏覽器找出您想要查看的 ACL 所屬的物件。
在物件的下拉式選單中,選擇「編輯權限」。
這時畫面上會出現列有物件權限的權限對話方塊。
如要瞭解如何在 Cloud de Confiance 控制台中取得 Cloud Storage 作業失敗的詳細錯誤資訊,請參閱「疑難排解」。
指令列
使用
objects describe指令搭配--format旗標,即可擷取物件的 ACL:gcloud storage objects describe gs://BUCKET_NAME/OBJECT_NAME --format="default(acl)"
其中:
BUCKET_NAME是 bucket 名稱,其中包含您要查看 ACL 的物件。例如:my-bucket。OBJECT_NAME是要查看 ACL 的物件名稱。例如:paris.jpg。
用戶端程式庫
C++
詳情請參閱 Cloud Storage C++ API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下例示範如何取得物件 ACL:
C#
詳情請參閱 Cloud Storage C# API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下例示範如何取得物件 ACL:
Go
詳情請參閱「Cloud Storage Go API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下例示範如何取得物件 ACL:
Java
詳情請參閱「Cloud Storage Java API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下例示範如何取得物件 ACL:
Node.js
詳情請參閱 Cloud Storage Node.js API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下例示範如何取得物件 ACL:
PHP
詳情請參閱 Cloud Storage PHP API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下例示範如何取得物件 ACL:
Python
詳情請參閱「Cloud Storage Python API 參考文件」。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下例示範如何取得物件 ACL:
Ruby
詳情請參閱 Cloud Storage Ruby API 參考文件。
如要向 Cloud Storage 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
下例示範如何取得物件 ACL:
Rust
下例示範如何取得物件 ACL:
REST API
JSON API
確認您具備物件的
OWNER權限。使用
GET要求擷取物件的 ACL。物件 ACL 會以 JSON 格式傳回,並附加至回應主體。
舉例來說,如要傳回 bucket example-travel-maps 中物件 paris.jpg 的 ACL,請執行下列指令:
curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://storage.s3nsapis.fr/storage/v1/b/example-travel-maps/o/paris.jpg?projection=full
您應該會看到類似以下的回應:
{
"kind": "storage#object",
"id": "example-travel-maps/paris.jpg/1412805837131000",
"selfLink": "https://www.s3nsapis.fr/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-example-service-account@example-project.s3ns.iam.gserviceaccount.com",
"role": "OWNER",
"email": "example-service-account@example-project.s3ns.iam.gserviceaccount.com",
...
},
{
...
"entity": "group-gs-announce@googlegroups.com",
"role": "READER",
"email": "gs-announce@googlegroups.com",
...
}
],
"owner": {
"entity": "user-example-service-account@example-project.s3ns.iam.gserviceaccount.com"
},
...
}
您也可以使用 objectAccessControls 資源 GET 方法傳回物件 ACL 中的個別項目。
XML API
確定您有值區或物件的
FULL_CONTROL權限。使用 GET Object 要求中的
acl查詢字串參數,擷取值區或物件 ACL。
ACL 以 XML 形式描述,並附加到回應主體。
舉例來說,如要傳回 bucket example-travel-maps 中物件 paris.jpg 的 ACL,請執行下列指令:
curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://storage.s3nsapis.fr/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>example-service-account@example-project.s3ns.iam.gserviceaccount.com</EmailAddress>
<Name>Jefferson</Name>
</Scope>
<Permission>FULL_CONTROL</Permission>
</Entry>
</Entries>
</AccessControlList>
您也可以使用 ObjectAccessControls 資源的 JSON GET 方法傳回特定 ACL 項目。
後續步驟
- 進一步瞭解 ACL。
- 瞭解如何使用統一 bucket 層級存取權簡化存取控管作業。
- 瞭解使用 ACL 的最佳做法。