建立 SAS 定義並擷取程式碼中的共用存取簽章權杖 (舊版)

您可以使用儲存在金鑰保存庫中的共用存取簽章 (SAS) 權杖來管理儲存體帳戶。 如需詳細資訊,請參閱使用 SAS 授與 Azure 儲存體資源的存取權

注意

我們建議使用Azure 角色型存取控制 (Azure RBAC) 來保護您的儲存體帳戶,以取得高級的安全性,並且讓透過「共用金鑰」授權使用更加方便。

本文提供 .NET 程式碼的範例,該程式碼會建立 SAS 定義及擷取 SAS 權杖。 如需完整詳細資料,包括為 Key Vault 受控儲存體帳戶產生的用戶端,請參閱我們的 ShareLink 範例。 如需如何建立及儲存 SAS 權杖的相關資訊,請參閱使用 Key Vault 和 Azure CLI 管理儲存體帳戶金鑰,或使用 Key Vault 和 Azure PowerShell 管理儲存體帳戶金鑰

程式碼範例

在下列範例中,我們將會建立 SAS 範本:

private static string BuildSasDefinitionTemplate(bool readOnly) =>
    new StringBuilder("sv=2018-03-28")  // service version
        .Append("&spr=https")           // HTTPS only
        .Append("&ss=bf")               // blobs and files only
        .Append("&srt=o")               // applies to objects only
        .Append(readOnly ? "&sp=r" : "&sp=rw")  // read-only or read-write
        .ToString();

使用此範本,我們可以建立 SAS 定義

string sasDefinitionName = BuildSasDefinitionName(Tag, readOnly, duration);
SasDefinitionAttributes sasDefinitionAttributes = new SasDefinitionAttributes
{
    Enabled = true,
};

Dictionary<string, string> tags = new Dictionary<string, string>
{
    [Tag] = "1",
};

SasDefinitionBundle createdSasDefinition = await storageClient.SetSasDefinitionAsync(
    storageAccountName,
    sasDefinitionName,
    sasTemplate,
    SasTokenType.Account,
    duration,
    sasDefinitionAttributes,
    tags,
    s_cancellationTokenSource.Token);

一旦建立 SAS 定義,您就可以使用 SecretClient 來擷取像是祕密的 SAS 權杖。 您需要在密碼名稱前面加上一個儲存體帳戶名稱,後面加上破折號:

// Build our SAS template, get an existing SAS definition, or create a new one.
string sasTemplate = BuildSasDefinitionTemplate(readOnly);
string sasDefinitionName = await GetOrCreateSasDefinitionAsync(storageClient, storageAccountName, sasTemplate, days, readOnly);

// Now we can create a SecretClient and generate a new SAS token from the storage account and SAS definition names.
SecretClient secretClient = new SecretClient(vaultUri, credential, options);
KeyVaultSecret sasToken = await secretClient.GetSecretAsync($"{storageAccountName}-{sasDefinitionName}", cancellationToken: s_cancellationTokenSource.Token);

如果您共用的存取簽章權杖即將到期,您可以再次擷取相同的祕密來產生新的權杖。

如需如何使用從 Key Vault SAS 權杖擷取來存取 Azure 儲存體服務的指南,請參閱使用帳戶 SAS 存取 Blob 服務

注意

如果您的應用程式從儲存體取得 403,就必須準備好重新整理 SAS,讓您可以處理金鑰遭到入侵的情況,而且您需要以比一般輪替週期更快的速度來進行輪替。

下一步