Configurar as definições relacionadas ao serviço de commit do Databricks S3
Databricks execução a commit serviço que coordena gravações em Amazon S3 a partir de vários clusters. Esse serviço é executado no Databricks plano de controle. Para aumentar a segurança, o senhor pode desativar a otimização do upload direto do serviço, conforme descrito em Desativar a otimização do upload direto. Para restringir ainda mais o acesso aos seus buckets S3, consulte Restringir o acesso a endereços IP específicos.
Se você receber um alerta do AWS GuardDuty relacionado ao serviço de commit do S3, consulte Alerta do AWS GuardDuty relacionado ao serviço de commit do S3.
Sobre o serviço de commit
O serviço de commit do S3 ajuda a garantir a consistência das gravações em vários clusters em uma única tabela em casos específicos.Por exemplo, o serviço de commit ajuda a Delta Lake a implementar transações ACID.
Na configuração default , o Databricks envia credenciais temporárias da AWS do plano compute para o plano de controle na chamada de API do serviço de commit. as credenciais instance profile são válidas por seis horas.
O compute plano grava dados diretamente no S3 e, em seguida, o serviço do S3 commit no plano de controle fornece controle de simultaneidade finalizando o commit logs upload (concluindo o upload multiparte descrito abaixo). O serviço commit não lê nenhum dado do S3. Coloca um novo arquivo no S3 se ele não existir.
Os dados mais comuns gravados no S3 pelo serviço de commit do Databricks são os logs Delta, que contêm agregados estatísticos dos seus dados, como os valores mínimo e máximo da coluna. A maioria dos dados logs Delta são enviados ao S3 a partir do plano de controle usando um multipart upload do Amazon S3.
Depois que os clusters preparam os dados multipartes para gravar os logs Delta no S3, o serviço commit do S3 no plano de controle do Databricks conclui o upload multipartes do S3, informando ao S3 que ele foi concluído. Como uma otimização de desempenho para atualizações muito pequenas, por default , o serviço de commit às vezes envia pequenas atualizações diretamente do plano de controle para o S3. Esta otimização de atualização direta pode ser desativada. Consulte Desativar a otimização de upload direto.
Além do Delta Lake, os seguintes recursos do Databricks usam o mesmo serviço de commit do S3:
O serviço de commit é necessário porque a Amazon não fornece uma operação que coloca um objeto somente se ele ainda não existir. O Amazon S3 é um sistema distribuído. Se o S3 receber várias solicitações de gravação para o mesmo objeto simultaneamente, ele substituirá todos, exceto o último objeto gravado. Sem a capacidade de verificar centralmente commits, commits simultâneos de clusters diferentes corromperiam tabelas.
Alertas do AWS GuardDuty relacionados ao serviço de commit do S3
Importante
Os commits em tabelas gerenciadas pelo Unity Catalog não acionam alertas do GuardDuty.
Se você usar o AWS GuardDuty e acessar dados usando instance profiles do AWS IAM, o GuardDuty poderá criar alertas para o comportamento padrão do Databricks relacionado a Delta Lake, Structured Streaming, Auto Loader ou COPY INTO
. Esses alertas estão relacionados à detecção de exfiltração de credenciais da instance, que é ativada por padrão. Esses alertas incluem o título UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.InsideAWS
.
Você pode configurar sua implantação de Databricks para tratar dos alertas do GuardDuty relacionados ao serviço de commit do S3 criando um instance profile da AWS que assume a função da sua IAM role de acesso aos dados do S3 original.
Como alternativa ao uso de credenciais de instance profile, esse novo instance profile pode configurar clusters para assumir uma função com tokens de curta duração. Esse recurso já existe em todas as versões recentes do Databricks Runtime e pode ser imposto globalmente por meio de políticas de cluster.
Se você ainda não o tiver feito, crie um instance profile normal para acessar os dados do S3. Esse instance profile utiliza credenciais do instance profile para acessar diretamente os dados do S3.
Esta seção se refere à função ARN neste instance profile como
<data-role-arn>
.Crie um novo instance profile que usará tokens e fará referência ao instance profile que acessa diretamente os dados. Seus farão clusters referência a esse novo tokensbaseado em .instance profile Consulte Tutorial: Configurar o acesso ao S3 com um instance profile.
Esse instance profile não precisa de qualquer acesso direto ao S3.Em vez disso, ele precisa apenas das permissões para assumir a IAM role que você usa para acesso aos dados. Esta seção se refere à função ARN neste instance profile como
<cluster-role-arn>
.Adicione uma política IAM anexada na nova IAM role do instance profile de cluster (
<cluster-role-arn>
). Adicione a seguinte declaração de política à sua nova IAM role do instance profile do cluster e substitua<data-role-arn>
pelo ARN de seu instance profile original que acessa seu bucket.{ "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "<data-role-arn>" }
Adicione uma declaração de política de confiança à sua IAM role de acesso a dados existente e substitua
<cluster-role-arn>
pelo ARN do instance profile original que acessa seu bucket.{ "Effect": "Allow", "Principal": { "AWS": "<cluster-role-arn>" }, "Action": "sts:AssumeRole" }
Para usar o código do notebook que faz conexão direta com o S3 sem usar DBFS, configure seus clusters para usar o novo instance profile baseado em tokens e assumir a função de acesso a dados.
Configure um cluster para acesso do S3 a todos os buckets. Adicione o seguinte à configuração do Spark do cluster:
fs.s3a.credentialsType AssumeRole fs.s3a.stsAssumeRole.arn <data-role-arn>
Você pode configurar isso para um bucket específico:
fs.s3a.bucket.<bucket-name>.aws.credentials.provider org.apache.hadoop.fs.s3a.auth.AssumedRoleCredentialProvider fs.s3a.bucket.<bucket-name>.assumed.role.arn <data-role-arn>
Desativar a otimização de upload direto
Como uma otimização de desempenho para atualizações muito pequenas, por padrão, o serviço commit às vezes envia pequenas atualizações diretamente do plano de controle para o S3. Para desativar essa otimização, defina o parâmetro spark.hadoop.fs.s3a.databricks.s3commit.directPutFileSizeThreshold
do Spark como 0
. Você pode aplicar essa configuração na configuração do Spark do cluster ou defini-la usando as políticas do cluster.
Desativar esse recurso pode resultar em um pequeno impacto no desempenho para consultas de transmissão estruturada quase em tempo real com pequenas atualizações constantes. Considere testar o impacto no desempenho com seus dados antes de desativar esse recurso na produção.
Restringir o acesso a endereços IP específicos
O senhor pode limitar os buckets S3 específicos para que sejam acessíveis somente a partir de endereços IP específicos. Por exemplo, o senhor pode restringir o acesso apenas ao seu próprio ambiente e aos endereços IP do plano de controle do Databricks, incluindo o serviço de commit do S3. Isso reduz o risco de que as credenciais sejam usadas em outros locais. Consulte (Opcional) Restringir o acesso aos buckets S3.