使用預存存取原則來委派 Azure 儲存體的存取權
共用存取簽章 (SAS) 是無須分享您的 Azure 認證,卻可將存取權授與用戶端的安全方式。 這種易用性具有缺點。 就是只要有正確的 SAS,任何人都可以在此權杖仍然有效時存取檔案。 撤銷儲存體存取權的唯一方法就是重新產生存取金鑰。 重新產生作業需要更新所有使用舊有共用金鑰的應用程式,以使用新的存取金鑰。 另一個選項是建立 SAS 與預存存取原則的關聯。
在您將 SAS 功能新增至應用程式時,就會突顯以應用程式到期與存取控制為每個影像建立 SAS 的僵化。 您希望更新應用程式,以在儲存體容器上使用「預存存取原則」。 原則備妥之後,您想要測試可否更新到期日,並影響所有已建立的 SAS 權杖。
在本課程模組中,您會了解如何:
- 使用預存存取原則。
- 請使用 C# 儲存體 API 建立與新存取原則相關聯的 SAS 權杖。
- 更新 Azure 入口網站中的預存存取原則,測試 SAS 權杖可否全部變更。
什麼是預存存取原則?
您可以在四種儲存體資源上建立預存存取原則:
- Blob 容器
- 檔案共用
- 佇列
- 資料表
您為 Blob 容器建立的預存存取原則,可用於此容器包含的所有 Blob 與容器本身。 預存存取原則是以下列屬性建立:
- 識別碼:將用以參考預存存取原則的名稱。
- 開始時間:原則可能開始使用之日期和時間的 DateTimeOffset 值。 這個值可以是 Null。
- 到期時間:原則到期之日期和時間的 DateTimeOffset 值。 在這段時間之後,對儲存體的要求將會失敗,並顯示 403 錯誤碼訊息。
- 權限:可為一個或所有 acdlrw 字串的權限清單。
建立預存存取原則
您可以使用 Azure 入口網站或 Azure CLI 命令來建立使用 C# 程式碼的共用存取原則。
使用 C# .NET 程式碼
BlobSignedIdentifier identifier = new BlobSignedIdentifier
{
Id = "stored access policy identifier",
AccessPolicy = new BlobAccessPolicy
{
ExpiresOn = DateTimeOffset.UtcNow.AddHours(1),
Permissions = "rw"
}
};
blobContainer.SetAccessPolicy(permissions: new BlobSignedIdentifier[] { identifier });
使用入口網站
在入口網站中,前往儲存體帳戶,然後移至 Blob 儲存體容器。 在左側,選取 [存取原則]。 若要新增預存存取原則,請選取 [+ 新增原則]。
接著,您可以輸入所有必要參數。
使用 Azure CLI 命令
az storage container policy create \
--name <stored access policy identifier> \
--container-name <container name> \
--start <start time UTC datetime> \
--expiry <expiry time UTC datetime> \
--permissions <(a)dd, (c)reate, (d)elete, (l)ist, (r)ead, or (w)rite> \
--account-key <storage account key> \
--account-name <storage account name> \
建立 SAS 權杖並建立其與預存存取原則的關聯
讓我們建立預存存取原則與任何所需新 SAS 權杖的關聯。 針對公司患者診斷影像 Web 應用程式,您要更新現有程式碼以新增先前的程式碼。 然後,在建立 SAS 權杖的方法中,參考新的預存存取原則。
建立 SAS 權杖所需的所有現有程式碼:
BlobSasBuilder sas = new BlobSasBuilder
{
BlobContainerName = blob.BlobContainerName,
BlobName = blob.Name,
Resource = "b",
ExpiresOn = DateTimeOffset.UtcNow.AddMinutes(1)
};
// Allow read access
sas.SetPermissions(BlobSasPermissions.Read);
參考新的存取原則即可更換原有程式碼。
// Create a user SAS that only allows reading for a minute
BlobSasBuilder sas = new BlobSasBuilder
{
Identifier = "stored access policy identifier"
};
每個 Blob 容器最多可以儲存 5 項存取原則。