Tworzenie definicji sygnatury dostępu współdzielonego i pobieranie tokenów sygnatury dostępu współdzielonego w kodzie (starsza wersja)

Możesz zarządzać kontem magazynu przy użyciu tokenów sygnatury dostępu współdzielonego (SAS) przechowywanych w magazynie kluczy. Aby uzyskać więcej informacji, zobacz Udzielanie ograniczonego dostępu do zasobów usługi Azure Storage przy użyciu sygnatury dostępu współdzielonego.

Uwaga

Zalecamy używanie kontroli dostępu opartej na rolach (RBAC) platformy Azure w celu zabezpieczenia konta magazynu w celu zapewnienia doskonałego bezpieczeństwa i łatwości użycia w przypadku autoryzacji klucza współużytkowanego.

Ten artykuł zawiera przykłady kodu platformy .NET, który tworzy definicję sygnatury dostępu współdzielonego i pobiera tokeny SAS. Zobacz nasz przykład ShareLink, aby uzyskać szczegółowe informacje, w tym wygenerowany klient dla kont magazynu zarządzanego Key Vault. Aby uzyskać informacje na temat tworzenia i przechowywania tokenów SAS, zobacz Zarządzanie kluczami konta magazynu za pomocą Key Vault oraz interfejsu wiersza polecenia platformy Azure lub Zarządzanie kluczami kont magazynu za pomocą Key Vault i Azure PowerShell.

Przykłady kodu

W poniższym przykładzie utworzymy szablon sygnatury dostępu współdzielonego:

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

Przy użyciu tego szablonu możemy utworzyć definicję sygnatury dostępu współdzielonego przy użyciu

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 elementu SecretClient. Musisz wstępnie wpisać nazwę wpisu tajnego z nazwą konta magazynu, po którym następuje kreska:

// 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ółdzielonego wkrótce wygaśnie, możesz ponownie pobrać ten sam wpis tajny, aby wygenerować nowy.

Aby uzyskać przewodnik dotyczący używania tokenu sas pobranego z 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 usługi Blob Service

Uwaga

Aplikacja musi być przygotowana do odświeżenia sygnatury dostępu współdzielonego, jeśli otrzyma błąd 403 z usługi Storage, aby można było obsłużyć przypadek naruszenia zabezpieczeń klucza i trzeba je obrócić szybciej niż normalny okres rotacji.

Następne kroki