Erstellen einer SAS-Definition und Abrufen von Shared Access Signature-Token im Code

Sie können Ihr Speicherkonto mit den SAS-Token (Shared Access Signature) verwalten, die in Ihrem Schlüsseltresor gespeichert sind. Weitere Informationen finden Sie unter Gewähren von eingeschränktem Zugriff auf Azure Storage-Ressourcen mithilfe von SAS.

Hinweis

Es wird empfohlen, die rollenbasierte Zugriffssteuerung in Azure (Azure RBAC) zum Schutz Ihres Speicherkontos zu verwenden, um eine höhere Sicherheit und Benutzerfreundlichkeit als bei der Autorisierung mit gemeinsam verwendeten Schlüsseln zu erzielen.

Dieser Artikel enthält Beispiele für .NET-Code, der eine SAS-Definition erstellt und SAS-Token abruft. Ausführliche Informationen, u. a. zum generierten Client für per Key Vault verwaltete Storage-Konten, finden Sie in unserem ShareLink-Beispiel. Weitere Informationen zum Erstellen und Speichern von SAS-Token finden Sie unter Azure-Befehlszeilenschnittstelle oder Verwalten von Speicherkontoschlüsseln mit Azure Key Vault und Azure PowerShell.

Codebeispiele

Im folgenden Beispiel wird eine SAS-Vorlage erstellt:

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

Mithilfe dieser Vorlage können Sie eine SAS-Definition erstellen:

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

Nach der Erstellung der SAS-Definition können Sie SAS-Token wie Geheimnisse mithilfe von SecretClient abrufen. Sie müssen dem Namen des Geheimnisses den Namen des Speicherkontos gefolgt von einem Bindestrich voranstellen:

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

Wenn Ihr Shared Access Signature-Token in Kürze abläuft, können Sie das gleiche Geheimnis erneut abrufen, um ein neues Token zu generieren.

Eine Anleitung zur Verwendung von aus Key Vault abgerufenen SAS-Token für den Zugriff auf Azure Storage-Dienste finden Sie unter Verwenden einer Konto-SAS von einem Client.

Hinweis

Die App muss das SAS-Token aktualisieren können, wenn sie von Azure Storage den Statuscode 403 empfängt, damit Sie im Falle eines kompromittierten Schlüssels die Schlüsselrotation beschleunigen können.

Nächste Schritte