Создание определения 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 от службы хранилища. Это требуется для тех ситуаций, когда ключ скомпрометирован и вам нужно сменить его быстрее, чем обычно.
Следующие шаги
- Предоставление ограниченного доступа к ресурсам службы хранилища Azure с помощью подписанных URL-адресов (SAS)
- Управление ключами учетной записи хранения с помощью Key Vault и Azure CLI или с помощью Key Vault и Azure PowerShell
- Примеры ключей управляемой учетной записи хранения