

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Mover las credenciales de base de datos codificadas a AWS Secrets Manager
<a name="hardcoded-db-creds"></a>

Si tienes credenciales de base de datos de texto sin formato en el código, te recomendamos que muevas las credenciales a Secrets Manager y luego las rotes inmediatamente. Al mover las credenciales a Secrets Manager se soluciona el problema de que sean visibles para cualquiera que vea el código porque, en el futuro, el código recupera las credenciales directamente de Secrets Manager. Al rotar el secreto se actualiza la contraseña y, a continuación, se anula la contraseña codificada actual para que ya no sea válida. 

Para Amazon RDS, Amazon Redshift y Amazon DocumentDB, siga los pasos de esta página para mover credenciales codificadas a Secrets Manager. Para otro tipo de credenciales y otros secretos, consulte [Mueva los secretos codificados a AWS Secrets Manager](hardcoded.md).

Antes de comenzar, debe determinar quién necesita acceso al secreto. Recomendamos utilizar dos roles de IAM para administrar el permiso a su secreto:
+ Un rol que administra los secretos de su organización. Para obtener más información, consulte [Permisos de Secrets Manager](auth-and-access.md#auth-and-access_admin). Creará y rotará el secreto utilizando este rol.
+ Un rol que puede usar las credenciales en tiempo de ejecución, *RoleToRetrieveSecretAtRuntime* en este tutorial. El código asume esta función para recuperar el secreto.

**Topics**
+ [Paso 1: Crear el secreto](#hardcoded-db-creds_step2)
+ [Paso 2: Actualización del código](#hardcoded-db-creds_step3)
+ [Paso 3: rote el secreto](#hardcoded-db-creds_step5)
+ [Siguientes pasos](#hardcoded-db-creds_nextsteps)

## Paso 1: Crear el secreto
<a name="hardcoded-db-creds_step2"></a>

El primer paso consiste en copiar las credenciales codificadas existentes en un secreto en Secrets Manager. Para obtener la menor latencia, guarde el secreto en la misma región que la base de datos. 

**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. En la página **Choose secret type (Elegir tipo de secreto)**, haga lo siguiente:

   1. En **Secret type** (Tipo secreto), elija el tipo de credenciales de base de datos que desea almacenar:
      + **Bases de datos de Amazon RDS**
      + **Base de datos de Amazon DocumentDB**
      + **Almacenamiento de datos de Amazon Redshift**.
      + Para otro tipo de secretos, consulte [Reemplazar secretos codificados ](https://docs.aws.amazon.com/secretsmanager/latest/userguide/hardcoded.html).

   1. En **Credenciales**, ingrese las credenciales existentes para la base de datos.

   1. Para **Clave encriptada**, seleccione **aws/secretsmanager** para utilizar Clave administrada de AWS para Secrets Manager. No se aplica ningún cargo por el uso de esta clave. También puede utilizar su propia clave administrada por el cliente, por ejemplo, para [acceder al secreto desde otro Cuenta de AWS](auth-and-access_examples_cross.md). Para obtener información sobre los costos por usar una clave administrada por el cliente, consulte [Precios](intro.md#asm_pricing).

   1. En **Database** (Base de datos), elija la base de datos.

   1. Elija **Siguiente**.

1. En la página **Configure secret** (Configurar el secreto), haga lo siguiente:

   1. Ingrese un **Nombre de secreto** descriptivo y una **Descripción**. 

   1. En **Permisos de recursos**, seleccione **Edit permissions** (Editar permisos). Pegue la siguiente política, que *RoleToRetrieveSecretAtRuntime* permite recuperar el secreto, y luego elija **Guardar**.

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/RoleToRetrieveSecretAtRuntime"
                  },
                  "Action": "secretsmanager:GetSecretValue",
                  "Resource": "*"
              }
          ]
      }
      ```

------

   1. En la parte inferior de la página, elija **Siguiente**.

1. En la página **Configure rotation** (Configurar rotación), mantenga la rotación desactivada por ahora. La activará más tarde. Elija **Siguiente**.

1. En la página **Review (Revisar)**, revise los detalles del secreto y, a continuación, elija **Store (Almacenar)**.

## Paso 2: Actualización del código
<a name="hardcoded-db-creds_step3"></a>

El código debe asumir la función de IAM *RoleToRetrieveSecretAtRuntime* para poder recuperar el secreto. Para obtener más información, consulte [Cambiar a un rol de IAM (AWS API)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-api.html).

A continuación, actualice el código para recuperar el secreto de Secrets Manager utilizando el código de ejemplo proporcionado por Secrets Manager. 

**Para encontrar el código de muestra**

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

1. En la página **Secrets** (Secretos), elija el secreto.

1. Baje hasta **Código de muestra**. Elija su idioma y, a continuación, copie el fragmento de código. 

En la aplicación, elimine las credenciales codificadas y pegue el fragmento de código. Según el idioma del código, es posible que tenga que añadir una llamada a la función o método del fragmento.

Compruebe que su aplicación funciona según lo esperado con el secreto en lugar de las credenciales codificadas.

## Paso 3: rote el secreto
<a name="hardcoded-db-creds_step5"></a>

El último paso es anular las credenciales codificadas rotando el secreto. La *rotación* es el proceso de actualización periódica de un secreto. Cuando se rota un secreto, se actualizan las credenciales tanto en el secreto como en la base de datos. Secrets Manager puede configurar la rotación de un secreto automáticamente en el horario que usted establezca.

Parte de la configuración de la rotación consiste en garantizar que la función de rotación de Lambda pueda acceder tanto a Secrets Manager como a su base de datos. Cuando activa la rotación automática, Secrets Manager crea la función de rotación Lambda en la misma VPC que la base de datos para que tenga acceso en red a la base de datos. La función de rotación de Lambda también debe poder realizar llamadas a Secrets Manager para actualizar el secreto. Le recomendamos que cree un punto final de Secrets Manager en la VPC para que las llamadas de Lambda a Secrets Manager no salgan de la infraestructura. AWS Para obtener instrucciones, consulte [Uso de un punto final AWS Secrets Manager de VPC](vpc-endpoint-overview.md).

**Activar la rotación**

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

1. En la página **Secrets** (Secretos), elija el secreto.

1. En la página **Secret details** (Detalles del secreto), en la sección **Rotation configuration** (Configuración de la rotación), elija **Edit rotation** (Editar rotación).

1. En el cuadro de diálogo **Edit rotation configuration** (Configuración para editar la rotación), haga lo siguiente:

   1. Active **Automatic rotation** (Rotación automática).

   1. En la sección **Programación de rotación**, ingrese su horario en la zona horaria UTC. 

   1. Elija **Rotate immediately when the secret is stored** (Rotar inmediatamente cuando se almacene el secreto) a fin de rotar su secreto en cuanto guarde los cambios.

   1. En la sección **Función de rotación**, seleccione **Create a new Lambda function** (Crear una nueva función de Lambda) e ingrese un nombre para la nueva función. Secrets Manager agrega “SecretsManager” al principio del nombre de la función.

   1. Para la **estrategia de rotación**, elija **un solo usuario**.

   1. Seleccione **Save**.

**Para comprobar que el secreto ha rotado**

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

1. Seleccione **Secrets** (Secretos) y luego elija el secreto.

1. En la página **Secret details** (Detalles del secreto), deslícese hacia abajo y elija **Retrieve secret value** (Recuperar valor del secreto).

   Si el valor secreto ha cambiado, la rotación se realizó correctamente. Si el valor secreto no ha cambiado, consulta [Solución de problemas de rotación](troubleshoot_rotation.md) los CloudWatch registros para ver la función de rotación.

Compruebe que su aplicación funciona según lo esperado con el secreto rotado.

## Siguientes pasos
<a name="hardcoded-db-creds_nextsteps"></a>

A continuación, algunas ideas a tener en cuenta después de eliminar un secreto codificado de su código:
+ Puede mejorar el rendimiento y reducir los costos almacenando secretos en caché. Para obtener más información, consulte [Obtenga secretos de AWS Secrets Manager](retrieving-secrets.md).
+ Puede elegir un programa de rotación diferente. Para obtener más información, consulte [Programación de rotación](rotate-secrets_schedule.md).
+ Para encontrar secretos codificados en sus aplicaciones de Java y Python, le recomendamos [Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html).