Configurar a criptografia para o S3 com o 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 KMS key em 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.
-
No AWS, acesse 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:
JSON{
"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:
JSON{
"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 armazenamento de objetos na nuvem usando Unity Catalog.
Etapa 1: Configurar um instance profile
Em Databricks, crie um arquivo instance profile.
Etapa 2: Adicione o instance profile como um usuário key para o KMS key fornecido na configuração
- No AWS, acesse o serviço KMS.
- Clique no site key ao qual o senhor deseja adicionar permissão.
- Na seção Key Users (Usuários-chave), clique em Add (Adicionar ).
- Marque a caixa de seleção ao lado de IAM role.
- Clique em Adicionar .
Etapa 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.
- Spark configuration
- Init script
Add the following to your Spark configuration:
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
You can also configure per-bucket KMS encryption. For example, you can configure each bucket individually using the following keys:
# 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>
For more information, see Per-bucket configuration.
Configure the global encryption setting by running the following code in a notebook cell to create the init script set-kms.sh
and configure a cluster to run the 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)
Once you verify that encryption is working, configure encryption on all clusters by adding a cluster-scoped init script to cluster policies.