Gerenciar chaves de conta de armazenamento com o Cofre da Chave e o Azure PowerShell (legado)

Importante

As chaves de conta de armazenamento gerenciado do Cofre de Chaves (legado) são suportadas no estado em que se encontram, sem mais atualizações planejadas. Somente SAS de conta são suportados com definições SAS assinadas versão do serviço de armazenamento até 2018-03-28.

Importante

Recomendamos usar a integração do Armazenamento do Azure com o Microsoft Entra ID, o serviço de gerenciamento de identidade 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 OAuth2 ao Armazenamento do Azure (assim como o Azure Key Vault). O Microsoft Entra ID permite que você autentique seu aplicativo cliente usando um aplicativo ou identidade de usuário, em vez de credenciais de conta de armazenamento. Você pode usar uma identidade gerenciada do Microsoft Entra ao executar no Azure. As identidades gerenciadas eliminam a necessidade de autenticação de cliente e armazenamento de credenciais em ou com seu aplicativo. Use esta solução somente quando a autenticação do Microsoft Entra não for possível.

Uma conta de armazenamento do Azure usa credenciais que compreendem um nome de conta e uma chave. A chave é gerada automaticamente e serve como uma senha, em vez de uma chave criptográfica. O Key Vault gerencia chaves de conta de armazenamento regenerando-as periodicamente na conta de armazenamento e fornece tokens de assinatura de acesso compartilhado para acesso delegado a recursos em sua conta de armazenamento.

Você pode usar o recurso de chave de conta de armazenamento gerenciado do Cofre da Chave para listar (sincronizar) chaves com uma conta de armazenamento do Azure e regenerar (girar) as chaves periodicamente. Você pode gerenciar chaves para contas de armazenamento e contas de armazenamento Classic.

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

  • Os valores-chave nunca são retornados em resposta a um chamador.
  • Apenas o Cofre de Chaves deve gerir as chaves da sua conta de armazenamento. Não gerencie as chaves sozinho e evite interferir nos processos do Cofre de Chaves.
  • Apenas um único objeto do Cofre da Chave deve gerenciar as chaves da conta de armazenamento. Não permita o gerenciamento de chaves de vários objetos.
  • Regenere as chaves usando apenas o Cofre da Chave. Não regenere manualmente as chaves da conta de armazenamento.

Importante

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

Nota

Recomendamos que utilize o módulo do Azure Az PowerShell para interagir com o Azure. Veja Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.

ID do aplicativo principal 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 RBAC do Azure.

O Key Vault é um aplicativo da Microsoft pré-registrado em todos os locatários do Microsoft Entra. O Cofre da Chave é registrado sob a mesma ID de Aplicativo em cada nuvem do Azure.

Inquilinos Cloud ID da aplicação
Microsoft Entra ID Azure Government 7e7c393b-45d0-48b1-a35e-2905ddf8183c
Microsoft Entra ID Azure público cfa8b339-82a2-471a-a3c9-0fc0be7a4093
Outro Qualquer cfa8b339-82a2-471a-a3c9-0fc0be7a4093

Pré-requisitos

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

Gerir as chaves de contas de armazenamento

Ligar à sua conta do Azure

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

Connect-AzAccount

Se você tiver várias assinaturas do Azure, poderá listá-las usando o cmdlet Get-AzSubscription e especificar 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. Certifique-se de atualizar os espaços reservados "YourResourceGroupName", "YourStorageAccountName" e "YourKeyVaultName" e defina $keyVaultSpAppId como cfa8b339-82a2-471a-a3c9-0fc0be7a4093 (conforme especificado na ID do aplicativo principal do 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 de 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

Nota

Para Conta de Armazenamento Clássica, use "principal" e "secundário" para $storageAccountKey
Use 'Get-AzResource -Name "ClassicStorageAccountName" -ResourceGroupName $resourceGroupName' em vez de 'Get-AzStorageAccount' para a Conta de Armazenamento Clássico

Dê acesso ao Key Vault à sua conta de armazenamento

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

Atribua essa função à entidade de serviço do Cofre da Chave, limitando o escopo à sua conta de armazenamento, usando o 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 Cofre de Chaves já tiver sido adicionado à função em sua conta de armazenamento, você receberá uma mensagem "A atribuição de função já existe". erro. Você também pode verificar a atribuição de função, usando a página "Controle de acesso (IAM)" da conta de armazenamento no portal do Azure.

Dê permissão à sua conta de usuário para contas de armazenamento gerenciado

Use o cmdlet Set-AzKeyVaultAccessPolicy do Azure PowerShell para atualizar a política de acesso ao Cofre da Chave e conceder permissões de 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 "Políticas de acesso" da conta de armazenamento no portal do Azure.

Adicionar uma conta de armazenamento gerenciado à sua instância do Cofre da Chave

Use o cmdlet Add-AzKeyVaultManagedStorageAccount do Azure PowerShell para criar uma conta de armazenamento gerenciado em sua instância do Cofre da Chave. A -DisableAutoRegenerateKey opção 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á 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 : 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 a regeneração de chaves

Se desejar que o Cofre da Chave regenere as chaves da conta de armazenamento periodicamente, você poderá usar o cmdlet Add-AzKeyVaultManagedStorageAccount do Azure PowerShell para definir um período de regeneração. Neste exemplo, definimos um período de regeneração de 30 dias. Quando é hora de girar, o Cofre da Chave regenera a chave inativa e, em seguida, define 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 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

Você também pode pedir ao Cofre da Chave para gerar tokens de assinatura de acesso compartilhado. Uma assinatura de acesso compartilhado fornece acesso delegado aos recursos em sua conta de armazenamento. Você pode conceder aos clientes acesso aos recursos em sua conta de armazenamento sem compartilhar suas chaves de conta. Uma assinatura de acesso compartilhado fornece uma maneira segura de compartilhar seus recursos de armazenamento sem comprometer as chaves da conta.

Os comandos nesta seção concluem as seguintes ações:

  • Defina uma definição de assinatura de acesso compartilhado de conta.
  • Defina uma definição de assinatura de assinatura de acesso compartilhado de armazenamento gerenciado do Cofre de Chaves no cofre. A definição tem o URI do modelo do token de assinatura de acesso compartilhado que foi criado. A definição tem o tipo account de assinatura de acesso compartilhado e é válida por N dias.
  • Verifique se a assinatura de acesso compartilhado foi salva no cofre da chave como um segredo.

Definir variáveis

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

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

Definir um modelo de definição de assinatura de acesso compartilhado

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

Exemplo de modelo de definição 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 o Cofre de Chaves

Parâmetro de consulta SAS Descrição
SignedVersion (sv) Obrigatório. Especifica a versão do serviço de armazenamento assinado a ser usada para autorizar solicitações feitas com essa conta SAS. Deve ser definido para a versão 2015-04-05 ou posterior. O Key Vault suporta versões não posteriores a 2018-03-28
SignedServices (ss) Obrigatório. Especifica os serviços assinados acessíveis com a conta SAS. 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 File.
SignedResourceTypes (srt) Obrigatório. Especifica os tipos de recursos assinados que podem ser acessados com a conta SAS.

- Serviço (): Acesso a APIs de nível de serviço (spor exemplo, Get/set Service Properties, Get Service Stats, List Containers/Queues/Tables/Shares)
- Container (): Acesso a APIs no nível de contêiner (cpor exemplo, Create/Delete Container, Create/Delete Queue, Create/Delete Table, Create/Delete Share, List Blobs/Files and Directories)
- Objeto (): Acesso a APIs de nível de objeto para blobs, mensagens de fila, entidades de tabela e arquivos (opor exemplo, Put Blob, Query Entity, Get Messages, Create File, etc.)

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

- Ler (): Válido para todos os tipos de recursos assinados (rServiço, Contêiner e Objeto). Permite permissões de leitura para o tipo de recurso especificado.
- Write (): Válido para todos os tipos de recursos assinados (wService, Container e Object). Permite permissões de gravação para o tipo de recurso especificado.
- Excluir (d): Válido para os tipos de recursos Container e Object, exceto para mensagens de fila.
- Exclusão permanente (y): Válido apenas para o tipo de recurso Object de Blob.
- Lista (l): Válida apenas para os tipos de recursos Service e Container.
- Adicionar (a): Válido apenas para os seguintes tipos de recursos de objeto: mensagens de fila, entidades de tabela e blobs de acréscimo.
- Create (c): Válido apenas para os seguintes tipos de recursos de objeto: blobs e arquivos. Os usuários podem criar novos blobs ou arquivos, mas não podem substituir blobs ou arquivos existentes.
- Atualização (u): Válido apenas 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.
- Tag (t): Válido apenas para o seguinte tipo de recurso Object: blobs. Permite operações de tag de blob.
- Filtro (f): Válido apenas para o seguinte tipo de recurso Object: blob. Permite a filtragem por tag blob.
- Definir Política de Imutabilidade (i): Válido apenas para o seguinte tipo de recurso de objeto: blob. Permite definir/excluir política de imutabilidade e retenção legal em um blob.
SignedProtocol (spr) Opcional. Especifica o protocolo permitido para uma solicitação feita com a conta SAS. Os valores possíveis são HTTPS e HTTP () ou HTTPS apenas (https,httphttps). O valor predefinido é https,http.

Somente HTTP não é um valor permitido.

Para obter mais informações sobre o SAS da conta, consulte: Criar uma conta SAS

Nota

O Key Vault ignora parâmetros vitalícios como 'Signed Expiry', 'Signed Start' e parâmetros introduzidos após a versão 2018-03-28

Definir definição de assinatura de acesso compartilhado no Cofre da Chave

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 -Name parâmetro.

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

Verificar a definição de assinatura de acesso compartilhado

Você pode verificar se a definição de assinatura de acesso compartilhado foi armazenada em seu cofre de chaves usando o cmdlet Get-AzKeyVaultSecret do Azure PowerShell.

Primeiro, encontre a definição de assinatura de acesso compartilhado em seu cofre de chaves.

Get-AzKeyVaultSecret -VaultName <YourKeyVaultName>

O segredo correspondente à sua 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 VaultName parâmetros e Name para exibir o conteúdo desse segredo.

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

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

Próximos passos