Especificación de los signatarios que pueden crear URL firmadas y cookies firmadas - Amazon CloudFront

Especificación de los signatarios que pueden crear URL firmadas y cookies firmadas

Para crear URL firmadas o cookies firmadas, necesita un signatario. Un signatario es un grupo de claves de confianza que se crea en CloudFront o una cuenta de AWS que contiene un par de claves de CloudFront. Le recomendamos que utilice grupos de claves de confianza con URL firmadas y cookies firmadas. Para obtener más información, consulte Elección entre grupos de claves de confianza (recomendado) y Cuentas de AWS.

El signatario tiene dos fines:

  • Tan pronto como agregue el signatario a la distribución, CloudFront comienza a requerir que los lectores utilicen URL firmadas o cookies firmadas para acceder a los archivos.

  • Al crear URL firmadas o cookies firmadas, se utiliza la clave privada del par de claves del signatario para firmar una parte de la URL o la cookie. Cuando alguien solicita un archivo restringido, CloudFront compara la firma de la URL o la cookie con la URL o la cookie sin firmar, para verificar que no se ha manipulado. CloudFront también verifica que la URL o la cookie sean válidas, es decir, por ejemplo, que la fecha y la hora de vencimiento no han pasado todavía.

Cuando se especifica un signatario, también se especifican indirectamente los archivos que requieren URL firmadas o cookies firmadas al agregar el signatario a un comportamiento de la caché. Si la distribución solo dispone de un comportamiento de la caché, los lectores deben utilizar URL o cookies firmadas para acceder a cualquier archivo de la distribución. Si crea varios comportamientos de la caché y agrega signatarios a algunos de ellos pero no a otros, puede exigir que los lectores utilicen URL o cookies firmadas para acceder a algunos archivos y no a otros.

Para especificar los signatarios (las claves privadas) autorizados para crear URL firmadas o cookies firmadas y para agregar los signatarios a la distribución de CloudFront, realice las siguientes tareas:

  1. Decida si desea utilizar un grupo de claves de confianza o una Cuenta de AWS como firmante. Recomendamos utilizar un grupo de claves de confianza. Para obtener más información, consulte Elección entre grupos de claves de confianza (recomendado) y Cuentas de AWS.

  2. Para el signatario que eligió en el paso 1, cree un par de claves privadas-públicas. Para obtener más información, consulte Creación de pares de claves para los firmantes.

  3. Si utiliza .NET o Java para crear URL firmadas o cookies firmadas, vuelva a formatear la clave privada. Para obtener más información, consulte Volver a formatear la clave privada (solo .NET y Java).

  4. En la distribución para la que va a crear URL firmadas o cookies firmadas, especifique el signatario. Para obtener más información, consulte Agregación de un firmante a una distribución.

Elección entre grupos de claves de confianza (recomendado) y Cuentas de AWS

Para utilizar URL firmadas o cookies firmadas, necesita un signatario. Un firmante es un grupo de claves de confianza que se crea en CloudFront o una Cuenta de AWS que contiene un par de claves de CloudFront. Se recomienda utilizar grupos de claves de confianza, por los siguientes motivos:

  • Con los grupos de claves de CloudFront no es necesario usar el usuario raíz de la cuenta de AWS para administrar las claves públicas de las URL firmadas y las cookies firmadas de CloudFront. Las prácticas recomendadas de AWS indican no utilizar el usuario raíz cuando no es necesario.

  • Con los grupos de claves de CloudFront, puede administrar claves públicas, grupos de claves y signatarios de confianza mediante la API de CloudFront. Puede usar la API para automatizar la creación de claves y la rotación de claves. Cuando se utiliza el usuario raíz de AWS, se debe utilizar la AWS Management Console para administrar pares de claves de CloudFront, de modo que no se puede automatizar el proceso.

  • Dado que puede administrar grupos de claves con la API de CloudFront, también puede utilizar las políticas de permisos de AWS Identity and Access Management (IAM) para limitar lo que los distintos usuarios pueden hacer. Por ejemplo, puede permitir a los usuarios cargar claves públicas, pero no eliminarlas. También puede permitir que los usuarios eliminen claves públicas, pero solo cuando se cumplen ciertas condiciones, como el uso de la autenticación multifactor, el envío de la solicitud desde una red determinada o el envío de la solicitud dentro de un intervalo de fecha y hora determinado.

  • Con los grupos de claves de CloudFront, puede asociar un número mayor de claves públicas con la distribución de CloudFront, lo que le concede más flexibilidad en la forma de usar y administrar las claves públicas. De forma predeterminada, puede asociar hasta cuatro grupos de claves con una sola distribución y puede tener hasta cinco claves públicas en un grupo de claves.

    Cuando utiliza el usuario raíz de la cuenta de AWS para administrar pares de claves de CloudFront, solo puede tener hasta dos pares de claves activos de CloudFront por cuenta de AWS.

Creación de pares de claves para los firmantes

Cada signatario que utilice para crear URL firmadas o cookies firmadas de CloudFront debe tener un par de claves públicas-privadas. El signatario utiliza la clave privada para firmar la URL o las cookies y CloudFront utiliza la clave pública para comprobar la firma.

La forma en que se crea un par de claves depende de si se utiliza un grupo de claves de confianza como el signatario (recomendado) o un par de claves de CloudFront. Para obtener más información, consulte las siguientes secciones. El par de claves que cree debe cumplir los siguientes requisitos:

  • Debe ser un par de claves SSH-2 RSA.

  • Debe encontrarse en formato PEM codificado en Base64.

  • Debe ser un par de claves de 2048 bits.

Para ayudar a proteger las aplicaciones, le recomendamos que cambie los pares de claves periódicamente. Para obtener más información, consulte Rotación de pares de claves.

Crear un par de claves para un grupo de claves de confianza (recomendado)

Para crear un par de claves para un grupo de claves de confianza, realice los siguientes pasos:

  1. Cree el par de claves públicas-privadas.

  2. Cargue la clave pública en CloudFront.

  3. Agregue la clave pública a un grupo de claves de CloudFront.

Para obtener más información, consulte los siguientes procedimientos.

Para crear un par de claves
nota

En los siguientes pasos se utiliza OpenSSL como ejemplo de una forma de crear un par de claves. Hay muchas otras formas de crear un par de claves RSA.

  1. El siguiente comando de ejemplo utiliza OpenSSL para generar un par de claves RSA con una longitud de 2048 bits y guardarlo en el archivo denominado private_key.pem.

    openssl genrsa -out private_key.pem 2048
  2. El archivo resultante contiene tanto la clave pública como la privada. El siguiente comando de ejemplo extrae la clave pública del archivo denominado private_key.pem.

    openssl rsa -pubout -in private_key.pem -out public_key.pem

    Se carga la clave pública (en el archivo public_key.pem) más adelante, en el siguiente procedimiento.

Para cargar la clave pública en CloudFront
  1. Inicie sesión en la AWS Management Console y abra la consola de CloudFront en https://console.aws.amazon.com/cloudfront/v4/home.

  2. En el menú de navegación, elija Claves públicas.

  3. Elija Crear clave pública.

  4. En la ventana Crear clave pública, haga lo siguiente:

    1. En Key name (Nombre de la clave), escriba un nombre para identificar la clave pública.

    2. En Key value (Valor de clave), pegue la clave pública. Si ha seguido los pasos del procedimiento anterior, la clave pública se encuentra en el archivo denominado public_key.pem. Para copiar y pegar el contenido de la clave pública, puede:

      • Use el comando cat en la línea de comandos de macOS o Linux, así:

        cat public_key.pem

        Copie el resultado de ese comando y péguelo en el campo Key value (Valor de clave).

      • Abra el archivo public_key.pem con un editor de texto sin formato como el Bloc de notas (en Windows) o TextEdit (en macOS). Copie el contenido del archivo y péguelo en el campo Key value (Valor de clave).

    3. (Opcional) En Comment (Comentario), agregue un comentario para describir la clave pública.

    Cuando haya terminado, elija Add (Agregar).

  5. Registre el ID de la clave pública. Lo usará más adelante cuando cree URL firmadas o cookies firmadas, como valor del campo Key-Pair-Id.

Para agregar la clave pública a un grupo de claves
  1. Abra la consola de CloudFront en https://console.aws.amazon.com/cloudfront/v4/home.

  2. En el menú de navegación, elija Grupos de claves.

  3. Elija Add key group (Agregar grupo de claves).

  4. En la página Create key group (Crear grupo de claves), haga lo siguiente:

    1. En Key group name (Nombre del grupo de claves), escriba un nombre para identificar el grupo de claves.

    2. (Opcional) En Comment (Comentario), escriba un comentario para describir el grupo de claves.

    3. En Public keys (Claves públicas), seleccione la clave pública que desea agregar al grupo de claves y, a continuación, elija Add (Agregar). Repita este paso para cada clave pública que desee agregar al grupo de claves.

  5. Elija Create key group (Crear grupo de claves).

  6. Registre el nombre del grupo de claves. Se utiliza más adelante para asociar el grupo de claves con un comportamiento de la caché en una distribución de CloudFront. (En la API de CloudFront, se utiliza el ID del grupo de claves para asociar el grupo de claves con un comportamiento de la caché).

importante

Se recomienda crear una clave pública para un grupo de claves de confianza en lugar de seguir estos pasos. Para obtener información sobre la forma recomendada de crear claves públicas para URL firmadas y cookies firmadas, consulte Crear un par de claves para un grupo de claves de confianza (recomendado).

Puede crear un par de claves de CloudFront de las siguientes maneras:

  • Crear un par de claves en la AWS Management Console y descargar la clave privada. Consulte el procedimiento siguiente.

  • Cree un par de claves RSA usando una aplicación como OpenSSL y, a continuación, cargue la clave pública en la AWS Management Console. Para obtener más información acerca de la creación de un par de claves RSA, consulte Crear un par de claves para un grupo de claves de confianza (recomendado).

Para crear pares de claves de CloudFront en la AWS Management Console
  1. Inicie sesión en la AWS Management Console con las credenciales del usuario raíz de la cuenta de AWS.

    importante

    Los usuarios de IAM no pueden crear pares de claves de CloudFront. Debe iniciar sesión con credenciales de usuario raíz para crear pares de claves.

  2. Elija el nombre de la cuenta y, a continuación, elija My Security Credentials (Mis credenciales de seguridad).

  3. Elija CloudFront key pairs (Pares de claves de CloudFront).

  4. Confirme que no tiene más de un par de claves activas. No se puede crear un par de claves si ya dispone de dos pares de claves activos.

  5. Elija Create New Key Pair (Crear un nuevo par de claves).

    nota

    También puede elegir crear su propio par de claves y cargar la clave pública. Los pares de claves de CloudFront admiten claves de 1024, 2048 o 4096 bits.

  6. En el cuadro de diálogo Create Key Pair (Crear par de claves), elija Download Private Key File (Descargar archivo de claves privadas) y, a continuación, guarde el archivo en el equipo.

    importante

    Guarde la clave privada del par de claves de CloudFront en un lugar seguro y establezca permisos en el archivo para que solo los administradores que usted decida puedan leerlo. Si alguien obtiene su clave privada, puede generar URL y cookies firmadas válidas y descargar su contenido. No podrá obtener la clave privada de nuevo, por lo que si la pierde o la elimina, deberá crear un nuevo par de claves de CloudFront.

  7. Registre el ID de su par de claves. (En la AWS Management Console, esto se denomina Access Key ID [ID de clave de acceso]). Lo utilizará al crear URL firmadas o cookies firmadas.

Volver a formatear la clave privada (solo .NET y Java)

Si utiliza .NET o Java para crear URL firmadas o cookies firmadas, no puede utilizar la clave privada del par de claves en el formato PEM predeterminado para crear la firma. En su lugar, haga lo siguiente:

  • .NET framework: convierte la clave privada en el formato XML que utiliza .NET Framework. Hay varias herramientas disponibles.

  • Java: convierte la clave privada en formato DER. Una forma de hacerlo es con el siguiente comando de OpenSSL. En el siguiente comando, private_key.pem es el nombre del archivo que contiene la clave privada con formato PEM y private_key.der es el nombre del archivo que contiene la clave privada con formato DER después de ejecutar el comando.

    openssl pkcs8 -topk8 -nocrypt -in private_key.pem -inform PEM -out private_key.der -outform DER

    Para asegurarse de que el codificador funciona correctamente, agregue el recurso JAR de la API de criptografía Java Bouncy Castle a su proyecto y, a continuación, agregue el proveedor Bouncy Castle.

Agregación de un firmante a una distribución

Un signatario es el grupo de claves de confianza (recomendado) o el par de claves de CloudFront que puede crear URL firmadas y cookies firmadas para una distribución. Para utilizar URL firmadas o cookies firmadas con una distribución de CloudFront, debe especificar un signatario.

Los signatarios se asocian con comportamientos de la caché. Esto le permite exigir URL firmadas o cookies firmadas para algunos archivos y no para otros dentro de la misma distribución. Una distribución requiere URL o cookies firmadas solo para los archivos asociados con los comportamientos de la caché correspondientes.

Del mismo modo, un signatario solo puede firmar URL o cookies para archivos asociados con los comportamientos de la caché correspondientes. Por ejemplo, si tiene un signatario para un comportamiento de la caché y un signatario diferente para un comportamiento de la caché diferente, ninguno de los dos signatarios puede crear URL o cookies firmadas para los archivos asociados con el otro comportamiento de la caché.

importante

Antes de agregar un signatario a la distribución, haga lo siguiente:

  • Defina cuidadosamente los patrones de ruta y la secuencia de los comportamientos de la caché para no conceder a los usuarios acceso no deseado al contenido o impedir que accedan al contenido que desea que esté disponible para todos.

    Supongamos que una solicitud coincide con el patrón de ruta de dos comportamientos de la caché. El primer comportamiento de la caché no requiere URL firmadas ni cookies firmadas y el segundo comportamiento de la caché sí. Los usuarios podrán acceder a los archivos sin usar URL ni cookies firmadas porque CloudFront procesa el comportamiento de la caché que está asociado con la primera coincidencia.

    Para obtener más información acerca de patones de rutas, consulte Patrón de ruta.

  • Para una distribución que ya utiliza para distribuir contenido, asegúrese de que está listo para comenzar a generar URL firmadas y cookies firmadas antes de agregar un signatario. Cuando se agrega un signatario, CloudFront rechaza las solicitudes que no incluyen una URL firmada o una cookie firmada válidas.

Puede agregar signatarios a la distribución utilizando la consola de CloudFront o la API de CloudFront.

Console

En los siguientes pasos se muestra cómo agregar un grupo de claves de confianza como signatario. También puede agregar una Cuenta de AWS como firmante de confianza, pero no es recomendable hacerlo.

Para agregar un signatario a una distribución mediante la consola
  1. Registre el ID del grupo de claves del grupo de claves que desea utilizar como signatario de confianza. Para obtener más información, consulte Crear un par de claves para un grupo de claves de confianza (recomendado).

  2. Abra la consola de CloudFront en https://console.aws.amazon.com/cloudfront/v4/home.

  3. Elija la distribución cuyos archivos desea proteger con URL firmadas o cookies firmadas.

    nota

    Para agregar un signatario a una distribución nueva, se especifica la misma configuración que se describe en el paso 6 al crear la distribución.

  4. Elija la pestaña Behaviors (Comportamientos).

  5. Seleccione el comportamiento de caché cuyo patrón de ruta coincida con los archivos que desea proteger con URL firmadas o cookies firmadas y, a continuación, elija Edit (Editar).

  6. En la página Edit Behavior (Editar comportamiento), haga lo siguiente:

    1. En Restrict Viewer Access (Use Signed URLs or Signed Cookies) (Restringir el acceso a lectores [mediante URL o cookies firmadas]), elija Yes (Sí).

    2. En Trusted Key Groups or Trusted Signer (Grupos de claves de confianza o signatario de confianza), elija Trusted Key Groups (Grupos de claves de confianza).

    3. En Trusted Key Groups (Grupos de claves de confianza), elija el grupo de claves que desea agregar y, a continuación, elija Add (Agregar). Repita el procedimiento si desea agregar más de un grupo de claves.

  7. Elija Yes, Edit (Sí, Editar) para actualizar el comportamiento de la caché.

API

Puede usar la API de CloudFront para agregar un grupo de claves de confianza como signatario. Puede agregar un signatario a una distribución existente o a una distribución nueva. En cualquier caso, deberá especificar los valores en el elemento TrustedKeyGroups.

También puede agregar una Cuenta de AWS como firmante de confianza, pero no es recomendable hacerlo.

Consulte los siguientes temas en la Referencia de la API de Amazon CloudFront:

Rotación de pares de claves

Se recomienda rotar periódicamente (cambiar) los pares de claves para las URL firmadas y las cookies firmadas. Para rotar pares de claves que utiliza para crear URL firmadas o cookies firmadas sin invalidar las URL o cookies que no hayan vencido todavía, realice las siguientes tareas:

  1. Cree un nuevo par de claves y agregue la clave pública a un grupo de claves. Para obtener más información, consulte Crear un par de claves para un grupo de claves de confianza (recomendado).

  2. Si ha creado un nuevo grupo de claves en el paso anterior, agregue el grupo de claves a la distribución como signatario.

    importante

    No elimine ninguna clave pública existente del grupo de claves ni ningún grupo de claves de la distribución todavía. Solo agregue los nuevos.

  3. Actualice la aplicación para crear firmas con la clave privada del nuevo par de claves. Confirme que las URL firmadas o las cookies firmadas con las nuevas claves privadas funcionan.

  4. Espere hasta que pase la fecha de vencimiento de las URL o las cookies firmadas con la clave privada anterior. A continuación, elimine la clave pública anterior del grupo de claves. Si ha creado un nuevo grupo de claves en el paso 2, elimine el grupo de claves anterior de la distribución.