

# Introducción al proxy de RDS
<a name="rds-proxy-setup"></a>

Utilice la información de las siguientes páginas para configurar y administrar [Amazon RDS Proxy ](rds-proxy.md), así como para definir las opciones de seguridad relacionadas. Estas opciones de seguridad controlan quién puede acceder a cada proxy y cómo se conecta cada proxy a instancias de base de datos.

Si es la primera vez que utiliza RDS Proxy, le recomendamos que siga las páginas en el orden en que las presentamos. 

**Topics**
+ [Configuración de requisitos previos de red para RDS Proxy](rds-proxy-network-prereqs.md)
+ [Configuración de credenciales de base de datos para RDS Proxy](rds-proxy-secrets-arns.md)
+ [Configuración de la autenticación de IAM para RDS Proxy](rds-proxy-iam-setup.md)
+ [Creación de un proxy para Amazon RDS](rds-proxy-creating.md)
+ [Visualización de un proxy](rds-proxy-viewing.md)
+ [Conexión a una base de datos mediante RDS Proxy](rds-proxy-connecting.md)

# Configuración de requisitos previos de red para RDS Proxy
<a name="rds-proxy-network-prereqs"></a>

 El uso de RDS Proxy requiere que tenga una nube privada virtual (VPC) común entre su instancia de base de datos de RDS y RDS Proxy. Esta VPC debe tener un mínimo de dos subredes que se encuentren en diferentes zonas de disponibilidad. Tu cuenta puede poseer estas subredes o compartirlas con otras cuentas. Para obtener más información acerca del uso compartido de VPC, consulte [Trabajar con VPC compartidas](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-sharing.html). 

Para la compatibilidad con IPv6, se requiere una configuración de red adicional:
+ **Tipos de redes de puntos de conexión de IPv6**: la VPC y las subredes deben estar configuradas para admitir IPv6. Esto incluye tener bloques de CIDR de IPv6 asignados a la VPC y las subredes.
+ **Tipos de redes de puntos de conexión de doble pila**: la VPC y las subredes deben admitir direcciones IPv4 e IPv6.
+ **Tipos de redes de conexión de destino de IPv6**: la base de datos debe estar configurada en modo de doble pila para admitir conexiones de IPv6 desde el proxy.

Los recursos de aplicaciones cliente, como Amazon EC2, Lambda o Amazon ECS, pueden estar en la misma VPC como el proxy. O pueden estar en una VPC independiente del proxy. Si se ha conectado correctamente a instancias de base de datos de RDS, ya dispone de los recursos de red necesarios. 

**Topics**
+ [Obtención de información sobre subredes.](#rds-proxy-network-prereqs.subnet-info)
+ [Planificación de la capacidad de direcciones IP](#rds-proxy-network-prereqs.plan-ip-address)

## Obtención de información sobre subredes.
<a name="rds-proxy-network-prereqs.subnet-info"></a>

Para crear un proxy, debe proporcionar las subredes y la VPC en las que opera el proxy. En el siguiente ejemplo de Linux se muestran comandos de la AWS CLI con los que se examinan las VPC y las subredes que son propiedad de su Cuenta de AWS. En particular, se pasan los ID de subred como parámetros si crea un proxy utilizando la CLI. 

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

En el siguiente ejemplo de Linux, se muestran comandos de la AWS CLI que sirven para determinar los ID de subred correspondientes a una instancia de base de datos de RDS. Busque el ID de la VPC para la instancia de base de datos. Examine la VPC para encontrar sus subredes. En el siguiente ejemplo de Linux se muestra cómo.

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

## Planificación de la capacidad de direcciones IP
<a name="rds-proxy-network-prereqs.plan-ip-address"></a>

Un RDS Proxy ajusta automáticamente su capacidad según sea necesario en función del tamaño y la cantidad de instancias de base de datos registradas en él. Algunas operaciones también pueden requerir una capacidad de proxy adicional, como el aumento del tamaño de una base de datos registrada u operaciones de mantenimiento internas de RDS Proxy. Durante estas operaciones, es posible que el proxy necesite más direcciones IP para aprovisionar la capacidad adicional. Estas direcciones adicionales permiten que su proxy escale sin afectar a su carga de trabajo. La falta de direcciones IP gratuitas en las subredes impide que un proxy se amplíe. Esto puede provocar latencias de consulta más altas o errores en la conexión del cliente. RDS le notifica mediante un evento `RDS-EVENT-0243` cuando no hay suficientes direcciones IP libres en sus subredes. Para obtener información acerca de este evento, consulte [Trabajo con eventos de RDS ProxyTrabajo con eventos de RDS Proxy](rds-proxy.events.md).

**nota**  
RDS Proxy no consume más de 215 direcciones IP para cada proxy en una VPC.

Reserve el número mínimo siguiente de direcciones IP libres en las subredes para el proxy, en función de los tamaños de las clases de instancias de bases de datos.


|  Clase de instancia de base de datos  |  Direcciones IP gratuitas mínimas  | 
| --- | --- | 
|  db.\$1.xlarge o menor   |  10  | 
|  db.\$1.24xlarge   |  15  | 
|  db.\$1.24xlarge   |  25  | 
|  db.\$1.24xlarge   |  45  | 
|  db.\$1.24xlarge   |  60  | 
|  db.\$1.24xlarge   |  75  | 
|  db.\$1.24xlarge   |  110  | 

Estos números de direcciones IP recomendados son estimaciones para un proxy con solo el punto de conexión predeterminado. Un proxy con puntos de conexión adicionales o réplicas de lectura puede necesitar más direcciones IP gratuitas. Para cada punto de conexión adicional, le recomendamos que reserve tres direcciones IP más. Para cada réplica de lectura, le recomendamos que reserve direcciones IP adicionales tal como se especifica en la tabla en función del tamaño de dicha réplica de lectura.

# Configuración de credenciales de base de datos para RDS Proxy
<a name="rds-proxy-secrets-arns"></a>

RDS Proxy en Amazon RDS utiliza AWS Secrets Manager para almacenar y administrar las credenciales de la base de datos de forma segura. En lugar de incrustar credenciales en la aplicación, se asocia un proxy con un secreto de Secrets Manager que contiene los detalles de autenticación necesarios. Cree un secreto independiente de Secrets Manager para cada cuenta de usuario de base de datos a la que se conecta el proxy en la instancia de base de datos de RDS.

Otra opción, puede configurar RDS Proxy para utilizar la autenticación de IAM integral, lo que elimina la necesidad de almacenar las credenciales de la base de datos en Secrets Manager. RDS Proxy utiliza la autenticación de IAM para las conexiones de cliente a proxy y de proxy a base de datos. Esto proporciona una solución de autenticación basada en IAM totalmente integrada que no requiere administrar secretos ni contraseñas. Para obtener información sobre cómo agregar un usuario de base de datos de IAM nuevo, consulte [Creación de cuentas de base de datos utilizando autenticación de IAM](UsingWithRDS.IAMDBAuth.DBAccounts.md).

**Topics**
+ [Creación de secretos para utilizar con RDS Proxy](#rds-proxy-secrets-create)

## Creación de secretos para utilizar con RDS Proxy
<a name="rds-proxy-secrets-create"></a>

Antes de crear un proxy, debe crear al menos un secreto que almacene las credenciales de la base de datos.

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

**Creación de un secreto**

1. Abra la consola de Secrets Manager en[https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/).

1. Elija **Almacenar un secreto nuevo**.

1. Elija **Credenciales para base de datos de Amazon RDS**.

1. Introduzca un nombre de usuario y una contraseña. Las credenciales que introduzca deben coincidir con las credenciales de un usuario de base de datos que exista en la base de datos de RDS asociada. RDS Proxy utiliza estas credenciales para autenticar y establecer conexiones con la base de datos en nombre de las aplicaciones.

   Si no hay coincidencia, puede actualizar el secreto para que coincida con la contraseña de la base de datos. Hasta que no actualice el secreto, los intentos de conexión a través del proxy mediante ese secreto no se realizarán correctamente, pero las conexiones que utilicen otros secretos válidos seguirán funcionando.
**nota**  
En el caso de RDS para SQL Server, RDS Proxy requiere un secreto que distinga entre mayúsculas y minúsculas en Secrets Manager, independientemente de la configuración de intercalación de la instancia de base de datos. Si la aplicación permite nombres de usuario con distintas mayúsculas, como “Admin” y “admin”, deberá crear secretos distintos para cada uno. RDS Proxy no admite la autenticación de nombre de usuario sin distinción entre mayúsculas y minúsculas entre el cliente y el proxy.  
Para obtener más información sobre colación en SQL Server, consulte la documentación de [Microsoft SQL Server](https://docs.microsoft.com/en-us/sql/relational-databases/collations/collation-and-unicode-support?view=sql-server-ver16).

1. En **Base de datos**, seleccione la base de datos de Amazon RDS a la que accederá el secreto.

1. Rellene otras configuraciones para el secreto y elija **Guardar**. Para obtener instrucciones completas, consulte [Creación de un secreto de AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) en la *Guía del usuario de AWS Secrets Manager*. 

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

Cuando cree un proxy a través de la AWS CLI, especifique los nombres de recursos de Amazon (ARN) de los secretos correspondientes. Lo hace para todas las cuentas de usuario de base de datos a las que puede acceder el proxy. En la Consola de administración de AWS, elija los secretos por sus nombres descriptivos.
+ Para crear un secreto de Secrets Manager para utilizarlo con RDS Proxy, utilice el 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"}'
  ```
+ También puede crear una clave personalizada para cifrar su secreto de Secrets Manager. El siguiente comando crea una clave de ejemplo.

  ```
  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 ejemplo, los siguientes comandos crean secretos de Secrets Manager para dos usuarios de bases de datos: 

```
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 crear estos secretos cifrados con su clave de AWS KMS personalizada, use los siguientes 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 los secretos que posee la cuenta de AWS, utilice el comando [list-secrets](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/list-secrets.html):

```
aws secretsmanager list-secrets
```

Si crea un proxy mediante la CLI, se pasan los nombres de recursos de Amazon (ARN) de uno o más secretos al parámetro `--auth`. En el siguiente ejemplo se muestra cómo preparar un informe si solo se tiene el nombre y el ARN de cada secreto que es propiedad de la cuenta de AWS. En este ejemplo se utiliza el parámetro `--output table`, disponible en la versión 2 de la AWS CLI. Si está utilizando la versión 1 de la AWS CLI, use `--output text`. 

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

Para confirmar que el secreto contiene las credenciales correctas en el formato adecuado, utilice el comando [get-secret-value](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/get-secret-value.html). Reemplace `your_secret_name` por el nombre corto o ARN del secreto.

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

La salida contiene una línea con un valor codificado en JSON similar al siguiente:

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

# Configuración de la autenticación de IAM para RDS Proxy
<a name="rds-proxy-iam-setup"></a>

Para configurar la autenticación de AWS Identity and Access Management (IAM) para RDS Proxy en Amazon RDS, cree y configure una política de IAM que conceda los permisos necesarios. 

En este tema se proporcionan los pasos para configurar la autenticación de IAM para RDS Proxy, incluida la creación de la política de IAM necesaria y la asociación a un rol de IAM. 

**sugerencia**  
Este procedimiento solo es necesario si desea crear un rol de IAM propio. De lo contrario, RDS puede crear automáticamente el rol requerido cuando configure el proxy, por lo que puede omitir estos pasos.

## Requisitos previos
<a name="rds-proxy-iam-setup-prereqs"></a>

Antes de configurar la autenticación de IAM para RDS Proxy, asegúrese de que tiene lo siguiente:
+ **AWS Secrets Manager**: al menos un secreto almacenado que contenga credenciales de base de datos. Para obtener instrucciones para crear secretos, consulte [Configuración de credenciales de base de datos para RDS Proxy](rds-proxy-secrets-arns.md).

  Esto no es obligatorio si utiliza la autenticación de IAM integral.
+ **Permisos de IAM**: un rol o usuario de IAM con permisos para crear y administrar políticas, roles y secretos de IAM en AWS Secrets Manager.

## Creación de una política de IAM para la autenticación de IAM integral
<a name="rds-proxy-iam-setup-e2e-steps"></a>

Cuando se utiliza la autenticación de IAM integral, RDS Proxy se conecta a la base de datos mediante la autenticación de IAM en lugar de recuperar las credenciales de Secrets Manager. Para ello, es necesario configurar el rol de IAM con permisos `rds-db:connect` para las cuentas de base de datos que desee utilizar con el proxy.

Para autenticar RDS Proxy en la base de datos mediante IAM, cree un rol de IAM con una política que conceda los permisos de conexión a la base de datos necesarios.

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

**Creación de un rol para la autenticación de IAM integral con el proxy**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Cree una política de permisos para el rol. Para conocer los pasos generales, consulte [Creación de políticas de IAM (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html).

   Pegue esta política en el editor JSON y realice los siguientes cambios:
   + Sustituya su propio ID de cuenta.
   + Sustituya `us-east-2` por el lugar donde debe residir el proxy.
   + Sustituya los ID de los recursos de la base de datos y los nombres de usuario por los que desee utilizar. El formato del ID de recurso difiere entre las instancias de RDS y 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. Cree el rol y asocie la política de permisos a este. Para conocer los pasos generales, consulte [Creación de un rol para delegar permisos a un servicio de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html). 

   En **Tipo de entidad de confianza**, elija **Servicio de AWS**. En **Caso de uso**, seleccione **RDS** y elija **RDS: agregar rol a la base de datos** para el caso de uso.

1. En **Políticas de permisos**, elija la política que creó.

1. En **Seleccionar entidades de confianza**, introduzca la siguiente política de confianza para el rol:

   ```
   {
     "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 crear el rol mediante la AWS CLI, envíe la siguiente solicitud:

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

A continuación, asocie la política al rol:

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

Una vez configurados el rol de IAM y los permisos para la autenticación de IAM integral, puede crear ahora un proxy con `DefaultAuthScheme` configurado en `IAM_AUTH`. Este proxy se autentica directamente en la base de datos mediante IAM sin requerir los secretos de Secrets Manager. Para obtener instrucciones, consulte [Creación de un proxy para Amazon RDS](rds-proxy-creating.md).

Cuando utilice la autenticación de IAM integral, asegúrese de que los usuarios de la base de datos estén configurados para la autenticación de IAM tal y como se describe en [Creación de cuentas de base de datos utilizando autenticación de IAM](UsingWithRDS.IAMDBAuth.DBAccounts.md).

## Creación de una política de IAM para acceder a Secrets Manager
<a name="rds-proxy-iam-setup-steps"></a>

Para permitir que RDS Proxy recupere las credenciales de la base de datos de Secrets Manager, cree un rol de IAM con una política que conceda los permisos necesarios.

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

**Creación de un rol que acceda a los secretos que desea utilizar con el proxy**

1. Inicie sesión en Consola de administración de AWS y abra la consola IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Cree una política de permisos para el rol. Para conocer los pasos generales, consulte [Creación de políticas de IAM (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html).

   Pegue esta política en el editor JSON y realice los siguientes cambios:
   + Sustituya su propio ID de cuenta.
   + Sustituya `us-east-2` por la región donde residirá el proxy.
   + Sustituya los nombres secretos por los que ha creado. Para obtener más información, consulte [Especificación de claves de KMS en instrucciones de política de IAM](https://docs.aws.amazon.com/kms/latest/developerguide/cmks-in-iam-policies.html).
   + Sustituya el ID de clave de KMS por el que utilizó para cifrar los secretos de Secrets Manager, ya sea la clave predeterminada o una clave propia.

------
#### [ 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. Cree el rol y asocie la política de permisos a este. Para conocer los pasos generales, consulte [Creación de un rol para delegar permisos a un servicio de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html). 

   En **Tipo de entidad de confianza**, elija **Servicio de AWS**. En **Caso de uso**, seleccione **RDS** y elija **RDS: agregar rol a la base de datos** para el caso de uso.

1. En **Políticas de permisos**, elija la política que creó.

1. En **Seleccionar entidades de confianza**, introduzca la siguiente política de confianza para el rol:

------
#### [ 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 crear el rol mediante la AWS CLI, envíe la siguiente solicitud:

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

A continuación, asocie la política al rol:

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

Una vez configurados el rol de IAM y los permisos, puede crear un proxy y asociarlo a este rol. Esto permite al proxy recuperar de forma segura las credenciales de la base de datos de AWS Secrets Manager y habilitar la autenticación de IAM para las aplicaciones. Para obtener instrucciones, consulte [Creación de un proxy para Amazon RDS](rds-proxy-creating.md).

# Creación de un proxy para Amazon RDS
<a name="rds-proxy-creating"></a>

Puede asociar un proxy con una instancia de base de datos de RDS para MariaDB, RDS para Microsoft SQL Server, RDS para MySQL o RDS para PostgreSQL. 

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

**Para crear un proxy**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon RDS en [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. En el panel de navegación, seleccione **Proxies**. 

1. Elija **Create proxy (Crear proxy)**. 

1. Configure los siguientes ajustes para el proxy.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/UserGuide/rds-proxy-creating.html)

1.  Elija **Create proxy (Crear proxy)**. 

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

 Para crear un proxy utilizando el comando AWS CLI, llame al comando [create-db-proxy](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-proxy.html) con los siguientes parámetros requeridos: 
+ `--db-proxy-name`
+ `--engine-family`
+ `--role-arn`
+ `--vpc-subnet-ids`

El valor `--engine-family` distingue entre mayúsculas y minúsculas.

**Example**  
Para Linux, macOS o 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]
```

A continuación se muestra un ejemplo del valor JSON para la opción `--auth`. Este ejemplo aplica un tipo de autenticación de cliente diferente a cada secreto.

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

El parámetro `--endpoint-network-type` especifica la versión de IP del punto de conexión del proxy que los clientes utilizan para conectarse al proxy. Los valores válidos son:
+ `IPV4`: el punto de conexión del proxy utiliza solo direcciones IPv4 (predeterminado).
+ `IPV6`: el punto de conexión del proxy utiliza solo direcciones IPv6.
+ `DUAL`: el punto de conexión del proxy admite direcciones IPv4 y IPv6.

El parámetro `--target-connection-network-type` especifica la versión de IP que utiliza el proxy para conectarse a la base de datos de destino. Los valores válidos son:
+ `IPV4`: el proxy se conecta a la base de datos mediante direcciones IPv4 (predeterminado).
+ `IPV6`: el proxy se conecta a la base de datos mediante direcciones IPv6.

Para usar los tipos de redes de punto de conexión de IPv6 o de doble pila, la VPC y las subredes deben estar configuradas para admitir el tipo de red seleccionado. Para utilizar el tipo de red de conexión de destino de IPv6, la base de datos debe admitir el modo de doble pila.

**sugerencia**  
 Si aún no conoce los ID de subred que utilizar para el parámetro `--vpc-subnet-ids`, consulte [Configuración de requisitos previos de red para RDS Proxy](rds-proxy-network-prereqs.md) para ver ejemplos de cómo encontrarlos. 

**nota**  
Este grupo de seguridad debe permitir el acceso a la base de datos a la que se conecta el proxy. El mismo grupo de seguridad se utiliza para la entrada de las aplicaciones al proxy y para la salida del proxy a la base de datos. Por ejemplo, supongamos que utiliza el mismo grupo de seguridad para la base de datos y el proxy. En este caso, asegúrese de especificar que los recursos de ese grupo de seguridad pueden comunicarse con otros recursos del mismo grupo de seguridad.  
Cuando se utiliza una VPC compartida, no se puede utilizar el grupo de seguridad predeterminado para la VPC o uno que pertenezca a otra cuenta. Elija un grupo de seguridad que pertenezca a su cuenta. Si no existe uno, créelo. Para obtener más información acerca de esta limitación, consulte [Trabajar con VPC compartidas](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-sharing.html#vpc-share-limitations). 

 Para crear las asociaciones adecuadas para el proxy, utilice también el comando [register-db-proxy-targets](https://docs.aws.amazon.com/cli/latest/reference/rds/register-db-proxy-targets.html). Especifique el nombre de grupo de destino de `default`. El proxy de RDS crea automáticamente un grupo de destino con este nombre cuando crea 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 de RDS
<a name="rds-proxy-creating.API"></a>

 Para crear un proxy de RDS, llame a la operación de la API de Amazon RDS [CreateDBProxy](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBProxy.html). Transfiera un parámetro con la estructura de datos [AuthConfig](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_AuthConfig.html) . 

 El proxy de RDS crea automáticamente un grupo de destino denominado `default` cuando crea cada proxy. Se asocia una instancia de base de datos de RDS con el grupo de destino llamando a la función [RegisterDBProxyTargets](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RegisterDBProxyTargets.html). 

**importante**  
Al seleccionar la **autenticación de IAM** para el esquema de autenticación predeterminado:  
Debe habilitar la autenticación de la base de datos de IAM en las instancias o clústeres de la base de datos de destino para que el proxy pueda conectarse correctamente.
Si elige **Crear rol de IAM**, es obligatorio el campo **Cuentas de base de datos para la autenticación de IAM**.
Si selecciona un rol de IAM existente, la consola no actualiza automáticamente el rol con los permisos de conexión de base de datos. Compruebe que el rol tenga los permisos `rds-db:connect` necesarios.

# Visualización de un proxy
<a name="rds-proxy-viewing"></a>

 Después de crear uno o varios proxies de RDS, puede verlos y administrarlos en la Consola de administración de AWS, la AWS CLI o la API de RDS. Puede revisar sus detalles de configuración, supervisar el rendimiento y determinar qué proxies modificar o eliminar según sea necesario.

Para permitir que las aplicaciones de base de datos enruten el tráfico a través de un proxy, debe especificar el punto de conexión del proxy en la cadena de conexión.

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

**Visualización de un proxy en la consola**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon RDS en [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. En el panel de navegación, seleccione **Proxies**. 

1. Seleccione el nombre del proxy para ver sus detalles. 

1. En la página de detalles, la sección **Grupos de destino** muestra cómo se enlaza el proxy a una instancia de base de datos de RDS específica. Puede navegar a la página del grupo de destino predeterminado para obtener una vista más detallada de esta asociación, incluida la configuración definida durante la creación del proxy. Esta incluye el porcentaje máximo de conexión, el tiempo de espera de préstamo de la conexión, la familia de motores y los filtros de fijación de sesión.

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

 Para consultar el proxy mediante la CLI, utilice el comando [describe-db-proxies](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxies.html). De forma predeterminada, la solicitud devuelve todos los proxies propiedad de la cuenta de AWS. Para ver los detalles de un solo proxy, especifique su nombre con el parámetro `--db-proxy-name`. 

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

 Para consultar otra información asociada con el proxy, utilice los comandos que se muestran a continuación. 

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

aws rds describe-db-proxy-targets --db-proxy-name proxy_name
```

 Utilice la siguiente secuencia de comandos para ver más detalles acerca de las cosas que están asociadas con el proxy: 

1.  Para obtener una lista de proxies, ejecute [describe-db-proxies](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxies.html). 

1.  Para mostrar parámetros de conexión como el porcentaje máximo de conexiones que puede utilizar el proxy, ejecute [describe-db-proxy-target-groups](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxy-target-groups.html) `--db-proxy-name`. Utilice el nombre del proxy como el valor del parámetro. 

1.  Para consultar los detalles de la instancia de base de datos de RDS con asociación con el grupo de destino devuelto, ejecute [describe-db-proxy-targets](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxy-targets.html). 

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

 Para ver los proxies mediante la API de RDS, utilice la operación [DescribeDBProxies](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBProxies.html) . Devuelve valores del tipo de datos [DBProxy](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DBProxy.html). 

 Para consultar los detalles de la configuración de conexión del proxy, utilice los identificadores de proxy de este valor devuelto con la operación [DescribeDBProxyTargetGroups](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBProxyTargetGroups.html). Devuelve valores del tipo de datos [DBProxyTargetGroup](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DBProxyTargetGroup.html). 

 Para consultar la instancia de RDS o el clúster de bases de datos de Aurora asociado con el proxy, utilice la operación [DescribeDBProxyTargets](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBProxyTargets.html). Devuelve valores del tipo de datos [DBProxyTarget](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DBProxyTarget.html). 

# Conexión a una base de datos mediante RDS Proxy
<a name="rds-proxy-connecting"></a>

La forma en que se conecta a una instancia de base de datos de RDS a través de un proxy es generalmente la misma que para conectarla directamente a la base de datos. Para obtener más información, consulte [Información general de los puntos de enlace de proxy](rds-proxy-endpoints.md#rds-proxy-endpoints-overview). 

**Topics**
+ [Conexión a una base de datos mediante credenciales de base de datos](#rds-proxy-connecting-native)
+ [Conexión a una base de datos mediante autenticación de IAM](#rds-proxy-connecting-iam)
+ [Consideraciones para conectarse a Microsoft SQL Server](#rds-proxy-connecting-sqlserver)
+ [Consideraciones para conectarse a PostgreSQL](#rds-proxy-connecting-postgresql)

## Conexión a una base de datos mediante credenciales de base de datos
<a name="rds-proxy-connecting-native"></a>

 Siga los siguientes pasos para conectarse a un proxy mediante credenciales de base de datos: 

1.  Buscar el punto de enlace del proxy. En la Consola de administración de AWS, puede encontrar el punto de enlace en la página de detalles del proxy correspondiente. Con la AWS CLI, puede usar el comando [describe-db-proxies](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxies.html). El siguiente ejemplo muestra cómo. 

   ```
   # 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 el punto de conexión como parámetro del host en la cadena de conexión de la aplicación cliente. Por ejemplo, especifique el punto de enlace del proxy como el valor para la opción `mysql -h` o la opción `psql -h`. 

1.  Proporcione el mismo nombre de usuario y contraseña de la base de datos como suele hacer. 

## Conexión a una base de datos mediante autenticación de IAM
<a name="rds-proxy-connecting-iam"></a>

 Cuando utilice la autenticación de IAM con RDS Proxy, tendrá dos opciones de autenticación entre el cliente y el proxy:
+ Configure los usuarios de la base de datos para que se autentiquen con nombres de usuario y contraseñas normales. El RDS Proxy recupera el nombre de usuario y las credenciales de contraseña de Secrets Manager. La conexión desde RDS Proxy a la base de datos subyacente no pasa a través de IAM.
+ También puede utilizar la autenticación de IAM integral, que se conecta a la base de datos a través del proxy mediante IAM sin necesidad de credenciales de base de datos.

 Para conectarse a RDS Proxy utilizando la autenticación de IAM, utilice el mismo procedimiento general de conexión que para la autenticación de IAM con una instancia de base de datos de RDS. Para obtener más información acerca del uso de la IAM, consulte [Seguridad en Amazon RDS ](UsingWithRDS.md). Si utiliza la autenticación de IAM integral, proporcione el complemento de autenticación de IAM al usuario de base de datos. Consulte [Creación de cuentas de base de datos utilizando autenticación de IAM](UsingWithRDS.IAMDBAuth.DBAccounts.md).

 Las principales diferencias en el uso de IAM para RDS Proxy incluyen las siguientes: 
+ Con la autenticación de IAM estándar, los usuarios de la base de datos disponen de credenciales habituales en la base de datos. Se configuran los secretos de Secrets Manager que contienen estos nombres de usuario y contraseñas y se autoriza al RDS Proxy para recuperar las credenciales de Secrets Manager. La autenticación IAM se aplica a la conexión entre el programa cliente y el proxy. A continuación, el proxy se autentica en la base de datos utilizando las credenciales de nombre de usuario y contraseña recuperadas de Secrets Manager.
+ Con la autenticación de IAM integral, no es necesario configurar los secretos de Secrets Manager para las credenciales de la base de datos. La autenticación de IAM se aplica a la conexión entre el cliente y el proxy y el proxy y la base de datos.
+ En lugar del punto de enlace de instancia, clúster o lector, se especifica el punto de enlace del proxy. Para obtener detalles sobre el punto de enlace del proxy, consulte [Conexión a la instancia con la autenticación de IAM](UsingWithRDS.IAMDBAuth.Connecting.md).
+ Asegúrese de que usa Transport Layer Security (TLS)/Capa de sockets seguros (SSL) cuando se conecte a un proxy mediante la autenticación de IAM.

Puede conceder acceso al proxy a un usuario específico modificando la política de IAM. Ejemplo:

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

**sugerencia**  
Al configurar la autenticación de IAM para las conexiones de RDS Proxy, siga estas instrucciones importantes para evitar problemas de conexión:  
No conceda el rol de `rds_iam` mientras mantenga la autenticación de contraseña general para el mismo usuario o rol de la base de datos.
Recuerde que, mientras los clientes se conectan a RDS Proxy mediante la autenticación de IAM, RDS Proxy siempre se conecta a la base de datos mediante la autenticación de contraseña a través de Secrets Manager.
Si la conexión se termina o se vuelve a conectar con frecuencia, elimine cualquier concesión de `rds_iam` existente del usuario o rol y utilice solo la autenticación con contraseña.
Asegúrese de que la política de contraseñas cumpla con los requisitos de caracteres seguros de SCRAM-SHA-256.
La combinación de métodos de autenticación de IAM y contraseña para el mismo usuario de la base de datos puede provocar inestabilidad de conexión.

## Consideraciones para conectarse a Microsoft SQL Server
<a name="rds-proxy-connecting-sqlserver"></a>

Para conectarse a un proxy mediante la autenticación de IAM, no utilice el campo de contraseña. En su lugar, debe proporcionar la propiedad de token adecuada para cada tipo de controlador de base de datos en el campo token. Por ejemplo, utilice la propiedad `accessToken` para JDBC o la propiedad `sql_copt_ss_access_token` para ODBC. O utilice la propiedad `AccessToken` del controlador .NET SqlClient. No puede usar la autenticación de IAM con clientes que no admitan propiedades de token.

En algunas condiciones, un proxy no puede compartir una conexión de base de datos y, en cambio, vincula la conexión de la aplicación cliente al proxy a una conexión de base de datos dedicada. Para más información sobre estas condiciones, consulte [Cómo evitar la fijación de RDS Proxy](rds-proxy-pinning.md).

## Consideraciones para conectarse a PostgreSQL
<a name="rds-proxy-connecting-postgresql"></a>

Si crea un nuevo usuario de base de datos de PostgreSQL para conectarse a RDS Proxy, asegúrese de conceder al usuario el privilegio `CONNECT` en la base de datos. Sin esto, el usuario no puede establecer una conexión. Para obtener más información, consulte [Cómo añadir un nuevo usuario de base de datos a una base de datos PostgreSQL al usar RDS Proxy](rds-proxy-new-db-user.md#rds-proxy-new-db-user-pg).

Cuando un cliente comienza una conexión a una base de datos de PostgreSQL, envía un mensaje de inicio. Este mensaje incluye pares de cadenas de nombres y valores de parámetros. Para obtener detalles, consulte `StartupMessage` en [Formatos de mensaje de PostgreSQL](https://www.postgresql.org/docs/current/protocol-message-formats.html) en la documentación de PostgreSQL. 

Al conectarse a través de un proxy de RDS, el mensaje de inicio puede incluir los siguientes parámetros reconocidos actualmente: 
+  `user` 
+  `database`

 El mensaje de inicio también puede incluir los siguientes parámetros de tiempo de ejecución adicionales: 
+ `[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 obtener más información acerca de la mensajería de PostgreSQL, consulte el [Protocolo Frontend/Backend](https://www.postgresql.org/docs/current/protocol.html) en la documentación de PostgreSQL.

 Para PostgreSQL, si usa JDBC, recomendamos lo siguiente para evitar la fijación:
+ Establezca el parámetro de conexión JDBC `assumeMinServerVersion` en al menos `9.0` para evitar la fijación. Esto evita que el controlador JDBC realice un viaje de ida y vuelta adicional durante el inicio de la conexión cuando se ejecuta `SET extra_float_digits = 3`. 
+ Establezca el parámetro de conexión JDBC `ApplicationName` en `any/your-application-name` para evitar la fijación. Al hacerlo, se evita que el JDBC driver realice un viaje de ida y vuelta adicional durante el inicio de la conexión cuando se ejecuta `SET application_name = "PostgreSQL JDBC Driver"`. Tenga en cuenta que el parámetro JDBC es `ApplicationName` pero el parámetro `StartupMessage` de PostgreSQL es `application_name`.

Para obtener más información, consulte [Cómo evitar la fijación de RDS Proxy](rds-proxy-pinning.md). Para obtener más información acerca de la conexión mediante JDBC, consulte [Conexión a la base de datos](https://jdbc.postgresql.org/documentation/setup/) en la documentación de PostgreSQL.