1. Pré-requisitos¶
O procedimento descrito neste manual depende dos seguintes requisitos:
2. Criar chave para criptografia¶
2.1. Permissão de usuário¶
Para criptografar o HBase, é necessário adicionar permissões para o usuário que administra o HDFS.
No navegador, acesse o Ranger em http://<host>:6080
.
- Usuário:
keyadmin
- Senha: <senha definida no procedimento de instalação do Ranger Admin>
Note
Neste exemplo, iremos usar o usuário hadoop
Ao acessar o Painel do Ranger KMS, clique no repositório kmsdev
do KMS, que irá redirecionar para a página de policies do kmsdev.
Clique para editar a police 1
. Ao ser redirecionado, clique no ícone + dentro de Allow Conditions e preencha da seguinte forma:
- Select Role: Sem alteração
- Select Group: Sem alteração
- Select User:
hadoop
- Permissions:
Decrypt EEK
,Generate EEK
,Get
,Get Keys
,Get Metadata
- Delegate Admin: Checked
Para testar acesso ao servidor, execute os seguintes comandos para listar as chaves e os metadados da chave, caso exista uma:
hadoop key list
hadoop key list -metadata
O objetivo do teste é garantir que o acesso não será negado, havendo chave ou não.
2.2. Criar chave¶
Ainda no painel do Ranger KMS, clique em Encryption e, então, em Key Manager.
Em Select Service, selecione o repositório kmsdev
.
Para criar uma chave, clique em Add New Key e preencha da seguinte forma:
- Key Name:
hbase
- Cipher: Não fazer alteração
- Length:
256
- Description: campo opcional
- Attributes: Não fazer alteração
Ao clicar em save, a chave será criada e poderá ser acessada pelo servidor para encriptação. Para verificar, conecte no servidor com o usuário que tem permissão de get key
e execute os comandos a seguir:
hadoop key list
hadoop key list -metadata
3. Criar zona de criptografia¶
Para encriptar a base de dados do Hadoop, é necessário criar uma zona de criptografia. Dessa forma, todos dados inseridos nesta zona serão redirecionados pelo HDFS para o KMS para encriptação ou decriptação, a depender da requisição enviada e das permissões do usuário no KMS.
Para criar uma zona de criptografia, é necessário que o caminho esteja vazio. Sendo assim, é necessário renomear a pasta data
do HBase e criar a uma pasta com o mesmo nome.
hdfs dfs -mv /apps/hbase/data /apps/hbase/data-bkp
hdfs dfs -mkdir /apps/hbase/data /apps/hbase/data
hdfs dfs -ls /apps/hbase/
# Found 2 items
# drwxr-xr-x - hadoop hadoop 0 2023-02-17 14:02 /apps/hbase/data
# drwxr-xr-x - hadoop hadoop 0 2023-02-15 11:58 /apps/hbase/data-bkp
Então execute o seguinte comando para definir o caminho /apps/hbase/data
como uma zona de criptografia:
hdfs crypto -createZone -keyName hbase -path /apps/hbase/data
O retorno deve ser:
Added encryption zone /apps/hbase/data
Para verificar, execute o comando para listar as zonas:
hdfs crypto -listZones
Este comando deve retornar a seguinte mensagem:
/apps/hbase/data hbase
Sendo /apps/hbase/data
a zona de criptografia e hbase
a chave.
Após definir a zona de criptografia, copie todo o conteúdo da pasta /apps/hbase/data-bkp
para dentro da zona de criptografia /apps/hbase/data
.
hdfs dfs -cp /apps/hbase/data-bkp/* /apps/hbase/data/
Para verificar o funcionamento da encriptação, inicie o HBase e conecte-se ao HBase Shell, então execute os seguintes comandos de leitura de arquivo:
Dentro da zona de criptografia:
hdfs dfs -cat /apps/hbase/data/hbase.id
O retorno deve ser:
PBUF
$24b1ef30-14b6-46d0-b46b-f49c9c109cb1
Fora da zona de criptografia:
hdfs dfs -cat /.reserved/raw/apps/hbase/data/hbase.id
O retorno deve ser:
▒w▒▒▒▒▒,U▒▒▒k▒y▒,*▒*|▒~▒/U▒U▒▒▒|#
Para obter informações sobre a criptografia do arquivo, execute o seguinte comando:
hdfs crypto -getFileEncryptionInfo -path /apps/hbase/data/hbase.id
O retorno deve ser:
{
cipherSuite: {
name: AES/CTR/NoPadding,
algorithmBlockSize: 16
},
cryptoProtocolVersion: CryptoProtocolVersion{
description='Encryption zones', version=2, unknownValue=null
},
edek: 0b79b49c77335747824d78e97e5e0bf2a54f428ddc81faf6dc220c4ecea7c7de,
iv: ee35b713df8994046758372cee3eeea0,
keyName: hbase,
ezKeyVersionName: hbase@0
}
4. Procedimento de troca de chave¶
Warning
Não é necessário interromper os serviços para a troca de chave e reencriptação. Leia o procedimento completo a seguir para mais informações.
4.1. Procedimento de Rollover da chave¶
Para criar uma chave, clique em Add New Key e preencha da seguinte forma:
Para trocar a chave de encriptação, acesse o painel do Ranger KMS e clique em Encryption e, então, em Key Manager.
Em Select Service, selecione o repositório kmsdev
.
Na chave utilizada para a zona de criptografia, no lado direito da tela em Action, clique no ícone descrito como Rollover.
Ao clicar em Rollover, será necessário confirmar a operação em um pop-up.
Após confirmar o Rollover, o Hadoop continuará utilizando a chave anterior, mas a chave nova também estará disponível no Ranger KMS. Por esse motivo não é necessário a interrupção dos serviços para este procedimento.
Para verificar a disponibilidade das chaves e suas respectivas versões, execute o seguinte comando:
curl http://localhost:9292/kms/v1/key/hbase/_versions?user.name=hadoop
O retorno deve ser:
[ {
"material" : "NIoXKS9lHMIPBUhIARV3V5TCzTj12IHEOjVwD00R8NM",
"name" : "hbase",
"versionName" : "hbase@0"
}, {
"material" : "RjAvLWzEu7BuRvPpXs7K2Q8EqRTa_gJsDm-NF8D_HSc",
"name" : "hbase",
"versionName" : "hbase@1"
}
...
Neste retorno, nota-se que o Hadoop está utilizando a chave hbase@0
, porém já está disponível a chave hbase@1
no KMS.
4.2. Procedimento de reencriptação¶
O procedimento de encriptação pode ser feito durante o funcionamento pleno do sistema por dois pontos:
O tipo da criptografia:
O Hadoop utiliza criptografia do tipo TDE (transparent data encryption). Este tipo de criptografia atua no banco de dados apenas em nível de arquivo, permitindo que os dados estejam disponíveis para as aplicações sem a necessidade de encriptação ou decriptação a cada operação.
Informações de criptografia no arquivo:
Cada arquivo encriptado possui um cabeçalho ou pacote com as informações da criptografia, incluindo a versão da chave utilizada. Estas informações são consultadas diretamente em qualquer procedimento de criptografia.
Note
Para verificar as informações de criptografia no arquivo, execute o seguinte comando:
hdfs crypto -getFileEncryptionInfo -path /apps/hbase/data/hbase.id
O retorno deve ser:
{ cipherSuite: { name: AES/CTR/NoPadding, algorithmBlockSize: 16 }, cryptoProtocolVersion: CryptoProtocolVersion{ description='Encryption zones', version=2, unknownValue=null }, edek: 0b79b49c77335747824d78e97e5e0bf2a54f428ddc81faf6dc220c4ecea7c7de, iv: ee35b713df8994046758372cee3eeea0, keyName: hbase, ezKeyVersionName: hbase@0 }
Para reencriptar a zona de criptografia após o Rollover da chave, execute os seguintes comandos:
- Para listar as zonas de criptografia:
hdfs crypto -listZones
- Para reencriptar a zona desejada com a nova chave:
hdfs crypto -reencryptZone -start -path /apps/hbase/data/
O retorno deve ser uma mensagem confirmando a solicitação de reencriptação:
re-encrypt command successfully submitted for zone: /apps/hbase/data/ action: START
Após a solicitação, o Hadoop irá iniciar a reencriptação dos dados com a chave atualizada fornecida pelo Ranger KMS.
Para checar o status da reencriptação, execute o seguinte comando:
hdfs crypto -listReencryptionStatus
O retorno deve ser um relatório com o status da operação:
Zone Name Status EZKey Version Name Submission Time Is Canceled? Completion Time Number of files re-encrypted Number of failures Last File Checkpointed
/apps/hbase/data Completed hbase@1 2023-02-17 15:43:15,429-0300 false 2023-02-17 15:43:15,623-0300 28 0
Para verificar se as informações de criptografia foram atualizadas nos arquivos, execute novamente o comando -getFileEncryptionInfo
:
hdfs crypto -getFileEncryptionInfo -path /apps/hbase/data/hbase.id
Caso a troca das chaves tenha sido realizada com sucesso, o campo ezKeyVersionName
irá refletir o nome da nova versão:
{
cipherSuite: {
name: AES/CTR/NoPadding,
algorithmBlockSize: 16
},
cryptoProtocolVersion: CryptoProtocolVersionc{
description='Encryption zones', version=2, unknownValue=null
},
edek: 995afbc575fa88ff0ef72a908e0caa8397c18b2df852cb86e35fcc4577ed257b,
iv: ee35b713df8994046758372cee3eeea0,
keyName: hbase,
ezKeyVersionName: hbase@1
}