Execute consultas federadas no Amazon RDS para MySQL (autenticação IAM)
Esta página descreve como configurar o Databricks Lakehouse Federation para executar consultas federadas no Amazon RDS para MySQL usando a autenticação do AWS Identity and Access Management (IAM) em vez de um nome de usuário e senha. A autenticação usa uma credencial de serviço do Unity Catalog que faz referência a uma IAM role da AWS. Para a configuração geral de federação do MySQL com nome de usuário e senha, consulte Execute consultas federadas no MySQL.
A autenticação IAM para Amazon RDS para MySQL está disponível apenas no Databricks on AWS, pois depende de uma IAM role da AWS referenciada por uma credencial de serviço.
Antes de começar
Antes de poder executar queries federadas no Amazon RDS para MySQL usando autenticação IAM, você deve atender aos seguintes requisitos.
Requisitos do Databricks
- Um workspace habilitado para o Unity Catalog.
- compute do Databricks que usa o Databricks Runtime 18 LTS ou acima e modo de acesso Standard ou Dedicated .
- O privilégio
CREATE CONNECTIONno metastore do Unity Catalog anexado ao workspace. - O privilégio
CREATE SERVICE CREDENTIALno metastore.
Requisitos da AWS
- Uma instância do Amazon RDS para MySQL.
- A capacidade de criar IAM roles e políticas.
- Permissão para conectar-se à instância RDS para criar usuários de banco de dados.
Configurar autenticação do AWS IAM
Conclua os passos seguintes na AWS para habilitar a autenticação do IAM na sua instância do RDS para MySQL e criar o usuário do banco de dados, a política do IAM e a IAM role que o Unity Catalog usa para se conectar.
Passo 1: Habilitar a autenticação IAM na instância do Amazon RDS
Crie ou modifique sua instância do RDS para MySQL para habilitar a autenticação de banco de dados do IAM. Para obter instruções, consulte Habilitar e desabilitar a autenticação de banco de dados do IAM na documentação da AWS.
Passo 2: Criar o usuário do banco de dados Amazon RDS
Conecte-se à instância do RDS e crie um usuário de banco de dados que se autentique usando IAM. Para MySQL, o usuário deve usar o AWSAuthenticationPlugin:
CREATE USER 'iam_user' IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS';
Conceda ao usuário os privilégios necessários nos bancos de dados e tabelas que você deseja query. Para obter mais informações, consulte Creating a database account using IAM authentication (Criar uma conta de banco de dados usando autenticação IAM) na documentação da AWS.
Etapa 3: configurar a política de IAM da AWS
Crie uma política de IAM que permita a ação rds-db:connect para o usuário de banco de dados que você criou. Por exemplo:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["rds-db:connect"],
"Resource": ["arn:aws:rds-db:us-west-2:111122223333:dbuser:db-ABCDEFGHIJKL01234/iam_user"]
}
]
}
O ARN do recurso usa o formato arn:aws:rds-db:<region>:<account-id>:dbuser:<DbiResourceId>/<db-user>. O segmento <DbiResourceId> deve ser o ID do recurso RDS (por exemplo, db-ABCDEFGHIJKL01234), não o identificador da instância de banco de dados. Usar o identificador da instância resulta em um erro de acesso negado no momento da conexão.
Para encontrar o ID do recurso, execute:
aws rds describe-db-instances --db-instance-identifier <instance-name> --query 'DBInstances[0].DbiResourceId'
Alternativamente, encontre o ID do recurso na tab Configuração da sua instância de banco de dados no console do Amazon RDS.
Para obter mais informações, consulte Criar e usar uma política do IAM para acesso ao banco de dados IAM na documentação da AWS.
O passo 4: Criar a IAM role da AWS
Crie uma IAM role que o Unity Catalog possa assumir para autenticar-se em seu banco de dados:
-
No console do AWS IAM, acesse Funções e clique em Criar função .
-
Para Tipo de entidade confiável , selecione Política de confiança personalizada .
-
No editor de Policy de confiança personalizada , cole a policy a seguir. Este é um placeholder: após criar a credencial de serviço no Databricks, você a substitui pela política de confiança que o Databricks gera. O
Principale oActionsão necessários; o blocoConditioné opcional nesta etapa.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"
}
}
}
]
} -
Clique em Avançar . Na página Adicionar permissões , selecione a política do IAM que você criou em Configurar a política do IAM.
-
Clique em Próximo , insira um Nome da função e clique em Criar função .
-
Anote o ARN da função. Você o fornece ao criar a credencial de serviço.
Para obter mais informações sobre IAM roles com políticas de confiança personalizadas, consulte Creating a role using custom trust policies (Criar uma função usando políticas de confiança personalizadas) na documentação da AWS.
O passo 5: Crie a credencial de serviço do Databricks
Crie uma credencial de serviço do Unity Catalog que referencie o ARN da IAM role do passo anterior. Para obter os passos detalhados, consulte Criar credenciais de serviço.
Após criar a credencial de serviço, conclua a configuração da política de confiança da IAM role:
- Na caixa de diálogo Credencial de serviço criada , copie toda a política de confiança exibida e clique em Concluído .
- Retorne à sua IAM role no console da AWS, abra a tab Relações de confiança e substitua a política de confiança de espaço reservado pela que você copiou. Isso adiciona a ID externa da credencial do seu serviço e torna a role autoassumida.
Anote o nome da credencial de serviço. O senhor faz referência a ela ao criar a conexão.
Criar uma conexão
A conexão especifica um caminho e as credenciais para acessar um sistema de banco de dados externo. Para criar uma conexão, você pode usar o Catalog Explorer ou o comando CREATE CONNECTION do SQL em um Notebook do Databricks ou no editor de consultas SQL do Databricks.
Você também pode usar a API REST do Databricks ou a CLI do Databricks para criar uma conexão. Consulte POST /api/2.1/unity-catalog/connections e comandos do Unity Catalog.
Permissões necessárias: Administrador do Metastore ou usuário com o privilégio CREATE CONNECTION.
- Catalog Explorer
- SQL
-
No seu workspace do Databricks, clique em
Catálogo .
-
Na parte superior do painel Catálogo , clique no ícone
Adicionar e selecione Criar uma conexão no menu.
-
Na página Noções básicas de conexão do assistente Configurar conexão , insira um nome de conexão fácil de lembrar.
-
Selecione um tipo de conexão MySQL .
-
Para Tipo de autenticação , selecione Credencial de serviço .
-
(Opcional) Adicione um comentário.
-
Clique em Avançar .
-
Na página Autenticação , insira as seguintes propriedades de conexão para sua instância do MySQL RDS:
- Host : Por exemplo,
mysql-demo.lb123.us-west-2.rds.amazonaws.com - Porta : por exemplo,
3306 - Usuário : O usuário de banco de dados IAM que você criou. Por exemplo,
iam_user - Região da AWS : a região da instância do RDS. Por exemplo,
us-west-2
- Host : Por exemplo,
-
Clique em Avançar .
-
Na página Connection details , para Credencial de serviço , selecione a credencial de serviço que você criou em Create the service credential.
-
Clique em Criar conexão .
-
Na página Noções básicas do catálogo , insira um nome para o catálogo externo. Um catálogo externo espelha um banco de dados em um sistema de dados externo para que você possa query e gerenciar o acesso aos dados nesse banco de dados usando Databricks e Unity Catalog.
-
(Opcional) Clique em Testar conexão para confirmar se está funcionando.
-
Clique em Criar catálogo .
-
Na página Acesso , selecione os workspaces nos quais os usuários podem acessar o catálogo que você criou. Você pode selecionar Todos os workspaces têm acesso ou clicar em Atribuir a workspaces , selecionar os workspaces e, em seguida, clicar em Atribuir .
-
Altere o Proprietário que pode gerenciar o acesso a todos os objetos no catálogo. Comece a digitar um principal na caixa de texto e, em seguida, clique no principal nos resultados retornados.
-
Conceda Privilégios no catálogo. Clique em Conceder :
-
Especifique os Principals que terão acesso aos objetos no catálogo. Comece a digitar um principal na caixa de texto e, em seguida, clique no principal nos resultados retornados.
-
Selecione as Predefinições de privilégio a serem concedidas a cada principal. Todos os usuários da conta recebem
BROWSEpor default.- Selecione Data Reader no menu suspenso para conceder privilégios
readem objetos no catálogo. - Selecione Editor de dados no menu suspenso para conceder privilégios
reademodifyem objetos no catálogo. - Selecione manualmente os privilégios a conceder.
- Selecione Data Reader no menu suspenso para conceder privilégios
-
Clique em Conceder .
-
-
Clique em Avançar .
-
Na página Metadata , especifique pares key-value de tags. Para obter mais informações, consulte Aplicar tags a objetos protegíveis do Unity Catalog.
-
(Opcional) Adicione um comentário.
-
Clique em Salvar .
Execute o seguinte comando em um notebook ou no editor de consultas SQL do Databricks. Fornecer a opção credential em vez de uma senha cria uma conexão autenticada por IAM.
CREATE CONNECTION <connection-name> TYPE mysql
OPTIONS (
host '<hostname>',
port '<port>',
user '<iam-user>',
aws_region '<region>',
credential '<service-credential-name>'
);
Criar um catálogo externo
Se você usar a interface do usuário para criar uma conexão com a fonte de dados, a criação de catálogo externo será incluída e você poderá pular este o passo.
Se você usar a interface do usuário para criar uma conexão com a fonte de dados, a criação de catálogo externo será incluída e você poderá pular este o passo.
Um catálogo externo espelha um banco de dados em um sistema de dados externo para você consultar e gerenciar o acesso aos dados nesse banco de dados com Databricks e Unity Catalog. Para criar um catálogo externo, utiliza-se uma conexão com a fonte de dados que já foi definida.
Para criar um catálogo externo, você pode usar o Catalog Explorer ou o comando SQL CREATE FOREIGN CATALOG em um notebook do Databricks ou no editor de consultas SQL. Você também pode usar a API REST do Databricks ou a CLI do Databricks para criar um catálogo. Veja POST /api/2.1/unity-catalog/catalogs e comandos do Unity Catalog.
Permissões necessárias: permissão CREATE CATALOG na metastore e propriedade da conexão ou o privilégio CREATE FOREIGN CATALOG na conexão.
- Catalog Explorer
- SQL
-
No seu workspace do Databricks, clique em
Catálogo para abrir o Catalog Explorer.
-
Na parte superior do painel Catálogo , clique no ícone
Adicionar e selecione Adicionar um catálogo no menu.
Como alternativa, na página de acesso rápido , clique no botão Catálogos e no botão Criar catálogo .
-
Siga as instruções para criar catálogos externos em Criar catálogos.
Execute o seguinte comando SQL em um notebook ou no editor de consultas SQL. Os itens entre colchetes são opcionais. Substitua os valores temporários:
<catalog-name>: Nome para o catálogo no Databricks.<connection-name>: o objeto de conexão que especifica a fonte de dados, o caminho e as credenciais de acesso.<database-name>: Nome do banco de dados que você deseja espelhar como um catálogo no Databricks.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');