Configurar criptografia para S3 com KMS

Este artigo aborda como configurar a criptografia no lado do servidor com um KMS key para gravar arquivos em caminhos s3a://. Para criptografar seu bucket de armazenamento workspace, consulte Chave de gerenciar o cliente para o armazenamento workspace .

Para configurar a criptografia no lado do servidor para permitir que tabelas e volumes externos no Unity Catalog acessem dados no S3, consulte Configurar um algoritmo de criptografia em um local externo.

passo 1: configurar um instance profile

No Databricks, crie um instance profile.

passo 2: adicione o instance profile como um usuário-chave para a chave KMS fornecida na configuração

  1. Na AWS, vá para o serviço KMS.

  2. Clique na key à qual deseja adicionar permissão.

  3. Na seção Usuários key , clique em Adicionar.

  4. Marque a caixa de seleção ao lado da IAM role.

  5. Clique em Adicionar.

passo 3: configurar propriedades de criptografia

Configure propriedades de criptografia KMS globais em uma configuração do Spark ou usando um init script. Configure a key spark.hadoop.fs.s3a.server-side-encryption.key com seu próprio ARN key .

Configuração do Spark

spark.hadoop.fs.s3a.server-side-encryption.key arn:aws:kms:<region>:<aws-account-id>:key/<bbbbbbbb-ddd-ffff-aaa-bdddddddddd>
spark.hadoop.fs.s3a.server-side-encryption-algorithm SSE-KMS

Você também pode configurar a criptografia KMS por bucket. Por exemplo, você pode configurar cada bucket individualmente usando a seguinte key:

# Set up authentication and endpoint for a specific bucket
spark.hadoop.fs.s3a.bucket.<bucket-name>.aws.credentials.provider <aws-credentials-provider-class>
spark.hadoop.fs.s3a.bucket.<bucket-name>.endpoint <aws-endpoint>

# Configure a different KMS encryption key for a specific bucket
spark.hadoop.fs.s3a.bucket.<bucket-name>.server-side-encryption.key <aws-kms-encryption-key>

Para obter mais informações, consulte Configuração por bucket.

init script

Configure a configuração de criptografia global executando o código a seguir em uma célula Notebook para criar o init script set-kms.sh e configure um clusters para executar o script.

dbutils.fs.put("/databricks/scripts/set-kms.sh", """
#!/bin/bash

cat >/databricks/driver/conf/aes-encrypt-custom-spark-conf.conf <<EOL
[driver] {
"spark.hadoop.fs.s3a.server-side-encryption.key" = "arn:aws:kms:<region>:<aws-account-id>:key/<bbbbbbbb-ddd-ffff-aaa-bdddddddddd>"
"spark.hadoop.fs.s3a.server-side-encryption-algorithm" = "SSE-KMS"
}
EOL
""", True)

Depois de verificar se a criptografia está funcionando, configure a criptografia em todos os clusters adicionando um init script com escopo de cluster à política de cluster.