Criar uma credencial de armazenamento para se conectar ao AWS S3

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

Para gerenciar o acesso ao armazenamento em nuvem subjacente que contém tabelas e volumes, o Unity Catalog usa os seguintes tipos de objetos:

  • As credenciais de armazenamento encapsulam uma credencial de nuvem de longo prazo que oferece acesso ao armazenamento em nuvem.

  • Locais externos contêm uma referência a uma credencial de armazenamento e um caminho de armazenamento em nuvem.

Para obter mais informações, consulte Conectar-se ao armazenamento de objetos em nuvens usando o Unity Catalog.

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 o 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 do S3, o senhor cria um IAM role que autoriza o acesso (leitura ou leitura e gravação) ao caminho do bucket do S3 e faz referência a esse IAM role na definição da credencial de armazenamento.

Requisitos

Em Databricks:

  • Databricks workspace ativado para o Unity Catalog.

  • CREATE STORAGE CREDENTIAL no metastore do Unity Catalog anexado ao site workspace. account Os administradores e os administradores de metastore têm esse privilégio em default.

Em seu AWS account:

  • Um bucket S3 na mesma região que o espaço de trabalho do qual o senhor deseja acessar os dados.

    O nome do depósito não pode conter notação de ponto (por exemplo, incorrect.bucket.name.notation). Para obter mais orientações sobre nomenclatura de buckets, consulte as regras de nomenclatura de buckets da AWS.

  • A capacidade de criar uma função de IAM.

passo 1: criar uma IAM role

Na AWS, crie uma IAM role que dê acesso ao bucket S3 que você deseja que seus usuários acessem. Essa IAM role deve ser definida na mesma conta que o bucket do S3.

Dica

Se você já criou uma IAM role que oferece esse acesso, pode pular esta passo e ir direto para a passo 2: dar ao Databricks os detalhes da IAM role.

  1. Crie uma IAM role que permitirá acesso ao bucket S3.

    A criação de função é um processo de duas etapas. Neste passo você cria a função, adicionando uma política de relacionamento de confiança temporária e um ID externo de espaço reservado que você modifica após criar a credencial de armazenamento no Databricks.

    Você deve modificar a política de confiança depois de criar a função porque sua função deve ser auto-assumida (ou seja, deve ser configurada para confiar em si mesma). A função deve, portanto, existir antes de você adicionar a declaração de autossuposição. Para obter informações sobre papéis autoassumidos, consulte os artigos do blog da Amazon.

    Importante

    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 de aplicação de função autônoma.

    Para criar a política, você deve usar um ID externo de espaço reservado. Um ID externo é necessário na AWS para conceder acesso ao seu recurso AWS a terceiros.

    1. Crie a IAM role com uma política de confiança personalizada.

    2. No campo Política de confiança personalizada , cole o JSON da política 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. A política usa o AWS ARN arn:aws:iam::414351767826:role/unity-catalog-prod-UCMasterRole-14S5ZJVKOTYTL da Databricks. Se o senhor estiver usando Databricks on AWS GovCloud use o endereço Databricks on AWS GovCloud ARN arn:aws-us-gov:iam::044793339203:role/unity-catalog-prod-UCMasterRole-1QRFA8SGY15OJ.

      A política define o ID externo como 0000 como espaço reservado. Você atualiza isso para o ID externo da sua credencial de armazenamento posteriormente.

      {
        "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"
            }
          }
        }]
      }
      
    3. Ignore a configuração da política de permissões. Você voltará para adicioná-lo em uma passo posterior.

    4. Salve a IAM role.

  2. Crie a seguinte política do IAM na mesma account do bucket S3, substituindo os seguintes valores:

    • <BUCKET>: nome do depósito S3.

    • <KMS-KEY>: Opcional. Se a criptografia estiver habilitada, informe o nome da chave KMS que criptografa o conteúdo do bucket do S3. Se a criptografia estiver desabilitada, remova toda a seção KMS da política IAM.

    • <AWS-ACCOUNT-ID>: ID da conta da sua conta da AWS (não da sua conta do Databricks).

    • <AWS-IAM-ROLE-NAME>: nome da função AWS IAM que você criou na passo anterior.

    Esta política do 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, pois você pode marcar a credencial de armazenamento como somente leitura e qualquer acesso de gravação concedido por essa IAM role será ignorado.

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

    Observação

    Se precisar de uma política IAM mais restritiva para Unity Catalog, contacte a sua equipa account Databricks para obter assistência.

  3. Anexe a política do IAM à IAM role.

    Na guia Permission da função, anexe a IAM Policy que você acabou de criar.

passo 2: Informar ao Databricks os detalhes da IAM role

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

    O senhor deve ter o privilégio CREATE STORAGE CREDENTIAL. As funções de administrador do metastore e administrador do account incluem esse privilégio.

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

  3. Na parte superior do painel Catálogo, clique no ícone Ícone de adição ou de mais Add e selecione Add a storage credential (Adicionar uma credencial de armazenamento ) no menu.

    Essa opção não aparecerá se o senhor não tiver o privilégio CREATE STORAGE CREDENTIAL.

    Como alternativa, na página Acesso rápido, clique no botão Dados externos >, acesse Credenciais de armazenamento tab e selecione Criar credencial.

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

  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 você já definiu um perfil de instância no Databricks, pode clicar em Copiar perfil de instância para copiar o ARN da IAM role para esse perfil de instância. A IAM role do perfil de instância deve ter uma relação de confiança entre contas que permite 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 de IAM role e os requisitos de relação de confiança, consulte passo 1: criar uma IAM role.

  6. (Opcional) Se você quiser que os usuários tenham acesso somente 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.

  7. Clique em Criar.

  8. Na caixa de diálogo Credencial de armazenamento criada , copie o ID externo.

  9. Clique em Concluído.

  10. (Opcional) Vincular a credencial de armazenamento a um espaço de trabalho específico.

    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, vá para o espaço de trabalho tab e atribua o espaço de trabalho. Consulte (Opcional) Atribuir uma credencial de armazenamento a espaços de trabalho específicos.

  11. Crie um local externo que faça referência a essa credencial de armazenamento.

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

o passo 3: Atualizar a política IAM role

Na AWS, modifique a política de relação de confiança para adicionar o ID externo da sua credencial de armazenamento e torná-la auto-assumida.

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

  2. Edite a política de relacionamento de confiança da seguinte forma:

    Adicione o seguinte ARN à declaração "Allow" (Permitir). Substitua <YOUR-AWS-ACCOUNT-ID> e <THIS-ROLE-NAME> pelos valores reais de 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 na etapa anterior.

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

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

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

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 IAM role , verifique se o IAM role está configurado corretamente para ser usado como credencial de armazenamento:

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

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

  3. Na página de acesso rápido, clique no botão External Data > e vá para as credenciais de armazenamento tab.

    Como alternativa, o senhor pode clicar no ícone de engrenagem ícone de engrenagem na parte superior do painel Catálogo e selecionar Credenciais de armazenamento.

  4. Selecione a credencial de armazenamento que o senhor deseja validar.

  5. Clique em Botão Validate Configuration (Validar configuração).

  6. Se alguma das verificações falhar, retorne ao passo 3: Atualize a política do IAM role e revise a política de confiança do IAM rolepara configurá-la corretamente.

Política de aplicação de função autônoma

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 se autoconfie explicitamente 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.

Databricks começará a proibir a criação de credenciais de armazenamento com função não autônoma AWS IAM em 20 de setembro de 2024. As credenciais de armazenamento existentes com função não autônoma IAM continuarão a funcionar, mas o senhor não poderá criar novas credenciais de armazenamento usando essas funções.

Em 20 de janeiro de 2025, o site Databricks começará a bloquear o uso de credenciais de armazenamento existentes com a função IAM não autônoma. Isso pode potencialmente 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 IAM role e reconfigure a política de confiança do IAM rolepara confiar em si mesmo.

Se o senhor tiver várias credenciais de armazenamento em um metastore que deseja verificar, use o seguinte Notebook para verificar os recursos de autopresunção de todas as credenciais de armazenamento no metastore:

Verificação de credenciais de armazenamento autônomas Notebook

Abrir notebook em uma nova guia

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

Visualização

Esse recurso está em visualização pública.

Em default, uma credencial de armazenamento pode ser acessada de todos os espaços de trabalho no 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 anexado ao metastore. Se o senhor usar o espaço de trabalho para isolar o acesso aos dados do usuário, talvez queira permitir o acesso a uma credencial de armazenamento somente a partir de um espaço de trabalho específico. Esse recurso é conhecido como workspace binding ou isolamento de credenciais de armazenamento.

Um caso de uso típico para vincular uma credencial de armazenamento a um espaço de trabalho específico é o cenário em que um administrador cloud configura uma credencial de armazenamento usando uma credencial de produção cloud account e o senhor deseja garantir que os usuários Databricks usem essa credencial para criar locais externos somente no espaço de produção workspace.

Para obter mais informações sobre a associaçã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.

Observação

workspace são referenciadas quando os privilégios em relação às credenciais de armazenamento são exercidos. Por exemplo, se um usuário criar um local externo usando uma credencial de armazenamento, a vinculação workspace na credencial de armazenamento será verificada somente quando o local externo for criado. Depois que o local externo for criado, ele funcionará independentemente dos vínculos workspace configurados na credencial de armazenamento.

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

Para atribuir uma credencial de armazenamento a um espaço de trabalho específico, o senhor pode usar o Catalog Explorer ou o site Databricks CLI.

Permissões necessárias: Administrador do metastore ou proprietário da credencial de armazenamento.

Observação

Os administradores de 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 de armazenamento que possuem em um metastore, independentemente de a credencial de armazenamento estar atribuída ao site workspace atual. As credenciais de armazenamento que não estão atribuídas ao site workspace aparecem em cinza.

  1. Efetue login em um workspace vinculado ao metastore.

  2. Na barra lateral, clique em Ícone de catálogo Catálogo.

  3. Na parte superior do painel Catálogo, clique no ícone de engrenagem ícone de engrenagem e selecione Credenciais de armazenamento.

    Como alternativa, na página Quick access (Acesso rápido ), clique no botão External data > (Dados externos ) e acesse Storage Credentials (Credenciais de armazenamento ) tab.

  4. Selecione a credencial de armazenamento e acesse o espaço de trabalho tab.

  5. No espaço de trabalho tab, desmarque a caixa de seleção All workspace have access (Todos os espaços de trabalho têm acesso ).

    Se sua credencial de armazenamento já estiver vinculada a um ou mais espaços de trabalho, essa caixa de seleção já estará desmarcada.

  6. Clique em Assign to workspace (Atribuir ao espaço de trabalho) e digite ou localize o espaço de trabalho que deseja atribuir.

Para revogar o acesso, acesse o espaço de trabalho tab, selecione workspace e clique em Revoke. Para permitir o acesso de todos os espaços de trabalho, marque a caixa de seleção Todos os espaços de trabalho têm acesso.

Há dois grupos de Databricks CLI grupos de comando e dois passos necessários para atribuir uma credencial de armazenamento a um workspace.

Nos exemplos a seguir, substitua <profile-name> pelo nome do perfil de configuração de autenticação do Databricks. Ele deve incluir o valor de um access token pessoal, além do nome da instância workspace e o ID workspace do workspace onde o senhor gerou o access token pessoal. Consulte Databricks autenticação pessoal access token .

  1. Use o comando storage-credentials do grupo update para definir os comandos isolation mode e ISOLATED da credencial de armazenamento:

    databricks storage-credentials update <my-storage-credential> \
    --isolation-mode ISOLATED \
    --profile <profile-name>
    

    O endereço default isolation-mode é OPEN para todos os espaços de trabalho anexados ao metastore.

  2. Use o comando workspace-bindings do grupo update-bindings para atribuir o espaço de trabalho à credencial de armazenamento:

    databricks workspace-bindings update-bindings storage-credential <my-storage-credential> \
    --json '{
      "add": [{"workspace_id": <workspace-id>}...],
      "remove": [{"workspace_id": <workspace-id>}...]
    }' --profile <profile-name>
    

    Use as propriedades "add" e "remove" para adicionar ou remover workspace bindings.

    Observação

    A vinculação somente leitura (BINDING_TYPE_READ_ONLY) não está disponível para credenciais de armazenamento. Portanto, não há motivo para definir binding_type para a vinculação das credenciais de armazenamento.

Para listar todas as atribuições de workspace para uma credencial de armazenamento, use o comando workspace-bindings do grupo get-bindings:

databricks workspace-bindings get-bindings storage-credential <my-storage-credential> \
--profile <profile-name>

Desvincular uma credencial de armazenamento de um espaço de trabalho

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óximos passos

Você pode view, atualizar, excluir e conceder permissão a outros usuários para usar credenciais de armazenamento. Consulte gerenciamento de credenciais de armazenamento.

O senhor pode definir locais externos usando credenciais de armazenamento. Consulte Criar uma credencial de armazenamento para se conectar ao AWS S3.