Prácticas recomendadas de seguridad para Amazon SNS
En AWS, se proporcionan muchas características de seguridad para Amazon SNS. Revise estas características de seguridad en el contexto de su propia política de seguridad.
nota
Las instrucciones para estas características de seguridad se aplican a los casos de uso comunes y a las implementaciones. Le sugerimos que revise estas prácticas recomendadas en el contexto de su caso de uso, arquitectura y modelo de amenaza concretos.
Prácticas recomendadas preventivas
A continuación, se indican las prácticas recomendadas de seguridad preventiva para Amazon SNS.
Temas
Asegúrese de que los temas no sean accesibles de forma pública
A menos que requiera explícitamente que alguien en Internet pueda leer o escribir en su tema de Amazon SNS, debe asegurarse de que no se pueda acceder a este de manera pública (accesible para todos o para ningún usuario de AWS autenticado).
-
Evite la creación de políticas con
Principalestablecido en"". -
Evite usar un carácter comodín (
*). En su lugar, designe a un usuario o usuarios específicos.
Implementación del acceso a los privilegios mínimos
Cuando concede permisos, decide quién los recibe, para qué temas son los permisos y las acciones específicas de la API que desea permitir en estos temas. La aplicación del principio de privilegios mínimos es importante para reducir los riesgos de seguridad. También ayuda a reducir el efecto negativo de los errores o intenciones maliciosas.
Siga el consejo de seguridad estándar de concesión del privilegio mínimo. Es decir, conceda solo los permisos necesarios para realizar una tarea específica. Puede implementar los privilegios mínimos mediante una combinación de políticas de seguridad relacionadas con el acceso de los usuarios.
Amazon SNS utiliza el modelo de editor-suscriptor, que requiere tres tipos de acceso a la cuenta de usuario:
-
Administradores: acceso a la creación, modificación y eliminación de temas. Los administradores también controlan las políticas de temas.
-
Publicadores: acceso al envío de mensajes a los temas.
-
Suscriptores: acceso a la suscripción a los temas.
Para obtener más información, consulte las siguientes secciones:
Uso de roles de IAM para aplicaciones y servicios de AWS que requieren acceso a Amazon SNS
Para que aplicaciones o servicios de AWS, como Amazon EC2, obtengan acceso a temas de Amazon SNS, deben utilizar credenciales de AWS válidas en sus solicitudes a la API de AWS. Como estas credenciales no rotan automáticamente, no debe almacenar credenciales de AWS directamente en la aplicación ni en la instancia EC2.
Debe utilizar un rol de IAM para administrar de manera temporal credenciales para las aplicaciones o los servicios que necesiten acceder a Amazon SNS. Al utilizar un rol, no tiene que distribuir credenciales a largo plazo (como un nombre de usuario, una contraseña y claves de acceso) a una instancia EC2 o un servicio de AWS como AWS Lambda. En vez de ello, el rol proporciona permisos temporales que las aplicaciones pueden utilizar al realizar llamadas a otros recursos de AWS.
Para obtener más información, consulte Roles de IAM y Situaciones habituales con los roles: usuarios, aplicaciones y servicios en la Guía del usuario de IAM.
Implementación del cifrado en el servidor
Para mitigar los problemas de fuga de datos, utilice el cifrado en reposo para cifrar sus mensajes mediante una clave almacenada en una ubicación distinta de la ubicación en la que se almacenan los mensajes. Con el cifrado del lado del servidor (SSE), se proporciona cifrado de datos en reposo. Amazon SNS cifra sus datos a nivel de mensaje cuando los almacena y descifra los mensajes para usted cuando accede a ellos. SSE utiliza claves administradas en AWS Key Management Service. Siempre que autentique su solicitud y tenga permisos de acceso, no existe diferencia alguna entre obtener acceso a los temas cifrados y sin cifrar.
Para obtener más información, consulte Protección de los datos de Amazon SNS con cifrado del servidor y Administración de las claves de cifrado y los costos de Amazon SNS.
Aplicación del cifrado de los datos en tránsito
Es posible, pero no se recomienda, publicar mensajes que no están cifrados durante el tránsito mediante HTTP. Sin embargo, cuando un tema se cifra en reposo mediante AWS KMS, es necesario utilizar HTTPS para publicar los mensajes a fin de garantizar el cifrado tanto en reposo como en tránsito. Aunque el tema no rechaza automáticamente los mensajes HTTP, es necesario usar HTTPS para mantener los estándares de seguridad.
AWS recomienda que utilice HTTPS en lugar de HTTP. Cuando utiliza HTTPS, los mensajes se cifran de manera automática durante el tránsito, incluso si el tema de SNS no está cifrado. Sin HTTPS, un atacante basado en red puede espiar el tráfico de la red o manipularlo, con un ataque como MTM (man-in-the-middle).
Para imponer solo conexiones cifradas a través de HTTPS, agregue la condición aws:SecureTransport en la política de IAM adjunta a temas de SNS no cifrados. De esta manera, los publicadores utilizan HTTPS en lugar de HTTP. Puede utilizar la política de ejemplo siguiente como guía:
Considere el uso de puntos de enlace de la VPC para obtener acceso a Amazon SNS
Si tiene temas con los que debe poder interactuar pero que no deben estar expuestos a Internet, utilice los puntos de enlace de la VPC para poner en la cola el acceso solo a los hosts dentro de una VPC concreta. Puede utilizar las políticas de temas para controlar el acceso a los temas desde determinados puntos de enlace de Amazon VPC específicos o desde VPC específicas.
Los puntos de enlace de la VPC de Amazon SNS brindan dos maneras de controlar el acceso a los mensajes:
-
Puede controlar qué solicitudes, usuarios o grupos obtienen acceso a través de un punto de conexión de la VPC específico.
-
Puede controlar qué VPC o puntos de enlace de la VPC tienen acceso a su tema con una política de temas.
Para obtener más información, consulte Creación del punto de enlace y Creación de una política de punto de enlace de la VPC para Amazon SNS.
Asegúrese de que las suscripciones no están configuradas para entregar en puntos de enlace HTTP sin procesar
Evite configurar suscripciones para entregarlas a puntos de enlace HTTP sin procesar. Siempre tiene suscripciones que se entregan a un nombre de dominio de punto de enlace. Por ejemplo, una suscripción configurada para entregar a un punto de enlace http://1.2.3.4/my-path debe cambiarse a http://my.domain.name/my-path.
Exigencia de la autenticación al cancelar la suscripción
A menos que tenga que permitir la cancelación de la suscripción sin autenticar, como en los casos de cancelación de la suscripción sencilla por correo electrónico o SMS, debe aplicar la autenticación para cancelar la suscripción a un tema. Esto está en consonancia con la recomendación de control de acceso con privilegios mínimos.
Puede establecer AuthenticateOnUnsubscribe en True mientras confirma una suscripción. Si no se establece el indicador AuthenticateOnUnsubscribe en True al confirmar una suscripción a Amazon SNS, es posible que las solicitudes de cancelación de suscripción se acepten, incluso si no están autenticadas. Para obtener más información, consulte la referencia de la API de Amazon SNS para ConfirmSubscription o el ejemplo de Python en la biblioteca de detectores de Amazon Q.
Por ejemplo, para confirmar una suscripción por correo electrónico mediante la AWS CLI, copie el enlace del texto “Confirmar suscripción” de la notificación por correo electrónico. Esa URL le proporcionará la información necesaria para llamar al comando de la AWS CLI a continuación.
aws sns confirm-subscription --region us-west-2 \ --topic-arn sns-topic-arn \ --token token-from-subscribe-notification \ --authenticate-on-unsubscribe true
Donde:
-
aws-region es la región de AWS en la que se encuentra el tema. Esto también está disponible en el ARN del tema.
-
sns-topic-arn es el ARN del tema. Este es el texto que aparece después de “TopicArn=” y antes de “&Token” en la URL de confirmación de la suscripción.
-
token-from-subscribe-notification es la cadena UUID que aparece después de “Token=” y antes de “&Endpoint” en la URL de confirmación de la suscripción.
A continuación se muestra un ejemplo de URL:
https://sns.us-west-2.amazonaws.com/confirmation.html?TopicArn=arn:aws:sns:us-west-2:123456789012:sns-topic&Token=a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1&Endpoint=email@address.com