Conceitos básicos do RDS Proxy - Amazon Aurora

Conceitos básicos do RDS Proxy

Nas seções a seguir, é possível saber como configurar e gerenciar o RDS Proxy. Você também pode descobrir como definir as opções de segurança relacionadas. Essas opções 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 RDS Proxy requer que você tenha uma nuvem virtual privada (VPC) comum entre o cluster de banco de dados do Aurora 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 cliente, como Amazon EC2, Lambda ou Amazon ECS, podem estar na mesma VPC que o proxy. Ou podem estar em uma VPC separada do proxy. Se você se conectou com êxito a quaisquer instâncias de banco de dados do RDS ou clusters de banco de dados do Aurora, você já terá os recursos de rede necessários.

Obter informações sobre suas sub-redes

Se você está apenas começando a usar o Aurora, aprenda o básico sobre a conexão com um banco de dados seguindo os procedimentos em Configuração de seu ambiente para Amazon Aurora. Você também pode seguir o tutorial em Conceitos básicos do Amazon Aurora.

Para criar um proxy, é necessário fornecer as sub-redes e a VPC em que o proxy opera. O exemplo do Linux a seguir mostra comandos da AWS CLI que examinam as VPCs e as 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 os IDs de sub-rede correspondentes a um cluster de banco de dados específico do Aurora.

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. Para isso, examine os campos aninhados nos 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.

$ # 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

Depois de encontrar o identificador da instância de banco de dados, examine a VPC associada para encontrar suas sub-redes. O exemplo do Linux a seguir mostra como fazer isso.

$ #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 ...
$ #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

Planejar a capacidade de endereços IP

Um RDS Proxy ajusta automaticamente sua capacidade conforme necessário com base no tamanho e no número de instâncias de banco de dados registradas nele. Algumas operações também podem precisar de capacidade adicional de proxy, como aumentar o tamanho de um banco de dados registrado ou operações internas de manutenção do RDS Proxy. Durante essas operações, seu proxy pode precisar de mais endereços IP para provisionar a capacidade extra. Esses endereços adicionais possibilitam que seu proxy se expanda sem afetar a workload. A falta de endereços IP gratuitos em suas sub-redes impede que um proxy aumente a escala verticalmente. Isso pode ocasionar maiores latências de consulta ou falhas na conexão do cliente. O RDS notifica você por meio de um evento RDS-EVENT-0243 quando não há endereços IP livres suficientes em suas sub-redes. Para obter informações sobre esse evento, consulte Trabalhar com eventos do RDS Proxy.

Veja a seguir os números mínimos recomendados de endereços IP para deixar livres nas sub-redes para o proxy com base no tamanho das classes de instâncias de banco de dados.

Classe de instância de banco de dados Mínimo de endereços IP livres

db.*.xlarge ou menor

10

db.*.2xlarge

15

db.*.4xlarge

25

db.*.8xlarge

45

db.*.12xlarge

60

db.*.16xlarge

75

db.*.24xlarge

110

Esses números de endereços IP recomendados são estimativas para um proxy com apenas o endpoint padrão. Um proxy com endpoints adicionais ou réplicas de leitura pode precisar de mais endereços IP livres. Para cada endpoint adicional, recomendamos que você reserve mais três endereços IP. Para cada réplica de leitura, recomendamos que você reserve endereços IP adicionais conforme especificado na tabela com base no tamanho dessa réplica de leitura.

nota

O RDS Proxy não é compatível com mais de 215 endereços IP em uma VPC.

Por exemplo, suponha que você queira estimar os endereços IP necessários para um proxy que está associado a um cluster de banco de dados do Aurora.

Nesse caso, suponha o seguinte:

  • Seu cluster de banco de dados do Aurora tem uma instância do gravador de tamanho db.r5.8xlarge e uma instância do leitor de tamanho db.r5.2xlarge.

  • O proxy conectado a esse cluster de banco de dados tem o endpoint padrão e um endpoint personalizado com a função de somente leitura.

Nesse caso, o proxy precisa de aproximadamente 63 endereços IP livres (45 para a instância do gravador, 15 para a instância do leitor e três para o endpoint personalizado adicional).

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. É necessário criar um segredo separado do Secrets Manager para cada conta de usuário de banco de dados à qual o proxy se conecta no cluster de bancos de dados do Aurora.

No console do 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 um cluster de bancos de dados do 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 do usuário e Senha e valores de espaço reservado de 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. Para isso, use as mesmas credenciais em vários servidores de banco de dados. Por exemplo, você pode usar as mesmas credenciais em servidores de desenvolvimento e teste.

Para se conectar pelo proxy como um usuário de banco de dados 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 dos recursos da Amazon (ARNs) dos segredos correspondentes. Você faz isso para 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 mais informações sobre como usar a IAM, consulte Gerenciamento de identidade e acesso no Amazon Aurora.

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 Criar perfil, conforme descrito em Criar perfis do IAM, selecionando Criar um perfil para delegar permissões a um serviço da AWS.

    Selecione Serviço da AWS para o Tipo de entidade confiável. Em Caso de uso, selecione RDS no menu suspenso Casos de uso para outros serviços da AWS. Selecione RDS: adicionar perfil 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. Consulte Especificar chaves do KMS em instruções de política do IAM. Para a ação kms:Decrypt, substitua o ARN da chave padrão AWS KMS key ou sua própria chave do KMS. O que você usa depende de qual deles 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 desse perfil 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=my_identifier USER_ARN=$(aws sts get-caller-identity --query "Arn" --output text) aws iam create-role --role-name my_role_name \ --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":["rds.amazonaws.com"]},"Action":"sts:AssumeRole"}]}' ROLE_ARN=arn:aws:iam::account_id:role/my_role_name aws iam put-role-policy --role-name my_role_name \ --policy-name $PREFIX-secret-reader-policy --policy-document '{"Version":"2012-10-17","Statement":[{"Sid":"getsecretvalue","Effect":"Allow","Action":["secretsmanager:GetSecretValue","kms:Decrypt"],"Resource":"*"}]}' 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 cluster de banco de dados, crie um proxy. É possível associar um proxy a um cluster de banco de dados do Aurora MySQL ou Aurora PostgreSQL.

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:

    • Engine family (Família de mecanismos). Essa configuração determina qual protocolo de rede de banco de dados o proxy reconhece quando interpreta o tráfego de rede do banco de dados e para ele. Para Aurora MySQL, escolha MariaDB and MySQL (MariaDB e MySQL). Para Aurora PostgreSQL, escolha PostgreSQL.

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

    • Idle client connection timeout (Tempo limite de conexão de cliente ociosa. Escolha um período durante o qual uma conexão de cliente pode ficar ociosa até que o proxy a feche. 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.

      Para que o proxy remova proativamente as conexões obsoletas, reduza o tempo limite de conexão do cliente ocioso. Se a workload estiver apresentando picos, para economizar o custo de estabelecer conexões, aumente o tempo limite de conexão do cliente ocioso.

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

    • Database (Banco de dados). Escolha um cluster de bancos de dados do 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 um cluster de bancos de dados do Amazon Aurora. 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 opção permite que você force o RDS Proxy a não fixar determinados tipos de estado de sessão detectados. Isso contorna as medidas de segurança padrão para multiplexar conexões de banco de dados entre conexões de clientes. No momento, a configuração não é compatível com o PostgreSQL. A única opção é EXCLUDE_VARIABLE_SETS.

      Habilitar essa configuração pode fazer com que as variáveis da sessão de uma conexão afetem outras conexões. Isso pode causar erros ou problemas de correção se suas consultas dependerem dos valores das variáveis de sessão definidos fora da transação atual. Considere a possibilidade de usar essa opção depois de verificar se é seguro as aplicações compartilharem conexões de banco de dados entre conexões de clientes.

      Os seguintes padrões podem ser considerados seguros:

      • Instruções SET em que não há alteração no valor efetivo da variável de sessão; isto é, não há alteração na variável de sessão.

      • Você altera o valor da variável de sessão e executa uma instrução na mesma transação.

      Para ter 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 declaraçõ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.

    Em Authentication (Autenticação), forneça informações sobre o seguinte:

    • IAM role (Perfil do IAM. Escolha um perfil do IAM que tenha permissão para acessar os segredos do Secrets Manager escolhidos anteriormente. Se preferir, você poderá criar um perfil do IAM no AWS Management Console.

    • Segredos do Secrets Manager. Selecione pelo menos um segredo do Secrets Manager que contenha credenciais de usuário de banco de dados que permita ao proxy acessar o cluster de banco de dados do Aurora.

    • Client authentication type (Tipo de autenticação de cliente). Selecione o tipo de autenticação usada pelo proxy para conexões de clientes. Sua escolha se aplica a todos os segredos do Secrets Manager que você associa a esse proxy. Se você precisar especificar um tipo de autenticação de cliente diferente para cada segredo, crie o proxy usando a AWS CLI ou a API.

    • IAM Authentication (Autenticação do IAM). Escolha se deseja ou não exigir ou negar a autenticação do IAM para conexões a seu proxy. Sua escolha se aplica a todos os segredos do Secrets Manager que você associa a esse proxy. Se você precisar especificar um tipo de autenticação do IAM diferente para cada segredo, crie seu proxy usando a AWS CLI ou a API.

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

    • 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. Em uma conexão criptografada ou não criptografada com um proxy, o proxy usa a mesma configuração de criptografia ao estabelecer conexão com o banco de dados subjacente.

    • 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 grupo de segurança (Grupo de segurança da VPC. Escolha um grupo de segurança da VPC existente. Se preferir, você poderá criar um grupo de segurança no AWS Management Console. Você deve configurar as Regras de entrada para possibilitar que suas aplicações acessem o proxy. Você também deve configurar as Regras de saída para possibilitar o tráfego de seus destinos de banco de dados.

      nota

      Esse grupo de segurança deve permitir conexões do proxy com o banco de dados. O mesmo grupo de segurança é usado para entrada das aplicações 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.

      O RDS implanta um proxy em várias zonas de disponibilidade para garantir a alta disponibilidade. Para habilitar a comunicação entre AZs para esse proxy, a lista de controle de acesso (ACL) de rede da sub-rede de proxy deve permitir a saída específica da porta do mecanismo e a entrada de todas as portas. Para obter mais informações sobre ACLs de rede, consulte Controlar o tráfego para sub-redes com ACLs de rede. Se a ACL de rede do proxy e do destino for idêntica, você deverá adicionar uma regra de entrada do protocolo TCP em que a Fonte esteja definida como o CIDR da VPC. Você também deve adicionar uma regra de saída de protocolo TCP específica da porta do mecanismo em que a Fonte esteja definida como o CIDR da VPC.

    (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, somente habilite essa configuração para depuração ou quando você tiver medidas de segurança em vigor para proteger todas as informações confidenciais que aparecerem 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 utilizando a AWS CLI, chame o comando create-db-proxy com os seguintes parâmetros obrigatórios:

  • --db-proxy-name

  • --engine-family

  • --role-arn

  • --auth

  • --vpc-subnet-ids

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 | SQLSERVER } \ --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 | SQLSERVER } ^ --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]

Veja a seguir um exemplo do valor JSON da opção --auth. Este exemplo aplica um tipo de autenticação de cliente diferente a cada segredo.

[ { "Description": "proxy description 1", "AuthScheme": "SECRETS", "SecretArn": "arn:aws:secretsmanager:us-west-2:123456789123:secret/1234abcd-12ab-34cd-56ef-1234567890ab", "IAMAuth": "DISABLED", "ClientPasswordAuthType": "POSTGRES_SCRAM_SHA_256" }, { "Description": "proxy description 2", "AuthScheme": "SECRETS", "SecretArn": "arn:aws:secretsmanager:us-west-2:111122223333:seret/1234abcd-12ab-34cd-56ef-1234567890cd", "IAMAuth": "DISABLED", "ClientPasswordAuthType": "POSTGRES_MD5" }, { "Description": "proxy description 3", "AuthScheme": "SECRETS", "SecretArn": "arn:aws:secretsmanager:us-west-2:111122221111:secret/1234abcd-12ab-34cd-56ef-1234567890ef", "IAMAuth": "REQUIRED" } ]
dica

Se você ainda não souber os IDs de sub-rede que serão usados para o parâmetro --vpc-subnet-ids, consulte Configuração de pré-requisitos de rede para obter exemplos de como encontrá-los.

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 das aplicações 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 associações corretas 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)

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 um cluster de bancos de dados do 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. Isso possibilita examinar os detalhes de configuração e escolher quais deseja modificar, excluir etc.

Para que as aplicações de banco de dados usem um proxy, é necessário fornecer o endpoint do proxy 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 Grupos de destino mostra como o proxy está associado a um cluster de bancos de dados do 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. Isso inclui porcentagem máxima de conexão, tempo limite de empréstimo de conexão, família de mecanismos 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. Use o nome do proxy como o valor do parâmetro.

  3. Para ver os detalhes do cluster de bancos de dados do Aurora associado ao grupo de destino exibido, 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 um cluster de banco de dados do Aurora ou a um cluster que usa o Aurora Serverless v2 por meio de um proxy, em geral da mesma maneira como se conecta diretamente ao banco de dados. A principal diferença é que você especifica o endpoint do proxy em vez do endpoint do cluster. Por padrão, 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 do leitor para conexões somente leitura, poderá criar um endpoint adicional somente leitura para o proxy. Você pode usar esse endpoint da mesma forma. Para ter mais informações, consulte Visão geral dos endpoints de proxy.

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

Use as seguintes etapas 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 o endpoint como o parâmetro host na string de conexão da aplicação 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 se conectar ao RDS Proxy usando a autenticação do IAM, siga o mesmo procedimento de conexão geral utilizado na autenticação do IAM com um cluster de banco de dados do Aurora. Para obter mais informações sobre como usar a IAM, consulte Segurança no Amazon Aurora.

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 plug-in 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 ao cluster 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 plug-in 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 do PostgreSQL, ele envia uma mensagem de inicialização. Essa mensagem inclui pares de strings de caracteres de nome e valor do parâmetro. Para obter mais 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 ter 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 realize 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.

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