

# Seguridad de Amazon RDS Custom
<a name="custom-security"></a>

Familiarícese con los aspectos de seguridad de RDS Custom.

Para obtener más información sobre la seguridad de RDS Custom, consulte los temas siguientes.
+ [Protección de su bucket de Amazon S3 contra el problema del suplente confuso](custom-security.confused-deputy.md)
+ [Rotación de credenciales de RDS Custom para Oracle para programas de conformidad](custom-security.cred-rotation.md)

## Cómo gestiona RDS Custom las tareas en su nombre de forma segura
<a name="custom-security.security-tools"></a>

RDS Custom utiliza las siguientes herramientas y técnicas para ejecutar operaciones en su nombre de forma segura:

**Rol vinculado al servicio AWSServiceRoleForRDSCustom**  
Un *rol vinculado al servicio* está predefinido por el servicio e incluye todos los permisos que requiere el servicio para llamar a otros Servicios de AWS en su nombre. Para RDS Custom, `AWSServiceRoleForRDSCustom` es un rol vinculado al servicio que se define según el principio del privilegio mínimo. RDS Custom utiliza los permisos de `AmazonRDSCustomServiceRolePolicy`, que es la política adjunta a este rol, para realizar la mayoría de las tareas de aprovisionamiento y de administración fuera del host. Para obtener más información, consulte [AmazonRDSCustomServiceRolePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRDSCustomServiceRolePolicy.html).  
Cuando realiza tareas en el host, la automatización de RDS Custom utiliza las credenciales del rol vinculado al servicio para ejecutar los comandos mediante AWS Systems Manager. Puede auditar el historial de comandos a través del historial de comandos de Systems Manager y AWS CloudTrail. Systems Manager se conecta a su instancia de base de datos de RDS Custom mediante la configuración de red. Para obtener más información, consulte [Paso 4: configurar IAM para RDS Custom for Oracle](custom-setup-orcl.md#custom-setup-orcl.iam-vpc).

**Credenciales de IAM temporales**  
Al aprovisionar o eliminar recursos, RDS Custom a veces utiliza credenciales temporales derivadas de las credenciales de la entidad principal de la IAM que llama. Estas credenciales de la IAM están restringidas por las políticas de IAM adjuntas a esa entidad principal y caducan una vez finalizada la operación. Para obtener más información sobre los permisos necesarios para las entidades principales de IAM que utilizan RDS Custom, consulte [Paso 5: otorgar los permisos necesarios al rol o usuario de IAM](custom-setup-orcl.md#custom-setup-orcl.iam-user).

**Perfil de instancia de Amazon EC2**  
Un perfil de instancia de EC2 es un contenedor de un rol de IAM, que puede utilizar para transferir información del rol a una instancia de EC2. Una instancia de EC2 subyace a una instancia de base de datos de RDS Custom. Debe proporcionar un perfil de instancia al crear una instancia de base de datos de RDS Custom. RDS Custom utiliza las credenciales del perfil de instancia de EC2 cuando realiza tareas de administración basadas en el host, como las copias de seguridad. Para obtener más información, consulte [Cree manualmente el rol de IAM y el perfil de instancias](custom-setup-orcl.md#custom-setup-orcl.iam).

**Par de claves SSH**  
Cuando RDS Custom crea la instancia de EC2 que subyace a una instancia de base de datos, crea un par de claves SSH en su nombre. La clave usa el prefijo del nombre `do-not-delete-rds-custom-ssh-privatekey-db-` o `rds-custom!oracle-do-not-delete-db_resource_id-uuid-ssh-privatekey`. AWS Secrets Manager almacena la clave privada SSH como secreto en la Cuenta de AWS. Amazon RDS no almacena, accede ni usa estas credenciales. Para obtener más información, consulte [Pares de claves de Amazon EC2 e instancias Linux](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html).

## Certificados de SSL
<a name="custom-security.ssl"></a>

Las instancias de bases de datos de RDS Custom no admiten certificados SSL administrados. Si desea implementar SSL, puede administrar automáticamente los certificados SSL en su propia cartera y crear un oyente de SSL para proteger las conexiones entre la base de datos del cliente o para la replicación de la base de datos. Para obtener más información, consulte [Configuring Transport Layer Security Authentication](https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/configuring-secure-sockets-layer-authentication.html#GUID-6AD89576-526F-4D6B-A539-ADF4B840819F) (Configuración de la autenticación de seguridad de la capa de transporte) en la documentación de Oracle Database.

# Protección de su bucket de Amazon S3 contra el problema del suplente confuso
<a name="custom-security.confused-deputy"></a>

Cuando crea una versión del motor personalizado de Amazon RDS Custom para Oracle o una instancia de base de datos de RDS Custom para SQL Server, RDS Custom crea un bucket de Amazon S3. El bucket de S3 almacena archivos como artefactos CEV, registros REDO (transacciones), elementos de configuración para el perímetro de soporte y registros AWS CloudTrail.

Puede hacer que estos buckets de S3 sean más seguros mediante el uso de las claves de contexto de condición global para evitar el *problema del suplente confuso*. Para obtener más información, consulte [Prevención de los problemas del suplente confuso entre servicios](cross-service-confused-deputy-prevention.md).

El siguiente ejemplo de RDS Custom para Oracle muestra el uso de las claves de contexto de condición global `aws:SourceArn` y `aws:SourceAccount` en una política de bucket de S3. Para RDS Custom para Oracle, asegúrese de incluir los nombres de recursos de Amazon (ARN) para los CEV y las instancias de base de datos. Para RDS Custom para SQL Server, asegúrese de incluir el ARN para las instancias de base de datos.

```
...
{
  "Sid": "AWSRDSCustomForOracleInstancesObjectLevelAccess",
  "Effect": "Allow",
  "Principal": {
     "Service": "custom.rds.amazonaws.com"
  },
  "Action": [
     "s3:GetObject",
     "s3:GetObjectVersion",
     "s3:DeleteObject",
     "s3:DeleteObjectVersion",
     "s3:GetObjectRetention",
     "s3:BypassGovernanceRetention"
  ],
  "Resource": "arn:aws:s3:::do-not-delete-rds-custom-123456789012-us-east-2-c8a6f7/RDSCustomForOracle/Instances/*",
  "Condition": {
     "ArnLike": {
        "aws:SourceArn": [
            "arn:aws:rds:us-east-2:123456789012:db:*",
            "arn:aws:rds:us-east-2:123456789012:cev:*/*"
        ]
     },
     "StringEquals": {
        "aws:SourceAccount": "123456789012"
    }
  }
},
...
```

# Rotación de credenciales de RDS Custom para Oracle para programas de conformidad
<a name="custom-security.cred-rotation"></a>

Algunos programas de conformidad exigen que las credenciales de usuario de la base de datos cambien periódicamente, por ejemplo, cada 90 días. RDS Custom para Oracle rota automáticamente las credenciales de algunos usuarios de bases de datos predefinidos.

**Topics**
+ [Rotación automática de credenciales para usuarios predefinidos](#custom-security.cred-rotation.auto)
+ [Directrices para rotar las credenciales de usuario](#custom-security.cred-rotation.guidelines)
+ [Rotación manual de credenciales de usuario](#custom-security.cred-rotation.manual)

## Rotación automática de credenciales para usuarios predefinidos
<a name="custom-security.cred-rotation.auto"></a>

Si su instancia de base de datos de RDS Custom para Oracle está alojada en Amazon RDS, las credenciales de los siguientes usuarios predefinidos de Oracle se rotan automáticamente cada 30 días. Las credenciales de los usuarios anteriores residen en AWS Secrets Manager.


| Usuario de base de datos | Creado por | Versiones del motor admitidas | Notas | 
| --- | --- | --- | --- | 
|  `SYS`  |  Oracle  |  custom-oracle-ee custom-oracle-ee-cdb custom-oracle-se2 custom-oracle-se2-cdb  |  | 
|  `SYSTEM`  |  Oracle  |  custom-oracle-ee custom-oracle-ee-cdb custom-oracle-se2 custom-oracle-se2-cdb  |  | 
|  `RDSADMIN`  |  RDS  |  custom-oracle-ee custom-oracle-se2  |  | 
|  `C##RDSADMIN`  |  RDS  |  custom-oracle-ee-cdb custom-oracle-se2-cdb  | Los nombres de usuario con un prefijo C\$1\$1 solo existen en las CDB. Para obtener más información acerca de las CDB, consulte [Información general de la arquitectura de Amazon RDS Custom para Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-creating.html#custom-creating.overview). | 
|  `RDS_DATAGUARD`  |  RDS  |  custom-oracle-ee  | Este usuario solo existe en las réplicas de lectura, en las bases de datos de origen para réplicas de lectura y en las bases de datos que haya migrado físicamente a RDS Custom mediante Oracle Data Guard. | 
|  `C##RDS_DATAGUARD`  |  RDS  |  custom-oracle-ee-cdb  | Este usuario solo existe en las réplicas de lectura, en las bases de datos de origen para réplicas de lectura y en las bases de datos que haya migrado físicamente a RDS Custom mediante Oracle Data Guard. Los nombres de usuario con un prefijo C\$1\$1 solo existen en las CDB. Para obtener más información acerca de las CDB, consulte [Información general de la arquitectura de Amazon RDS Custom para Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-creating.html#custom-creating.overview). | 

Una excepción a la rotación automática de credenciales es una instancia de base de datos de RDS Custom para Oracle que haya configurado manualmente como base de datos en espera. RDS solo rota las credenciales de las réplicas que haya creado mediante el comando de la CLI de `create-db-instance-read-replica` o la API de `CreateDBInstanceReadReplica`.

## Directrices para rotar las credenciales de usuario
<a name="custom-security.cred-rotation.guidelines"></a>

Para asegurarse de que sus credenciales roten de acuerdo con su programa de conformidad, tenga en cuenta las siguientes directrices:
+ Si la instancia de base de datos rota las credenciales automáticamente, no cambie ni elimine manualmente un secreto, un archivo de contraseñas o una contraseña para los usuarios que figuran en [Usuarios predefinidos de Oracle](#auto-rotation). De lo contrario, RDS Custom podría colocar la instancia de base de datos fuera del perímetro de soporte, lo que suspendería la rotación automática.
+ El usuario maestro de RDS no está predefinido, por lo que usted es el responsable de cambiar la contraseña manualmente o configurar la rotación automática en Secrets Manager. Para obtener más información, consulte [Rotar secretos de AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html).

## Rotación manual de credenciales de usuario
<a name="custom-security.cred-rotation.manual"></a>

Para las siguientes categorías de bases de datos, RDS no rota automáticamente las credenciales de los usuarios que figuran en [Usuarios predefinidos de Oracle](#auto-rotation):
+ Base de datos que configuró manualmente para que funcione como base de datos en espera.
+ Base de datos en las instalaciones
+ Instancia de base de datos que se encuentra fuera del perímetro de soporte o en un estado en el que no se puede ejecutar la automatización de RDS Custom. En este caso, RDS Custom tampoco rota las claves.

Si la base de datos se encuentra en alguna de las categorías anteriores, debe rotar las credenciales de usuario manualmente.

**Para rotar manualmente las credenciales de usuario de una instancia de base de datos**

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 **Bases de datos**, asegúrese de que RDS no esté realizando copias de seguridad de la instancia de base de datos ni operaciones como la configuración de la alta disponibilidad.

1. En la página de detalles de la base de datos, elija **Configuración** y anote el ID del recurso de la instancia de base de datos. También puede utilizar el comando `describe-db-instances` de la AWS CLI.

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

1. En el cuadro de búsqueda, ingrese el ID de recurso de la base de datos y busque un secreto mediante una de las siguientes convenciones de nomenclatura:

   ```
   do-not-delete-rds-custom-resource_id-uuid
   rds-custom!oracle-do-not-delete-resource_id-uuid
   ```

   Este secreto almacena la contraseña de `RDSADMIN`, `SYS` y `SYSTEM`. Las siguientes claves de ejemplo son para la instancia de base de datos con el ID de recurso `db-ABCDEFG12HIJKLNMNOPQRS3TUVWX` y UUID `123456`:

   ```
   do-not-delete-rds-custom-db-ABCDEFG12HIJKLNMNOPQRS3TUVWX-123456
   rds-custom!oracle-do-not-delete-db-ABCDEFG12HIJKLNMNOPQRS3TUVWX-123456
   ```
**importante**  
Si la instancia de base de datos es una réplica de lectura y usa el motor `custom-oracle-ee-cdb`, existen dos secretos con el sufijo `db-resource_id-uuid`: uno para el usuario maestro y otro para `RDSADMIN`, `SYS` y `SYSTEM`. Para encontrar el secreto correcto, ejecute el siguiente comando en el host:  

   ```
   cat /opt/aws/rdscustomagent/config/database_metadata.json | python3 -c "import sys,json; print(json.load(sys.stdin)['dbMonitoringUserPassword'])"
   ```
El atributo `dbMonitoringUserPassword` indica el secreto para `RDSADMIN`, `SYS` y `SYSTEM`.

1. Si la instancia de base de datos existe en una configuración de Oracle Data Guard, busque un secreto mediante una de las siguientes convenciones de nomenclatura:

   ```
   do-not-delete-rds-custom-resource_id-uuid-dg
   rds-custom!oracle-do-not-delete-resource_id-uuid-dg
   ```

   Este secreto almacena la contraseña de `RDS_DATAGUARD`. Las siguientes claves de ejemplo son para la instancia de base de datos con el ID de recurso de base de datos `db-ABCDEFG12HIJKLNMNOPQRS3TUVWX` y UUID **789012**:

   ```
   do-not-delete-rds-custom-db-ABCDEFG12HIJKLNMNOPQRS3TUVWX-789012-dg
   rds-custom!oracle-do-not-delete-db-ABCDEFG12HIJKLNMNOPQRS3TUVWX-789012-dg
   ```

1. Para todos los usuarios de bases de datos que se indican en [Usuarios predefinidos de Oracle](#auto-rotation), actualice las contraseñas de acuerdo con las instrucciones de [Modificación de un secreto de AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_update-secret.html).

1. Si su base de datos es una base de datos independiente o una base de datos de origen en una configuración de Oracle Data Guard:

   1. Inicie su cliente de Oracle SQL e inicie sesión como `SYS`.

   1. Ejecute una instrucción SQL del siguiente modo para cada usuario de base de datos incluido en [Usuarios predefinidos de Oracle](#auto-rotation):

      ```
      ALTER USER user-name IDENTIFIED BY pwd-from-secrets-manager ACCOUNT UNLOCK;
      ```

      Por ejemplo, si la nueva contraseña de `RDSADMIN` almacenada en Secrets Manager es `pwd-123`, ejecute la siguiente instrucción:

      ```
      ALTER USER RDSADMIN IDENTIFIED BY pwd-123 ACCOUNT UNLOCK;
      ```

1. Si su instancia de base de datos ejecuta Oracle Database 12c Versión 1 (12.1) y la administra Oracle Data Guard, copie manualmente el archivo de contraseña (`orapw`) desde la instancia de base de datos principal a cada instancia de base de datos en espera. 

   Si la instancia de base de datos está alojada en Amazon RDS, la ubicación del archivo de contraseñas es `/rdsdbdata/config/orapw`. Para las bases de datos que no están alojadas en Amazon RDS, la ubicación predeterminada es `$ORACLE_HOME/dbs/orapw$ORACLE_SID` en Linux y UNIX y `%ORACLE_HOME%\database\PWD%ORACLE_SID%.ora` en Windows.