Поделиться через


Создание определения SAS и получение маркеров SAS в коде (прежние версии)

Вы можете управлять учетной записью хранения с помощью маркеров подписанного URL-адреса (SAS), хранящихся в хранилище ключей. Дополнительные сведения см. в статье Предоставление ограниченного доступа к ресурсам службы хранилища Azure с помощью подписанных URL-адресов (SAS).

Примечание.

Мы рекомендуем защитить учетную запись хранения с помощью управления доступом на основе ролей 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, вы сможете получать маркеры SAS, например секреты, с помощью SecretClient. Перед именем секрета необходимо указать имя учетной записи хранения и тире:

// 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);

Если срок действия маркера подписанного URL-адреса истекает, можно снова получить тот же секрет, чтобы создать новый.

Сведения об использовании полученных данных из маркера SAS Key Vault для доступа к службам хранилища Azure см. в разделе Использование SAS учетной записи из клиента.

Примечание.

Приложение должно быть подготовлено к обновлению SAS на тот случай, если оно получит ошибку 403 от службы хранилища. Это требуется для тех ситуаций, когда ключ скомпрометирован и вам нужно сменить его быстрее, чем обычно.

Следующие шаги