Tworzenie definicji sygnatury dostępu współdzielonego i pobieranie tokenów sygnatury dostępu współdzielonego w kodzieCreate SAS definition and fetch shared access signature tokens in code

Możesz zarządzać kontem magazynu przy użyciu tokenów sygnatury dostępu współdzielonego (SAS) przechowywanych w magazynie kluczy.You can manage your storage account with shared access signature (SAS) tokens stored in your key vault. Aby uzyskać więcej informacji, zobacz Grant limited access to Azure Storage resources using SAS (Udzielanie ograniczonego dostępu do zasobów usługi Azure Storage przy użyciu sygnatury dostępu współdzielonego).For more information, see Grant limited access to Azure Storage resources using SAS.

Uwaga

Zalecamy korzystanie z kontroli dostępu opartej na rolach (RBAC) platformy Azure w celu zabezpieczenia konta magazynu w celu zapewnienia najwyższego bezpieczeństwa i łatwości użycia za pośrednictwem autoryzacji za pomocą klucza wspólnego.We recommend using Azure role-based access control (Azure RBAC) to secure your storage account for superior security and ease of use over Shared Key authorization.

Ten artykuł zawiera przykłady kodu .NET, który tworzy definicję sygnatury dostępu współdzielonego i pobiera tokeny SAS.This article provides samples of .NET code that creates a SAS definition and fetches SAS tokens. Zobacz nasz przykład ShareLink, aby uzyskać szczegółowe informacje, w tym wygenerowanego klienta Key Vault zarządzanych kont magazynu.See our ShareLink sample for full details including the generated client for Key Vault-managed storage accounts. Aby uzyskać informacje na temat tworzenia i przechowywania tokenów SAS, zobacz Manage storage account keys with Key Vault and the Azure CLI (Zarządzanie kluczami konta magazynu za pomocą usługi Key Vault i interfejsu wiersza polecenia platformy Azure) lub Manage storage account keys with Key Vault and Azure PowerShell (Zarządzanie kluczami kont magazynu przy użyciu Key Vault i Azure PowerShell).For information on how to create and store SAS tokens, see Manage storage account keys with Key Vault and the Azure CLI or Manage storage account keys with Key Vault and Azure PowerShell.

Przykłady koduCode samples

W poniższym przykładzie utworzymy szablon sygnatury dostępu współdzielonego:In the following example we'll create a SAS template:

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

Za pomocą tego szablonu możemy utworzyć definicję sygnatury dostępu współdzielonego przy użyciuUsing this template, we can create a SAS definition using the

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

Po utworzeniu definicji sygnatury dostępu współdzielonego można pobrać tokeny SAS, takie jak wpisy tajne, przy użyciu . SecretClientOnce the SAS definition is created, you can retrieve SAS tokens like secrets using a SecretClient. Nazwa tajnego musi być poprzedniana nazwą konta magazynu, po której następuje kreska:You need to preface the secret name with the storage account name followed by a dash:

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

Jeśli token sygnatury dostępu współdzielonych wygaśnie, możesz ponownie pobrać ten sam klucz tajny, aby wygenerować nowy.If your shared access signature token is about to expire, you can fetch the same secret again to generate a new one.

Aby uzyskać przewodnik dotyczący sposobu używania tokenu SAS pobranego z usługi Key Vault do uzyskiwania dostępu do usług Azure Storage, zobacz Używanie sygnatury dostępu współdzielonego konta do uzyskiwania dostępu do Blob serviceFor guide on how to use retrieved from Key Vault SAS token to access Azure Storage services, see Use an account SAS to access Blob service

Uwaga

Aplikacja musi być przygotowana do odświeżenia sygnatury dostępu współdzielonego, jeśli otrzyma ona wartość 403 z usługi Storage, aby można było obsłużyć przypadek naruszenia klucza i trzeba było obrócić go szybciej niż w normalnym okresie rotacji.Your app needs to be prepared to refresh the SAS if it gets a 403 from Storage so that you can handle the case where a key was compromised and you need to rotate them faster than the normal rotation period.

Następne krokiNext steps