Uso de secretos para acceder a los puntos de conexión de AWS Database Migration Service - AWS Database Migration Service

Uso de secretos para acceder a los puntos de conexión de AWS Database Migration Service

Para AWS DMS, un secreto es una clave cifrada que se puede utilizar para representar un conjunto de credenciales de usuario para autenticar, mediante una autenticación secreta, la conexión a la base de datos de un punto de conexión de origen o destino compatible con AWS DMS. Para un punto de conexión de Oracle que también utiliza Oracle Automatic Storage Management (ASM), AWS DMS requiere un secreto adicional que represente las credenciales del usuario para acceder a Oracle ASM.

Puede crear el secreto o los secretos que AWS DMS necesita para la autenticación secreta mediante AWS Secrets Manager, un servicio para crear, almacenar y recuperar de forma segura las credenciales de acceso a las aplicaciones, los servicios y los recursos de TI en la nube y en las instalaciones. Esto incluye la posibilidad de rotar automáticamente y de forma periódica el valor secreto cifrado sin su intervención, lo que proporciona un nivel adicional de seguridad para las credenciales. La habilitación de la rotación del valor secreto en AWS Secrets Manager también garantiza que esta rotación del valor secreto se produzca sin que ello afecte a ninguna migración de bases de datos que se base en el secreto. Para autenticar de forma secreta una conexión a una base de datos de punto de conexión, cree un secreto cuya identidad o ARN asigne a SecretsManagerSecretId, que incluya en la configuración del punto de conexión. Para autenticar de forma secreta Oracle ASM como parte de un punto de conexión de Oracle, cree un secreto cuya identidad o ARN asigne a SecretsManagerOracleAsmSecretId, que incluya también en la configuración del punto de conexión.

nota

No puede utilizar las credenciales maestras administradas por Amazon RDS Aurora. Estas credenciales no incluyen información sobre el host o el puerto, que AWS DMS necesita para establecer las conexiones. En lugar de ello, cree un nuevo usuario y secreto. Para obtener información acerca de cómo crear un usuario y un secreto, consulte Uso de la AWS Management Console para crear un rol secreto y de acceso secreto a continuación.

Para obtener más información sobre AWS Secrets Manager, consulte ¿Qué es AWS Secrets Manager? en la Guía del usuario de AWS Secrets Manager.

AWS DMS admite la autenticación secreta para las siguientes bases de datos en las instalaciones o administradas por AWS en los puntos de conexión de origen y destino compatibles:

  • Amazon DocumentDB

  • IBM Db2 LUW

  • Microsoft SQL Server

  • MongoDB

  • MySQL

  • Oracle

  • PostgreSQL

  • Amazon Redshift

  • SAP ASE

Para conectarse a cualquiera de estas bases de datos, tiene la opción de ingresar uno de los siguientes conjuntos de valores, pero no ambos, como parte de la configuración del punto de conexión:

  • Valores de texto sin cifrar para autenticar la conexión a la base de datos mediante la configuración de UserName, Password, ServerName y Port. Para un punto de conexión de Oracle que también utiliza Oracle ASM, incluya valores de texto sin cifrar adicionales para autenticar ASM mediante la configuración de AsmUserName, AsmPassword y AsmServerName.

  • Autenticación secreta mediante valores para la configuración de SecretsManagerSecretId y SecretsManagerAccessRoleArn. En el caso de un punto de conexión de Oracle con Oracle ASM, incluya valores adicionales para la configuración de SecretsManagerOracleAsmSecretId y SecretsManagerOracleAsmAccessRoleArn. Los valores secretos de estos ajustes pueden incluir los siguientes para:

    • SecretsManagerSecretId: el nombre de recurso de Amazon (ARN) completo, el ARN parcial o el nombre descriptivo de un secreto que haya creado para el acceso a la base de datos del punto de conexión en AWS Secrets Manager.

    • SecretsManagerAccessRoleArn: el ARN de un rol de acceso secreto que ha creado en IAM para proporcionar acceso de AWS DMS a este secreto SecretsManagerSecretId en su nombre.

    • SecretsManagerOracleAsmSecretId: el nombre de recurso de Amazon (ARN) completo, el ARN parcial o el nombre descriptivo de un secreto que haya creado para el acceso de Oracle ASM en AWS Secrets Manager.

    • SecretsManagerOracleAsmAccessRoleArn: el ARN de un rol de acceso secreto que ha creado en IAM para proporcionar acceso de AWS DMS a este secreto SecretsManagerOracleAsmSecretId en su nombre.

    nota

    También puede utilizar un único rol de acceso secreto para proporcionar acceso de AWS DMS al secreto de SecretsManagerSecretId y al secreto de SecretsManagerOracleAsmSecretId. Si crea este único rol de acceso secreto para ambos secretos, asegúrese de asignar el mismo ARN para este rol de acceso a SecretsManagerAccessRoleArn y SecretsManagerOracleAsmAccessRoleArn. Por ejemplo, si el rol de acceso secreto para ambos secretos tiene su ARN asignado a la variable, ARN2xsecrets, puede establecer estas configuraciones de ARN de la siguiente manera:

    SecretsManagerAccessRoleArn = ARN2xsecrets; SecretsManagerOracleAsmAccessRoleArn = ARN2xsecrets;

    Para obtener más información sobre la creación de estos valores, consulte Uso de la AWS Management Console para crear un rol secreto y de acceso secreto.

Después de haber creado y especificado la configuración de punto de conexión secreta y de rol de acceso secreto necesaria para los puntos de conexión, actualice los permisos de las cuentas de usuario que ejecutarán la solicitud de la API CreateEndpoint o ModifyEndpoint con estos detalles de secretos. Asegúrese de que los permisos de estas cuentas incluyan el permiso IAM:GetRole del rol de acceso secreto y el permiso SecretsManager:DescribeSecret del rol secreto. AWS DMS requiere estos permisos para validar el rol de acceso y su secreto.

Suministro y comprobación de los permisos de usuario necesarios
  1. Inicie sesión en la AWS Management Console y abra la consola de AWS Identity and Access Management en https://console.aws.amazon.com/iam/.

  2. Elija Usuarios y, a continuación, seleccione el ID de usuario utilizado para realizar llamadas a la API CreateEndpoint y ModifyEndpoint.

  3. En la pestaña Permisos, elija {} JSON.

  4. Asegúrese de que el usuario tenga los permisos mostrados a continuación.

    { "Statement": [{ "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "SECRET_ACCESS_ROLE_ARN" }, { "Effect": "Allow", "Action": "secretsmanager:DescribeSecret", "Resource": "SECRET_ARN" } ] }
  5. Si el usuario no tiene esos permisos, agréguelos.

  6. Si utiliza un rol de IAM para realizar llamadas a la API de DMS, repita los pasos anteriores para el rol correspondiente.

  7. Abra un terminal y use la AWS CLI para validar que los permisos se concedan correctamente asumiendo el rol o el usuario descritos anteriormente.

    1. Valide el permiso del usuario en SecretAccessRole mediante el comando get-role de IAM.

      aws iam get-role --role-name ROLE_NAME

      Sustituya ROLE_NAME por el nombre de SecretsManagerAccessRole.

      Si el comando devuelve un mensaje de error, asegúrese de que los permisos se hayan otorgado correctamente.

    2. Valide el permiso del usuario en el secreto mediante el comando describe-secret de Secrets Manager.

      aws secretsmanager describe-secret --secret-id SECRET_NAME OR SECRET_ARN --region=REGION_NAME

      El usuario puede ser el nombre descriptivo, el ARN parcial o el ARN completo. Para obtener más información, consulte describe-secret.

      Si el comando devuelve un mensaje de error, asegúrese de que los permisos se hayan otorgado correctamente.

Uso de la AWS Management Console para crear un rol secreto y de acceso secreto

Puede usar la AWS Management Console para crear un secreto para la autenticación del punto de conexión y para crear la política y el rol que permitan a AWS DMS acceder al secreto en su nombre.

Creación de un secreto con la AWS Management Console que AWS DMS pueda usar para autenticar una base de datos para las conexiones de los puntos de conexión de origen y destino
  1. Inicie sesión en la AWS Management Console y abra la consola de AWS Secrets Manager en https://console.aws.amazon.com/secretsmanager/.

  2. Elija Almacenar un secreto nuevo.

  3. En Seleccionar tipo de secreto en la página Almacenar un nuevo secreto, elija Otro tipo de secretos y, a continuación, elija Texto no cifrado.

    nota

    Este es el único lugar en el que debe ingresar credenciales de texto sin cifrar para conectarse a la base de datos de punto de conexión a partir de ahora.

  4. En el campo Texto no cifrado:

    • Para un secreto cuya identidad asigne a SecretsManagerSecretId, ingrese la siguiente estructura JSON.

      { "username": db_username, "password": db_user_password, "port": db_port_number, "host": db_server_name }
      nota

      Esta es la lista mínima de miembros de JSON necesaria para autenticar la base de datos de puntos de conexión. Puede agregar cualquier configuración de punto de conexión de JSON adicional como miembros de JSON en minúsculas que desee. Sin embargo, AWS DMS ignora los miembros de JSON adicionales para la autenticación de puntos de conexión.

      Aquí, db_username es el nombre del usuario que accede a la base de datos, db_user_password es la contraseña del usuario de la base de datos, db_port_number es el número de puerto para acceder a la base de datos y db_server_name es el nombre (dirección) del servidor de la base de datos en la web, como en el siguiente ejemplo.

      { "username": "admin", "password": "some_password", "port": "8190", "host": "oracle101.abcdefghij.us-east-1.rds.amazonaws.com" }
    • Para un secreto cuya identidad asigne a SecretsManagerOracleAsmSecretId, ingrese la siguiente estructura JSON.

      { "asm_user": asm_username, "asm_password": asm_user_password, "asm_server": asm_server_name }
      nota

      Esta es la lista mínima de miembros de JSON necesaria para autenticar Oracle ASM para un punto de conexión de Oracle. También es la lista completa que puede especificar en función de la configuración de punto de conexión de Oracle ASM disponible.

      Aquí, asm_username es el nombre del usuario que accede a Oracle ASM, asm_user_password es la contraseña del usuario de Oracle ASM y asm_server_name es el nombre (dirección) del servidor de Oracle ASM en la web, incluido el puerto, como en el siguiente ejemplo.

      { "asm_user": "oracle_asm_user", "asm_password": "oracle_asm_password", "asm_server": "oracle101.abcdefghij.us-east-1.rds.amazonaws.com:8190/+ASM" }
  5. Seleccione una clave de cifrado de AWS KMS para cifrar el secreto. Puede aceptar la clave de cifrado predeterminada creada para el servicio por AWS Secrets Manager o seleccionar una clave de AWS KMS que cree.

  6. Especifique un nombre para hacer referencia a este secreto y una descripción opcional. Este es el nombre descriptivo que se utiliza como valor para SecretsManagerSecretId o SecretsManagerOracleAsmSecretId.

  7. Si desea habilitar la rotación automática en el secreto, debe seleccionar o crear una función de AWS Lambda con permiso para rotar las credenciales del secreto tal y como se describe. Sin embargo, antes de configurar la rotación automática para utilizar la función de Lambda, asegúrese de que los ajustes de configuración de la función agreguen los cuatro caracteres siguientes al valor de la variable de entorno EXCLUDE_CHARACTERS.

    ;.:+{}

    AWS DMS no permite estos caracteres en las contraseñas utilizadas para las credenciales de los puntos de conexión. Si configura la función de Lambda para excluirlos, evita que AWS Secrets Manager genere estos caracteres como parte de los valores de contraseña rotados. Después de configurar la rotación automática para usar la función de Lambda, AWS Secrets Manager rota inmediatamente el secreto para validar la configuración del secreto.

    nota

    En función de la configuración del motor de base de datos, es posible que la base de datos no recupere las credenciales rotadas. En este caso, debe reiniciar manualmente la tarea para actualizar las credenciales.

  8. Revise y guarde el secreto en AWS Secrets Manager. A continuación, puede buscar cada secreto por su nombre descriptivo en AWS Secrets Manager y, a continuación, recuperar el ARN secreto como el valor para SecretsManagerSecretId o SecretsManagerOracleAsmSecretId según corresponda para autenticar el acceso a la conexión de la base de datos de puntos de conexión y a Oracle ASM (si se utiliza).

Creación de la política de acceso del secreto y el rol para establecer SecretsManagerAccessRoleArn o SecretsManagerOracleAsmAccessRoleArn, que permita a AWS DMS acceder a AWS Secrets Manager para acceder al secreto correspondiente
  1. Inicie sesión en la AWS Management Console y abra la consola de AWS Identity and Access Management (IAM) en https://console.aws.amazon.com/iam/.

  2. Elija Políticas, después elija Crear política.

  3. Elija JSON e ingrese la siguiente política para permitir el acceso al secreto y el descifrado del secreto.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": secret_arn, }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey" ], "Resource": kms_key_arn, } ] }

    Aquí, secret_arn es el ARN del secreto, que puede obtener de SecretsManagerSecretId o SecretsManagerOracleAsmSecretId según corresponda y kms_key_arn es el ARN de la clave de AWS KMS que utiliza para cifrar el secreto, como en el siguiente ejemplo.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:us-east-2:123456789012:secret:MySQLTestSecret-qeHamH" }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-east-2:123456789012:key/761138dc-0542-4e58-947f-4a3a8458d0fd" } ] }
    nota

    Si utiliza la clave de cifrado predeterminada creada por AWS Secrets Manager, no tiene que especificar los permisos de AWS KMS para kms_key_arn.

    Si desea que la política proporcione acceso a ambos secretos, simplemente especifique un objeto de recurso JSON adicional para el otro secret_arn.

    Si el secreto está en una cuenta diferente, el rol SecretsManagerAccessRoleArn necesita una política adicional para verificar el secreto entre cuentas. Para estos casos de uso, agregue la acción secretsmanager:DescribeSecret a la política. Para obtener más información sobre cómo configurar un secreto entre cuentas, consulte Permisos para acceder a los secretos de AWS Secrets Manager para los usuarios de una cuenta diferente.

  4. Revise y cree la política con un nombre descriptivo y una descripción opcional.

  5. Elija Roles, después elija Crear rol.

  6. Elija Servicio de AWS como tipo de entidad de confianza.

  7. Elija DMS de la lista de servicios como servicio de confianza y, a continuación, elija Siguiente: Permisos.

  8. Busque y adjunte la política que creó en el paso 4 y, a continuación, agregue las etiquetas que desee y revise el rol. En este punto, edite las relaciones de confianza del rol para usar la entidad principal de servicio regional de AWS DMS como entidad de confianza. Esta entidad principal tiene el formato siguiente.

    dms.region-name.amazonaws.com

    Aquí, region-name es el nombre de la región, por ejemplo us-east-1. Por lo tanto, le sigue una entidad principal de servicio regional de AWS DMS para esta región.

    dms.us-east-1.amazonaws.com
  9. Tras editar la entidad de confianza para el rol, cree el rol con un nombre descriptivo y una descripción opcional. Ahora puede buscar el nuevo rol por su nombre descriptivo en IAM y, a continuación, recuperar el ARN del rol como valor SecretsManagerAccessRoleArn o SecretsManagerOracleAsmAccessRoleArn para autenticar la conexión de base de datos de puntos de conexión.

Uso de Secrets Manager con una instancia de replicación en una subred privada
  1. Cree un punto de conexión de VPC de administrador de secretos y anote el DNS del punto de conexión. Para obtener más información sobre la creación de un punto de conexión de VPC de Secrets Manager, consulte Conexión a Secrets Manager a través de un punto de conexión de VPC en la Guía del usuario de AWS Secrets Manager.

  2. Adjunte el grupo de seguridad de la instancia de replicación al punto de conexión de VPC del mánager de secretos.

  3. Para las reglas de salida del grupo de seguridad de la instancia de replicación, permita que todo el tráfico llegue al destino 0.0.0.0/0.

  4. Establezca el atributo de conexión adicional de punto de conexión, secretsManagerEndpointOverride=secretsManager endpoint DNS para proporcionar el DNS de punto de conexión de VPC del mánager secreto, como se muestra en el siguiente ejemplo.

    secretsManagerEndpointOverride=vpce-1234a5678b9012c-12345678.secretsmanager.eu-west-1.vpce.amazonaws.com