Participe da Maratona Behind the Code! A competição de programação que mais te desafia! Inscreva-se aqui

Acesse seus dados no Apache Spark de forma segura com Keep Your Own Key

Um Cloud Hardware Security Module (HSM) é uma máquina com processadores ou aceleradores criptográficos especializados que torna a criptografia rápida e segura. Os Cloud HSMs estão amplamente disponíveis. Como podemos utilizá-los em nossos aplicativos?

Na IBM, o IBM Cloud Hyper Protect Crypto Services é desenvolvido no primeiro e único Hardware Security Module (HSM) com certificação FIPS 140-2 Nível 4 disponível na nuvem pública.

Usando um Cloud HSM em nossos aplicativos empresariais, o coprocessador criptográfico dedicado ajuda a processar todos os dados relacionados à criptografia, o que diminui a probabilidade de adulteração e ataques de criptoanálise. Além disso, Cloud HSMs aumentam consideravelmente a rapidez da criptografia, tirando a carga da CPU para cifrar e decifrar os dados.

A IBM Cloud tem duas ofertas exclusivas de Cloud HSM:

  • O IBM Key Protect é um serviço de gerenciamento de chaves (KMS) respaldado por uma instância de Cloud HSM para gerenciar chaves de forma segura. O IBM Key Protect é um serviço de pagamento por uso. Ele cobra por chamada de API para o serviço de gerenciamento de chaves.

  • O IBM Hyper Protect também é um serviço de KMS. No entanto, ele permite provisionar uma instância dedicada de uma máquina de servidor de Cloud HSM na nuvem. A função Keep Your Own Key (KYOK) é habilitada para fornecer acesso a HSMs criptográficos baseados na nuvem.

As duas ofertas integram-se bem com outros serviços da IBM Cloud, tais como Red Hat OpenShift na IBM Cloud e Cloud Object Storage, entre outros.

Outro benefício de ter um hardware dedicado para criptografia é que o hardware gera e armazena as chaves no dispositivo criptográfico dedicado, mantendo-as bastante seguras. O dispositivo é capaz de detectar qualquer tentativa de adulteração, inclusive danos físicos. Ao detectar adulteração, o dispositivo apaga automaticamente as chaves, tornando inacessíveis os dados que podiam ser acessados com elas.

Como podemos armazenar uma chave de maneira muito segura e confiável em um Cloud HSM, é possível acessar sistemas de processamento de big data, como o Apache Stark, com uma única chave. A criptografia de dados e a autenticação podem ser feitas por uma única chave ou grupo de chaves; todas são manuseadas por uma instância de Cloud HSM.

O Apache Spark aproveita o suporte de Keep Your Own Key (KYOK) da IBM para o Red Hat OpenShift. O diagrama a seguir mostra uma visão geral da criptografia de dados em um Red Hat OpenShift, usando uma chave raiz (CRK) fornecida pelo usuário e gerenciada por uma instância do serviço de gerenciamento de chaves (KMS). Seja com armazenamento em bloco IBM ou IBM Cloud Object Storage, os dados são criptografados por chaves raiz (CRK) fornecidas pelo usuário e pela chave de criptografia de dados (DEK) embrulhada derivada. (Leia mais sobre criptografia de envelope na documentação do IBM Key Protect.)

Visão geral arquitetural da criptografia de dados em dados do Apache Spark em um cluster Red Hat OpenShift na IBM Cloud

É possível ver um diagrama de arquitetura mais detalhado mostrando a criptografia de cluster para o Red Hat OpenShift na IBM Cloud na documentação.

Como o Apache Spark aproveita a configuração Keep Your Own Key (KYOK) no Red Hat OpenShift na IBM Cloud, não é necessário fornecer jars ou bibliotecas adicionais para fazê-lo funcionar. Além disso, os usuários não precisam de ajustes ou configurações adicionais. Entretanto, é possível usar a API fornecida pelo serviço de KMS para criar aplicativos que usem KYOK com mais controle dos dados e de quem pode acessá-los. Dados em repouso e dados em uso podem ser criptografados, com as chaves fornecidas pelo usuário. Saiba mais sobre como proteger cargas de trabalho de cluster nos documentos do Red Hat OpenShift na IBM Cloud. Sobre criptografia de dados em uso, consulte a documentação do IBM Cloud Data Shield.

Usar um armazenamento de objetos para acessar e armazenar dados a serem processados é uma prática comum. O pipeline inteiro de processamento de dados deve estar habilitado para KYOK, não apenas um componente. Caso contrário, perde-se a finalidade de ter uma criptografia habilitada para KYOK. O IBM Cloud Object Storage integra-se com os serviços IBM Key Protect e IBM Hyper Protect usando uma interface KMS. Isso significa que podemos usar a criptografia KYOK para acessar e armazenar dados no IBM Cloud Object Storage.

Neste tutorial, mostrarei como usar os recursos de criptografia Keep Your Own Key (KYOK) para mecanismos de processamento de dados em grande escala, como o Apache Spark.

Pré-requisitos

Etapas

Etapa 1: Habilitar o serviço KMS para seu cluster Red Hat OpenShift na IBM Cloud

  1. Liste as instâncias de KMS em execução no momento: ibmcloud oc kms instance ls. Você verá uma saída semelhante a esta (os IDs listados aqui não são reais).

    Saída do comando de execução da etapa 1-1

  2. Obtenha a chave raiz da sua instância de KMS: ibmcloud oc kms crk ls --instance-id 21fe0624-UUID-UUID-UUID-4c9c5404f4c8.

    Saída do comando de execução da etapa 1-2

  3. Habilite o provedor de KMS no seu cluster. Primeiro, é necessário localizar o ID do cluster da instância do cluster OpenShift já implementado: ibmcloud oc cluster ls

    Saída do comando de execução da etapa 1-3.1

    Na amostra de saída, abcd123456789 é o ID do cluster. Em seguida, é necessário habilitar o KMS no cluster OpenShift, especificando o ID do cluster, o ID da instância de KMS e a chave raiz que reunimos antes: ibmcloud oc kms enable -c abcd123456789 --instance-id 21fe0624-UUID-UUID-UUID-4c9c5404f4c8 --crk f1328360-UUID-UUID-UUID-ed0f3526a8a4

    Essa atualização demorará um pouco para entrar em vigor.

    Saída do comando de execução da etapa 1-3.2

  4. Verifique se a atualização foi concluída com sucesso:

    ibmcloud oc cluster get -c abcd123456789 | grep -e "Master Status:".

    Você deve ver um status mestre como Ready (1 week ago).

    Saída do comando de execução da etapa 1-3.3

    Depois que o status mestre aparecer como Ready, será possível verificar se os segredos do cluster estão criptografados. Basta consultar as informações contidas em etcd no mestre.

Etapa 2: Implementar um aplicativo Apache Stark no cluster Red Hat OpenShift na IBM Cloud

  1. Entre no Red Hat OpenShift: oc login.

  2. Crie uma conta de serviço, com funções de cluster a serem usadas com tarefas ou implementações do Spark:

    Saída do comando de execução da etapa 2-2

  3. Localize a URL mestre: kubectl cluster-info. Você verá uma saída semelhante a esta:

    Saída do comando de execução da etapa 2-3

  4. Acesse o diretório de liberação do Spark e inicialize a tarefa do Spark. Precisamos de uma imagem do Spark para implementar a tarefa do Spark usando a interface Kubernetes. Para desenvolver e carregar seu próprio script do Spark, emita estes comandos:

     cd spark-release
     bin/docker-image-tool.sh -r my-repo -t v3.0.0 build
    

    Aqui, my-repo é um repositório público do Docker. No entanto, é possível configurar seu próprio repositório privado ou público usando OpenShift. Saiba mais sobre como fazer isso na documentação do OpenShift.

    Agora, emita este comando:

    bin/docker-image-tool.sh -r my-repo -t v3.0.0 push

    Depois que a imagem estiver pronta, envie a tarefa do Spark conforme segue.

            bin/spark-submit \
             --master k8s://https://testing.containers.cloud.ibm.com:31310 \
             --deploy-mode cluster \
             --name spark-pi \
             --class org.apache.spark.examples.SparkPi \
             -c spark.kubernetes.authenticate.driver.serviceAccountName=spark \
             -c spark.kubernetes.container.image=my-repo/spark:v3.0.0 \
             local:///opt/spark/examples/jars/spark-examples_2.12-3.0.0.jar
    

    Preste atenção ao driver implementado:

    Saída do comando de execução da etapa 2-4

O exemplo que usei neste tutorial vem na distribuição do Spark. Todavia, é possível escrever seu próprio aplicativo Spark e enviá-lo usando a documentação do Spark. É possível usar a amostra de Java fornecida para acessar o IBM Cloud Object Storage com Apache Spark. Baixe o arquivo java-template.zip (ZIP, 19 KB), descompacte-o e siga as instruções no arquivo readme.md para implementar seu próprio código usando o IBM Cloud Object Storage. Mais amostras estão disponíveis no meu repositório do GitHub Spark-Templates.

Resumo e próximas etapas

Neste tutorial, você aprendeu sobre a importância de usar o recurso Keep Your Own Key (KYOK) para acessar dados de forma segura e como é possível usar o KYOK para executar uma carga de trabalho de big data usando o Apache Spark.

Saiba como criar uma chave raiz e habilitar a criptografia KMS no Kubernetes neste tutorial.