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://
usando Unity Catalog ou um instance profile (configuração herdada). Para criptografar seu bucket de armazenamento workspace, consulte Chave de gerenciar o cliente para o armazenamento workspace .
Configurar a criptografia para o S3 usando o Unity Catalog
O senhor pode configurar a criptografia no lado do servidor para permitir que tabelas e volumes externos no Unity Catalog acessem dados no S3. A criptografia SSE não é compatível com tabelas externas compartilhadas usando o Delta Sharing.
Etapa 1: Atualize sua política de chaves KMS no AWS
Para proteger os dados em S3, AWS suporta criptografia do lado do servidor (SSE) com Amazon S3 chave gerenciar (SSE-S3) ou AWS KMS chave (SSE-KMS). Se o senhor usar um AWS S3 gerenciar key, pule para a etapa 2.
Na AWS, vá para o serviço KMS.
Clique no endereço key ao qual o senhor deseja adicionar permissão.
Na seção key Policy, selecione Switch to policy view.
Edite a seção da política key que permite que o S3 use o key, por exemplo:
{ "Sid": "Allow access through S3 for all principals in the account that are authorized to use S3", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:CallerAccount": "<AWS ACCOUNT ID>", "kms:ViaService": "s3.<REGION>.amazonaws.com" } } },
Clique em Salvar alterações.
Etapa 2: Configurar o acesso ao S3 usando o Unity Catalog
Crie uma credencial de armazenamento para se conectar ao S3, usando as instruções em Criar uma credencial de armazenamento para se conectar ao AWS S3.
Certifique-se de criar a política IAM no mesmo account que o bucket S3. Se você estiver usando o SSE-KMS, inclua o seguinte na política:
{ "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": [ "arn:aws:kms:<KMS-KEY>" ], "Effect": "Allow" },
Consulte a Etapa 1: Criar um IAM role.
Crie um local externo para se conectar ao S3, usando as instruções em Criar um local externo para conectar o armazenamento em nuvem à Databricks.
Configure a criptografia do lado do servidor em seu local externo, usando as instruções em Configurar um algoritmo de criptografia em um local externo.
Configurar a criptografia para S3 usando o perfil de instância (legado)
O senhor pode configurar a criptografia para S3 com KMS usando o perfil de instância. No entanto, como esse é um padrão herdado, a Databricks recomenda o uso do Unity Catalog para configurar o acesso ao S3 e aos volumes para interação direta com os arquivos. Consulte Conectar-se ao serviço e ao armazenamento de objetos na nuvem usando Unity Catalog.
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
Na AWS, vá para o serviço KMS.
Clique na key à qual deseja adicionar permissão.
Na seção Usuários key , clique em Adicionar.
Marque a caixa de seleção ao lado da IAM role.
Clique em Adicionar.
passo 3: configurar propriedades de criptografia
Defina as propriedades globais de criptografia do KMS em uma configuraçãoSpark ou em um init script. Configure o spark.hadoop.fs.s3a.server-side-encryption.key
key com seu próprio key ARN.
Adicione o seguinte à sua 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.
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.