設定容器 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 |
如需詳細資訊,請參閱 使用 Azurite 模擬器進行本機 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 (確定)。
如您需狀態代碼的詳細資訊,請參閱 狀態和錯誤碼。
回應標頭
此作業的回應包含下列標頭。 回應也可能包含額外的標準 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 |
可用來針對要求和對應的回應進行疑難解答。 如果此標頭存在於要求中,則這個標頭的值等於 x-ms-client-request-id 標頭的值,而且值包含不超過 1,024 個可見的 ASCII 字元。 如果要求中沒有 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
授權
在 Azure 記憶體中呼叫任何數據存取作業時,需要授權。 您可以授權 Set Container ACL
作業,如下所示。
重要
Microsoft建議搭配受控識別使用 Microsoft Entra ID 來授權對 Azure 記憶體的要求。 相較於共用密鑰授權,Microsoft Entra ID 提供更高的安全性和易於使用性。
Azure 記憶體支援使用 Microsoft Entra 識別符來授權對 Blob 數據的要求。 使用 Microsoft Entra 識別符,您可以使用 Azure 角色型存取控制 (Azure RBAC) 將權限授與安全性主體。 安全性主體可能是使用者、群組、應用程式服務主體或 Azure 受控識別。 安全性主體會由 Microsoft Entra ID 驗證,以傳回 OAuth 2.0 令牌。 令牌接著可用來授權對 Blob 服務的要求。
若要深入瞭解使用 Microsoft Entra 識別符進行授權,請參閱 使用 Microsoft Entra ID授權 Blob 存取權。
權限
以下列出Microsoft Entra 使用者、群組、受控識別或服務主體呼叫 Set Container ACL
作業所需的 RBAC 動作,以及包含此動作的最低特殊許可權內建 Azure RBAC 角色:
- Azure RBAC 動作:Microsoft.Storage/storageAccounts/blobServices/containers/setAcl/action
- 最低許可權內建角色:記憶體 Blob 數據擁有者
若要深入瞭解如何使用 Azure RBAC 指派角色,請參閱 指派 Azure 角色以存取 blob 資料。
言論
當您設定容器的許可權時,會取代現有的許可權。 若要更新容器的許可權,請呼叫 取得容器 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 服務錯誤碼