Conceitos básicos do RDS Proxy - Amazon Relational Database Service

Conceitos básicos do RDS Proxy

Para saber como configurar o RDS Proxy, leia as seções a seguir. Nessas seções, você também pode saber como definir as opções de segurança relacionadas que controlam quem pode acessar cada proxy e como cada proxy se conecta a instâncias de banco de dados.

Configuração de pré-requisitos de rede

O uso do proxy do RDS requer que você tenha uma nuvem virtual privada (VPC) comum entre o cluster de bancos de dados Aurora ou a instância de banco de dados do RDS e o RDS Proxy. Essa VPC deve ter um mínimo de duas sub-redes em zonas de disponibilidade diferentes. Sua conta pode possuir essas sub-redes ou compartilhá-las com outras contas. Para obter informações sobre compartilhamento de VPC, consulte Trabalhar com VPCs compartilhadas. Seus recursos de aplicações clientes, como Amazon EC2, Lambda ou Amazon ECS, podem estar na mesma VPC ou em uma VPC separada do proxy. Observe que se você se conectou com êxito a quaisquer instâncias de banco de dados do RDS ou clusters de bancos de dados Aurora, já terá os recursos de rede necessários.

O exemplo do Linux a seguir mostra comandos da AWS CLI que examinam as VPCs e sub-redes pertencentes à sua conta da AWS. Em particular, você passa IDs de sub-rede como parâmetros quando cria um proxy usando o CLI.

aws ec2 describe-vpcs aws ec2 describe-internet-gateways aws ec2 describe-subnets --query '*[].[VpcId,SubnetId]' --output text | sort

O exemplo do Linux a seguir mostra comandos da AWS CLI para determinar as IDs de sub-rede correspondentes a um cluster de banco de dados específico do Aurora ou uma instância de banco de dados específica do RDS. Para um cluster do Aurora, primeiro você encontra o ID de uma das instâncias de banco de dados associadas. Você pode extrair os IDs de sub-rede usados por essa instância de banco de dados examinando os campos aninhados dentro dos atributos DBSubnetGroup e Subnets na saída de descrição da instância de banco de dados. Você especifica alguns ou todos esses IDs de sub-rede ao configurar um proxy para esse servidor de banco de dados.

$ # Optional first step, only needed if you're starting from an Aurora cluster. Find the ID of any DB instance in the cluster. $ aws rds describe-db-clusters --db-cluster-identifier my_cluster_id --query '*[].[DBClusterMembers]|[0]|[0][*].DBInstanceIdentifier' --output text my_instance_id instance_id_2 instance_id_3 ... $ # From the DB instance, trace through the DBSubnetGroup and Subnets to find the subnet IDs. $ aws rds describe-db-instances --db-instance-identifier my_instance_id --query '*[].[DBSubnetGroup]|[0]|[0]|[Subnets]|[0]|[*].SubnetIdentifier' --output text subnet_id_1 subnet_id_2 subnet_id_3 ...

Como alternativa, você pode primeiro encontrar o ID da VPC para a instância de banco de dados. Em seguida, você pode examinar a VPC para encontrar suas sub-redes. O exemplo do Linux a seguir mostra como fazer isso.

$ # From the DB instance, find the VPC. $ aws rds describe-db-instances --db-instance-identifier my_instance_id --query '*[].[DBSubnetGroup]|[0]|[0].VpcId' --output text my_vpc_id $ aws ec2 describe-subnets --filters Name=vpc-id,Values=my_vpc_id --query '*[].[SubnetId]' --output text subnet_id_1 subnet_id_2 subnet_id_3 subnet_id_4 subnet_id_5 subnet_id_6

Configuração de credenciais de banco de dados no AWS Secrets Manager

Para cada proxy criado, use primeiro o serviço Secrets Manager para armazenar conjuntos de credenciais de nome de usuário e senha. Você cria um segredo separado do Secrets Manager para cada conta de usuário de banco de dados ao qual o proxy se conecta na instância de banco de dados do RDS ou no cluster de bancos de dados Aurora.

No Secrets Manager, crie esses segredos com valores para os campos username e password. Isso permite que o proxy se conecte aos usuários de banco de dados correspondentes em qualquer instância de banco de dados do RDS ou clusters de bancos de dados Aurora que você associar ao proxy. Para fazer isso, você pode usar a configuração Credentials for other database (Credenciais para outro banco de dados), Credentials for RDS database (Credenciais para o banco de dados do RDS) ou Other type of secrets (Outros tipos de segredos). Preencha os valores apropriados nos campos Nome de usuário e Senha e valores de espaço reservado em outros campos obrigatórios. O proxy ignorará outros campos, como Host e Porta, se eles estiverem presentes no segredo. Esses detalhes são fornecidos automaticamente pelo proxy.

Também é possível escolher Outro tipo de segredos. Nesse caso, crie o segredo com chaves chamadas username e password.

Como os segredos usados pelo seu proxy não estão vinculados a um servidor de banco de dados específico, é possível reutilizar um segredo entre vários proxies se usar as mesmas credenciais em vários servidores de banco de dados. Por exemplo, você pode usar as mesmas credenciais entre um grupo de servidores de desenvolvimento e teste.

Para se conectar pelo proxy como um usuário específico, verifique se a senha associada a um segredo corresponde à senha do banco de dados desse usuário. Se houver uma incompatibilidade, você poderá atualizar o segredo associado no Secrets Manager. Nesse caso, você ainda pode se conectar a outras contas nas quais as credenciais do segredo e as senhas do banco de dados coincidem.

Ao criar um proxy por meio da AWS CLI ou da API do RDS, você especifica os nomes de recursos da Amazon (ARNs) dos segredos correspondentes a todas as contas de usuário do banco de dados que o proxy pode acessar. No AWS Management Console, escolha os segredos por seus nomes descritivos.

Para obter instruções sobre como criar segredos no Secrets Manager, consulte a página Creating a secret (Criar um segredo) na documentação do Secrets Manager. Use uma das seguintes técnicas:

  • Use o Secrets Manager no console.

  • Para usar a CLI para criar um segredo do Secrets Manager para uso com o RDS Proxy, use um comando como o seguinte.

    aws secretsmanager create-secret --name "secret_name" --description "secret_description" --region region_name --secret-string '{"username":"db_user","password":"db_user_password"}'

Por exemplo, os comandos a seguir criam segredos do Secrets Manager para dois usuários de banco de dados, um chamado admin e o outro chamado app-user

aws secretsmanager create-secret \ --name admin_secret_name --description "db admin user" \ --secret-string '{"username":"admin","password":"choose_your_own_password"}' aws secretsmanager create-secret \ --name proxy_secret_name --description "application user" \ --secret-string '{"username":"app-user","password":"choose_your_own_password"}'

Para ver os segredos de propriedade da sua conta da AWS, use um comando como a seguir.

aws secretsmanager list-secrets

Ao criar um proxy utilizando a CLI, você transmite os nomes de recursos da Amazon (ARNs) de um ou mais segredos ao parâmetro --auth. O exemplo do Linux a seguir mostra como preparar um relatório com apenas o nome e o ARN de cada segredo de propriedade da sua conta da AWS. Este exemplo usa o parâmetro --output table que está disponível na AWS CLI versão 2. Se você estiver usando a AWS CLI versão 1, use --output text em vez disso.

aws secretsmanager list-secrets --query '*[].[Name,ARN]' --output table

Para verificar se você armazenou as credenciais corretas e no formato correto em um segredo, use um comando como o seguinte. Substitua o nome abreviado ou o ARN do segredo por your_secret_name.

aws secretsmanager get-secret-value --secret-id your_secret_name

A saída deve incluir uma linha exibindo um valor codificado por JSON como o seguinte.

"SecretString": "{\"username\":\"your_username\",\"password\":\"your_password\"}",

Configuração de políticas do AWS Identity and Access Management (IAM)

Depois de criar os segredos no Secrets Manager, crie uma política do IAM que possa acessar esses segredos. Para obter informações gerais sobre como usar o IAM com o RDS e o Aurora, consulte Identity and Access Management no Amazon RDS.

dica

O procedimento a seguir se aplicará se você usar o console do IAM. Se você usar o AWS Management Console para RDS, o RDS poderá criar a política do IAM para você automaticamente. Nesse caso, você pode ignorar o procedimento a seguir.

Como criar uma política do IAM que acessa os segredos do Secrets Manager para uso com o proxy

  1. Faça login no console do IAM. Siga o processo Create role (Criar função), conforme descrito em Criar funções do IAM. Inclua a etapa Add Role to Database (Adicionar função ao banco de dados).

  2. Para a nova função, execute a etapa Add inline policy (Adicionar política em linha). Use os mesmos procedimentos gerais que em Editar políticas do IAM. Cole o seguinte JSON na caixa de texto JSON. Substitua o ID da sua própria conta. Substitua sua região da AWS por us-east-2. Substitua os nomes de recurso da Amazon (ARNs) pelos segredos criados. Para a ação kms:Decrypt, substitua o ARN da AWS KMS key padrão ou a sua própria chave do KMS, dependendo de qual você usou para criptografar os segredos do Secrets Manager.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": [ "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_1", "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_2" ] }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:us-east-2:account_id:key/key_id", "Condition": { "StringEquals": { "kms:ViaService": "secretsmanager.us-east-2.amazonaws.com" } } } ] }
  3. Edite a política de confiança dessa função do IAM. Cole o seguinte JSON na caixa de texto JSON.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

O comando a seguir executa a mesma operação na AWS CLI.

PREFIX=choose_an_identifier aws iam create-role --role-name choose_role_name \ --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":["rds.amazonaws.com"]},"Action":"sts:AssumeRole"}]}' aws iam put-role-policy --role-name same_role_name_as_previous \ --policy-name $PREFIX-secret-reader-policy --policy-document """ same_json_as_in_previous_example """ aws kms create-key --description "$PREFIX-test-key" --policy """ { "Id":"$PREFIX-kms-policy", "Version":"2012-10-17", "Statement": [ { "Sid":"Enable IAM User Permissions", "Effect":"Allow", "Principal":{"AWS":"arn:aws:iam::account_id:root"}, "Action":"kms:*","Resource":"*" }, { "Sid":"Allow access for Key Administrators", "Effect":"Allow", "Principal": { "AWS": ["$USER_ARN","arn:aws:iam::account_id:role/Admin"] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource":"*" }, { "Sid":"Allow use of the key", "Effect":"Allow", "Principal":{"AWS":"$ROLE_ARN"}, "Action":["kms:Decrypt","kms:DescribeKey"], "Resource":"*" } ] } """

Criar um RDS Proxy

Para gerenciar as conexões de um conjunto especificado de instâncias de banco de dados, você pode criar um proxy. É possível associar um proxy a uma instância de banco de dados do RDS for MySQL, a uma instância de banco de dados do PostgreSQL ou a um cluster de bancos de dados Aurora.

Como criar um proxy

  1. Faça login no AWS Management Console e abra o console do Amazon RDS em https://console.aws.amazon.com/rds/.

  2. No painel de navegação, escolha Proxies.

  3. Escolha Create proxy (Criar proxy).

  4. Escolha todas as configurações para seu proxy.

    Em Configuração de proxy, forneça informações para o seguinte:

    • Proxy identifier (Identificador do proxy. Especifique um nome de sua escolha, exclusivo no ID de sua conta da AWS e na região da AWS atual.

    • Engine compatibility (Compatibilidade do mecanismo. Selecione MySQL ou POSTGRESQL.

    • Require Transport Layer Security (Exigir o Transport Layer Security. Escolha essa configuração se desejar que o proxy aplique TLS/SSL a todas as conexões de cliente. Quando você usa uma conexão criptografada ou não criptografada com um proxy, o proxy usa a mesma configuração de criptografia ao fazer uma conexão com o banco de dados subjacente.

    • Idle client connection timeout (Tempo limite de conexão de cliente ociosa. Escolha um período em que uma conexão de cliente possa ficar ociosa até que o proxy possa fechá-la. O padrão é de 1.800 segundos (30 minutos). Uma conexão de cliente é considerada ociosa quando a aplicação não envia uma nova solicitação dentro do tempo especificado após a conclusão da solicitação anterior. A conexão de banco de dados subjacente permanece aberta e é retornada ao grupo de conexões. Portanto, ela está disponível para ser reutilizada para novas conexões de cliente.

      Considere reduzir o tempo limite de conexão do cliente ocioso se desejar que o proxy remova proativamente as conexões obsoletas. Se a workload estiver apresentando picos, considere aumentar o tempo limite de conexão do cliente ocioso para economizar o custo de estabelecer conexões.

    Em Configuração do grupo de destino, forneça informações para o seguinte:

    • Database (Banco de dados. Escolha uma instância de banco de dados do RDS ou um cluster de bancos de dados Aurora para acesso por meio desse proxy. A lista inclui somente instâncias e clusters de banco de dados com mecanismos de banco de dados compatíveis, versões de mecanismo e outras configurações. Se a lista estiver vazia, crie uma instância ou cluster de banco de dados compatível com o RDS Proxy. Para fazer isso, siga o procedimento em Criar uma instância de banco de dados do Amazon RDS . E tente criar o proxy novamente.

    • Connection pool maximum connections (Conexões máximas do grupo de conexões. Especifique um valor de 1 a 100. Essa configuração representa a porcentagem do valor de max_connections que o proxy do RDS pode usar para suas conexões. Se pretender usar apenas um proxy com esse cluster ou instância de banco de dados, você poderá definir esse valor como 100. Para obter detalhes sobre como o proxy do RDS usa essa configuração, consulte MaxConnectionsPercent.

    • Session pinning filters (Filtros de fixação de sessão. (Opcional) Essa é uma configuração avançada para solucionar problemas de performance com aplicativos específicos. Atualmente, a única opção é EXCLUDE_VARIABLE_SETS. Escolha um filtro somente se ambas as afirmações forem verdadeiras: o aplicativo não estiver reutilizando conexões devido a certos tipos de instruções SQL, e se você puder verificar se a reutilização de conexões com essas instruções SQL não afetará a correção do aplicativo. Para obter mais informações, consulte Como evitar fixação.

    • Connection borrow timeout (Tempo limite de empréstimo de conexão. Em alguns casos, você pode esperar que o proxy às vezes use todas as conexões de banco de dados disponíveis. Nesses casos, é possível especificar quanto tempo o proxy espera que uma conexão de banco de dados fique disponível antes de retornar um erro de tempo limite. É possível especificar um período de até um máximo de cinco minutos. Essa configuração só se aplica quando o proxy tem o número máximo de conexões abertas e todas as conexões já estão em uso.

    • Consulta de inicialização. (Opcional) Você pode especificar uma ou mais instruções SQL para o proxy executar ao abrir cada nova conexão de banco de dados. A configuração normalmente é usada com instruções SET para garantir que cada conexão tenha configurações idênticas, como fuso horário e conjunto de caracteres. Para várias instruções, use um ponto e vírgula como separador. Também é possível incluir diversas variáveis em uma única instrução SET, como SET x=1, y=2. No momento, não há suporte à consulta de inicialização no PostgreSQL.

    Em Conectividade, forneça informações para o seguinte:

    • Segredos do Secrets Manager. Escolha pelo menos um segredo do Secrets Manager que contenha credenciais de usuário de banco de dados para a instância de banco de dados do RDS ou cluster de bancos de dados Aurora que você pretende acessar com esse proxy.

    • IAM role (Função do IAM. Escolha uma função do IAM que tenha permissão para acessar os segredos do Secrets Manager escolhidos anteriormente. Também é possível escolher o AWS Management Console para criar uma função do IAM para você e usá-la.

    • IAM Authentication (Autenticação do IAM. Escolha se deseja ou não permitir a autenticação do IAM para conexões a seu proxy. A opção de autenticação do IAM ou a autenticação de banco de dados nativa aplica-se a todos os usuários de banco de dados que acessam esse proxy.

    • Subnets (Sub-redes. Esse campo é pré-preenchido com todas as sub-redes associadas à sua VPC. Você pode remover todas as sub-redes que não são necessárias para esse proxy. Você deve manter pelo menos duas sub-redes.

    Forneça configuração adicional de conectividade:

    • VPC security group (Grupo de segurança da VPC. Escolha um grupo de segurança da VPC existente. Também é possível escolher o AWS Management Console para criar um grupo de segurança para você e usá-lo.

      nota

      Esse grupo de segurança deve permitir o acesso ao banco de dados ao qual o proxy se conecta. O mesmo grupo de segurança é usado para entrada dos aplicativos para o proxy e para saída do proxy para o banco de dados. Por exemplo, suponha que você use o mesmo grupo de segurança para o banco de dados e o proxy. Nesse caso, especifique que os recursos nesse grupo de segurança podem se comunicar com outros recursos no mesmo grupo de segurança.

      Ao usar uma VPC compartilhada, você não pode usar o grupo de segurança padrão para a VPC ou um grupo de segurança pertencente a outra conta. Escolha um grupo de segurança que pertença à sua conta. Se não houver, crie um. Para obter mais informações sobre essa limitação, consulte Trabalhar com VPCs compartilhadas.

    (Opcional) Forneça configuração avançada:

    • Enable enhanced logging (Habilitar registro em log avançado. Você pode habilitar essa configuração para solucionar problemas de compatibilidade ou de performance do proxy.

      Quando essa configuração está habilitada, o proxy do RDS inclui informações detalhadas sobre as instruções SQL em seus logs. Essas informações ajudam você a depurar problemas que envolvem o comportamento do SQL ou a performance e a escalabilidade de conexões de proxy. As informações de depuração incluem o texto das instruções SQL que você envia por meio do proxy. Portanto, habilite essa configuração somente quando necessário para depuração e somente quando você tiver medidas de segurança em vigor para proteger todas as informações confidenciais que aparecem nos logs.

      Para minimizar a sobrecarga associada ao proxy, o proxy do RDS desativa automaticamente essa configuração 24 horas após habilitá-la. Habilite-a temporariamente para solucionar um problema específico.

  5. Escolha Create Proxy (Criar Proxy).

Para criar um proxy, use o comando create-db-proxy da AWS CLI. O valor --engine-family diferencia letras maiúsculas de minúsculas.

exemplo

Para Linux, macOS ou Unix:

aws rds create-db-proxy \ --db-proxy-name proxy_name \ --engine-family { MYSQL | POSTGRESQL } \ --auth ProxyAuthenticationConfig_JSON_string \ --role-arn iam_role \ --vpc-subnet-ids space_separated_list \ [--vpc-security-group-ids space_separated_list] \ [--require-tls | --no-require-tls] \ [--idle-client-timeout value] \ [--debug-logging | --no-debug-logging] \ [--tags comma_separated_list]

Para Windows:

aws rds create-db-proxy ^ --db-proxy-name proxy_name ^ --engine-family { MYSQL | POSTGRESQL } ^ --auth ProxyAuthenticationConfig_JSON_string ^ --role-arn iam_role ^ --vpc-subnet-ids space_separated_list ^ [--vpc-security-group-ids space_separated_list] ^ [--require-tls | --no-require-tls] ^ [--idle-client-timeout value] ^ [--debug-logging | --no-debug-logging] ^ [--tags comma_separated_list]
dica

Se você ainda não souber os IDs de sub-rede a serem usados para o parâmetro --vpc-subnet-ids, consulte Configuração de pré-requisitos de rede para obter exemplos de como encontrar os IDs de sub-rede que você pode usar.

nota

O grupo de segurança deve permitir acesso ao banco de dados ao qual o proxy se conecta. O mesmo grupo de segurança é usado para entrada dos aplicativos para o proxy e para saída do proxy para o banco de dados. Por exemplo, suponha que você use o mesmo grupo de segurança para o banco de dados e o proxy. Nesse caso, especifique que os recursos nesse grupo de segurança podem se comunicar com outros recursos no mesmo grupo de segurança.

Ao usar uma VPC compartilhada, você não pode usar o grupo de segurança padrão para a VPC ou um grupo de segurança pertencente a outra conta. Escolha um grupo de segurança que pertença à sua conta. Se não houver, crie um. Para obter mais informações sobre essa limitação, consulte Trabalhar com VPCs compartilhadas.

Para criar as informações e associações necessárias para o proxy, também é possível usar o comando register-db-proxy-targets. Especificar o nome do grupo de destino do default O proxy do RDS cria automaticamente um grupo de destino com este nome ao criar cada proxy.

aws rds register-db-proxy-targets --db-proxy-name value [--target-group-name target_group_name] [--db-instance-identifiers space_separated_list] # rds db instances, or [--db-cluster-identifiers cluster_id] # rds db cluster (all instances), or [--db-cluster-endpoint endpoint_name] # rds db cluster endpoint (all instances)

Para criar um proxy do RDS , chame a operação CreateDBProxy da API do Amazon RDS. Passe um parâmetro com a estrutura de dados AuthConfig.

O proxy do RDS cria automaticamente um grupo de destino chamado default ao criar cada proxy. Associe uma instância de banco de dados do RDS ou cluster de bancos de dados Aurora ao grupo de destino chamando a função RegisterDBProxyTargets.

Como visualizar um RDS Proxy

Depois de criar um ou mais proxies do RDS, você pode visualizá-los para examinar seus detalhes de configuração e escolher quais deseja modificar, excluir e assim por diante.

Qualquer aplicativos de banco de dados que usam o proxy exige que o endpoint do proxy seja usado na string de conexão.

Como visualizar o proxy

  1. Faça login no AWS Management Console e abra o console do Amazon RDS em https://console.aws.amazon.com/rds/.

  2. No canto superior direito do AWS Management Console, escolha a região da AWS em que você criou os clusters de banco de dados do RDS Proxy.

  3. No painel de navegação, escolha Proxies.

  4. Escolha o nome de um proxy do RDS para exibir seus detalhes.

  5. Na página de detalhes, a seção Target groups (Grupos de destino) mostra como o proxy está associado a uma instância de banco de dados específica do RDS ou cluster de bancos de dados Aurora. Você pode seguir o link para a página do grupo de destino default (padrão) para ver mais detalhes sobre a associação entre o proxy e o banco de dados. Nessa página você vê as configurações especificadas ao criar o proxy, como porcentagem máxima de conexão, tempo limite de empréstimo de conexão, compatibilidade de mecanismo e filtros de fixação de sessão.

Para visualizar o proxy usando a CLI, use o comando describe-db-proxies. Por padrão, ele exibe todos os proxies pertencentes à sua conta da AWS. Para ver detalhes de um único proxy, especifique o nome dele com o parâmetro --db-proxy-name.

aws rds describe-db-proxies [--db-proxy-name proxy_name]

Para visualizar as outras informações associadas ao proxy, use os comandos a seguir.

aws rds describe-db-proxy-target-groups --db-proxy-name proxy_name aws rds describe-db-proxy-targets --db-proxy-name proxy_name

Use a seguinte sequência de comandos para ver mais detalhes sobre as coisas associadas ao proxy:

  1. Para obter uma lista de proxies, execute describe-db-proxies.

  2. Para mostrar parâmetros de conexão, como a porcentagem máxima de conexões que o proxy pode usar, execute describe-db-proxy-target-groups --db-proxy-name e use o nome do proxy como o valor do parâmetro.

  3. Para ver os detalhes da instância de banco de dados do RDS ou do cluster de bancos de dados Aurora associado ao grupo de destino retornado, execute describe-db-proxy-targets.

Para visualizar seus proxies usando a API do RDS, use a operação DescribeDBProxies. Ela retorna valores do tipo de dados DBProxy.

Para ver detalhes das configurações de conexão do proxy, use os identificadores de proxy desse valor de retorno com a operação DescribeDBProxyTargetGroups. Ela retorna valores do tipo de dados DBProxyTargetGroup.

Para ver a instância do RDS ou o cluster de bancos de dados Aurora associado ao proxy, use a operação DescribeDBProxyTargets. Ela retorna valores do tipo de dados DBProxyTarget.

Conectar-se a um banco de dados pelo RDS Proxy

Você se conecta a uma instância de banco de dados do RDS ou cluster de bancos de dados Aurora por meio de um proxy, geralmente da mesma maneira como você se conecta diretamente ao banco de dados. A principal diferença é que você especifica o endpoint do proxy em vez do endpoint da instância ou do cluster. Para um cluster de bancos de dados Aurora, todas as conexões de proxy têm capacidade de leitura/gravação e usam a instância de gravação. Se você normalmente usa o endpoint de leitor para conexões somente leitura, poderá criar um endpoint adicional somente leitura para o proxy e usar esse endpoint da mesma maneira. Para obter mais informações, consulte Visão geral dos endpoints de proxy.

Conectar-se a um proxy usando autenticação nativa

Use as seguintes etapas básicas para se conectar a um proxy usando autenticação nativa:

  1. Localize o endpoint do proxy. No AWS Management Console, você pode encontrar o endpoint na página de detalhes do proxy correspondente. Com a AWS CLI, é possível usar o comando describe-db-proxies. O exemplo a seguir mostra como.

    # Add --output text to get output as a simple tab-separated list. $ aws rds describe-db-proxies --query '*[*].{DBProxyName:DBProxyName,Endpoint:Endpoint}' [ [ { "Endpoint": "the-proxy.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy" }, { "Endpoint": "the-proxy-other-secret.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy-other-secret" }, { "Endpoint": "the-proxy-rds-secret.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy-rds-secret" }, { "Endpoint": "the-proxy-t3.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy-t3" } ] ]
  2. Especifique esse endpoint como o parâmetro host na string de conexão de seu aplicativo cliente. Por exemplo, especifique o endpoint do proxy como o valor da opção mysql -h ou da opção psql -h.

  3. Forneça o mesmo nome de usuário e senha do banco de dados como o faz normalmente.

Conectar-se a um proxy usando autenticação do IAM

Ao usar a autenticação do IAM com o RDS Proxy, configure os usuários do banco de dados para fazer a autenticação com nomes de usuário e senhas regulares. A autenticação do IAM se aplica ao proxy do RDS recuperando as credenciais de nome de usuário e senha do Secrets Manager. A conexão do proxy do RDS com o banco de dados subjacente não passa pelo IAM.

Para conectar-se ao proxy do RDS usando a autenticação do IAM, siga o mesmo procedimento geral para se conectar a uma instância de banco de dados do RDS ou a um cluster do Aurora usando a autenticação do IAM. Para obter informações gerais sobre como usar o IAM com o RDS e o Aurora, consulte Segurança em Amazon RDS.

As principais diferenças no uso do IAM para o proxy do RDS incluem o seguinte:

  • Não configure cada usuário de banco de dados individual com um plugin de autorização. Os usuários do banco de dados ainda têm nomes de usuário e senhas regulares dentro do banco de dados. Você configura segredos do Secrets Manager contendo esses nomes de usuário e senhas e autoriza o proxy do RDS a recuperar as credenciais do Secrets Manager.

    A autenticação do IAM aplica-se à conexão entre o programa cliente e o proxy. Depois, o proxy faz a autenticação no banco de dados usando as credenciais de nome de usuário e senha recuperadas pelo Secrets Manager.

  • Em vez da instância, do cluster ou do endpoint de leitor, especifique o endpoint do proxy. Para obter detalhes sobre o endpoint do proxy, consulte Conectar-se à instância de banco de dados usando a autenticação do IAM.

  • No caso da autenticação do IAM direta do banco de dados, você escolhe os usuários do banco de dados seletivamente e os configura para que sejam identificados com um plugin de autenticação especial. Em seguida, pode se conectar a esses usuários com a autenticação do IAM.

    No caso de uso do proxy, é necessário fornecer a esse proxy segredos que contenham o nome de usuário e a senha de algum usuário (autenticação nativa). Em seguida, você se conecta ao proxy com a autenticação do IAM. Isso é feito gerando um token de autenticação com o endpoint do proxy, e não com o endpoint do banco de dados. Você também utiliza um nome de usuário que corresponde a um dos nomes de usuários dos segredos fornecidos.

  • Certifique-se de usar os protocolos Transport Layer Security (TLS)/Secure Sockets Layer (SSL) ao se conectar a um proxy usando a autenticação do IAM.

É possível conceder a um usuário específico acesso ao proxy modificando a política do IAM. Veja a seguir um exemplo.

"Resource": "arn:aws:rds-db:us-east-2:1234567890:dbuser:prx-ABCDEFGHIJKL01234/db_user"

Considerações sobre como e conectar a um proxy com o PostgreSQL

Para o PostgreSQL, quando um cliente inicia uma conexão com um banco de dados PostgreSQL, ele envia uma mensagem de inicialização que inclui pares de nome de parâmetro e strings de valor. Para obter detalhes, consulte o StartupMessage em PostgreSQL Message Formats na documentação do PostgreSQL.

Ao se conectar por um proxy do RDS , a mensagem de inicialização pode incluir os seguintes parâmetros reconhecidos atualmente:

  • user

  • database

  • replication

A mensagem de inicialização também pode incluir os seguintes parâmetros de tempo de execução adicionais:

Para obter mais informações sobre sistemas de mensagens PostgreSQL, consulte Frontend/Backend Protocol na documentação do PostgreSQL.

Para o PostgreSQL, se você usar JDBC, recomendamos o seguinte para evitar a fixação:

  • Defina o parâmetro de conexão JDBC assumeMinServerVersion como pelo menos 9.0 para evitar a fixação. Isso impede que o driver JDBC execute uma viagem de ida e volta adicional durante a inicialização da conexão quando ele executa SET extra_float_digits = 3.

  • Defina o parâmetro de conexão JDBC ApplicationName como any/your-application-name para evitar a fixação. Isso impede que o driver JDBC execute uma viagem de ida e volta adicional durante a inicialização da conexão quando ele executa SET application_name = "PostgreSQL JDBC Driver". Observe que o parâmetro JDBC é ApplicationName, mas o parâmetro StartupMessage do PostgreSQL é application_name.

  • Defina o parâmetro de conexão JDBC preferQueryMode como extendedForPrepared para evitar a fixação. O extendedForPrepared garante que o modo estendido é usado apenas para instruções preparadas.

    O padrão para o parâmetro preferQueryMode é extended, que usa o modo estendido para todas as consultas. O modo estendido usa uma série de solicitações Prepare, Bind, Execute e Sync e respostas correspondentes. Esse tipo de série causa fixação de conexão em um proxy do RDS .

Para obter mais informações, consulte Como evitar fixação. Para obter mais informações sobre como se conectar usando JDBC, consulte Connecting to the Database na documentação do PostgreSQL.