Gerenciar chaves de conta de armazenamento com o Azure Key Vault e o Azure PowerShell (herdado)

Importante

O Key Vault de Chaves de Conta de Armazenamento Gerenciadas (herdado) tem suporte como está sem mais atualizações planejadas. Somente o SAS de conta tem suporte com definições SAS assinadas versão do serviço de armazenamento no máximo no máximo em 28-03-2018.

Importante

É recomendável usar a integração do Armazenamento do Microsoft Azure ao Microsoft Entra ID, o serviço de gerenciamento de identidades e acesso baseado em nuvem da Microsoft. A integração do Microsoft Entra está disponível para blobs e filas do Azure e fornece acesso baseado em token do OAuth2 ao Armazenamento do Microsoft Azure (assim como o Azure Key Vault). O Microsoft Entra ID permite autentificar o aplicativo cliente usando uma identidade de aplicativo ou de usuário, em vez das credenciais da conta de armazenamento. Use uma identidade gerenciada do Microsoft Entra ao executar no Azure. As identidades gerenciadas eliminam a necessidade de autenticação de cliente e do armazenamento de credenciais no ou com o seu aplicativo. Use essa solução somente quando a autenticação do Microsoft Entra não for possível.

Uma conta de armazenamento do Azure usa credenciais compostas por um nome de conta e uma chave. A chave é gerada automaticamente e serve como uma senha, em vez de como uma chave de criptografia. O Key Vault gerencia as chaves de conta de armazenamento regenerando-as periodicamente na conta de armazenamento e fornece tokens de Assinatura de Acesso Compartilhado para acesso delegado aos recursos na sua conta de armazenamento.

Use o recurso de chave de conta de armazenamento gerenciada do Key Vault para listar (sincronizar) as chaves com uma conta de armazenamento do Azure e regenerar (girar) as chaves periodicamente. Gerencie as chaves de contas de armazenamento e contas de armazenamento Clássicas.

Ao usar o recurso de chave de conta de armazenamento gerenciada, considere os seguintes pontos:

  • Os valores de chaves nunca são retornados em resposta a um chamador.
  • Somente o Key Vault deve gerenciar suas chaves de conta de armazenamento. Não gerencie as chaves por conta própria e evite interferir nos processos do Key Vault.
  • Um só objeto do Key Vault deve gerenciar as chaves de conta de armazenamento. Não permita o gerenciamento de chaves em vários objetos.
  • Regenere as chaves usando apenas o Key Vault. Não regenere manualmente as chaves da conta de armazenamento.

Importante

A regeneração direta da chave na conta de armazenamento interrompe a configuração da conta de armazenamento gerenciada e pode invalidar os tokens SAS em uso e causar uma interrupção.

Observação

Recomendamos que você use o módulo Az PowerShell do Azure para interagir com o Azure. Confira Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.

ID do aplicativo da entidade de serviço

Um locatário do Microsoft Entra fornece a cada aplicativo registrado uma entidade de serviço. A entidade de serviço serve como a ID do aplicativo, que é usada durante a configuração de autorização para acesso a outros recursos do Azure por meio do Azure RBAC.

O Key Vault é um aplicativo da Microsoft que é pré-registrado em todos os locatários do Microsoft Entra. O Key Vault é registrado na mesma ID do Aplicativo em cada nuvem do Azure.

Locatários Nuvem ID do aplicativo
ID do Microsoft Entra Azure Governamental 7e7c393b-45d0-48b1-a35e-2905ddf8183c
ID do Microsoft Entra Público do Azure cfa8b339-82a2-471a-a3c9-0fc0be7a4093
Outro Qualquer cfa8b339-82a2-471a-a3c9-0fc0be7a4093

Pré-requisitos

Para concluir este guia, primeiro, você precisará fazer o seguinte:

Gerenciar chaves de conta de armazenamento

Conectar-se à sua conta do Azure

Autentique a sessão do PowerShell usando o cmdlet Connect-AzAccount.

Connect-AzAccount

Caso você tenha várias assinaturas do Azure, liste-as usando o cmdlet Get-AzSubscription e especifique a assinatura que deseja usar com o cmdlet Set-AzContext.

Set-AzContext -SubscriptionId <subscriptionId>

Definir variáveis

Primeiro, defina as variáveis a serem usadas pelos cmdlets do PowerShell nas etapas a seguir. Não deixe de atualizar os espaços reservados “YourResourceGroupName”, "YourStorageAccountName" e "YourKeyVaultName" e definir $keyVaultSpAppId como cfa8b339-82a2-471a-a3c9-0fc0be7a4093 (como especificado em ID do Aplicativo da Entidade de Serviço).

Também usaremos os cmdlets Get-AzContext e Get-AzStorageAccount do Azure PowerShell para obter sua ID de usuário e o contexto da sua conta de armazenamento do Azure.

$resourceGroupName = <YourResourceGroupName>
$storageAccountName = <YourStorageAccountName>
$keyVaultName = <YourKeyVaultName>
$keyVaultSpAppId = "cfa8b339-82a2-471a-a3c9-0fc0be7a4093"
$storageAccountKey = "key1" #(key1 or key2 are allowed)

# Get your User Id
$userId = (Get-AzContext).Account.Id

# Get a reference to your Azure storage account
$storageAccount = Get-AzStorageAccount -ResourceGroupName $resourceGroupName -StorageAccountName $storageAccountName

Observação

Para a conta de armazenamento Clássica, use "primary" e "secondary" em $storageAccountKey
Use 'Get-AzResource -Name "ClassicStorageAccountName" -ResourceGroupName $resourceGroupName' em vez de 'Get-AzStorageAccount' para a conta de armazenamento Clássica

Permitir acesso ao Key Vault na sua conta de armazenamento

Antes que o Key Vault possa acessar e gerenciar suas chaves de conta de armazenamento, você deve autorizar o acesso a sua conta de armazenamento. O aplicativo do Key Vault requer permissões para lista e regenerar chaves para sua conta de armazenamento. Essas permissões são habilitadas por meio da função interna Função de Serviço do Operador da Chave de Conta de Armazenamento do Azure.

Atribua essa função à entidade de serviço do Key Vault, limitando o escopo à sua conta de armazenamento, por meio do cmdlet New-AzRoleAssignment do Azure PowerShell.

# Assign Azure role "Storage Account Key Operator Service Role" to Key Vault, limiting the access scope to your storage account. For a classic storage account, use "Classic Storage Account Key Operator Service Role."
New-AzRoleAssignment -ApplicationId $keyVaultSpAppId -RoleDefinitionName 'Storage Account Key Operator Service Role' -Scope $storageAccount.Id

Após a atribuição de função bem-sucedida, você verá uma saída semelhante ao exemplo a seguir:

RoleAssignmentId   : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso/providers/Microsoft.Authorization/roleAssignments/189cblll-12fb-406e-8699-4eef8b2b9ecz
Scope              : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso
DisplayName        : Azure Key Vault
SignInName         :
RoleDefinitionName : storage account Key Operator Service Role
RoleDefinitionId   : 81a9662b-bebf-436f-a333-f67b29880f12
ObjectId           : 93c27d83-f79b-4cb2-8dd4-4aa716542e74
ObjectType         : ServicePrincipal
CanDelegate        : False

Se o Key Vault já foi adicionado à função na sua conta de armazenamento, você receberá o erro "A atribuição de função já existe". Você também pode verificar a atribuição de função usando a página de "Controle de acesso (IAM)" da conta de armazenamento no portal do Azure.

Dê a sua permissão de conta de usuário para as contas de armazenamento gerenciadas

Use o cmdlet Set-AzKeyVaultAccessPolicy do Azure PowerShell para atualizar a política de acesso ao Key Vault e conceder permissões da conta de armazenamento à sua conta de usuário.

# Give your user principal access to all storage account permissions, on your Key Vault instance

Set-AzKeyVaultAccessPolicy -VaultName $keyVaultName -UserPrincipalName $userId -PermissionsToStorage get, list, delete, set, update, regeneratekey, getsas, listsas, deletesas, setsas, recover, backup, restore, purge

As permissões para contas de armazenamento não estão disponíveis na página de "Políticas de acesso" da conta de armazenamento no portal do Azure.

Adicione uma conta de armazenamento gerenciada para a sua instância do Key Vault

Use o cmdlet Add-AzKeyVaultManagedStorageAccount do Azure PowerShell para criar uma conta de armazenamento gerenciada na instância do Key Vault. O switch -DisableAutoRegenerateKey especifica NÃO regenerar as chaves da conta de armazenamento.

# Add your storage account to your Key Vault's managed storage accounts

Add-AzKeyVaultManagedStorageAccount -VaultName $keyVaultName -AccountName $storageAccountName -AccountResourceId $storageAccount.Id -ActiveKeyName $storageAccountKey -DisableAutoRegenerateKey

Após a adição bem sucedida da conta de armazenamento sem regeneração de chave, você verá saída semelhante para o exemplo a seguir:

Id                  : https://kvcontoso.vault.azure.net:443/storage/sacontoso
Vault Name          : kvcontoso
AccountName         : sacontoso
Account Resource Id : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso
Active Key Name     : key1
Auto Regenerate Key : False
Regeneration Period : 90.00:00:00
Enabled             : True
Created             : 11/19/2018 11:54:47 PM
Updated             : 11/19/2018 11:54:47 PM
Tags                :

Habilitar regeneração de chave

Caso deseje que o Key Vault regenere as chaves de conta de armazenamento periodicamente, use o cmdlet Add-AzKeyVaultManagedStorageAccount do Azure PowerShell para definir um período de regeneração. Neste exemplo, definiremos um período de regeneração de 30 dias. Quando chegar o período de girar a chave, o Key Vault vai regenerar a chave inativa e definir a chave recém-criada como ativa. A chave usada para emitir tokens SAS é a chave ativa.

$regenPeriod = [System.Timespan]::FromDays(30)

Add-AzKeyVaultManagedStorageAccount -VaultName $keyVaultName -AccountName $storageAccountName -AccountResourceId $storageAccount.Id -ActiveKeyName $storageAccountKey -RegenerationPeriod $regenPeriod

Após a adição bem-sucedida da conta de armazenamento com a regeneração de chave, você verá uma saída semelhante ao exemplo a seguir:

Id                  : https://kvcontoso.vault.azure.net:443/storage/sacontoso
Vault Name          : kvcontoso
AccountName         : sacontoso
Account Resource Id : /subscriptions/03f0blll-ce69-483a-a092-d06ea46dfb8z/resourceGroups/rgContoso/providers/Microsoft.Storage/storageAccounts/sacontoso
Active Key Name     : key1
Auto Regenerate Key : True
Regeneration Period : 30.00:00:00
Enabled             : True
Created             : 11/19/2018 11:54:47 PM
Updated             : 11/19/2018 11:54:47 PM
Tags                :

Tokens de Assinatura de Acesso Compartilhado

Solicite também ao Key Vault que gere tokens de Assinatura de Acesso Compartilhado. Uma assinatura de acesso compartilhado fornece acesso delegado aos recursos da sua conta de armazenamento. Você pode permitir acesso aos clientes aos recursos da sua conta de armazenamento sem compartilhar as chaves de conta. Uma Assinatura de Acesso Compartilhado oferece uma forma segura de compartilhar seus recursos de armazenamento sem comprometer suas chaves de conta.

Os comandos desta seção executam as seguintes ações:

  • Criam a definição de Assinatura de Acesso Compartilhado de uma conta.
  • Criam uma definição de Assinatura de Acesso Compartilhado de armazenamento gerenciado do Key Vault no cofre. A definição tem o URI do modelo do token de Assinatura de Acesso Compartilhado que foi criada. A definição tem o tipo de Assinatura de Acesso Compartilhado account e é válida por N dias.
  • Confirmam se a Assinatura de Acesso Compartilhado foi salva no seu cofre de chaves como um segredo.

Definir variáveis

Primeiro, defina as variáveis a serem usadas pelos cmdlets do PowerShell nas etapas a seguir. Atualize os espaços reservados <YourStorageAccountName> e <YourKeyVaultName>.

$storageAccountName = <YourStorageAccountName>
$keyVaultName = <YourKeyVaultName>

Definir uma definição de Assinatura de Acesso Compartilhado

O Key Vault usa o modelo de definição de SAS para gerar tokens para aplicativos clientes.

Exemplo de modelo de definição de SAS:

$sasTemplate="sv=2018-03-28&ss=bfqt&srt=sco&sp=rw&spr=https"

Parâmetros SAS de conta necessários no modelo de definição de SAS para Key Vault

Parâmetro da Consulta de SAS Descrição
SignedVersion (sv) Obrigatórios. Especifica a versão do serviço de armazenamento assinado a ser usada para autorizar solicitações feitas com essa SAS de conta. Deve ser definido como a versão de 05-04-2015 ou posterior. Key Vault dá suporte a versões de no máximo 28-03-2018
SignedServices (ss) Obrigatórios. Especifica os serviços assinados acessíveis com a SAS da conta. Os valores possíveis incluem:

- Blob (b)
- Fila (q)
- Tabela (t)
- Arquivo (f)

Você pode combinar valores para fornecer acesso a mais de um serviço. Por exemplo, ss=bf especifica o acesso aos pontos de extremidade blob e arquivo.
SignedResourceTypes (srt) Obrigatórios. Especifica os tipos de recursos assinados que podem ser acessados com a SAS da conta.

- Serviço (s): Acesso a APIs no nível do serviço (por exemplo, Obter/Definir Propriedades do Serviço, Obter Estatísticas de Serviço, Listar Contêineres/Filas/Tabelas/Compartilhamentos)
- Contêiner (c): Acesso para APIS no nível contêiner (por exemplo, Criar/Excluir Contêiner, Criar/Excluir Fila, Criar/Excluir Tabela, Criar/Excluir Compartilhamento e Listar Blobs/Arquivos e Diretórios)
- Objeto (o): Acesso a APIs no nível do objeto para blobs, mensagens de fila, entidades de tabela e arquivos(por exemplo, Colocar Blob, Entidade de Consulta, Obter Mensagens, Criar Arquivo etc.)

Você pode combinar valores para fornecer acesso a mais de um tipo de recurso. Por exemplo, srt=sc especifica o acesso aos recursos de serviço e de contêiner.
SignedPermission (sp) Obrigatórios. Especifica as permissões assinadas para a SAS da conta. As permissões só serão válidas se corresponderem ao tipo de recurso assinado especificado; caso contrário, eles são ignorados.

- Leitura (r): válido para todos os tipos de recursos assinados (Serviço, Contêiner e Objeto). Permite permissões de leitura para o tipo de recurso especificado.
- Gravação (w): válido para todos os tipos de recursos assinados (Serviço, Contêiner e Objeto). Permite permissões de gravação para o tipo de recurso especificado.
– Excluir (d): válido para tipos de recurso contêiner e objeto, exceto para mensagens de fila.
– Exclusão permanente (y): válido apenas para o tipo de recurso de objeto do Blob.
- Lista (l): válido somente para tipos de recursos de serviço e de contêiner.
- Adicionar (a): Válido somente para os seguintes tipos de recursos de objeto: mensagens de fila, entidades de tabela e blobs de acréscimo.
- Criar (c): válido somente para os seguintes tipos de recursos de objeto: blobs e arquivos. Os usuários podem criar novos blobs ou arquivos, mas podem não substituir blobs ou arquivos existentes.
- Atualizar (u): válido somente para os seguintes tipos de recursos de objeto: mensagens de fila e entidades de tabela.
- Processo (p): válido apenas para o seguinte tipo de recurso de objeto: mensagens de fila.
- Marca (t): válido apenas para o seguinte tipo de recurso de objeto: blobs. Permite operações de marca de blob.
- Filtro (f): válido apenas para o seguinte tipo de recurso de objeto: blob. Permite filtragem por marca de blob.
- Definir Política de Imutabilidade (i): válida apenas para o seguinte tipo de recurso de objeto: blob. Permite definir/excluir a política de imutabilidade e a retenção legal em um blob.
SignedProtocol (spr) Opcional. Especifica os protocolos permitidos para uma solicitação feita com a conta de SAS. Os valores possíveis são HTTPS e HTTP (https,http) ou somente HTTPS (https). O valor padrão é https,http.

Somente HTTP não é um valor permitido.

Para obter mais informações sobre a SAS de conta, consulte Criar uma SAS de conta

Observação

O Key Vault ignora parâmetros de tempo de vida como 'Expiração Assinada', 'Início Assinado' e parâmetros introduzidos após a versão de 28-03-2018

Definir a definição de assinatura de acesso compartilhado em Key Vault

Use o cmdlet Set-AzKeyVaultManagedStorageSasDefinition do Azure PowerShell para criar uma definição de Assinatura de Acesso Compartilhado. Você pode fornecer o nome de sua escolha para o parâmetro -Name.

Set-AzKeyVaultManagedStorageSasDefinition -AccountName $storageAccountName -VaultName $keyVaultName -Name <YourSASDefinitionName> -TemplateUri $sasTemplate -SasType 'account' -ValidityPeriod ([System.Timespan]::FromDays(1))

Confirme a definição de Assinatura de Acesso Compartilhado

Confirme se a definição de Assinatura de Acesso Compartilhado foi armazenada no cofre de chaves usando o cmdlet Get-AzKeyVaultSecret do Azure PowerShell.

Primeiro, encontre a definição de Assinatura de Acesso Compartilhado no cofre de chaves.

Get-AzKeyVaultSecret -VaultName <YourKeyVaultName>

O segredo correspondente à definição de SAS terá estas propriedades:

Vault Name   : <YourKeyVaultName>
Name         : <SecretName>
...
Content Type : application/vnd.ms-sastoken-storage
Tags         :

Agora você pode usar o cmdlet Get-AzKeyVaultSecret com os parâmetros VaultName e Name para ver o conteúdo desse segredo.

$secretValueText = Get-AzKeyVaultSecret -VaultName <YourKeyVaultName> -Name <SecretName> -AsPlainText
Write-Output $secretValueText

A saída desse comando mostrará a cadeia de caracteres de definição de SAS.

Próximas etapas