Criar um serviço SAS para um recipiente ou bolha

Uma assinatura de acesso partilhado (SAS) permite-lhe conceder acesso limitado a contentores e bolhas na sua conta de armazenamento. Quando cria um SAS, especifica os seus constrangimentos, incluindo quais os recursos de Armazenamento Azure a que um cliente tem acesso, quais as permissões que tem sobre esses recursos e quanto tempo o SAS é válido.

Todos os SAS são assinados com uma chave. Pode assinar um SAS de duas formas:

  • Com uma chave criada utilizando credenciais Azure Ative Directory (Azure AD). Um SAS assinado com credenciais AZure AD é uma delegação de utilizadores SAS.
  • Com a chave da conta de armazenamento. Tanto um serviço SAS como uma conta SAS são assinados com a chave da conta de armazenamento.

Uma delegação de utilizadores SAS oferece segurança superior a um SAS que é assinado com a chave da conta de armazenamento. A Microsoft recomenda a utilização de uma delegação de utilizador SAS, quando possível. Para obter mais informações, consulte Grant acesso limitado a dados com assinaturas de acesso partilhado (SAS).

Este artigo mostra como usar a chave da conta de armazenamento para criar um serviço SAS para um recipiente ou bolha com a biblioteca do cliente de Armazenamento Azure para armazenamento Blob.

Criar um serviço SAS para um recipiente blob

O seguinte exemplo de código cria um SAS para um recipiente. Se for fornecida a denominação de uma política de acesso armazenada existente, essa política está associada ao SAS. Se não for fornecida nenhuma política de acesso armazenada, o código cria um SAS ad hoc no recipiente.

Um serviço SAS é assinado com a chave de acesso à conta. Utilize a classe StorageSharedKeyCredential para criar a credencial que é usada para assinar o SAS. Em seguida, crie um novo objeto BlobSasBuilder e ligue para os ToSasQueryParameters para obter a cadeia de ficha SAS.

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

Criar um serviço SAS para uma bolha

O exemplo de código a seguir cria um SAS numa bolha. Se for fornecida a denominação de uma política de acesso armazenada existente, essa política está associada ao SAS. Se não for fornecida nenhuma política de acesso armazenada, o código cria um SAS ad hoc na bolha.

Um serviço SAS é assinado com a chave de acesso à conta. Utilize a classe StorageSharedKeyCredential para criar a credencial que é usada para assinar o SAS. Em seguida, crie um novo objeto BlobSasBuilder e ligue para os ToSasQueryParameters para obter a cadeia de ficha SAS.

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

Criar um serviço SAS para um diretório

Numa conta de armazenamento com um espaço hierárquico habilitado, pode criar um serviço SAS para um diretório. Para criar o serviço SAS, certifique-se de que instalou a versão 12.5.0 ou posterior do pacote Azure.Storage.Files.DataLake.

O exemplo a seguir mostra como criar um serviço SAS para um diretório com a biblioteca de clientes v12 para .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;
    }
}

Recursos para desenvolvimento com .NET

Os links abaixo fornecem recursos úteis para desenvolvedores que usam a biblioteca de clientes Azure Storage para .NET.

APIs comuns de armazenamento Azure

APIs de armazenamento de blob

Ferramentas .NET

Recursos para desenvolvimento com JavaScript

Os links abaixo fornecem recursos úteis para desenvolvedores que usam a biblioteca de clientes de Armazenamento Azure para JavaScript

APIs de armazenamento de blob

Ferramentas JavaScript

Passos seguintes