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.

    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 endereço Databricks AWS account ID 414351767826. Se o senhor estiver usando Databricks on AWS GovCloud use o endereço Databricks account ID 044793339203.

      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. Clique no botão +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.

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

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 um local externo para conectar o armazenamento em nuvem ao Databricks.