Pular para o conteúdo principal

Criar uma credencial de armazenamento para se conectar ao AWS S3

Este artigo descreve como criar uma credencial de armazenamento no Unity Catalog para conectar ao AWS S3.

Para gerenciar o acesso ao armazenamento de cloud subjacente que contém tabelas e volumes, o Unity Catalog utiliza os seguintes tipos de objeto:

  • As credenciais de armazenamento encapsulam uma credencial de nuvem de longo prazo que oferece acesso ao armazenamento na nuvem.
  • Os locais externos contêm uma referência a uma credencial de armazenamento e um caminho de armazenamento na nuvem.

Para obter mais informações, consulte gerenciar o acesso ao armazenamento em nuvem usando Unity Catalog.

nota

Se o senhor quiser usar o site Unity Catalog para controlar o acesso a um serviço externo em vez do armazenamento em nuvem, consulte Gerenciar o acesso ao serviço externo em nuvem usando credenciais de serviço.

O Unity Catalog oferece suporte a duas opções de armazenamento em nuvem para o Databricks on AWS: Buckets do AWS S3 e buckets do Cloudflare R2. O Cloudflare R2 destina-se principalmente a casos de uso do Delta Sharing em que o senhor deseja evitar taxas de saída de dados. O S3 é adequado para a maioria dos outros casos de uso. Este artigo se concentra na criação de credenciais de armazenamento para S3. Para o Cloudflare R2, consulte Criar uma credencial de armazenamento para se conectar ao Cloudflare R2.

Para criar uma credencial de armazenamento para acesso a um bucket S3, você cria uma IAM role que autoriza o acesso (leitura, ou leitura e gravação) ao caminho do bucket S3 e faz referência a essa IAM role na definição da credencial de armazenamento.

Requisitos

No Databricks:

  • Um workspace do Databricks ativado para o Unity Catalog.
  • CREATE STORAGE CREDENTIAL privilégio no metastore do Unity Catalog anexado ao workspace. Os administradores de contas e administradores do metastore têm esse privilégio por padrão.

Na sua conta da AWS:

  • Um bucket S3. Para evitar cobranças de saída, ele deve estar na mesma região que o workspace a partir do qual o senhor deseja acessar os dados.

    Requisitos adicionais do bucket S3:

    • O nome do bucket não pode incluir notação de ponto (por exemplo, incorrect.bucket.name.notation). Para mais orientações sobre nomenclatura de buckets, consulte as regras de nomenclatura de buckets da AWS.
    • O bucket não pode ter uma lista de controle de acesso S3 anexada a ele.
  • A capacidade de criar IAM roles.

Etapa 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.

dica

Se o senhor já tiver criado um IAM role que forneça esse acesso, poderá pular esta etapa e ir direto para a Etapa 2:Databricks Fornecer os IAM role detalhes do ao.

  1. 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.

important

A partir de 20 de setembro de 2024, a Databricks começará a aplicar o requisito de autoatribuição para novas credenciais de armazenamento. Em 20 de janeiro de 2025, a Databricks começará a bloquear as credenciais de armazenamento existentes que não sejam autônomas. 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.

  1. Crie a IAM role com uma policy de confiança personalizada .

  2. No campo Policy de confiança personalizada , cole o JSON da policy a seguir.

    Essa política estabelece uma relação de confiança entreaccount para que Unity Catalog possa assumir a função de acessar os dados no bucket em nome dos usuários de Databricks. Isso é especificado pelo ARN na seção Principal. É um valor estático que faz referência a uma função criada pela Databricks. Observe que a política é ligeiramente diferente se o senhor usar Databricks on AWS GovCloud.

    A policy define o ID externo como 0000 como um placeholder. Você atualizará isso para o ID externo da sua credencial de armazenamento em uma etapa posterior.

JSON
{
"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"
}
}
}
]
}
  1. Ignore a configuração da policy de permissões. Você voltará para adicioná-la em uma passo posterior.

  2. Salve a IAM role.

  3. 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.
    • <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.

    Esta policy de IAM concede acesso de leitura e gravação. Você também pode criar uma policy que conceda acesso somente de leitura. No entanto, isso pode ser desnecessário, pois você pode marcar a credencial de armazenamento como somente leitura, e qualquer acesso de gravação concedido por essa IAM role será ignorado.

    JSON
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:ListBucket", "s3:GetBucketLocation"],
    "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"
    }
    ]
    }
nota

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.

  1. Crie uma política IAM para eventos de arquivo no mesmo account que o bucket S3.
nota

Essa etapa é opcional, mas altamente recomendada. 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.

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 os recursos que usam eventos de arquivo. Substitua <BUCKET> pelo nome do bucket S3.

JSON
{
"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-*"]
}
]
}
  1. Anexe as políticas do site IAM ao site IAM role.

    Na seção Permissão da função tab, anexe as políticas IAM que o senhor acabou de criar.

Etapa 2: Forneça a Databricks os detalhes de IAM role

  1. No Databricks, faça login em um workspace vinculado ao metastore.

    Você deve ter o privilégio CREATE STORAGE CREDENTIAL. As funções de administrador do metastore e administrador da account incluem essa permissão.

  2. Clique em Ícone de catálogo Catálogo .

  3. Na página Quick access (Acesso rápido ), clique no botão External data (Dados externos) > , acesse Credentials (Credenciais ) tab e selecione Create credential (Criar credencial ).

  4. Selecione um tipo de credencial de IAM role da AWS .

  5. 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.

dica

Se o senhor já tiver definido um instance profile em Databricks, o senhor pode clicar 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 entreaccount 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 Etapa 1: Criar um IAM role.

  1. (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 Somente leitura. Para obter mais informações, consulte Marcar uma credencial de armazenamento como somente leitura.

  2. Clique em Criar .

  3. Na caixa de diálogo Credencial de armazenamento criada , copie a ID externa .

  4. Clique em Concluído .

  5. (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 (Opcional) Atribuir uma credencial de armazenamento a um espaço de trabalho específico.

O senhor também pode criar uma credencial de armazenamento usando o provedor Databricks Terraform e databricks_storage_credential.

Etapa 3: Atualizar a política de relacionamento de confiança do site IAM role

No AWS, modifique a policy de relacionamento de confiança para adicionar a ID externa da sua credencial de armazenamento e torná-la autoassumida.

  1. Retorne à sua IAM role salva e vá para a tab Relações de confiança .

  2. Edite a policy de relacionamento de confiança da seguinte forma:

    Adicione o seguinte ARN à declaração "Permitir". Substitua <YOUR-AWS-ACCOUNT-ID> e <THIS-ROLE-NAME> pelos valores reais do seu account ID e IAM role.

    "arn:aws:iam::<YOUR-AWS-ACCOUNT-ID>:role/<THIS-ROLE-NAME>"

    Na instrução "sts:AssumeRole", atualize o ID externo do espaço reservado para o ID externo da sua credencial de armazenamento que você copiou no passo anterior.

    "sts:ExternalId": "<STORAGE-CREDENTIAL-EXTERNAL-ID>"

    Sua policy agora deve ter esta aparência, com o texto de substituição atualizado para usar o ID externo, o ID da account e os valores de IAM role da sua credencial de armazenamento:

    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>"
    }
    }
    }
    ]
    }

Etapa 4: validar a credencial de armazenamento

Depois de fazer as alterações na política de confiança IAM role na Etapa 3: Atualizar a política de relacionamento de confiança IAM role, verifique se o site IAM role está configurado corretamente para ser usado como credencial de armazenamento.

nota

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.

  1. No Databricks, faça login em um workspace vinculado ao metastore.

  2. Clique em Ícone de catálogo Catálogo .

  3. Na página Quick access (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 ícone de engrenagem engrenagem na parte superior do painel Catálogo e selecionar Credenciais .

  4. Selecione a credencial de armazenamento que você deseja validar.

  5. Clique Botão &quot;Validar configuração&quot;.

  6. Se alguma das verificações falhar, retorne à Etapa 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 rolepara configurá-la corretamente.

Quando a credencial de armazenamento é validada, você pode 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 confie em si mesma para chamadas STS:AssumeRole. Como resultado, o site Databricks exige que a função AWS IAM para credenciais de armazenamento seja autônoma e, em breve, proibirá credenciais de armazenamento não autônomas. Para obter detalhes, consulte esta postagem no blog da comunidade.

O Databricks começará a proibir a criação de credenciais de armazenamento com IAM roles da AWS que não são autoassumidas em 20 de setembro de 2024 . As credenciais de armazenamento existentes com IAM roles não autoassumidas continuarão funcionando, mas você não poderá criar novas credenciais de armazenamento usando essas funções.

Em 20 de janeiro de 2025 , o Databricks começará a bloquear o uso de credenciais de armazenamento existentes com IAM roles não autoassumidas. Isso pode potencialmente interromper cargas de trabalho e jobs que são executados usando credenciais que não são autoassumidas.

Para verificar se um AWS IAM role para uma credencial de armazenamento é autônomo, siga as instruções na Etapa 4: Validar a credencial de armazenamento. Se a verificação Self Assume Role falhar, volte à Etapa 3: Atualize a política de relacionamento de confiança do IAM role e reconfigure a política de confiança do IAM rolepara 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 credenciais de armazenamento autônomo Notebook

Open notebook in new tab

(Opcional) Atribuir uma credencial de armazenamento a um espaço de trabalho específico

Por padrão, uma credencial de armazenamento pode ser acessada de todos os workspaces na metastore. Isso significa que, se um usuário tiver recebido um privilégio (como CREATE EXTERNAL LOCATION) nessa credencial de armazenamento, ele poderá exercer esse privilégio em qualquer workspace vinculado ao metastore. Se você usar workspaces para isolar o acesso aos dados do usuário, talvez queira permitir o acesso a uma credencial de armazenamento somente de workspaces específicos. Esse recurso é conhecido como vinculação de workspace ou isolamento de credenciais de armazenamento.

Um caso de uso típico para vincular uma credencial de armazenamento a workspaces específicos é o cenário em que um administrador de cloud configura uma credencial de armazenamento usando uma credencial de conta de cloud de produção, e você deve garantir que os usuários do Databricks usem essa credencial para criar locais externos somente no workspace de produção.

Para obter mais informações sobre a vinculação workspace, consulte (Opcional) Atribuir um local externo a um espaço de trabalho específico e Limitar o acesso ao catálogo a um espaço de trabalho específico.

nota

As vinculações de workspace são referenciadas quando os privilégios sobre as credenciais de armazenamento são exercidos. Por exemplo, se um usuário criar uma localização externa usando uma credencial de armazenamento, a vinculação de workspace na credencial de armazenamento é verificada apenas quando a localização externa é criada. Depois que a localização externa é criada, ela funcionará independentemente das vinculações de workspace configuradas na credencial de armazenamento.

Vincular uma credencial de armazenamento a um ou mais espaços de trabalho

Para atribuir uma credencial de armazenamento a espaços de trabalho específicos, você pode usar o Catalog Explorer ou a CLI da Databricks.

Permissões necessárias : administrador da Metastore, proprietário da credencial de armazenamento ou MANAGE na credencial de armazenamento.

nota

Os administradores do metastore podem ver todas as credenciais de armazenamento em um metastore usando o Catalog Explorer, e os proprietários de credenciais de armazenamento podem ver todas as credenciais que possuem em um metastore, independentemente de a credencial estar atribuída ao workspace atual. As credenciais de armazenamento que não estão atribuídas ao workspace aparecem esmaecidas.

  1. Log in to a workspace that is linked to the metastore.

  2. In the sidebar, click Catalog icon Catalog.

  3. On the Quick access page, click the External data > button and go to the Credentials tab.

  4. Select the storage credential and go to the Workspaces tab.

  5. On the Workspaces tab, clear the All workspaces have access checkbox.

    If your storage credential is already bound to one or more workspaces, this checkbox is already cleared.

  6. Click Assign to workspaces and enter or find the workspaces you want to assign.

To revoke access, go to the Workspaces tab, select the workspace, and click Revoke. To allow access from all workspaces, select the All workspaces have access checkbox.

Desvincular uma credencial de armazenamento de um workspace

As instruções para revogar o acesso workspace a uma credencial de armazenamento usando o Catalog Explorer ou o grupo de comando workspace-bindings CLI estão incluídas em Vincular uma credencial de armazenamento a um ou mais espaços de trabalho.

Próximas etapas

O senhor pode view, atualizar, excluir e conceder a outros usuários permissão para usar as credenciais de armazenamento. Consulte gerenciar credenciais de armazenamento.

Você pode definir locais externos usando credenciais de armazenamento. Consulte Criar um local externo para conectar o armazenamento em nuvem à Databricks.