Criar uma SAS de serviço para um contêiner ou blob com Python
Uma assinatura de acesso compartilhado (SAS) permite que você conceda acesso limitado a contêineres e blobs em sua conta de armazenamento. Ao criar uma SAS, você especifica suas restrições, incluindo quais recursos do Armazenamento do Azure um cliente tem permissão para acessar, quais permissões eles têm nesses recursos e por quanto tempo a SAS é válida.
Cada SAS é assinado com uma chave. Você pode assinar uma SAS de duas maneiras:
- Com uma chave criada usando credenciais do Microsoft Entra. Uma SAS assinada com credenciais do Microsoft Entra é uma SAS de delegação de usuário. Um cliente que cria uma SAS de delegação de usuário deve receber uma função RBAC do Azure que inclua a ação Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey. Para saber mais, consulte Criar uma SAS de delegação de usuário.
- Com a chave da conta de armazenamento. Tanto uma SAS de serviço quanto uma SAS de conta são assinadas com a chave da conta de armazenamento. O cliente que cria uma SAS de serviço deve ter acesso direto à chave da conta ou receber a permissão Microsoft.Storage/storageAccounts/listkeys/action . Para saber mais, consulte Criar uma SAS de serviço ou Criar uma SAS de conta.
Nota
Uma SAS de delegação de usuário oferece segurança superior a uma SAS assinada com a chave da conta de armazenamento. A Microsoft recomenda o uso de uma SAS de delegação de usuário quando possível. Para obter mais informações, consulte Conceder acesso limitado a dados com assinaturas de acesso compartilhado (SAS).
Este artigo mostra como usar a chave de conta de armazenamento para criar uma SAS de serviço para um contêiner ou blob com a biblioteca de cliente de Armazenamento de Blob para Python.
Sobre o serviço SAS
Uma SAS de serviço é assinada com a chave de acesso da conta de armazenamento. Um SAS de serviço delega acesso a um recurso em um único serviço de Armazenamento do Azure, como o Armazenamento de Blob.
Você também pode usar uma política de acesso armazenado para definir as permissões e a duração do SAS. Se o nome de uma política de acesso armazenado existente for fornecido, essa política será associada à SAS. Para saber mais sobre políticas de acesso armazenado, consulte Definir uma política de acesso armazenado. Se nenhuma política de acesso armazenado for fornecida, os exemplos de código neste artigo mostram como definir permissões e duração para o SAS.
Create a service SAS (Criar uma SAS de serviço)
Você pode criar uma SAS de serviço para um contêiner ou blob, com base nas necessidades do seu aplicativo.
Você pode criar uma SAS de serviço para delegar acesso limitado a um recurso de contêiner usando o seguinte método:
A chave de acesso da conta de armazenamento usada para assinar a SAS é passada para o método como argumento account_key
. As permissões permitidas são passadas para o método como o permission
argumento e são definidas na classe ContainerSasPermissions .
O exemplo de código a seguir mostra como criar uma SAS de serviço com permissões de leitura para um recurso de contêiner:
def create_service_sas_container(self, container_client: ContainerClient, account_key: str):
# Create a SAS token that's valid for one day, as an example
start_time = datetime.datetime.now(datetime.timezone.utc)
expiry_time = start_time + datetime.timedelta(days=1)
sas_token = generate_container_sas(
account_name=container_client.account_name,
container_name=container_client.container_name,
account_key=account_key,
permission=ContainerSasPermissions(read=True),
expiry=expiry_time,
start=start_time
)
return sas_token
Usar uma SAS de serviço para autorizar um objeto de cliente
Você pode usar uma SAS de serviço para autorizar um objeto cliente a executar operações em um contêiner ou blob com base nas permissões concedidas pela SAS.
O exemplo de código a seguir mostra como usar o serviço SAS criado no exemplo anterior para autorizar um objeto ContainerClient . Esse objeto de cliente pode ser usado para executar operações no recurso de contêiner com base nas permissões concedidas pelo SAS.
# The SAS token string can be appended to the resource URL with a ? delimiter
# or passed as the credential argument to the client constructor
sas_url = f"{container_client.url}?{sas_token}"
# Create a ContainerClient object with SAS authorization
container_client_sas = ContainerClient.from_container_url(container_url=sas_url)
Recursos
Para saber mais sobre como usar a biblioteca de cliente do Armazenamento de Blobs do Azure para Python, consulte os recursos a seguir.