設定容器 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 儲存體提出要求。 |
Date 或 x-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 個字元。
Start
和 Expiry
欄位必須以 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-id 。
x-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
標頭設為 container
或 blob
。 若要停用匿名存取,請呼叫 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 服務錯誤碼