Faaaaaala seus “TREM Bunito” ! Tudo bem com vocês?
Bom, voltei aqui com um novo post falando agora sobre Segurança da Informação em Cloud Computing. (Específicamente em Azure, claro!)
Muitas pessoas me perguntam se a plataforma é segura, e se podemos proteger nosso ambiente de VM’s assim como protegemos On Premises.
A resposta é clara e simples: COM CERTEZA!
A Microsoft trouxe para o Azure, uma suíte de ferramentas de monitoramento, prevenção e detecção de ameaças, totalmente voltada para a saúde do ambiente cloud e segurança da informação. (O Azure Security Center)
Essa suíte/funcionalidade/plataforma é gratuita, e se encontra disponível para uso em TODAS as subscriptions do Azure. (Dê uma olhada em sua assinatura aí, o Security Center estava presente o tempo todo e possívelmente vc nem a viu. Hahaha)
Nesse post, não vou aprofundar sobre essa ferramenta, pois existe uma série de funcionalidades que devem ser consideradas e vistas. Porém, irei falar sobre uma possibilidade que existe de aumentar nossa segurança das nossas VM’s no azure que é o Azure Disk Encryption. (Criptografia de Disco no Azure)
Essa feature utiliza para ambientes Windows o Bitlocker e para ambientes Linux o DM-Crypt, para fornacer criptografia de volumes. Ou seja, criptografia dos discos das VM’s criadas. Obrigatóriamente, a solução tem que ser integrada com o Azure Key Vault, que basicamente é um cofre que guarda as chaves de criptografia que são utilizadas para criptografar os discos das vms. (Cada VM, pode/deve utilizar uma única chave. Porém, é possível armazená-las em um único Key Vault)
Um outro fato importante, é que o Key Vault (por se tratar de um cofre que armazena as chaves, deve ser criado obrigatoriamente na mesma região onde está a VM que você deseja proteger.
O Azure Disk Encryption é 100% Gratuito. Nenhuma taxa adicional é cobrada pelo seu uso. Logo, é uma feature muito interessante para utilizarmos em nosso ambiente, e garantir assim a confiabilidade e criptografia dos discos.
Ele assegura que as VM’s fiquem protegidas quando desligadas. Ou seja, não é possível ligar uma VM sem essa chave. As VM’s também, podem ser inicializadas através de políticas e chaves controladas por nós, e é possível auditar isso no nosso cofre de chaves.
As versões de S.O. que possuem suporte à esta feature (até hoje 15/02/2018) são:
Ambientes Windows:
- Windows Server 2008R2 | 2012 | 2012 R2 | 2016
- Windows Client 8 | 10
Ambientes Linux:
- Ubuntu 12.04, 12.10 (Apenas discos de dados) | 14.04,16.04 (Disco de Dados e SO)
- RHEL 6.7 (Apenas discos de dados) | 6.8, 6.9, 7.2, 7.3, 7.4 (Disco de Dados e SO)
- CentOS 6.5, 6.6, 6.7, 7.0, 7.1 (Disco de Dados) | 6.8, 7.2, 7.3 (Disco de Dados e SO)
- OpenSUSE 13.2 (Disco de Dados)
- SLES 11 SP4, HPC 12, 12 SP1 (Disco de Dados)
Mesmo assim, vale a pena dar uma conferida, para ver se essa informação não foi atualizada. (Este artigo oficial, pode lhe ajudar a ver sobre compatibilidade desta feature – https://docs.microsoft.com/pt-br/azure/security/azure-security-disk-encryption)
Antes de iniciarmos a criaçaõ do script para criptografar os discos de nossas VM’s, devemos nos atentar em alguns detalhes que são:
- MUITO CUIDADO COM A CHAVE! Isso mesmo, coloquei até em caixa alta pra vc não se esquecer ok? Uma vez que a chave foi excluída (e se vc não tiver um backup dela) não será mais possível ter acesso ao disco que está criptografado. Se for disco de S.O. (Sistema Operacional), a VM nem liga.
- É obrigatório armazenar as chaves em um Key vault, e este deve estar na mesma localização que a vm que você deseja proteger.
- Uma vez a criptografia habilitada, só é possível reverter o processo de criptografia, desativando-o. Logo, a VM ficará “vulnerável” novamente.
- O Azure em hipótese nenhuma, habilita essa proteção sem avisar o usuário. Ou seja, se você deseja criptografar seu disco, você deve fazer o procedimento e se assegurar de que a VM foi criptografada com sucesso.
Tendo em vista todos esses detalhes, vamos então iniciar a nossos trabalhos.
Antes de tudo, vamos dar uma olhada no Security Center, como está o estado atual da VM que queremos proteger, se ela está criptografada, e se e ela é elegível para usar esse recurso. [Em breve, gravarei um video sobre isso]
Munidos de algumas informações sobre a VM, vamos então iniciar o processo de criptografia.
[Mãos à Obra! Bora, codificar! #powershell]
[sourcecode language=”powershell”]
#Primeiramente, vamos fazer o Login em Nossa Subscription.
#[Se vc deseja dar um "bypass" nesse passo, dá uma lida <a href="http://gustavomagella.com/scriptando-abandone-o-login-azurermaccount/">nesse post que eu fiz</a>, que ensina a NUNCA MAIS usar esse comando, que às vezes é bem chatinho. kakakaka]
Login-AzureRmAccount
#Agora, vamos pegar informações sobre nossa conta. (Mais específicamente, o ID da Subscription)
Get-AzureRmSubscription
#Vamos então, selecionar a subscription em questão, usando o comando abaixo
Select-AzureRmSubscription -SubscriptionId $subscriptionId
[/sourcecode]1º Passo: Criar um Aplicativo no Azure AD
Agora vamos iniciar a criação de uma Application no AAD (Azure Active Directory). Essa Application, vai servir como um elo de ligação do “tenant” Azure, com os serviços que irão consumir essa API. O Azure AD atribui um ID exclusivo a este aplicativo e um endereço válido.
[sourcecode language=”powershell”]#Nome da Aplicação
$aadAppName = "nome-da-aplicação"
#Uri de Identificação
$identifierUri = [string]::Format("http://localhost:8080/{0}",[Guid]::NewGuid().ToString("N"))
#HomePage padrão
$defaultHomePage = ‘&amp;amp;amp;amp;lt;a href="http://modelo.com"&amp;amp;amp;amp;gt;http://modelo.com&amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;gt;’
#Variável para setar a data de hoje
$now = [System.DateTime]::Now
#Variável para contar o período de 1 ano de validade da chave desta Web API
$oneYearFromNow = $now.AddYears(1)
#Variável que irá criar uma "senha" par ao acesso a esta API
$aadClientSecret = [Guid]::NewGuid().ToString()
#Variável para transformar essa senha em uma String Segura
$secureAadClientSecret = ConvertTo-SecureString -String $aadClientSecret -AsPlainText -Force
#Criando_AAD_Application | A variável $ADApp irá armazenar os dados de criaçaõ dessa WebAPI.
$ADApp = New-AzureRmADApplication -DisplayName $aadAppName -HomePage $defaultHomePage -IdentifierUris $identifierUri -StartDate $now -EndDate $oneYearFromNow -Password $secureAadClientSecret
#Variáveis para pegar o ID Dessa API e outras informações, que serão utilizadas nos próximos passos
$servicePrincipal = New-AzureRmADServicePrincipal -ApplicationId $ADApp.ApplicationId
$SvcPrincipals = (Get-AzureRmADServicePrincipal -SearchString $aadAppName)
[/sourcecode]2º Passo: Criar um Cofre para Armazenamento das Chaves (Azure Key Vault)
[sourcecode language=”powershell”]#Nome do KeyVault
$keyVaultName = "brazilsouth-kv-vm"
#Grupo de Recursos onde será criado
$rg = "rg-prod-speech-vms"
#Location onde será criado. Lembrem-se, deve ser criado na mesma location onde a VM que será criptografada, se encontra.
$loc = "brazilsouth"
#Criação do KeyVault
$keyVault = New-AzureRmKeyVault -VaultName $keyVaultName -ResourceGroupName $rg -Sku Standard -Location $loc
#Variável para armazenar a Uri da Chave de Criptografia
$diskEncryptionKeyVaultUrl = $keyVault.VaultUri
#Variável para armazenar o ID do Recurso
$keyVaultResourceId = $keyVault.ResourceId
#Nome da chave a ser armazenada no KeyVault
$keyEncryptionKeyName = "nome-da-chave"
#Criação da Chave a ser armazenada no KeyVault. O ideal é usar uma chave por VM a ser protegida. (Recomandado)
$kek = Add-AzureKeyVaultKey -VaultName $keyVaultName -Name $keyEncryptionKeyName -Destination Software -ErrorAction SilentlyContinue
# Agora, necessitamos conceder alguns privilégios de acesso à nossa Web API
#Variável que irá armazenar o ClientID da Aplicação
$aadClientID = $servicePrincipal.ApplicationId
#Setando as permissões de acesso à nossa WebAPI
Set-AzureRmKeyVaultAccessPolicy -VaultName $keyVaultName -ServicePrincipalName $aadClientID -PermissionsToKeys wrapKey -PermissionsToSecrets set
Set-AzureRmKeyVaultAccessPolicy -VaultName $keyVaultName -EnabledForDiskEncryption
#Agora precisamos listar as seguintes variáveis:
Write-Host "`t aadClientID: $aadClientID" -foregroundcolor Cyan
Write-Host "`t diskEncryptionKeyVaultUrl: $diskEncryptionKeyVaultUrl" -foregroundcolor Cyan
Write-Host "`t keyVaultResourceId: $keyVaultResourceId" -foregroundcolor Cyan
#Guarde bem essas informações. Vamos declarar novamente essas variáveis, agora com essas informações como String.
$aadClientID="valor-fornecido-acima"
$diskEncryptionKeyVaultUrl="valor-fornecido-acima"
$keyVaultResourceId="valor-fornecido-acima"
#E por final, vamos então encriptar os discos de nossa VM
#Nome da Vm que deseja encriptar o(s) disco(s)
$vm = "vm-sp-orc-ws16"
#Grupo de recursos onde a VM se encontra
$rg = "rg-prod-speech-vms"
#Tipo de encriptação: OS (Apenas Disco do Sistema Operacional) | Data (Apenas Discos de Dados) | All (Todos os discos atachados na VM)
$volumeType = "All"
#Variável para armazenar o ID do Recurso
$keyVaultResourceId = $keyVault.ResourceId
#Por sim, o comando para criptografar os discos da VM
Set-AzureRmVMDiskEncryptionExtension -ResourceGroupName $rg -VMName $vm -AadClientID $aadClientID -AadClientSecret $secureAadClientSecret -DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $keyVaultResourceId -VolumeType $volumeType
[/sourcecode]Ufa! Pronto! Nossa VM agora já possui um sistema de criptografia ativo e rodando. Logo, podemos considerar que estamos bem protegidos no que diz respeito à camada de virtualização e disco.
Espero que eu tenha ajudado a você a entender melhor esse processo. Pesquisei bastante, e os scripts que haviam disponíveis na internet estavam prontos e sem nenhuma explicação sobre COMO REALMENTE O PROCESSO FUNCIONA. Decidi dissecar bem esse processo e dividí-lo, para ficar de mais simples entendimento.
Com o tempo eu vou dar uma aprimorada nesse script e dar uma automatizada, no futuro colocarei ele no GitHub.
No mais, é isso! 😉
Se gostou, compartilhe esse post! (Acho que vale seu compartilhamento, hein?)
Aguardo você para no próximo post! (#tamojunto, não esquece!)
Um Forte Abraço!
Gustavo Magella
#borapranuvem #cloud4all #uaizure