

# Conceitos básicos do RDS Proxy
<a name="rds-proxy-setup"></a>

Use as informações nas páginas a seguir para configurar, gerenciar [Amazon RDS Proxy](rds-proxy.md) e definir opções de segurança relacionadas. As opções de segurança controlam quem pode acessar cada proxy e como cada proxy se conecta a instâncias de banco de dados.

Se você é novo no RDS Proxy, recomendamos seguir as páginas na ordem em que as apresentamos. 

**Topics**
+ [Configurar os pré-requisitos de rede para o RDS Proxy](rds-proxy-network-prereqs.md)
+ [Configurar credenciais de banco de dados para RDS Proxy](rds-proxy-secrets-arns.md)
+ [Configurar a autenticação do IAM para o RDS Proxy](rds-proxy-iam-setup.md)
+ [Criar um proxy para o Amazon RDS](rds-proxy-creating.md)
+ [Visualizar um proxy](rds-proxy-viewing.md)
+ [Conectar-se a um banco de dados pelo RDS Proxy](rds-proxy-connecting.md)

# Configurar os pré-requisitos de rede para o RDS Proxy
<a name="rds-proxy-network-prereqs"></a>

 O uso do RDS Proxy requer que você tenha uma nuvem privada virtual (VPC) comum entre 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](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-sharing.html). 

Para suporte a IPv6, é necessária uma configuração de rede adicional:
+ **Tipos de rede de endpoint IPv6**: sua VPC e sub-redes devem estar configuradas para comportar IPv6. Isso inclui ter blocos CIDR IPv6 atribuídos à VPC e às sub-redes.
+ **Tipos de rede de endpoint de pilha dupla**: sua VPC e sub-redes devem comportar endereçamento IPv4 e IPv6.
+ **Tipos de rede de conexão de destino IPv6**: seu banco de dados deve estar configurado para o modo de pilha dupla a fim de comportar conexões IPv6 do proxy.

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 , você já terá os recursos de rede necessários. 

**Topics**
+ [Obter informações sobre suas sub-redes](#rds-proxy-network-prereqs.subnet-info)
+ [Planejar a capacidade de endereços IP](#rds-proxy-network-prereqs.plan-ip-address)

## Obter informações sobre suas sub-redes
<a name="rds-proxy-network-prereqs.subnet-info"></a>

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 uma instância específica de banco de dados do RDS. Encontre o ID da VPC para a instância de banco de dados. Examine a VPC para encontrar as 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
<a name="rds-proxy-network-prereqs.plan-ip-address"></a>

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 ProxyTrabalhar com eventos do RDS Proxy](rds-proxy.events.md).

**nota**  
O RDS Proxy não consome mais de 215 endereços IP para cada proxy em uma VPC.

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


|  DB instance class  |  Mínimo de endereços IP livres  | 
| --- | --- | 
|  db.\$1.xlarge ou menor   |  10  | 
|  db.\$1.2xlarge   |  15  | 
|  db.\$1.4xlarge   |  25  | 
|  db.\$1.8xlarge   |  45  | 
|  db.\$1.12xlarge   |  60  | 
|  db.\$1.16xlarge   |  75  | 
|  db.\$1.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.

# Configurar credenciais de banco de dados para RDS Proxy
<a name="rds-proxy-secrets-arns"></a>

O RDS Proxy no Amazon RDS usa o AWS Secrets Manager para armazenar e gerenciar credenciais de banco de dados com segurança. Em vez de incorporar credenciais na aplicação, você associa um proxy a um segredo do Secrets Manager que contenha os detalhes de autenticação necessários. Crie 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.

Você também pode configurar o RDS Proxy para usar a autenticação de ponta a ponta do IAM, o que elimina a necessidade de armazenar as credenciais do banco de dados no Secrets Manager. O RDS Proxy usa a autenticação do IAM para conexões de cliente para proxy e de proxy para banco de dados. Isso fornece uma solução de autenticação baseada no IAM totalmente integrada que não exige o gerenciamento de segredos ou senhas. Para acessar informações sobre como adicionar um novo usuário de banco de dados do IAM, consulte [Criar uma conta de banco de dados usando autenticação do IAM](UsingWithRDS.IAMDBAuth.DBAccounts.md).

**Topics**
+ [Criar segredos para usá-los com o RDS Proxy](#rds-proxy-secrets-create)

## Criar segredos para usá-los com o RDS Proxy
<a name="rds-proxy-secrets-create"></a>

Antes de criar um proxy, você deve primeiro criar pelo menos um segredo que armazene suas credenciais de banco de dados.

### Console
<a name="rds-proxy-secrets-create-console"></a>

**Como criar um segredo**

1. Abra o console Secrets Manager em [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/).

1. Escolha **Armazenar Novo Segredo**.

1. Escolha **Credenciais para um banco de dados do Amazon RDS**.

1. Insira um nome de usuário e senha. As credenciais que você inserir devem corresponder às credenciais de um usuário do banco de dados que exista no banco de dados do RDS correlacionado. O RDS Proxy usa essas credenciais para autenticar e estabelecer conexões com o banco de dados em nome das aplicações.

   Se houver alguma incompatibilidade, você poderá atualizar o segredo para que corresponda à senha do banco de dados. Enquanto você não atualizar o segredo, as tentativas de conexão por meio do proxy usando esse segredo falharão, mas as conexões que usam outros segredos válidos ainda funcionarão.
**nota**  
No caso do RDS para SQL Server, o RDS Proxy exige um segredo com distinção entre maiúsculas e minúsculas no Secrets Manager, independentemente das configurações de agrupamento da instância de banco de dados. Se a aplicação permitir nomes de usuário com diferentes usos de maiúsculas e minúsculas, como “Admin” e “admin”, você deverá criar segredos separados para cada um. O RDS Proxy não aceita autenticação de nome de usuário sem distinção entre maiúsculas e minúsculas entre o cliente e o proxy.  
Para ter mais informações sobre agrupamento no SQL Server, consulte a documentação do [Microsoft SQL Server](https://docs.microsoft.com/en-us/sql/relational-databases/collations/collation-and-unicode-support?view=sql-server-ver16).

1. Em **Banco de dados**, selecione o banco de dados do Amazon RDS que o segredo acessará.

1. Preencha outras configurações referentes ao segredo e escolha **Armazenar**. Para obter instruções mais abrangentes, consulte [Creating an AWS Secrets Manager secret](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) no *Guia do usuário do AWS Secrets Manager*. 

### AWS CLI
<a name="rds-proxy-secrets-create-cli"></a>

Ao criar um proxy por meio da AWS CLI, especifique os nomes de recurso 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 Console de gerenciamento da AWS, escolha os segredos por seus nomes descritivos.
+ Para criar um segredo do Secrets Manager e utilizá-lo com o RDS Proxy, use o comando [create-secret](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/create-secret.html):

  ```
  aws secretsmanager create-secret \
    --name "secret_name" \
    --description "secret_description" \
    --region region_name \
    --secret-string '{"username":"db_user","password":"db_user_password"}'
  ```
+ Também é possível criar uma chave personalizada para criptografar o segredo do Secrets Manager. O comando a seguir cria uma chave de exemplo.

  ```
  aws kms create-key --description "test-key" --policy '{
    "Id":"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":"*"
        }
      ]
  }'
  ```

 Por exemplo, os seguintes comandos criam segredos do Secrets Manager para dois usuários de banco de dados: 

```
aws secretsmanager create-secret \
  --name secret_name_1 --description "db admin user" \
  --secret-string '{"username":"admin","password":"choose_your_own_password"}'

aws secretsmanager create-secret \
  --name secret_name_2 --description "application user" \
  --secret-string '{"username":"app-user","password":"choose_your_own_password"}'
```

Para criar esses segredos criptografados com a chave do AWS KMS personalizada, use os seguintes comandos:

```
aws secretsmanager create-secret \
  --name secret_name_1 --description "db admin user" \
  --secret-string '{"username":"admin","password":"choose_your_own_password"}' \
  --kms-key-id arn:aws:kms:us-east-2:account_id:key/key_id

aws secretsmanager create-secret \
  --name secret_name_2 --description "application user" \
  --secret-string '{"username":"app-user","password":"choose_your_own_password"}' \
  --kms-key-id arn:aws:kms:us-east-2:account_id:key/key_id
```

Para ver os segredos que pertencem à sua conta da AWS, use o comando [list-secrets](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/list-secrets.html):

```
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 a seguir mostra como preparar um relatório com apenas o nome e o ARN de cada segredo pertencente à 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 confirmar se o segredo contém as credenciais corretas no formato adequado, use o comando [get-secret-value](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/get-secret-value.html). Substitua `your_secret_name` pelo nome abreviado ou ARN do segredo.

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

A saída contém uma linha com um valor codificado em JSON semelhante ao seguinte:

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

# Configurar a autenticação do IAM para o RDS Proxy
<a name="rds-proxy-iam-setup"></a>

Para configurar a autenticação do AWS Identity and Access Management (IAM) para o RDS Proxy no Amazon RDS, crie e configure uma política do IAM que conceda as permissões necessárias. 

Este tópico apresenta as etapas para configurar a autenticação do IAM para o RDS Proxy, bem como para criar a política do IAM necessária e anexá-la a um perfil do IAM. 

**dica**  
Este procedimento só é necessário se você quiser criar seu próprio perfil do IAM. Caso contrário, o RDS pode criar automaticamente o perfil necessário ao configurar o proxy, para que você possa pular essas etapas.

## Pré-requisitos
<a name="rds-proxy-iam-setup-prereqs"></a>

Antes de configurar a autenticação do IAM para o RDS Proxy, você deve ter o seguinte:
+ **AWS Secrets Manager**: pelo menos um segredo armazenado que contenha as credenciais do banco de dados. Para obter instruções sobre como criar esses segredos, consulte [Configurar credenciais de banco de dados para RDS Proxy](rds-proxy-secrets-arns.md).

  Isso não será necessário se você estiver usando a autenticação de ponta a ponta do IAM.
+ **Permissões do IAM**: um perfil ou usuário do IAM com permissões para criar e gerenciar políticas, perfis e segredos do IAM no AWS Secrets Manager.

## Criar uma política do IAM para a autenticação de ponta a ponta do IAM
<a name="rds-proxy-iam-setup-e2e-steps"></a>

Ao usar a autenticação de ponta a ponta do IAM, o RDS Proxy se conecta ao seu banco de dados usando a autenticação do IAM em vez de recuperar as credenciais do Secrets Manager. Isso requer configurar seu perfil do IAM com permissões `rds-db:connect` para as contas de banco de dados que você deseja usar com o proxy.

Para autenticar o RDS Proxy no banco de dados usando o IAM, crie um perfil do IAM com uma política que conceda as permissões de conexão com o banco de dados.

### Console
<a name="rds-proxy-iam-e2e-console"></a>

**Como criar um perfil para autenticação de ponta a ponta do IAM com seu proxy**

1. Faça login no Console de gerenciamento da AWS e abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Crie uma política de permissões para o perfil. Para ver as etapas gerais, consulte [Criar políticas do IAM (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html).

   Cole essa política no editor de JSON e faça as seguintes alterações:
   + Substitua o ID da sua própria conta.
   + Substitua `us-east-2` pela região onde o proxy deverá residir.
   + Substitua os IDs de recursos do banco de dados e os nomes de usuário pelos que você deseja usar. O formato dos IDs de recursos difere entre as instâncias do RDS e Aurora clusters.

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "rds-db:connect",
               "Resource": [
                   "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_1",
                   "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_2"
               ]
           }
       ]
   }
   ```

1. Crie o perfil e anexe a política de permissões a ele. Para ver as etapas gerais, consulte [Criar um perfil para delegar permissões a um serviço da AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html). 

   Em **Tipo de entidade confiável**, escolha **Serviço da AWS**. Em **Caso de uso**, selecione **RDS** e escolha **RDS - Adicionar perfil ao banco de dados** para o caso de uso.

1. Em **Políticas de permissões**, escolha a política que você criou.

1. Em **Selecionar entidades confiáveis**, insira a seguinte política de confiança para o perfil:

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

### AWS CLI
<a name="rds-proxy-iam-e2e-cli"></a>

Para criar o perfil usando a AWS CLI, envie a seguinte solicitação:

```
aws iam create-role \
  --role-name my_e2e_iam_role_name \

  --assume-role-policy-document '{"Version":"2012-10-17",		 	 	 "Statement":[{"Effect":"Allow","Principal":{"Service":["rds.amazonaws.com"]},"Action":"sts:AssumeRole"}]}'
```

Depois, anexe a política ao perfil:

```
aws iam put-role-policy \
  --role-name my_e2e_iam_role_name \
  --policy-name e2e_iam_db_connect_policy \
  --policy-document '{

    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "rds-db:connect",
            "Resource": [
                "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_1",
                "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_2"
            ]
        }
    ]
}'
```

Com as permissões e o perfil do IAM configurados para a autenticação de ponta a ponta do IAM, agora você pode criar um proxy com `DefaultAuthScheme` definido como `IAM_AUTH`. Esse proxy se autentica diretamente no banco de dados usando o IAM sem exigir segredos do Secrets Manager. Para instruções, consulte [Criar um proxy para o Amazon RDS](rds-proxy-creating.md).

Ao usar a autenticação de ponta a ponta do IAM, garanta que os usuários do banco de dados estejam configurados para a autenticação do IAM, conforme descrito em [Criar uma conta de banco de dados usando autenticação do IAM](UsingWithRDS.IAMDBAuth.DBAccounts.md).

## Criar uma política do IAM para acesso ao Secrets Manager
<a name="rds-proxy-iam-setup-steps"></a>

Para permitir que o RDS Proxy recupere as credenciais do banco de dados do Secrets Manager, crie um perfil do IAM com uma política que conceda as permissões necessárias.

## Console
<a name="rds-proxy-iam-console"></a>

**Como criar um perfil para acessar segredos e usá-los com o proxy**

1. Faça login no Console de gerenciamento da AWS e abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Crie uma política de permissões para o perfil. Para ver as etapas gerais, consulte [Criar políticas do IAM (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html).

   Cole essa política no editor de JSON e faça as seguintes alterações:
   + Substitua o ID da sua própria conta.
   + Substitua `us-east-2` pela região onde o proxy residirá.
   + Substitua os nomes dos segredos pelos que você criou. Para ter mais informações, consulte [Specifying KMS keys in IAM policy statements](https://docs.aws.amazon.com/kms/latest/developerguide/cmks-in-iam-policies.html).
   + Substitua o ID da chave do KMS pelo que você usou para criptografar os segredos do Secrets Manager, seja a chave padrão ou sua própria chave.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "secretsmanager:GetSecretValue",
               "Resource": [
                   "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret_name_1",
                   "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret_name_2"
               ]
           },
           {
               "Effect": "Allow",
               "Action": "kms:Decrypt",
               "Resource": "arn:aws:kms:us-east-2:111122223333:key/key_id",
               "Condition": {
                   "StringEquals": {
                       "kms:ViaService": "secretsmanager.us-east-2.amazonaws.com"
                   }
               }
           }
       ]
   }
   ```

------

1. Crie o perfil e anexe a política de permissões a ele. Para ver as etapas gerais, consulte [Criar um perfil para delegar permissões a um serviço da AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html). 

   Em **Tipo de entidade confiável**, escolha **Serviço da AWS**. Em **Caso de uso**, selecione **RDS** e escolha **RDS - Adicionar perfil ao banco de dados** para o caso de uso.

1. Em **Políticas de permissões**, escolha a política que você criou.

1. Em **Selecionar entidades confiáveis**, insira a seguinte política de confiança para o perfil:

------
#### [ JSON ]

****  

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

------

## AWS CLI
<a name="rds-proxy-iam-cli"></a>

Para criar o perfil usando a AWS CLI, envie a seguinte solicitação:

```
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"}]}'
```

Depois, anexe a política ao perfil:

```
aws iam put-role-policy \
  --role-name my_role_name \
  --policy-name secret_reader_policy \
  --policy-document '{
    "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"
                }
            }
        }
    ]
}'
```

Com o perfil e as permissões do IAM configurados, agora você pode criar um proxy e associá-lo a esse perfil. Isso permite que o proxy recupere seguramente as credenciais do banco de dados por meio do AWS Secrets Manager e habilite a autenticação do IAM para suas aplicações. Para instruções, consulte [Criar um proxy para o Amazon RDS](rds-proxy-creating.md).

# Criar um proxy para o Amazon RDS
<a name="rds-proxy-creating"></a>

É possível associar um proxy a uma instância de banco de dados do RDS para MariaDB, do RDS para Microsoft SQL Server, do RDS para MySQL ou do RDS para PostgreSQL. 

## Console
<a name="rds-proxy-creating.console"></a>

**Como criar um proxy**

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon RDS em [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. No painel de navegação, escolha **Proxies**. 

1. Escolha **Create proxy (Criar proxy)**. 

1. Defina as configurações de proxy a seguir.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/rds-proxy-creating.html)

1.  Escolha **Create proxy (Criar proxy)**. 

## AWS CLI
<a name="rds-proxy-creating.CLI"></a>

 Para criar um proxy utilizando a AWS CLI, chame o comando [create-db-proxy](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-proxy.html) com os seguintes parâmetros obrigatórios: 
+ `--db-proxy-name`
+ `--engine-family`
+ `--role-arn`
+ `--vpc-subnet-ids`

O valor `--engine-family` diferencia letras maiúsculas de minúsculas.

**Example**  
Para Linux, macOS ou Unix:  

```
aws rds create-db-proxy \
    --db-proxy-name proxy_name \
    --engine-family { MYSQL | POSTGRESQL | SQLSERVER } \
    --role-arn iam_role \
    --vpc-subnet-ids space_separated_list \
    [--default-auth-scheme { NONE | IAM_AUTH }] \
    [--auth ProxyAuthenticationConfig_JSON_string] \
    [--vpc-security-group-ids space_separated_list] \
    [--require-tls | --no-require-tls] \
    [--idle-client-timeout value] \
    [--debug-logging | --no-debug-logging] \
    [--endpoint-network-type { IPV4 | IPV6 | DUAL }] \
    [--target-connection-network-type { IPV4 | IPV6 }] \
    [--tags comma_separated_list]
```
Para Windows:  

```
aws rds create-db-proxy ^
    --db-proxy-name proxy_name ^
    --engine-family { MYSQL | POSTGRESQL | SQLSERVER } ^
    --role-arn iam_role ^
    --vpc-subnet-ids space_separated_list ^
    [--default-auth-scheme { NONE | IAM_AUTH }] ^
    [--auth ProxyAuthenticationConfig_JSON_string] ^
    [--vpc-security-group-ids space_separated_list] ^
    [--require-tls | --no-require-tls] ^
    [--idle-client-timeout value] ^
    [--debug-logging | --no-debug-logging] ^
    [--endpoint-network-type { IPV4 | IPV6 | DUAL }] ^
    [--target-connection-network-type { IPV4 | IPV6 }] ^
    [--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:secret/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"
  }
  
]
```

O parâmetro `--endpoint-network-type` especifica a versão do IP do endpoint de proxy que os clientes usam para se conectar ao proxy. Os valores válidos são:
+ `IPV4`: o endpoint de proxy usa somente endereços IPv4 (padrão).
+ `IPV6`: o endpoint de proxy usa somente endereços IPv6.
+ `DUAL`: o endpoint de proxy comporta endereços IPv4 e IPv6.

O parâmetro `--target-connection-network-type` especifica a versão do IP que o proxy usa para se conectar ao banco de dados de destino. Os valores válidos são:
+ `IPV4`: o proxy se conecta ao banco de dados usando endereços IPv4 (padrão).
+ `IPV6`: o proxy se conecta ao banco de dados usando endereços IPv6.

Para usar tipos de rede de endpoint IPv6 ou de pilha dupla, sua VPC e sub-redes devem ser configuradas para comportar o tipo de rede selecionado. Para usar o tipo de rede de conexão de destino IPv6, seu banco de dados deve comportar o modo de pilha dupla.

**dica**  
 Se você ainda não souber os IDs de sub-rede que serão usados para o parâmetro `--vpc-subnet-ids`, consulte [Configurar os pré-requisitos de rede para o RDS Proxy](rds-proxy-network-prereqs.md) 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 ter mais informações sobre essa limitação, consulte [Trabalhar com VPCs compartilhadas](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-sharing.html#vpc-share-limitations). 

 Para criar as associações corretas para o proxy, também é possível usar o comando [register-db-proxy-targets](https://docs.aws.amazon.com/cli/latest/reference/rds/register-db-proxy-targets.html). 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)
```

## API do RDS
<a name="rds-proxy-creating.API"></a>

 Para criar um proxy do RDS , chame a operação [CreateDBProxy](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBProxy.html) da API do Amazon RDS. Passe um parâmetro com a estrutura de dados [AuthConfig](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_AuthConfig.html). 

 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 ao grupo de destino chamando a função [RegisterDBProxyTargets](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RegisterDBProxyTargets.html). 

**Importante**  
Quando você seleciona a **autenticação do IAM** para o esquema de autenticação padrão:  
Você deve habilitar a autenticação do banco de dados do IAM em suas instâncias ou clusters de banco de dados de destino para que o proxy possa se conectar com êxito.
Se você escolher **Criar perfil do IAM**, o campo **Contas de banco de dados para autenticação do IAM** será obrigatório.
Se você selecionar um perfil do IAM existente, o console não atualizará automaticamente o perfil com as permissões de conexão do banco de dados. Confira se o perfil tem as permissões `rds-db:connect` necessárias.

# Visualizar um proxy
<a name="rds-proxy-viewing"></a>

 Depois de criar um ou mais proxies do RDS, você pode visualizá-los e gerenciá-los no Console de gerenciamento da AWS, na AWS CLI ou na API do RDS. É possível analisar seus detalhes de configuração, monitorar a performance e determinar quais proxies devem ser modificados ou excluídos, conforme necessário.

Para possibilitar que as aplicações de banco de dados direcionem o tráfego por meio de um proxy, é necessário especificar o endpoint do proxy na string de conexão.

## Console
<a name="rds-proxy-viewing.console"></a>

**Como visualizar um proxy no console**

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon RDS em [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. No painel de navegação, escolha **Proxies**. 

1. Selecione o nome do proxy para visualizar os detalhes. 

1. Na página de detalhes, a seção **Grupos de destino** mostra como o proxy está vinculado a uma instância de banco de dados específica do RDS. É possível acessar a página do grupo de destino padrão para ter uma visão mais detalhada dessa associação, incluindo as configurações definidas durante a criação do proxy. Essas configurações incluem a porcentagem máxima de conexão, o tempo-limite de empréstimo da conexão, a família de mecanismos e os filtros de fixação de sessão.

## CLI
<a name="rds-proxy-viewing.cli"></a>

 Para visualizar o proxy usando a CLI, use o comando [describe-db-proxies](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxies.html). Por padrão, a solicitação 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](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxies.html). 

1.  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](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxy-target-groups.html) `--db-proxy-name`. Use o nome do proxy como o valor do parâmetro. 

1.  Para ver os detalhes da instância de banco de dados do RDS associada ao grupo de destino exibido, execute [describe-db-proxy-targets](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxy-targets.html). 

## API do RDS
<a name="rds-proxy-viewing.api"></a>

 Para visualizar seus proxies usando a API do RDS, use a operação [DescribeDBProxies](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBProxies.html). Ela retorna valores do tipo de dados [DBProxy](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DBProxy.html). 

 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](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBProxyTargetGroups.html). Ela retorna valores do tipo de dados [DBProxyTargetGroup](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DBProxyTargetGroup.html). 

 Para ver a instância do RDS ou o cluster de bancos de dados Aurora associado ao proxy, use a operação [DescribeDBProxyTargets](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBProxyTargets.html). Ela retorna valores do tipo de dados [DBProxyTarget](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DBProxyTarget.html). 

# Conectar-se a um banco de dados pelo RDS Proxy
<a name="rds-proxy-connecting"></a>

A maneira de se conectar a uma instância de banco de dados do RDS por meio de um proxy ou se conectar ao banco de dados, em geral, é a mesma. Para ter mais informações, consulte [Visão geral dos endpoints de proxy](rds-proxy-endpoints.md#rds-proxy-endpoints-overview). 

**Topics**
+ [Conectar-se a um banco de dados usando credenciais de banco de dados](#rds-proxy-connecting-native)
+ [Conectar-se a um banco de dados usando autenticação do IAM](#rds-proxy-connecting-iam)
+ [Considerações sobre como se conectar ao Microsoft SQL Server](#rds-proxy-connecting-sqlserver)
+ [Considerações sobre como se conectar ao PostgreSQL](#rds-proxy-connecting-postgresql)

## Conectar-se a um banco de dados usando credenciais de banco de dados
<a name="rds-proxy-connecting-native"></a>

 Use as seguintes etapas para se conectar a um proxy usando as credenciais de banco de dados: 

1.  Localize o endpoint do proxy. No Console de gerenciamento da AWS, 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](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxies.html). 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"
           }
       ]
   ]
   ```

1.  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`. 

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

## Conectar-se a um banco de dados usando autenticação do IAM
<a name="rds-proxy-connecting-iam"></a>

 Ao usar a autenticação do IAM com o RDS Proxy, você tem duas opções de autenticação entre o cliente e o proxy:
+ Configure os usuários do banco de dados para fazer a autenticação com nomes de usuário e senhas regulares. O RDS Proxy recupera 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.
+ Você também pode usar a autenticação de ponta a ponta do IAM, que se conecta ao seu banco de dados por meio do proxy usando o IAM sem exigir credenciais de banco de dados.

 Para conectar-se ao RDS Proxy usando a autenticação do IAM, siga o mesmo procedimento de conexão geral utilizado na autenticação do IAM com uma instância de banco de dados do RDS. Para obter mais informações sobre como usar a IAM, consulte [Segurança no Amazon RDS](UsingWithRDS.md). Se você estiver usando a autenticação de ponta a ponta do IAM, forneça o plug-in de autenticação do IAM ao seu usuário de banco de dados. Consulte [Criar uma conta de banco de dados usando autenticação do IAM](UsingWithRDS.IAMDBAuth.DBAccounts.md).

 As principais diferenças no uso do IAM para o proxy do RDS incluem o seguinte: 
+ Com a autenticação padrão do IAM, os usuários do banco de dados têm credenciais normais no 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.
+ Com a autenticação de ponta a ponta do IAM, você não precisa configurar segredos do Secrets Manager para credenciais de banco de dados. A autenticação do IAM aplica-se à conexão entre o cliente e o proxy e entre o proxy e o banco de dados.
+ 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](UsingWithRDS.IAMDBAuth.Connecting.md).
+ 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"
```

**dica**  
Ao configurar a autenticação do IAM para conexões do RDS Proxy, siga estas diretrizes importantes para evitar problemas de conexão:  
Não conceda o perfil `rds_iam` enquanto mantém a autenticação geral por senha para o mesmo usuário ou perfil do banco de dados.
Lembre-se de que, embora os clientes se conectem ao RDS Proxy usando a autenticação do IAM, o RDS Proxy sempre se conecta ao banco de dados usando a autenticação por senha por meio do Secrets Manager.
Se você tiver encerramentos e novas conexões frequentes, remova todas as concessões `rds_iam` existentes do usuário ou do perfil e use somente a autenticação por senha.
Garanta que sua política de senha atenda aos requisitos de caracteres seguros SCRAM-SHA-256.
Combinar métodos de autenticação do IAM e senha para o mesmo usuário do banco de dados pode causar instabilidade na conexão.

## Considerações sobre como se conectar ao Microsoft SQL Server
<a name="rds-proxy-connecting-sqlserver"></a>

Para se conectar a um proxy usando a autenticação do IAM, você não usa o campo de senha. Em vez disso, você fornece a propriedade de token apropriada para cada tipo de driver de banco de dados no campo token. Por exemplo, use a propriedade `accessToken` para JDBC ou a propriedade `sql_copt_ss_access_token` para ODBC. Ou use a propriedade `AccessToken` do driver .NET SqlClient. Você não pode usar a autenticação do IAM com clientes que não sejam compatíveis com as propriedades do token.

Em algumas condições, um proxy não pode compartilhar uma conexão de banco de dados e, em vez disso, fixa a conexão de sua aplicação cliente ao proxy em uma conexão de banco de dados dedicada. Para ter mais informações sobre essas condições, consulte [Evitar a fixação de um RDS Proxy](rds-proxy-pinning.md).

## Considerações sobre como se conectar ao PostgreSQL
<a name="rds-proxy-connecting-postgresql"></a>

Se você criar um usuário de banco de dados PostgreSQL para se conectar ao RDS Proxy, conceda a ele o privilégio `CONNECT` no banco de dados. Sem isso, o usuário não poderá estabelecer uma conexão. Para ter mais informações, consulte [Adicionar um novo usuário de banco de dados a um banco de dados do PostgreSQL ao usar o RDS Proxy](rds-proxy-new-db-user.md#rds-proxy-new-db-user-pg).

Quando um cliente inicia uma conexão com um banco de dados 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](https://www.postgresql.org/docs/current/protocol-message-formats.html) na documentação do PostgreSQL. 

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

 A mensagem de inicialização também pode incluir os seguintes parâmetros de tempo de execução adicionais: 
+ `[application\$1name](https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-APPLICATION-NAME) `
+ `[client\$1encoding](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-CLIENT-ENCODING) `
+ `[DateStyle](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-DATESTYLE) `
+ `[TimeZone](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-TIMEZONE) `
+  `[extra\$1float\$1digits](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-EXTRA-FLOAT-DIGITS) `
+  `[ search\$1path ](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-SEARCH-PATH)` 

 Para ter mais informações sobre sistemas de mensagens PostgreSQL, consulte [Frontend/Backend Protocol](https://www.postgresql.org/docs/current/protocol.html) 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`.

Para ter mais informações, consulte [Evitar a fixação de um RDS Proxy](rds-proxy-pinning.md). Para ter mais informações sobre como se conectar usando JDBC, consulte [Connecting to the Database](https://jdbc.postgresql.org/documentation/setup/) na documentação do PostgreSQL.