Usando Hyper Protect Crypto Services PKCS #11 para a criptografia nativa do IBM Db2
A criptografia nativa do IBM Db2® protege os arquivos do banco de dados de chave e as imagens backup do banco de dados contra o acesso inapropriado enquanto eles são armazenados na mídia de armazenamento externo. O sistema de banco de dados criptografa e decriptografa dados automaticamente quando ele é usado por usuários e aplicativos autorizados. Geralmente, os usuários do banco de dados não precisam estar cientes da criptografia nativa e os aplicativos clientes de banco de dados não precisam ser adaptados especificamente.
A criptografia nativa do Db2 usa uma hierarquia de chave de duas camadas: os dados são criptografados com uma chave de criptografia de dados (DEK). O DEK é criptografado com uma chave mestra e é armazenado em forma criptografada com o banco de dados ou a imagem de backup. Um DEK exclusivo é gerado por DB2 para cada banco de dados criptografado e para cada backup criptografado.
Uma chave mestra é usada para criptografar um DEK. Cada banco de dados criptografado é associado a uma chave mestra por vez.
Uma questão importante ao planejar a criptografia nativa do Db2 é onde você mantém a chave mestra e como você a protege.
Objetivos
Este tutorial mostra como é possível manter o controle completo e exclusivo de suas chaves mestras armazenando-as nos IBM Cloud® Hyper Protect Crypto Services. Para esse propósito, é necessário usar o recurso de integração do PKCS n.º 11 do Hyper Protect Crypto Services.
Com este tutorial, você implementará a configuração que está representada na ilustração a seguir.
Nesta configuração, o Db2 chamará operações para gerenciar as chaves mestras na biblioteca PKCS n.º 11 dos Hyper Protect Crypto Services. A biblioteca PKCS n.º 11 dos Hyper Protect Crypto Services interage com a sua instância dos Hyper Protect Crypto Services, que fornece o melhor da tecnologia de classe para armazenamento e gerenciamento de suas chaves mestras.
Antes de Iniciar
Para concluir este tutorial, é necessário atender aos pré-requisitos a seguir:
Fluxo de tarefas
Para concluir esta solução, vamos prosseguir pelas etapas a seguir:
Inicialize a sua instância do Hyper Protect Crypto Services
-
Para este tutorial, é necessário inicializar uma instância do Hyper Protect Crypto Services primeiro.
Anote o ID de sua instância do Hyper Protect Crypto Services e o endereço de terminal EP11. Essas informações serão necessárias para as etapas subsequentes.
-
Crie uma função do IAM customizada
Discover HPCS. Esta função fornece uma permissão muito limitada para descobrir a sua instância do Hyper Protect Crypto Services, que é exigida pela biblioteca PKCS #11 . Esta função não tem permissões para usar, criar ou gerenciar chaves ou keystores EP11.- Na UI, acesse Gerenciar > Acesso (IAM) e selecione Funções e, em seguida, clique em Criar.
- Digite o nome
Discover HPCSpara a sua função. - Insira um ID para a função. Este ID é usado no CRN, que é usado ao designar acesso usando a API. O ID da função deve começar com uma letra maiúscula e usar apenas caracteres alfanuméricos, por exemplo,
DiscoverHPCS. - Opcional: insira uma descrição sucinta e útil que ajude os usuários que estão designando acesso a saber qual o nível de acesso que a atribuição de função concede a um usuário. Essa descrição também é mostrada na UI quando um usuário designa acesso ao serviço.
- Na lista de serviços, selecione Hyper Protect Crypto Services
- Selecione Incluir para a ação
hs-crypto.discovery.listserverse, em seguida, clique em Criar.
-
Siga as instruções em Configurando os tipos de usuário da API PKCS #11 para configurar os IDs de serviço e as chaves de API para usuário normal e usuário anônimo.
Não configure o tipo de usuário S.O. que é mencionado nas instruções. Também, ao contrário das instruções, não atribua ao ID de serviço de usuário anônimo a função customizada
Key operator, mas atribua a função customizadaDiscover HPCSem vez disso.Com essa configuração, o usuário anônimo tem apenas permissões muito limitadas em sua instância do Hyper Protect Crypto Services e não pode usar, criar ou gerenciar chaves ou keystores EP11.
-
Salve o valor das chaves API para usuário normal e usuário anônimo para as etapas subsequentes.
-
Siga as instruções para criar um keystore EP11 privado e anote o ID do keystore para as etapas subsequentes.
Configurar a biblioteca PKCS n.º 11 dos Hyper Protect Crypto Services
1. Executar o contêiner do Db2 Community Edition
-
Use o comando a seguir para executar o contêiner do Db2 Community Edition:
docker run -itd --name mydb --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INST1_PASSWORD=password -e DBNAME=testdb ibmcom/db2 -
Execute o comando a seguir por meio de uma linha de comandos em seu sistema host:
docker exec -it --user root --workdir / mydb bash
Esse shell será usado para executar os comandos como root para as etapas subsequentes.
2. Criar o arquivo de configuração do PKCS n.º 11 dos Hyper Protect Crypto Services
Agora, crie um arquivo de configuração para o recurso PKCS n.º 11 dos Hyper Protect Crypto Services. O arquivo de configuração é denominado grep11client.yaml.
Adapte o modelo de arquivo a seguir e nomeie o arquivo grep11client.yaml:
- Substitua
<instance_ID>pelo ID de sua instância do Hyper Protect Crypto Services - Substitua
<EP11_endpoint_URL>e<EP11_endpoint_port_number>pelos respectivos parâmetros do endereço de terminal EP11 de sua instância do Hyper Protect Crypto Services - Substitua
<private_keystore_id>pelo ID do keystore privado que você criou anteriormente - Substitua
<anonymous_user_api_key>pela respectiva chave de API do usuário anônimo
iamcredentialtemplate: &defaultiamcredential
enabled: true
endpoint: "https://iam.cloud.ibm.com"
# The Universally Unique IDentifier (UUID) of your Hyper Protect Crypto Services instance.
instance: "<instance_ID>"
tokens:
0:
grep11connection:
# The EP11 endpoint address starting from 'ep11'. For example: "<instance_ID>.ep11.us-south.hs-crypto.appdomain.cloud"
address: "<EP11_endpoint_URL>"
port: "<EP11_endpoint_port_number>" # The EP11 endpoint port number
tls:
enabled: true # EP11 requires TLS connection.
mutual: false
storage:
remotestore:
enabled: true
users:
# The Security Officer (SO) user
0: # The index of the Security Officer (SO) user MUST be 0.
# The name for the Security Officer (SO) user. For example: "Administrator":
name: "Administrator"
iamauth: *defaultiamcredential
# The normal user
1: # The index of the normal user MUST be 1.
# The name for the normal user. For example: "Normal user":
name: "Normal user"
# The 128-bit UUID of the private keystore which you created previously
tokenspaceID: "<private_keystore_id>"
iamauth: *defaultiamcredential
# The anonymous user
2: # The index of the anonymous user MUST be 2.
# The name for the anonymous user. For example: "Anonymous":
name: "Anonymous"
# The public keystore will not be used with this setup.
# Specify an arbitrary 128-bit UUID below, e.g.:
tokenspaceID: "12345678-1234-1234-1234-1234567890AB"
iamauth:
<<: *defaultiamcredential
# Provide the API key for the Anonymous user.
apikey: "<anonymous_user_api_key>"
logging:
# Set the logging level.
# The supported levels, in an increasing order of verboseness: 'panic', 'fatal', 'error', 'warning'/'warn', 'info', 'debug', 'trace'. The Default value is 'warning'.
loglevel: "info"
logpath: "/tmp/grep11client.log" # The full path of your logging file.
3. Instale a biblioteca do PKCS n.º 11 do Hyper Protect Crypto Services
-
Copie o arquivo de configuração criado anteriormente
grep11client.yamle a biblioteca PKCS #11pkcs11-grep11-<platform>.so.<version>para o seu contêiner DB2. -
Execute os comandos a seguir como
rootpara instalar a biblioteca PKCS n.º 11 dos Hyper Protect Crypto Services em sua configuração do Db2.mkdir /etc/ep11client chmod a+rx /etc/ep11client/ cp grep11client.yaml /etc/ep11client/grep11client.yaml chmod a+r /etc/ep11client/grep11client.yaml mkdir -p /pkcs11 cp pkcs11-grep11-<platform>.so.<version> /pkcs11/pkcs11-grep11.so chmod -R a+rwx /pkcs11 touch /tmp/grep11client.log chmod a+rw /tmp/grep11client.log
Configurar a criptografia nativa do Db2
Agora, vamos configurar a criptografia nativa do Db2. Para isso, certifique-se de que você tem todos os privilégios de administrador do banco de dados.
-
Crie o arquivo
/pkcs11/keystore.confcom o conteúdo a seguir:VERSION=1 PRODUCT_NAME=Other ALLOW_KEY_INSERT_WITHOUT_KEYSTORE_BACKUP=true LIBRARY=/pkcs11/pkcs11-grep11.so SLOT_ID=0 NEW_OBJECT_TYPE=PRIVATE KEYSTORE_STASH=/pkcs11/pkcs11_pw.sth -
Execute os comandos a seguir como
rootpara atualizar a propriedade e as permissões do arquivo/pkcs11/keystore.conf:chown -R db2inst1:db2iadm1 /pkcs11/keystore.conf chmod ug+rw /pkcs11/keystore.conf -
Para criar um arquivo stash de senha, execute os comandos a seguir e substitua <normal_user_api_key> pela chave de API do usuários normal que você criou.
su - db2inst1 db2credman -stash -password "<normal_user_api_key>" -to /pkcs11/pkcs11_pw.sth -
Para atualizar a configuração do Db2, execute o comando a seguir como usuário
db2inst1:db2 update dbm cfg using keystore_location /pkcs11/keystore.conf keystore_type pkcs11 -
Para configurar a variável de ambiente
DB2_DEK_MAC_TYPE, execute os comandos a seguir como usuáriodb2inst1e reinicie o DB2:db2 terminate db2stop export DB2_DEK_MAC_TYPE=HMAC db2startVocê precisa especificar a variável de ambiente
DB2_DEK_MAC_TYPE=HMACantes de iniciar o Db2. Se você usar o Db2 no Windows, será necessário configurar a variável de perfil do Db2 usando o comando a seguir:db2set -g DB2_DEK_MAC_TYPE=HMAC -
Para criar um banco de dados criptografado, execute os comandos a seguir:
db2 create db cryptdb1 encryptEste comando imprime as informações a seguir:
DB20000I The CREATE DATABASE command completed successfully. -
Para testar o banco de dados criptografado, execute os comandos a seguir:
db2 connect to cryptdb1 db2 "create table test (id int not null, data varchar(100))" db2 "insert into test values (1, 'This is a secret text')" db2 "select * from test"Este comando imprime as informações a seguir:
ID DATA ----------- ---------------------------------------------------------------------------------------------------- 1 This is a secret text 1 record(s) selected.
Próximas etapas
Seus dados sensíveis agora são armazenados com segurança no armazenamento criptografado. E a chave mestra é mantida nos Hyper Protect Crypto Services de uma maneira altamente segura e à prova de violação.
Neste tutorial, você aprendeu a configurar a criptografia nativa do Db2 com os Hyper Protect Crypto Services.
- Saiba mais sobre PKCS n.º 11.
- Saiba mais sobre a API PKCS n.º 11.
- Comece a usar a API PKCS n.º 11.