Creare una firma di accesso condiviso del servizio per un contenitore o un BLOB

Una firma di accesso condiviso consente di concedere l'accesso limitato a contenitori e BLOB nell'account di archiviazione. Quando si crea una firma di accesso condiviso, si specificano i relativi vincoli, incluse le risorse di archiviazione di Azure a cui un client può accedere, le autorizzazioni per tali risorse e il tempo di validità della firma di accesso condiviso.

Ogni firma di accesso condiviso è firmata con una chiave. È possibile firmare una firma di accesso condiviso in uno dei due modi seguenti:

  • Con una chiave creata con le credenziali Azure Active Directory (Azure AD). Una firma di accesso condiviso con Azure AD credenziali è una firma di accesso condiviso dell'utente .
  • Con la chiave dell'account di archiviazione. Una firma di accesso condiviso del servizio e una firma di accesso condiviso dell' account sono firmate con la chiave account di archiviazione

Una firma di accesso condiviso di delega utente offre una protezione superiore a una firma di accesso condiviso con la chiave dell'account di archiviazione. Quando possibile, Microsoft consiglia di usare una firma di accesso condiviso di delega utente. Per altre informazioni, vedere concedere l'accesso limitato ai dati con le firme di accesso condiviso (SAS).

Questo articolo illustra come usare la chiave dell'account di archiviazione per creare una firma di accesso condiviso del servizio per un contenitore o un BLOB con la libreria client Archiviazione di Azure per l'archiviazione BLOB.

Creare una firma di accesso condiviso del servizio per un contenitore BLOB

L'esempio di codice seguente crea una firma di accesso condiviso per un contenitore. Se viene specificato il nome di un criterio di accesso archiviato esistente, tale criterio è associato alla firma di accesso condiviso. Se non vengono specificati criteri di accesso archiviati, il codice crea una firma di accesso condiviso ad hoc nel contenitore.

Una firma di accesso condiviso del servizio viene firmata con la chiave di accesso dell'account. Usare la classe StorageSharedKeyCredential per creare le credenziali usate per firmare la firma di accesso condiviso. Creare quindi un nuovo oggetto BlobSasBuilder e chiamare ToSasQueryParameters per ottenere la stringa del token di firma di accesso condiviso.

private static Uri GetServiceSasUriForContainer(BlobContainerClient containerClient,
                                          string storedPolicyName = null)
{
    // Check whether this BlobContainerClient object has been authorized with Shared Key.
    if (containerClient.CanGenerateSasUri)
    {
        // Create a SAS token that's valid for one hour.
        BlobSasBuilder sasBuilder = new BlobSasBuilder()
        {
            BlobContainerName = containerClient.Name,
            Resource = "c"
        };

        if (storedPolicyName == null)
        {
            sasBuilder.ExpiresOn = DateTimeOffset.UtcNow.AddHours(1);
            sasBuilder.SetPermissions(BlobContainerSasPermissions.Read);
        }
        else
        {
            sasBuilder.Identifier = storedPolicyName;
        }

        Uri sasUri = containerClient.GenerateSasUri(sasBuilder);
        Console.WriteLine("SAS URI for blob container is: {0}", sasUri);
        Console.WriteLine();

        return sasUri;
    }
    else
    {
        Console.WriteLine(@"BlobContainerClient must be authorized with Shared Key 
                          credentials to create a service SAS.");
        return null;
    }
}

Creare una firma di accesso condiviso del servizio per un BLOB

L'esempio di codice seguente crea una firma di accesso condiviso in un BLOB. Se viene specificato il nome di un criterio di accesso archiviato esistente, tale criterio è associato alla firma di accesso condiviso. Se non vengono specificati criteri di accesso archiviati, il codice crea una firma di accesso condiviso ad hoc nel BLOB.

Una firma di accesso condiviso del servizio viene firmata con la chiave di accesso dell'account. Usare la classe StorageSharedKeyCredential per creare le credenziali usate per firmare la firma di accesso condiviso. Creare quindi un nuovo oggetto BlobSasBuilder e chiamare ToSasQueryParameters per ottenere la stringa del token di firma di accesso condiviso.

private static Uri GetServiceSasUriForBlob(BlobClient blobClient,
    string storedPolicyName = null)
{
    // Check whether this BlobClient object has been authorized with Shared Key.
    if (blobClient.CanGenerateSasUri)
    {
        // Create a SAS token that's valid for one hour.
        BlobSasBuilder sasBuilder = new BlobSasBuilder()
        {
            BlobContainerName = blobClient.GetParentBlobContainerClient().Name,
            BlobName = blobClient.Name,
            Resource = "b"
        };

        if (storedPolicyName == null)
        {
            sasBuilder.ExpiresOn = DateTimeOffset.UtcNow.AddHours(1);
            sasBuilder.SetPermissions(BlobSasPermissions.Read |
                BlobSasPermissions.Write);
        }
        else
        {
            sasBuilder.Identifier = storedPolicyName;
        }

        Uri sasUri = blobClient.GenerateSasUri(sasBuilder);
        Console.WriteLine("SAS URI for blob is: {0}", sasUri);
        Console.WriteLine();

        return sasUri;
    }
    else
    {
        Console.WriteLine(@"BlobClient must be authorized with Shared Key 
                          credentials to create a service SAS.");
        return null;
    }
}

Creare una firma di accesso condiviso del servizio per una directory

In un account di archiviazione con uno spazio dei nomi gerarchico abilitato, è possibile creare una firma di accesso condiviso del servizio per una directory. Per creare la firma di accesso condiviso del servizio, assicurarsi di aver installato la versione 12.5.0 o successiva del pacchetto Azure.Storage.Files.DataLake.

L'esempio seguente illustra come creare una firma di accesso condiviso del servizio per una directory con la libreria client v12 per .NET:

private static Uri GetServiceSasUriForDirectory(DataLakeDirectoryClient directoryClient,
                                          string storedPolicyName = null)
{
    if (directoryClient.CanGenerateSasUri)
    {
        // Create a SAS token that's valid for one hour.
        DataLakeSasBuilder sasBuilder = new DataLakeSasBuilder()
        {
            // Specify the file system name, the path, and indicate that
            // the client object points to a directory.
            FileSystemName = directoryClient.FileSystemName,
            Resource = "d",
            IsDirectory = true,
            Path = directoryClient.Path,
        };

        // If no stored access policy is specified, create the policy
        // by specifying expiry and permissions.
        if (storedPolicyName == null)
        {
            sasBuilder.ExpiresOn = DateTimeOffset.UtcNow.AddHours(1);
            sasBuilder.SetPermissions(DataLakeSasPermissions.Read |
                DataLakeSasPermissions.Write |
                DataLakeSasPermissions.List);
        }
        else
        {
            sasBuilder.Identifier = storedPolicyName;
        }

        // Get the SAS URI for the specified directory.
        Uri sasUri = directoryClient.GenerateSasUri(sasBuilder);
        Console.WriteLine("SAS URI for ADLS directory is: {0}", sasUri);
        Console.WriteLine();

        return sasUri;
    }
    else
    {
        Console.WriteLine(@"DataLakeDirectoryClient must be authorized with Shared Key 
                          credentials to create a service SAS.");
        return null;
    }
}

Risorse per lo sviluppo con .NET

I collegamenti seguenti forniscono risorse utili per gli sviluppatori che usano Libreria client di archiviazione di Azure per .NET.

API comuni di archiviazione di Azure

Api di archiviazione BLOB

Strumenti .NET

Risorse per lo sviluppo con JavaScript

I collegamenti seguenti forniscono risorse utili per gli sviluppatori che usano la libreria client di archiviazione di Azure per JavaScript

Api di archiviazione BLOB

Strumenti JavaScript

Passaggi successivi