Gerenciar chaves de conta de armazenamento com o Key Vault 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 uma identidade de aplicativo ou 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 Cofre de Chaves 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 devolvidos 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 Azure Az do PowerShell para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. 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:
- Instale o módulo do Azure PowerShell.
- Criar um cofre de chaves
- Crie uma conta de armazenamento do Azure. O nome da conta de armazenamento deve usar apenas letras minúsculas e números. O tamanho do nome deve ter entre 3 e 24 caracteres.
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 regenerar chaves 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 na 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 quiser que o Cofre da Chave regenere as chaves da conta de armazenamento periodicamente, você pode 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 SAS para o Cofre de Chaves
Parâmetro de consulta SAS | Description |
---|---|
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 ( s ): Acesso a APIs de nível de serviço (por exemplo, Get/set Service Properties, Get Service Stats, List Containers/Queues/Tables/Shares)- Container ( c ): Acesso a APIs no nível de contêiner (por exemplo, Create/Delete Container, Create/Delete Queue, Create/Delete Table, Create/Delete Share, List Blobs/Files and Directories)- Objeto ( o ): Acesso a APIs de nível de objeto para blobs, mensagens de fila, entidades de tabela e arquivos (por 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 ( 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.- Write ( w ): Válido para todos os tipos de recursos assinados (Service, 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 (https,http ) ou HTTPS apenas (https ). 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.