Pular para o conteúdo principal

Segredos do AWS Secrets Manager no Unity Catalog

info

Beta

Esse recurso está em Beta.

Apoie um schema do Unity Catalog com o AWS Secrets Manager para usar seus segredos da AWS em notebooks, jobs e UDFs sem copiá-los. Os valores permanecem na AWS, e os privilégios do Unity Catalog controlam quem pode ler ou usar cada segredo.

Para comparar segredos externos com segredos gerenciados pelo Databricks e Secret Scopes de workspace, consulte Escolher onde armazenar um segredo.

Como funcionam os segredos externos​

Um schema é apoiado por uma conexão com o seu gerenciador de segredos em cloud. Dois controles independentes decidem quem pode usar um segredo. As permissões da credencial de serviço em seu gerenciador de segredos decidem quais segredos o Unity Catalog pode importar e ler, e os privilégios do Unity Catalog decidem quais principals podem usá-los.

A IAM role da credencial de serviço e o filtro de tag de cada conexão decidem quais segredos da AWS cada schema importa. Os privilégios do UC decidem quem pode usá-los.

Depois de oferecer suporte a um schema, os segredos externos se comportam da seguinte forma:

  • Cada leitura busca o valor atual : um valor que você rotaciona no seu gerenciador de segredos entra em vigor na próxima leitura, sem alterações no Databricks. O código que já contém um valor o mantém até ler o segredo novamente. Os valores recuperados podem ser armazenados em cache no compute que os solicitou, como ocorre com outros segredos.
  • Gerencie secretos em seu gerenciador de secretos : Crie, atualize, gire e exclua secretos lá. Eles são somente leitura no Unity Catalog. Quando você exclui permanentemente um secreto em seu gerenciador de secretos, o Databricks remove o secreto do Unity Catalog, incluindo suas permissões e tags.
  • A listagem importa novos segredos : Listar o schema começar uma importação assíncrona. Um segredo adicionado ou removido do seu secret manager aparece no Unity Catalog após uma lista posterior, que pode levar alguns minutos para armazenamentos grandes. Você pode ler um segredo pelo nome antes que ele apareça em uma lista.
  • Os logs de auditoria registram os dois lados : Os logs de auditoria do Unity Catalog registram o principal do Databricks que leu um segredo. Os logs do lado da cloud atribuem o acesso à credencial do serviço.

Requisitos​

  • Atenda aos requisitos para secretos do Unity Catalog.
  • A Beta de segredos externos deve estar habilitada para seu workspace. Consulte Gerenciar prévias do Databricks.
  • Você precisa de uma credencial de serviço do Unity Catalog e de uma conexão do Unity Catalog que a use para autenticar no seu gerenciador de segredos. Consulte Criar credenciais de serviço e Criar uma conexão.
  • Para fazer backup do esquema, você precisa de USE CATALOG no catálogo, propriedade do esquema ou MANAGE nele e USE CONNECTION na conexão. O esquema não deve conter nenhum segredo gerenciado pelo Databricks, portanto, exclua qualquer um antes de fazer o backup.

Configurar segredos externos​

Criar uma credencial de serviço​

A conexão autentica no seu gerenciador de segredos com uma credencial de serviço do Unity Catalog.

  1. Crie uma credencial de serviço e seu IAM role (gerenciamento de identidade e acesso), incluindo a política de confiança, conforme descrito em Criar credenciais de serviço.

  2. Anexe uma política de permissão que permita que a role liste e leia seus segredos. Substitua <AWS-ACCOUNT-ID> e <AWS-IAM-ROLE-NAME> pelo seu account ID e role name.

    Para permitir que a função leia apenas segredos com uma tag específica, use a seguinte política. secretsmanager:ListSecrets não oferece suporte a permissões em nível de recurso, portanto, aplica-se a todos os segredos. A condição da tag limita quais valores a função pode ler:

    JSON
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Sid": "ListSecrets",
    "Effect": "Allow",
    "Action": ["secretsmanager:ListSecrets"],
    "Resource": "*"
    },
    {
    "Sid": "ReadTaggedSecrets",
    "Effect": "Allow",
    "Action": ["secretsmanager:DescribeSecret", "secretsmanager:GetSecretValue"],
    "Resource": "*",
    "Condition": {
    "StringEquals": { "secretsmanager:ResourceTag/app": "orders" }
    }
    },
    {
    "Sid": "SelfAssume",
    "Effect": "Allow",
    "Action": ["sts:AssumeRole"],
    "Resource": ["arn:aws:iam::<AWS-ACCOUNT-ID>:role/<AWS-IAM-ROLE-NAME>"]
    }
    ]
    }

    Para permitir que o role leia cada secreto na account e região, remova o bloco Condition.

Criar uma conexão​

Crie uma conexão do Unity Catalog que usa a credencial de serviço e aponta para seu gerenciador de secretos. Você precisa de CREATE CONNECTION no metastore.

  1. No Catalog Explorer, clique no menu + e selecione Create a connection .
  2. Insira um Connection name e selecione o tipo de conexão AWS Secrets Manager .
  3. Selecione a credencial de serviço e defina a região da AWS. Os segredos devem estar nesta região.
  4. Opcionalmente, adicione as opções tag_key e tag_value. Consulte Filtrar segredos importados por tag.
  5. Clique em Criar .

Para limitar o schema aos segredos com tags, adicione tag_key e, opcionalmente, tag_value às opções da conexão, por exemplo "tag_key": "app", "tag_value": "orders". Apenas segredos com uma tag correspondente são importados e legíveis:

  • Se você definir tag_key sem tag_value, o Unity Catalog importa cada secreto que tenha a key de tags, qualquer que seja seu valor.
  • A correspondência diferencia maiúsculas de minúsculas e é exata.
  • Um segredo fora do filtro é tratado como não encontrado, mesmo quando você o lê pelo nome.

Use a mesma tag na condição da política do IAM, para que a role possa ler exatamente os segredos que o filtro importa. Se a role pode listar um segredo mas não pode lê-lo, o Unity Catalog importa o segredo, mas as leituras falham.

Dar suporte a um schema com a conexão​

  1. No Catalog Explorer, vá até o schema.
  2. Nos detalhes do esquema, localize a configuração do gerenciador de segredos externo e clique em Habilitar . Habilitar permanece indisponível até que o esquema não tenha segredos.
  3. Selecione a conexão que você criou e confirme.

Para apontar o schema para uma conexão diferente, clique em Edit . Para retornar o schema para o armazenamento gerenciado pelo Databricks, edite o schema e desabilite segredos externos. Qualquer uma dessas alterações remove os segredos importados anteriormente do esquema, incluindo suas permissões e tags.

Verificar a configuração​

Para confirmar que o Unity Catalog pode listar e ler seus segredos, execute o seguinte em um notebook:

Python
# List the secrets in the schema. This also starts an import of new secrets.
dbutils.secrets.list(catalog="main", schema="orders_app")

# Read one secret by name
dbutils.secrets.get(catalog="main", schema="orders_app", key="example_secret")

Se a lista estiver vazia, execução novamente após alguns minutos. Se uma leitura falhar, consulte Solução de problemas.

Nomes de segredos no Unity Catalog​

O Unity Catalog importa um segredo externo apenas se seu nome atender a estas regras:

  • Nomes com mais de 255 caracteres não são importados.
  • Os nomes não diferenciam maiúsculas de minúsculas. Se dois secretos diferirem apenas por maiúsculas/minúsculas, o Unity Catalog mantém o primeiro importado e ignora o resto.
  • . torna-se : e / torna-se |. O Databricks recomenda evitar esses caracteres em nomes de segredos externos.

Para ler um segredo antes que ele apareça em uma lista, use seu nome com estas substituições.

Por exemplo, para ler um segredo da AWS chamado myOrg/mySecret.v3, execute o seguinte:

Python
dbutils.secrets.get(catalog="main", schema="orders_app", key="myOrg|mySecret:v3")

Solução de problemas​

  • Um segredo está listado, mas a leitura falha : A role pode listar o segredo, mas não pode ler seu valor. Adicione secretsmanager:GetSecretValue e secretsmanager:DescribeSecret para esse segredo à policy da role e verifique se sua condição de tag IAM corresponde ao filtro de tags da conexão.

  • Um segredo não é encontrado quando você o lê pelo nome : O segredo está fora do filtro de tag da conexão ou seu nome precisa das substituições de nome.

  • Um novo segredo não aparece : Liste o schema, aguarde alguns minutos e liste-o novamente. Verifique as restrições de nomenclatura e a cota do schema.

  • Alguns segredos nunca aparecem : um schema comporta até 1.000 segredos. Quando o seu secret manager tem mais, o Unity Catalog importa os mais antigos primeiro por data de criação e ignora o resto. Exponha apenas os segredos de que você precisa em cada schema. Consulte Agrupar segredos por quem precisa deles.

Limitações​

Além das limitações que se aplicam a todos os segredos do Unity Catalog, os segredos com suporte externo têm as seguintes limitações:

  • Cross-cloud access is not supported : Back schemas with the secret manager native to the workspace's cloud.
  • Read latency and cost : Every read fetches the value from the external secret manager, which adds latency and can incur cloud provider costs.
nota

Se o secret manager externo que oferece suporte a um schema estiver em uma região diferente do metastore ou workspace que o lê, os valores secretos e seus metadados atravessam regiões. O Databricks não garante o processamento na região de segredos externos.

Nomes e valores de segredos externos podem conter dados pessoais. Você é responsável por manter dados pessoais fora deles, a menos que seu caso de uso exija isso.

Recursos adicionais​