Usando o Catalog Explorer ou o SQL para se conectar ao AWS S3
Esta página descreve como se conectar a um bucket do AWS S3 criando primeiro um objeto de credencial de armazenamento e, em seguida, criando um objeto de local externo usando o Catalog Explorer ou o SQL. Você deve criar a credencial de armazenamento antes de criar o local externo.
Para um processo de configuração mais automatizado, o site Databricks recomenda o uso do padrãoAWS CloudFormation Quickstart para criar esses dois objetos.
Antes de começar
Pré-requisitos :
O senhor deve criar o bucket S3 que deseja usar como um local externo no AWS antes de criar o objeto de local externo no Databricks.
-
Não use a notação de ponto (por exemplo,
incorrect.bucket.name.notation
) nos nomes dos buckets do S3. Embora o AWS permita pontos em nomes de buckets, a Databricks não oferece suporte a buckets S3 com notação de pontos. Os buckets que contêm pontos podem causar problemas de compatibilidade com recursos como Delta Sharing devido a falhas na validação do certificado SSL. Para obter mais informações, consulte as práticas recomendadas de nomenclatura de buckets emAWS. -
Os caminhos de localização externos devem conter somente caracteres ASCII padrão (letras
A–Z
,a–z
, dígitos0–9
e símbolos comuns como/
,_
,-
). -
O bucket não pode ter uma lista de controle de acesso S3 anexada a ele.
-
Evite usar um caminho no S3 que já esteja definido como um local externo em outro metastore do Unity Catalog. O senhor pode ler dados com segurança em um único local externo S3 de mais de um metastore, mas gravações simultâneas no mesmo local S3 de vários metastores podem levar a problemas de consistência.
Requisitos de permissões do Databricks :
- Você deve ter o privilégio
CREATE STORAGE CREDENTIAL
na metastore. Os administradores do metastore têmCREATE STORAGE CREDENTIAL
no metastore por default. - Você deve ter o privilégio
CREATE EXTERNAL LOCATION
na metastore e na credencial de armazenamento referenciada no local externo. Os administradores do metastore têmCREATE EXTERNAL LOCATION
no metastore por default.
Requisitos de permissões do AWS :
- O senhor deve ter as permissões
iam:CreateRole
para criar o IAM role.
Criar uma credencial de armazenamento que acesse um bucket do AWS S3
Antes de criar um local externo, o senhor precisa de uma credencial de armazenamento que permita o acesso ao bucket S3. Se já tiver uma credencial de armazenamento, o senhor pode pular para Criar um local externo para um bucket do AWS S3.
o passo 1: Criar um IAM role
Na AWS, crie uma IAM role que conceda acesso ao bucket S3 que você deseja que seus usuários acessem. Essa IAM role deve ser definida na mesma account que o bucket do S3.
Se o senhor já tiver criado um IAM role que forneça esse acesso, poderá pular este passo e ir direto para o passo 2: Fornecer os detalhes do IAM role ao Databricks.
-
Crie uma IAM role que permitirá acesso ao bucket S3.
O processo de criação de função divide-se em dois passos. Neste passo, você cria a função, adicionando uma policy de relacionamento de confiança temporária e um ID externo de placeholder que você modifica após criar a credencial de armazenamento no Databricks.
Você deve modificar a policy de confiança após criar a função, pois ela deve ser autoassumida (ou seja, deve ser configurada para confiar em si mesma). A função deve, portanto, existir antes de você adicionar a instrução de autossuposição. Para obter informações sobre funções autoassumidas, consulte este artigo do blog da Amazon.
Databricks Bloqueia credenciais de armazenamento novas e existentes com base na função IAM que não são autoproclamadas. Para obter detalhes, consulte Política autopresumida de aplicação de funções.
Para criar a política, você deve usar uma ID externa de placeholder.
-
Crie a IAM role com uma policy de confiança personalizada .
-
No campo Policy de confiança personalizada , cole o JSON da policy a seguir.
Esta política estabelece uma relação de confiança entre contas para que o Unity Catalog possa assumir o papel de acessar os dados no bucket em nome dos usuários do Databricks. Isso é especificado pelo ARN na seção
Principal
. É um valor estático que faz referência a uma função criada pelo Databricks.A política define a ID externa como
0000
como espaço reservado. O senhor atualizará isso para a ID externa de sua credencial de armazenamento em um passo posterior. A política é um pouco diferente se o senhor usar Databricks on AWS GovCloud (FedRAMP High).
- Databricks on AWS
- Databricks on AWS GovCloud
- Databricks on AWS GovCloud DoD
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": ["arn:aws:iam::414351767826:role/unity-catalog-prod-UCMasterRole-14S5ZJVKOTYTL"]
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "0000"
}
}
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": ["arn:aws-us-gov:iam::044793339203:role/unity-catalog-prod-UCMasterRole-1QRFA8SGY15OJ"]
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "0000"
}
}
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": ["arn:aws-us-gov:iam::170661010020:role/unity-catalog-prod-UCMasterRole-1DI6DL6ZP26AS"]
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "0000"
}
}
}
]
}
-
Ignore a configuração da política de permissões. O senhor voltará a acrescentar isso em um passo posterior.
-
Salve a IAM role.
-
Crie a seguinte política de IAM na mesma account que o bucket S3, substituindo os seguintes valores:
-
<BUCKET>
: nome do depósito S3. -
<KMS-KEY>
: Opcional. Se a criptografia estiver habilitada, informe o nome da key KMS que criptografa o conteúdo do bucket do S3. Se a criptografia estiver desabilitada, remova toda a seção KMS da policy de IAM.
-
Se a criptografia estiver ativada, o senhor deverá atualizar sua política KMS key em AWS para conceder acesso ao Unity Catalog IAM role. Caso contrário, o Unity Catalog não poderá acessar os dados no bucket. Adicione o seguinte à política key, substituindo os espaços reservados por seus valores:
"Principal": {
"AWS": "arn:aws:iam::<AWS-ACCOUNT-ID>:role/<UNITY-CATALOG-IAM-ROLE>"
}
Consulte Configurar criptografia para S3 usando o Unity Catalog.
-
<AWS-ACCOUNT-ID>
: ID de account da sua account da AWS (não da sua account do Databricks). -
<AWS-IAM-ROLE-NAME>
: nome da IAM role AWS que você criou na passo anterior.
Essa política de IAM concede acesso de leitura e gravação. Você também pode criar uma política que conceda somente acesso de leitura. No entanto, isso pode ser desnecessário porque o senhor pode marcar a credencial de armazenamento como somente leitura, e o site Databricks ignora qualquer acesso de gravação concedido por esse IAM role.
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:ListBucketMultipartUploads",
"s3:ListMultipartUploadParts",
"s3:AbortMultipartUpload"
],
"Resource": ["arn:aws:s3:::<BUCKET>/*", "arn:aws:s3:::<BUCKET>"],
"Effect": "Allow"
},
{
"Action": ["kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*"],
"Resource": ["arn:aws:kms:<KMS-KEY>"],
"Effect": "Allow"
},
{
"Action": ["sts:AssumeRole"],
"Resource": ["arn:aws:iam::<AWS-ACCOUNT-ID>:role/<AWS-IAM-ROLE-NAME>"],
"Effect": "Allow"
}
]
}
Se você precisar de uma policy de IAM mais restritiva para o Unity Catalog, entre em contato com a equipe da sua account do Databricks para obter ajuda.
- Crie uma política IAM para eventos de arquivo no mesmo account que o bucket S3.
Esse passo é opcional, mas altamente recomendado. Se o senhor não conceder acesso ao Databricks para configurar eventos de arquivo em seu nome, deverá configurar os eventos de arquivo manualmente para cada local. Caso contrário, o senhor terá acesso limitado a recursos críticos que o site Databricks poderá liberar no futuro. Para obter mais informações sobre eventos de arquivo, consulte ( Recomendado) Habilitar eventos de arquivo para um local externo.
A política de IAM concede à Databricks permissão para atualizar a configuração de notificação de eventos do seu bucket, criar um tópico de SNS, criar uma fila de SQS e assinar a fila de SQS no tópico de SNS. Esses são recursos necessários para recursos que usam eventos de arquivo. Substitua <BUCKET>
pelo nome do bucket S3.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ManagedFileEventsSetupStatement",
"Effect": "Allow",
"Action": [
"s3:GetBucketNotification",
"s3:PutBucketNotification",
"sns:ListSubscriptionsByTopic",
"sns:GetTopicAttributes",
"sns:SetTopicAttributes",
"sns:CreateTopic",
"sns:TagResource",
"sns:Publish",
"sns:Subscribe",
"sqs:CreateQueue",
"sqs:DeleteMessage",
"sqs:ReceiveMessage",
"sqs:SendMessage",
"sqs:GetQueueUrl",
"sqs:GetQueueAttributes",
"sqs:SetQueueAttributes",
"sqs:TagQueue",
"sqs:ChangeMessageVisibility",
"sqs:PurgeQueue"
],
"Resource": ["arn:aws:s3:::<BUCKET>", "arn:aws:sqs:*:*:csms-*", "arn:aws:sns:*:*:csms-*"]
},
{
"Sid": "ManagedFileEventsListStatement",
"Effect": "Allow",
"Action": ["sqs:ListQueues", "sqs:ListQueueTags", "sns:ListTopics"],
"Resource": ["arn:aws:sqs:*:*:csms-*", "arn:aws:sns:*:*:csms-*"]
},
{
"Sid": "ManagedFileEventsTeardownStatement",
"Effect": "Allow",
"Action": ["sns:Unsubscribe", "sns:DeleteTopic", "sqs:DeleteQueue"],
"Resource": ["arn:aws:sqs:*:*:csms-*", "arn:aws:sns:*:*:csms-*"]
}
]
}
-
Anexe as políticas do site IAM ao site IAM role.
Em Permission tab da função, anexe as políticas IAM que o senhor acabou de criar.
o passo 2: Forneça ao site Databricks os detalhes do IAM role
-
Em Databricks, log in para um workspace que está vinculado ao metastore Unity Catalog.
Você deve ter o privilégio
CREATE STORAGE CREDENTIAL
. As funções de administrador do metastore e administrador da account incluem essa permissão. -
Clique em
Catálogo para abrir o Catalog Explorer.
-
Clique em
e, em seguida, clique em Criar uma credencial .
-
Selecione um tipo de credencial de IAM role da AWS .
-
Insira um nome para a credencial, o ARN da IAM role que autoriza o Unity Catalog a acessar o local de armazenamento em seu locatário de nuvem e um comentário opcional.
Se o senhor já tiver definido um instance profile em Databricks, clique em Copy instance profile para copiar o IAM role ARN para esse instance profile. O instance profile's IAM role deve ter uma relação de confiança cruzadaaccount que permita que o Databricks assuma a função para acessar o bucket em nome dos usuários do Databricks. Para obter mais informações sobre a política IAM role e os requisitos de relacionamento de confiança, consulte o passo 1: Criar um IAM role.
-
(Opcional) Se você quiser que os usuários tenham acesso somente para leitura aos locais externos que usam essa credencial de armazenamento, em Opções avançadas , selecione Limitar ao uso somente para leitura. Você pode alterar essa configuração posteriormente. Para obter mais informações, consulte Marcar uma credencial de armazenamento como somente leitura.
-
Clique em Criar .
-
Na caixa de diálogo Credencial de armazenamento criada , copie a ID externa .
-
Clique em Concluído .
-
(Opcional) Vincule a credencial de armazenamento a workspaces específicos.
Em default, qualquer usuário privilegiado pode usar a credencial de armazenamento em qualquer workspace anexado ao metastore. Se o senhor quiser permitir o acesso somente a partir de um espaço de trabalho específico, acesse o espaço de trabalho tab e atribua o espaço de trabalho. Consulte Atribuir uma credencial de armazenamento a um espaço de trabalho específico.
o passo 3: Atualizar a política de relacionamento de confiança do site IAM role
No AWS, modifique a política de relacionamento de confiança para adicionar o ID externo da credencial de armazenamento e torná-la autônoma.
-
Retorne à sua IAM role salva e vá para a tab Relações de confiança .
-
Edite a política de relacionamento de confiança para ter a seguinte aparência:
JSON{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::414351767826:role/unity-catalog-prod-UCMasterRole-14S5ZJVKOTYTL",
"arn:aws:iam::<YOUR-AWS-ACCOUNT-ID>:role/<THIS-ROLE-NAME>"
]
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "<STORAGE-CREDENTIAL-EXTERNAL-ID>"
}
}
}
]
}Nessa política, substitua os seguintes valores:
<YOUR-AWS-ACCOUNT-ID>
: Seu AWS account ID.<THIS-ROLE-NAME>
: O nome deste IAM role.<STORAGE-CREDENTIAL-EXTERNAL-ID>
: A ID externa da credencial de armazenamento que o senhor copiou no passo anterior.
o passo 4: validar a credencial de armazenamento
Depois de fazer as alterações na política de confiança IAM role no passo 3: Atualizar a política de relacionamento de confiança IAM role, verifique se o IAM role está configurado corretamente para ser usado como credencial de armazenamento.
Para validar a configuração, você deve ser o proprietário da credencial de armazenamento, um administrador do metastore ou ter CREATE EXTERNAL LOCATION
permissões na credencial de armazenamento.
-
No Databricks, faça login em um workspace vinculado ao metastore.
-
Clique em
Catálogo .
-
Na página de acesso rápido , clique no botão External Data (Dados externos ) > e vá para Credentials (Credenciais ) tab.
Como alternativa, você pode clicar no ícone de
engrenagem na parte superior do painel Catálogo e selecionar Credenciais .
-
Selecione a credencial de armazenamento que você deseja validar.
-
Clique em Validar configuração .
-
Se alguma das verificações falhar, retorne ao passo 3: Atualize a política de relacionamento de confiança do site IAM role e revise a política de confiança do site IAM role para configurá-la corretamente.
Depois que a credencial de armazenamento for validada, você poderá usá-la para criar um local externo.
Política autopretensiosa de aplicação de funções
Em 30 de junho de 2023, o site AWS atualizou sua política de confiança IAM role para exigir que a função IAM explicitamente se autoconfie nas chamadas STS:AssumeRole
. Como resultado, o site Databricks exige que a função AWS IAM para as credenciais de armazenamento seja autônoma. Para obter detalhes, consulte esta postagem no blog da comunidade.
Em 20 de janeiro de 2025 , o site Databricks começou a bloquear o uso de credenciais de armazenamento existentes com a função IAM não autônoma. Essa proibição pode interromper cargas de trabalho e trabalhos que são executados usando credenciais não autônomas.
Para verificar se um AWS IAM role para uma credencial de armazenamento é autônomo, siga as instruções no passo 4: Validar a credencial de armazenamento. Se a verificação Self Assume Role falhar, repita o passo 3: Atualize a política de relacionamento de confiança do IAM role e reconfigure a política de confiança do IAM role para confiar em si mesmo.
Se você tiver várias credenciais de armazenamento em um metastore que deseja verificar, use o seguinte notebook para verificar as capacidades de autoassumir de todas as credenciais de armazenamento em seu metastore:
Verificação de credencial de armazenamento autônomo Notebook
:::::
Criar um local externo para um bucket do AWS S3
Esta seção descreve como criar um local externo usando o Catalog Explorer ou o SQL. Ele pressupõe que o senhor já tenha uma credencial de armazenamento que permita o acesso ao bucket do S3.
Se o senhor ainda não tiver uma credencial de armazenamento, o site Databricks recomenda usar o padrãoAWS CloudFormation Quickstart para criar a credencial de armazenamento e o local externo. Para criar manualmente uma credencial de armazenamento, consulte Criar uma credencial de armazenamento que acesse um bucket do AWS S3.
Opção 1: criar um local externo usando o Catalog Explorer
Use o Catalog Explorer para criar manualmente um local externo se você preferir trabalhar na interface do usuário. Para criar locais externos de forma programática, use o SQL.
Para criar o local externo:
-
Faça login em um site workspace que esteja anexado ao metastore.
-
Na barra lateral, clique em
Catálogo .
-
Na página de acesso rápido , clique no botão External data (Dados externos ) >, vá para External Locations (Locais externos ) tab e clique em Create external location (Criar local externo).
-
Na caixa de diálogo Criar um novo local externo , clique em Manual e depois em Avançar .
Para saber mais sobre a opção AWS Quickstart, consulte Usando o padrão AWS CloudFormation Quickstart para se conectar a AWS S3 .
-
Na caixa de diálogo Criar um novo local externo manualmente , insira um nome de local externo .
-
Em Tipo de armazenamento , selecione S3 .
-
Em URL , digite o caminho do bucket S3. Por exemplo,
s3://<bucket-path>
. -
Em Credencial de armazenamento , selecione a credencial de armazenamento que concede acesso ao local externo.
Se o senhor não tiver um objeto de credencial de armazenamento, mas tiver um AWS IAM role que permita o acesso ao bucket S3, poderá selecionar + Criar nova credencial de armazenamento para criar o objeto de credencial de armazenamento nessa caixa de diálogo.
-
(Opcional) Se você quiser que os usuários tenham acesso somente para leitura ao local externo, clique em Opções avançadas e selecione Limitar ao uso somente para leitura . Você pode alterar essa configuração posteriormente. Para obter mais informações, consulte Marcar um local externo como somente leitura.
-
(Opcional) Se o local externo for destinado à migração de carga de trabalho herdada, clique em Advanced options (Opções avançadas ) e ative o modo de fallback .
-
(Opcional) Se o bucket S3 exigir criptografia SSE, o senhor poderá configurar um algoritmo de criptografia para permitir que tabelas e volumes externos no Unity Catalog acessem os dados no bucket S3.
Para obter instruções, consulte Configurar um algoritmo de criptografia em um local externo (somente AWS S3).
-
(Opcional) Para se inscrever para receber notificações de alteração no local externo, clique em Opções avançadas e selecione Habilitar eventos de arquivo .
Os eventos de arquivos simplificam a configuração e melhoram o desempenho e a capacidade de recursos, como acionadores de chegada de arquivos e notificações de arquivos do site Auto Loader. Esse passo é opcional, mas altamente recomendado.
Para obter detalhes, consulte (Recomendado) Habilitar eventos de arquivo para um local externo.
-
Clique em Criar .
-
(Opcional) Vincule o local externo a um espaço de trabalho específico.
Em default, qualquer usuário privilegiado pode usar o local externo em qualquer workspace anexado ao metastore. Se o senhor quiser permitir o acesso somente a partir de um espaço de trabalho específico, acesse o espaço de trabalho tab e atribua o espaço de trabalho. Consulte Atribuir um local externo a um espaço de trabalho específico.
-
Acesse o site Permissions (Permissões ) tab para conceder permissão para usar o local externo.
Para que qualquer pessoa use o local externo, você deve conceder permissões:
-
Para usar o local externo para adicionar um local de armazenamento gerenciar ao metastore, catálogo ou esquema, conceda o privilégio
CREATE MANAGED LOCATION
. -
Para criar tabelas ou volumes externos, conceda
CREATE EXTERNAL TABLE
ouCREATE EXTERNAL VOLUME
.
- Clique em Conceder .
- Na caixa de diálogo Grant on
<external location>
, selecione usuários, grupos ou entidade de serviço no campo Principals e selecione o privilégio que deseja conceder. - Clique em Conceder .
-
Opção 2: Criar um local externo usando o SQL
Para criar um local externo usando SQL, execute o seguinte comando em um Notebook ou no editor de consultas SQL. Substitua os valores do espaço reservado.
<location-name>
: um nome para o local externo. Selocation_name
incluir caracteres especiais, como hífens (-
), ele deverá estar entre acentos invertidos (<bucket-path>
: o caminho em seu locatário de nuvem ao qual este local externo concede acesso. Por exemplo,s3://mybucket
.<storage-credential-name>
: o nome da credencial de armazenamento que autoriza a leitura e a gravação no bucket. Se o nome da credencial de armazenamento incluir caracteres especiais, como hífens (-
), ele deverá estar entre acentos invertidos (
CREATE EXTERNAL LOCATION [IF NOT EXISTS] `<location-name>`
URL '<bucket-path>'
WITH ([STORAGE] CREDENTIAL `<storage-credential-name>`)
[COMMENT '<comment-string>'];
Se quiser limitar o acesso de um local externo a um espaço de trabalho específico em seu account, também conhecido como workspace binding ou external location isolation, consulte Assign an external location to specific workspace (Atribuir um local externo a um espaço de trabalho específico).
Next os passos
- Conceda permissão a outros usuários para usar locais externos. Consulte gerenciar locais externos.
- Definir locais de armazenamento gerenciáveis usando locais externos. Consulte Especificar um local de armazenamento gerenciar em Unity Catalog.
- Defina tabelas externas usando locais externos. Consulte Trabalhar com tabelas externas.
- Defina volumes externos usando locais externos. Consulte O que são volumes do Unity Catalog?