設定容器 ACL

Set Container ACL 作業可設定指定容器的權限。 這些權限指出是否可以公開存取容器中的 Blob。

自 2009-09-19 版起,容器許可權會提供下列選項來管理容器存取:

  • 完整公開讀取權限:容器和 Blob 資料可透過匿名要求讀取。 用戶端可以透過匿名要求列舉容器內的 Blob,但無法列舉記憶體帳戶內的容器。

  • 僅限 Blob 的公用讀取許可權: 此容器內的 Blob 資料可以透過匿名要求讀取,但無法使用容器數據。 客戶端無法透過匿名要求列舉容器內的 Blob。

  • 沒有公開讀取權限:容器和 Blob 資料只供帳戶擁有者讀取。

Set Container ACL 也可設定儲存的存取原則,以搭配共用存取簽章使用。 如需詳細資訊,請參閱定義預存存取原則

容器的所有公開存取皆為匿名,即便是透過共用存取簽章存取亦然。

要求

Set Container ACL 要求的建構如下。 建議您使用 HTTPS。 以您的記憶體帳戶名稱取代 myaccount

方法 要求 URI HTTP 版本
PUT https://myaccount.blob.core.windows.net/mycontainer?restype=container&comp=acl HTTP/1.1

模擬記憶體服務要求

對模擬儲存體服務提出要求時,請將模擬器主機名稱和 Blob 服務通訊埠指定為 127.0.0.1:10000,後面接著模擬儲存體帳戶名稱:

方法 要求 URI HTTP 版本
PUT http://127.0.0.1:10000/devstoreaccount1/mycontainer?restype=container&comp=acl HTTP/1.1

如需詳細資訊,請參閱使用 Azure 模擬器進行本機 Azure 儲存體開發

URI 參數

您可以在要求 URI 中指定下列其他參數:

參數 描述
timeout 選擇性。 timeout 參數以秒為單位。 如需詳細資訊,請參閱 設定 Blob 服務作業的逾時

要求標頭

下表說明必要的和選擇性要求標頭:

要求標頭 描述
Authorization 必要。 指定授權配置、帳戶名稱和簽章。 如需詳細資訊,請參閱授權對 Azure 儲存體提出要求
Datex-ms-date 必要。 指定要求的「國際標準時間」(UTC)。 如需詳細資訊,請參閱授權對 Azure 儲存體提出要求
x-ms-version 選擇性。 指定用於這個要求的作業版本。 如需詳細資訊,請參閱 Azure 儲存體服務的版本
x-ms-blob-public-access 選擇性。 指定是否可以公開存取容器中的資料,以及存取層級。 可能的值包括:

- container:指定容器和 Blob 數據的完整公用讀取許可權。 用戶端可以透過匿名要求列舉容器內的 Blob,但無法列舉記憶體帳戶內的容器。
- blob: 指定 Blob 的公用讀取許可權。 此容器內的 Blob 資料可以透過匿名要求讀取,但無法使用容器數據。 客戶端無法透過匿名要求列舉容器內的 Blob。

如果要求中未包含此標頭,則容器數據對帳戶擁有者是私用的。

請注意,不允許在 Azure 進階儲存體 帳戶中設定容器的公用存取。
x-ms-lease-id: <ID> 選擇性版本 2012-02-12 和更新版本。 如果已指定, Set Container ACL 只有在容器的租用作用中且符合此標識符時,才會成功。 如果沒有作用中的租用或標識符不相符,則會傳回 412 (前置條件失敗) 。
x-ms-client-request-id 選擇性。 提供客戶端產生的不透明值,其中包含設定記錄時記錄的 1 kibibyte (KiB) 字元限制。 強烈建議您使用此標頭,將用戶端活動與伺服器接收的要求相互關聯。 如需詳細資訊,請參閱監視 Azure Blob 儲存體

唯有在符合指定條件的情況下,此作業也可支援使用條件式標頭以執行作業。 如需詳細資訊,請參閱 指定 Blob 服務作業的條件式標頭

要求本文

若要指定儲存的存取原則,請在要求主體中,提供 Set Container ACL 作業的唯一識別碼和存取原則。

SignedIdentifier 項目包含唯一識別碼 (如 Id 項目中所指定),以及存取原則的詳細資料 (如 AccessPolicy 項目中所指定)。 唯一識別碼的長度上限為 64 個字元。

StartExpiry 欄位必須以 UTC 時間表示,而且必須遵守有效的 ISO 8061 格式。 支援的 ISO 8061 格式包括:

  • YYYY-MM-DD
  • YYYY-MM-DDThh:mmTZD
  • YYYY-MM-DDThh:mm:ssTZD
  • YYYY-MM-DDThh:mm:ss.fffffffTZD

就這些格式的日期部分而言,YYYY 以四位數表示年份,MM 以兩位數表示月份,而 DD 以兩位數表示日期。 就時間部分而言,hh 以 24 小時標記法表示小時,mm 以兩位數表示分鐘,ss 以兩位數表示秒,而 fffffff 以七位數表示毫秒。 時間指示項 T 會分隔字串的日期和時間部分,而時區指示項 TZD 會指定時區。

<?xml version="1.0" encoding="utf-8"?>  
<SignedIdentifiers>  
  <SignedIdentifier>   
    <Id>unique-64-character-value</Id>  
    <AccessPolicy>  
      <Start>start-time</Start>  
      <Expiry>expiry-time</Expiry>  
      <Permission>abbreviated-permission-list</Permission>  
    </AccessPolicy>  
  </SignedIdentifier>  
</SignedIdentifiers>  
  

範例要求

Request Syntax:  
PUT https://myaccount.blob.core.windows.net/mycontainer?restype=container&comp=acl HTTP/1.1  
  
Request Headers:  
x-ms-version: 2011-08-18  
x-ms-date: Sun, 25 Sep 2011 00:42:49 GMT  
x-ms-blob-public-access: container  
Authorization: SharedKey myaccount:V47F2tYLS29MmHPhiR8FyiCny9zO5De3kVSF0RYQHmo=  
  
Request Body:  
<?xml version="1.0" encoding="utf-8"?>  
<SignedIdentifiers>  
  <SignedIdentifier>   
    <Id>MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=</Id>  
    <AccessPolicy>  
      <Start>2009-09-28T08:49:37.0000000Z</Start>  
      <Expiry>2009-09-29T08:49:37.0000000Z</Expiry>  
      <Permission>rwd</Permission>  
    </AccessPolicy>  
  </SignedIdentifier>  
</SignedIdentifiers>  
  

回應

回應包括 HTTP 狀態碼和一組回應標頭。

狀態碼

成功的作業會傳回狀態碼 200 (OK)。

如需狀態代碼的詳細資訊,請參閱 狀態和錯誤碼

回應標頭

這項作業的回應包括下列標頭。 回應也可能包括其他標準 HTTP 標頭。 所有標準標頭都符合 HTTP/1.1 通訊協議規格

回應標頭 描述
ETag 容器的 ETag。 如果要求版本是 2011-08-18 或更新版本,ETag 值會以引號括住。
Last-Modified 傳回上次修改容器的日期和時間。 日期格式會依照 RFC 1123。 如需詳細資訊,請參閱 在標頭中代表日期/時間值

修改容器或其屬性或中繼資料的任何作業,都會更新上次修改時間,包括設定容器的權限。 Blob 上的作業不會影響容器的上次修改時間。
x-ms-request-id 可唯一識別發出的要求,並可用來對要求進行疑難解答。 如需詳細資訊,請參閱 針對 API 作業進行疑難解答
x-ms-version 指出用來執行要求的 Blob 服務版本。 對 2009-09-19 及更新版本提出要求會傳回此標頭。
Date 服務所產生的 UTC 日期/時間值,表示起始響應的時間。
x-ms-client-request-id 可用來針對要求和對應的回應進行疑難解答。 如果此標頭存在於要求中,且值包含不超過 1,024 個可見的 ASCII 字元,則此標頭的值等於標頭的值 x-ms-client-request-idx-ms-client-request-id如果要求中沒有標頭,它就不會出現在回應中。

範例回應

Response Status:  
HTTP/1.1 200 OK  
  
Response Headers:  
Transfer-Encoding: chunked  
Date: Sun, 25 Sep 2011 22:42:55 GMT  
ETag: "0x8CB171613397EAB"  
Last-Modified: Sun, 25 Sep 2011 22:42:55 GMT  
x-ms-version: 2011-08-18  
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0  

授權

Set Container ACL 作業僅支援 共用金鑰授權

備註

除非帳戶擁有者已透過設定容器的權限指定可公開存取容器資源,或已核發容器資源的共用存取簽章,否則只有帳戶擁有者可以存取特定容器中的資源。

當您設定容器的權限時,會取代現有的權限。 若要更新容器的許可權,請呼叫 取得容器 ACL 以擷取與容器相關聯的所有存取原則。 修改您想要變更的存取原則,然後使用一組完整的數據呼叫 Set Container ACL 來執行更新。

在容器數據上啟用匿名公用存取

若要啟用容器資料的匿名公開讀取權限,請呼叫 Set Container ACL,並將 x-ms-blob-public-access 標頭設為 containerblob。 若要停用匿名存取,請呼叫 Set Container ACL,但不指定 x-ms-blob-public-access 標頭。

如果您將 x-ms-blob-public-access 設為 blob,用戶端可以匿名方式呼叫下列作業:

如果您將 x-ms-blob-public-access 設為 container,用戶端可以匿名方式呼叫下列作業:

建立容器層級存取原則

預存存取原則可以指定與其相關聯之共用存取簽章的開始時間、到期時間和許可權。 根據您想要如何控制容器或 Blob 資源的存取權,您可以在預存存取原則中指定所有這些參數,並從共用存取簽章的 URL 中省略這些參數。 如此一來,您可以隨時修改相關聯的簽章行為或加以撤銷。 或者,您可以在預存存取原則中指定一或多個存取原則參數,以及 URL 上的其他參數。 最後,您可以在 URL 上指定所有參數。 在此情況下,您可以使用儲存的存取原則撤銷簽章,但不修改其行為。 如需詳細資訊,請參閱定義預存存取原則

共用存取簽章和預存存取原則必須包含授權簽章所需的所有欄位。 如果遺漏任何必要欄位,要求就會失敗。 同樣地,如果在共用存取簽章 URL 和預存存取原則中指定欄位,則要求會失敗,狀態代碼為 400 (不正確的要求) 。

最多可以針對單一容器設定五個不同的存取原則。 如果在要求本文中傳遞了五個以上的存取原則,服務會傳回狀態代碼 400 (不正確的要求) 。

不論容器資料是否可供匿名讀取權限,都可對容器或 Blob 核發共用存取簽章。 共用存取簽章提供更佳的方式,讓您控制資源的存取方式、時機及人員。

注意

當您在容器上建立預存存取原則時,原則最多可能需要 30 秒才會生效。 在此間隔期間,在原則變成作用中之前,與預存存取原則相關聯的共用存取簽章會失敗,狀態代碼為 403 (禁止) 。

計費

定價要求可能源自使用 Blob 記憶體 API 的用戶端,無論是直接透過 Blob 記憶體 REST API,還是來自 Azure 記憶體用戶端連結庫。 這些要求會累算每個交易的費用。 交易類型會影響帳戶的收費方式。 例如,讀取交易會累算到與寫入交易不同的計費類別。 下表根據記憶體帳戶類型顯示要求的計費類別 Set Container ACL

作業 儲存體帳戶類型 計費類別
設定容器 ACL 進階區塊 Blob
標準一般用途 v2
其他作業
設定容器 ACL 標準一般用途 v1 寫入作業

若要瞭解指定計費類別的定價,請參閱 Azure Blob 儲存體 定價

另請參閱

限制對容器和 Blob 的存取
使用共用存取簽章委派存取權
建立和使用共用存取簽章
定義預存的存取原則
取得容器 ACL
授權對 Azure 記憶體的要求
狀態和錯誤碼
Blob 服務錯誤碼