Configurar um gateway de rede privada
Visualização
Esse recurso está na Visualização privada. Para experimentar, entre em contato com o seu representante da Databricks.
Este artigo descreve como configurar e gerenciar um gateway de rede privada. Para ter uma visão geral do que é um gateway de rede privada e como ele funciona, consulte Gateway de rede privada.
Requisitos
Antes de criar um gateway de rede privada, certifique-se de ter o seguinte:
- Uma conta do AWS Databricks com pelo menos um workspace que tenha o compute serverless habilitado.
- Privilégios de administrador de account do Databricks. Sua account também deve estar no nível de preços Enterprise.
- Uma sub-rede de VPC dedicada na sua região de destino e zona de disponibilidade. Um(a)
/28é o mínimo prático. A sub-rede deve ter endereços IP disponíveis e conectividade downstream para os recursos pretendidos. A Databricks recomenda criar uma sub-rede dedicada ao gateway. - Permissão em sua conta da AWS para criar uma IAM role que o Databricks possa assumir.
- A capacidade de criar um grupo de segurança na mesma VPC para controlar a saída do gateway.
- Resolução DNS configurada em sua VPC para os recursos que você deseja acessar. O gateway usa o DNS fornecido pela Amazon.
O gateway de rede privada está disponível em um conjunto limitado de regiões da AWS e Zonas de Disponibilidade físicas durante a prévia privada. Entre em contato com sua equipe de conta do Databricks para confirmar as regiões e Zonas de Disponibilidade suportadas para sua implantação. O gateway e sua sub-rede devem estar na mesma região que o NCC.
Ativar a pré-visualização
Para solicitar acesso ao Private Preview do gateway de rede privada, entre em contato com sua equipe de conta do Databricks e forneça o seguinte:
- ID da sua conta do Databricks.
- As regiões onde você pretende usar o gateway.
Configurar um gateway de rede privada
Toda a configuração de gateway de rede privada usa a API REST account. Não há suporte para interface de usuário ou Terraform durante a visualização.
Os passos da API REST abaixo usam /api/networking/v1/ para operações de gateway. A criação de NCC e o anexo ao workspace continuam a usar /api/2.0/accounts/....
Crie ou selecione um NCC
Se você já tiver um NCC na região que deseja usar, pule esta etapa.
-
Obtenha um access token OAuth usando um Service Principal que tenha a função de administrador de account. Um administrador de conta cria o Service Principal no console da conta com antecedência. Para solicitar o token, execute o seguinte:
Bashcurl --location 'https://accounts.cloud.databricks.com/oidc/accounts/{account_id}/v1/token' \--header 'Content-Type: application/x-www-form-urlencoded' \--header 'Authorization: Basic <base64(client_id:client_secret)>' \--data-urlencode 'grant_type=client_credentials' \--data-urlencode 'scope=all-apis' -
Crie um NCC, execute o seguinte:
Bashcurl --request POST \'https://accounts.cloud.databricks.com/api/2.0/accounts/{account_id}/network-connectivity-configs' \--header 'Authorization: Bearer <access_token>' \--header 'Content-Type: application/json' \--data '{ "name": "my-ncc", "region": "us-east-1" }'Salve o
network_connectivity_config_idda resposta.
Prepare sua rede VPC
Forneça o seguinte em sua conta da AWS:
- Uma sub-rede na zona de disponibilidade de destino, com endereços IP disponíveis. O Private Preview suporta exatamente uma sub-rede em uma zona de disponibilidade.
- Um grupo de segurança que controla o que a interface de rede do gateway pode acessar. O Databricks recomenda não utilizar regras de entrada e que as regras de saída sejam limitadas às suas portas de destino.
- Resolução de DNS por meio de DNS fornecido pela Amazon. Associe quaisquer zonas privadas hospedadas necessárias do Route 53 com a VPC que contém a sub-rede de gateway.
A sub-rede e o grupo de segurança devem estar na mesma VPC, na região de seus Workspace NCC e de destino.
Criar a IAM role entre contas
-
Crie uma IAM role em sua conta da AWS que o Databricks assume para criar e gerenciar a interface de rede do gateway.
-
Defina a política de confiança para permitir que a função do Databricks assuma esta função, usando o ID da sua conta do Databricks como o ID externo:
JSON{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"AWS": "arn:aws:iam::414351767826:role/png-management-role"},"Action": "sts:AssumeRole","Condition": {"StringEquals": {"sts:ExternalId": "<your_databricks_account_id>"}}}]} -
Anexe a seguinte política de permissão. Substitua
<region>,<customer_account>e<vpc_id>pelos seus valores:JSON{"Version": "2012-10-17","Statement": [{"Sid": "CreateNicInVpc","Effect": "Allow","Action": "ec2:CreateNetworkInterface","Resource": ["arn:aws:ec2:<region>:<customer_account>:network-interface/*","arn:aws:ec2:<region>:<customer_account>:subnet/*","arn:aws:ec2:<region>:<customer_account>:security-group/*"]},{"Sid": "ManageAndCleanupNic","Effect": "Allow","Action": ["ec2:CreateNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:CreateTags"],"Resource": "arn:aws:ec2:<region>:<customer_account>:network-interface/*","Condition": { "StringEquals": { "aws:RequestedRegion": "<region>" } }},{"Sid": "CreateGatewayInVpcOnly","Effect": "Allow","Action": "vpc-lattice:CreateResourceGateway","Resource": "arn:aws:vpc-lattice:<region>:<customer_account>:resourcegateway/*","Condition": {"StringEquals": {"aws:RequestedRegion": "<region>","vpc-lattice:VpcId": "<vpc_id>","aws:RequestTag/Vendor": "Databricks","aws:RequestTag/DatabricksGateway": "true"}}},{"Sid": "CreateManagedGatewayResources","Effect": "Allow","Action": "vpc-lattice:CreateResourceConfiguration","Resource": "arn:aws:vpc-lattice:<region>:<customer_account>:resourceconfiguration/*","Condition": {"StringEquals": {"aws:RequestedRegion": "<region>","aws:RequestTag/Vendor": "Databricks","aws:RequestTag/DatabricksManaged": "true"}}},{"Sid": "CreateConfigOnDatabricksGatewayOnly","Effect": "Allow","Action": "vpc-lattice:CreateResourceConfiguration","Resource": "arn:aws:vpc-lattice:<region>:<customer_account>:resourcegateway/*","Condition": {"StringEquals": {"aws:RequestedRegion": "<region>","aws:RequestTag/Vendor": "Databricks","aws:ResourceTag/DatabricksGateway": "true"}}},{"Sid": "DenyGatewayTagOnConfig","Effect": "Deny","Action": "vpc-lattice:CreateResourceConfiguration","Resource": "*","Condition": { "Null": { "aws:RequestTag/DatabricksGateway": "false" } }},{"Sid": "TagOnCreateOnly","Effect": "Allow","Action": "vpc-lattice:TagResource","Resource": ["arn:aws:vpc-lattice:<region>:<customer_account>:resourcegateway/*","arn:aws:vpc-lattice:<region>:<customer_account>:resourceconfiguration/*"],"Condition": {"StringEquals": {"aws:RequestedRegion": "<region>","aws:RequestTag/Vendor": "Databricks","vpc-lattice:CreateAction": ["CreateResourceGateway", "CreateResourceConfiguration"]}}},{"Sid": "ManageManagedGatewayResources","Effect": "Allow","Action": ["vpc-lattice:GetResourceGateway","vpc-lattice:DeleteResourceGateway","vpc-lattice:GetResourceConfiguration","vpc-lattice:DeleteResourceConfiguration","vpc-lattice:PutResourcePolicy","vpc-lattice:DeleteResourcePolicy"],"Resource": ["arn:aws:vpc-lattice:<region>:<customer_account>:resourcegateway/*","arn:aws:vpc-lattice:<region>:<customer_account>:resourceconfiguration/*"],"Condition": { "StringEquals": { "aws:RequestedRegion": "<region>", "aws:ResourceTag/Vendor": "Databricks" } }},{"Sid": "ListAndDescribeInRegion","Effect": "Allow","Action": ["vpc-lattice:GetResourcePolicy","vpc-lattice:ListResourceGateways","vpc-lattice:ListResourceConfigurations","ec2:DescribeNetworkInterfaces","ec2:DescribeVpcs","ec2:DescribeSubnets","ec2:DescribeSecurityGroups","ec2:DescribeAvailabilityZones","ec2:DescribeRouteTables"],"Resource": "*","Condition": { "StringEquals": { "aws:RequestedRegion": "<region>" } }},{"Sid": "VpcLatticeServiceLinkedRole","Effect": "Allow","Action": "iam:CreateServiceLinkedRole","Resource": "arn:aws:iam::<customer_account>:role/aws-service-role/vpc-lattice.amazonaws.com/AWSServiceRoleForVpcLattice","Condition": {"StringEquals": { "iam:AWSServiceName": "vpc-lattice.amazonaws.com" }}}]}A account AWS do Databricks é
414351767826. O ID externo é o ID da sua account do Databricks. Algumas ações não podem ser restritas a uma VPC específica, portanto, o escopo disponível mais restrito é account e região. Conceda a política na íntegra. Todas as declarações são obrigatórias.O Databricks tags os gateways de recursos que cria com
Vendor=DatabrickseDatabricksGateway=true, e as configurações de recursos que cria comVendor=DatabrickseDatabricksManaged=true. A política permite tags de VPC Lattice apenas quando um recurso é criado e permite configurações de recursos apenas em gateways de recursos que o Databricks criou na VPC aprovada. Não aplique a tagDatabricksGatewayaos gateways de recursos que você mesmo criar, pois isso os coloca no escopo desta política.Se você criou a função com uma versão anterior desta política, a função continuará funcionando e você não precisará alterá-la. Para evitar que o Databricks crie configurações de recursos em gateways de recursos que não foram criados por ele, substitua a política de permissão da função pela política acima. Mantenha o mesmo ARN da função e a política de confiança.
Criar o gateway de rede privada
Para criar o gateway, envie uma solicitação POST para o endpoint private-network-gateways sob seu NCC. O corpo da solicitação aceita os seguintes campos:
display_name(obrigatório): um nome legível por humanos para o gateway.aws_cloud_connection.gateway_subnets(obrigatório): A sub-rede onde a interface de rede do gateway é colocada. O Private Preview aceita exatamente uma sub-rede.aws_cloud_connection.cross_account_role.role_arn(obrigatório): O ARN da IAM role que você criou n'o passo anterior.aws_cloud_connection.security_group_ids(obrigatório): Os grupos de segurança anexados à interface de rede do gateway, que controlam a saída.private_dns_resolvers(opcional): Omita este campo ou defina-o como[]para usar o DNS fornecido pela Amazon. Não especifique os endereços IP do resolvedor fornecidos pela Amazon.traffic_mode(obrigatório):SPECIFIC_DESTINATIONSouALL_TRAFFIC. Consulte Modos de tráfego.destinations(obrigatório quandotraffic_modeforSPECIFIC_DESTINATIONS): Os nomes DNS para rotear por meio do gateway.
Para tornar a criação de gateway idempotente, adicione o parâmetro de query opcional request_id à URL POST, como ?request_id={request_id}. Use um ID exclusivo para cada novo gateway e reutilize-o ao repetir a mesma solicitação para retornar a operação original sem criar outro gateway.
Para criar um gateway no modo SPECIFIC_DESTINATIONS, execute o seguinte:
curl --request POST \
'https://accounts.cloud.databricks.com/api/networking/v1/accounts/{account_id}/network-connectivity-configs/{network_connectivity_config_id}/private-network-gateways' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{
"display_name": "my-aws-png",
"traffic_mode": "SPECIFIC_DESTINATIONS",
"aws_cloud_connection": {
"gateway_subnets": [{ "subnet_id": "subnet-0abc123def456" }],
"cross_account_role": {
"role_arn": "arn:aws:iam::<customer_account>:role/databricks-png-role"
},
"security_group_ids": ["sg-customer-xyz"]
},
"destinations": [
{ "destination_type": "DNS_NAME", "value": "app.customer.internal" }
],
"private_dns_resolvers": []
}'
A resposta é uma operação de longa duração. Salve o seu name, que tem o formato accounts/{account_id}/network-connectivity-configs/{network_connectivity_config_id}/private-network-gateways/{gateway_id}/operations/{operation_id}. Esse nome de operação é diferente do nome do recurso do gateway.
Por exemplo, uma operação pendente inclui os seguintes campos:
{
"name": "accounts/{account_id}/network-connectivity-configs/{network_connectivity_config_id}/private-network-gateways/{gateway_id}/operations/{operation_id}",
"done": false
}
Confirme se o gateway está estabelecido
Para verificar a operação de criação, substitua {operation_name} pelo valor completo do campo name de nível superior na resposta de criação. Esse valor começa com accounts/ e termina com operations/{operation_id}. Anexe-o a https://accounts.cloud.databricks.com/api/networking/v1/ como mostrado abaixo:
curl --request GET \
'https://accounts.cloud.databricks.com/api/networking/v1/{operation_name}' \
--header 'Authorization: Bearer <access_token>'
Aguarde até que done seja true. Se a operação contiver error, resolva o problema de provisionamento. Se ele contiver response, o gateway está estabelecido. Uma operação bem-sucedida inclui os seguintes campos:
{
"name": "accounts/{account_id}/network-connectivity-configs/{network_connectivity_config_id}/private-network-gateways/{gateway_id}/operations/{operation_id}",
"done": true,
"response": {
"name": "accounts/{account_id}/network-connectivity-configs/{network_connectivity_config_id}/private-network-gateways/{gateway_id}",
"display_name": "my-aws-png",
"state": "ESTABLISHED"
}
}
Salvar response.name como {gateway_name}. Para recuperar o gateway posteriormente, use seu nome de recurso completo:
curl --request GET \
'https://accounts.cloud.databricks.com/api/networking/v1/{gateway_name}' \
--header 'Authorization: Bearer <access_token>'
A resposta GET é o próprio recurso de gateway, sem o wrapper de operação.
Anexar o NCC aos seus workspaces
Se seu workspace já estiver anexado ao NCC, pule este passo. Um NCC é um objeto regional e pode ser anexado apenas a Workspace na mesma região.
No console da conta, vá para Workspaces , selecione o workspace, abra Network Connectivity e anexe seu NCC. Repita para cada workspace que deva usar o gateway.
Você também pode anexar o NCC usando a API REST da conta:
curl --request PATCH \
'https://accounts.cloud.databricks.com/api/2.0/accounts/{account_id}/workspaces/{workspace_id}' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{ "network_connectivity_config_id": "{network_connectivity_config_id}" }'
Configuração de DNS
Omit private_dns_resolvers ou defina-o como [] para usar o DNS fornecido pela Amazon. A API V1 rejeita endereços de resolvedor fornecidos pela Amazon explicitamente fornecidos, incluindo 169.254.169.253 e a base CIDR da VPC mais dois.
Se seus recursos privados estiverem registrados em uma zona privada hospedada do Route 53, associe essa zona à VPC que contém a sub-rede do gateway para que os hostnames sejam resolvidos corretamente. Para requisitos de DNS personalizados, entre em contato com sua equipe de account Databricks.
Gerenciar um gateway
Você pode atualizar, excluir e listar gateways com a API REST da conta.
Atualizar um gateway
Você pode atualizar display_name, destinations, private_dns_resolvers e traffic_mode no local com uma solicitação PATCH. O parâmetro de query update_mask é obrigatório e especifica quais campos atualizar. Ao alternar traffic_mode para ALL_TRAFFIC, limpe destinations na mesma solicitação. Ao alternar para SPECIFIC_DESTINATIONS, inclua os destinos para rotear. Para alterar gateway_subnets, cross_account_role ou security_group_ids, exclua o gateway e crie um novo.
Para mudar para DNS fornecido pela Amazon, inclua private_dns_resolvers em update_mask e defina private_dns_resolvers como [].
Para atualizar os destinos, execute o seguinte:
curl --request PATCH \
'https://accounts.cloud.databricks.com/api/networking/v1/accounts/{account_id}/network-connectivity-configs/{network_connectivity_config_id}/private-network-gateways/{gateway_id}?update_mask=destinations' \
--header 'Authorization: Bearer <access_token>' \
--header 'Content-Type: application/json' \
--data '{ "destinations": [ { "destination_type": "DNS_NAME", "value": "app2.customer.internal" } ] }'
A resposta de atualização é o próprio recurso de gateway. Ele não está envolto em um campo private_network_gateway.
Excluir um gateway
A exclusão de um gateway interrompe a conectividade com os recursos privados que dependem dele. Confirme se não há cargas de trabalho ativas dependendo do gateway antes de excluí-lo.
Para excluir o gateway, envie uma solicitação DELETE para o endpoint do gateway sob seu NCC:
curl --request DELETE \
'https://accounts.cloud.databricks.com/api/networking/v1/accounts/{account_id}/network-connectivity-configs/{network_connectivity_config_id}/private-network-gateways/{gateway_id}' \
--header 'Authorization: Bearer <access_token>'
A resposta de exclusão está vazia. Solicitações get subsequentes retornam NOT_FOUND e o gateway é omitido das respostas de lista enquanto a limpeza da infraestrutura continua. A exclusão não retorna uma operação para sondar.
Listar gateways
Para listar os gateways de rede privada em uma NCC, envie uma solicitação GET para o endpoint de gateway sob sua NCC:
curl --request GET \
'https://accounts.cloud.databricks.com/api/networking/v1/accounts/{account_id}/network-connectivity-configs/{network_connectivity_config_id}/private-network-gateways' \
--header 'Authorization: Bearer <access_token>'
Ler gateways da matriz private_network_gateways. Se a resposta incluir next_page_token, passe esse valor como o parâmetro de query page_token na próxima solicitação de lista.
Estados do gateway
Um gateway relata um dos seguintes estados:
Status | Descrição |
|---|---|
| O Databricks está criando a interface de rede de gateway em sua sub-rede. |
| O gateway está pronto para rotear o tráfego. |
| Não foi possível provisionar o gateway. Este estado é terminal: exclua o gateway e crie um novo após corrigir a causa subjacente, como uma região ou Zona de Disponibilidade não suportada. |