Uso de políticas basadas en identidades con Amazon SNS - Amazon Simple Notification Service

Uso de políticas basadas en identidades con Amazon SNS

Amazon Simple Notification Service se integra con AWS Identity and Access Management (IAM) para que pueda especificar qué acciones de Amazon SNS puede realizar un usuario en su Cuenta de AWS con recursos de Amazon SNS. Puede especificar un tema determinado de la política. Por ejemplo, puede utilizar variables cuando crea una política de IAM a fin de conceder permiso a determinados usuarios de su organización para utilizar la acción Publish en temas específicos de su Cuenta de AWS. Para obtener más información, consulte Variables de las políticas en la Guía del usuario de IAM.

importante

El uso de Amazon SNS con IAM no cambia la forma de utilizar Amazon SNS. No hay cambios en las acciones de Amazon SNS ni acciones nuevas de Amazon SNS relacionados con los usuarios y el control de acceso.

Para ver ejemplos de políticas que abarcan acciones y recursos de Amazon SNS, consulte Ejemplos de políticas para Amazon SNS.

Uso en conjunto de políticas y roles de IAM y Amazon SNS

Las políticas de IAM se utilizan para restringir el acceso de los usuarios a acciones y temas de Amazon SNS. Una política de IAM puede restringir el acceso únicamente a los usuarios de su cuenta de AWS y denegárselo a los usuarios de otras Cuentas de AWS.

Puede utilizar una política de Amazon SNS con un tema determinado para restringir quién puede trabajar en ese tema (por ejemplo, quién puede publicar mensajes en el tema, quién puede suscribirse al tema, etcétera). Las políticas de Amazon SNS pueden conceder acceso a otras Cuentas de AWS o a usuarios dentro de su propiaCuenta de AWS.

Con el fin de otorgar a sus usuarios permisos para sus temas de Amazon SNS, puede utilizar políticas de IAM, políticas de Amazon SNS o ambas. La mayoría de las veces, puede conseguir los mismos resultados con ambas. Por ejemplo, en el siguiente diagrama se muestra una política de IAM y una política de Amazon SNS equivalentes. La política de IAM permite la acción Subscribe de Amazon SNS para el tema llamado topic_xyz en su Cuenta de AWS. Esta política está asociada a los usuarios Bob y Susan (lo que significa que Bob y Susan tienen los permisos que se indican en la política). Con la política de Amazon SNS, también se les concede a Bob y Susan permiso para obtener acceso a Subscribe en relación con topic_xyz.

Compara una política de IAM y una política de Amazon SNS, y muestra que ambas políticas conceden permisos equivalentes a dos usuarios, Bob y Susan, lo que les permite suscribirse a un tema específico de Amazon SNS dentro de una Cuenta de AWS. La diferencia clave resaltada es que las políticas de Amazon SNS pueden conceder permisos a los usuarios de diferentes Cuentas de AWS, mientras que las políticas de IAM no pueden.
nota

En el ejemplo anterior se muestran políticas sencillas sin condiciones. Puede especificar una condición determinada en cualquiera de las dos políticas y obtener el mismo resultado.

Hay una diferencia entre las políticas de Amazon SNS e IAM de AWS: con el sistema de políticas de Amazon SNS, se pueden conceder permisos a otras Cuentas de AWS, mientras que en la política de IAM no.

Basándose en sus necesidades, decida el uso que quiere hacer de ambos sistemas para administrar los permisos. Los siguientes ejemplos muestran cómo funcionan conjuntamente los dos sistemas de política.

ejemplo 1

En este ejemplo, se aplica a Bob tanto una política de IAM como una política de Amazon SNS. Con la política de IAM, se le concede el permiso para Subscribe en cualquier tema de la Cuenta de AWS, mientras que en la política de Amazon SNS se le concede el permiso para utilizar Publish en un tema específico (topic_xyz). El siguiente diagrama ilustra este concepto.

Muestra cómo se aplican al usuario Bob tanto una política de IAM como una política de Amazon SNS: la política de IAM le permite suscribirse a cualquier tema de la Cuenta de AWS y la política de Amazon SNS le concede permiso para publicar mensajes en un tema específico llamado “topic_xyz”. El diagrama hace hincapié en la distinción entre los permisos generales concedidos por la política de IAM y los permisos específicos concedidos por la política de Amazon SNS para un tema concreto.

Si Bob quiere enviar una solicitud de suscripción a cualquier tema de la cuenta de AWS, la política de IAM permitirá la acción. Si Bob quiere enviar una solicitud para publicar un mensaje en topic_xyz, la política de Amazon SNS permitirá la acción.

ejemplo 2

En este ejemplo, nos basamos en el ejemplo 1 (en el que se aplican dos políticas a Bob). Supongamos que Bob publica mensajes en topic_xyz que no debería haber publicado y usted decide quitarle por completo su capacidad para publicar en temas. Para ello, lo más fácil es agregar una política de IAM que le deniegue acceso a la acción Publish en todos los temas. Esta tercera política anula la política de Amazon SNS que anteriormente le daba permiso para publicar en topic_xyz, ya que una denegación explícita siempre anula una instrucción “permitir” (para obtener más información sobre la lógica de evaluación de políticas, consulte Lógica de evaluación). El siguiente diagrama ilustra este concepto.

Ilustración que muestra que al añadir una política de IAM que deniegue la acción “Publish” para todos los temas, se puede invalidar una política de Amazon SNS existente que permitía al usuario Bob publicar en un tema específico, “topic_xyz”. La política de denegación de IAM prevalece sobre la política de Amazon SNS, lo que impide a Bob publicar en cualquier tema, incluido “topic_xyz”.

Para ver ejemplos de políticas que abarcan acciones y recursos de Amazon SNS, consulte Ejemplos de políticas para Amazon SNS.

Formato de ARN de recursos de Amazon SNS

Para Amazon SNS, los temas son el único tipo de recurso que puede especificar en una política. A continuación se muestra el formato de nombre de recurso de Amazon (ARN) para los temas.

arn:aws:sns:region:account_ID:topic_name

Para obtener más información sobre los ARN, vaya a ARN en la Guía del usuario de IAM.

A continuación, se muestra el ARN de un tema denominado MiTema de la región us-east-2, que pertenece a Cuenta de AWS 123456789012.

arn:aws:sns:us-east-2:123456789012:MyTopic

Si tuviera un tema denominado MiTema en cada una de las diferentes regiones que Amazon SNS admite, podría especificar los temas con el siguiente ARN.

arn:aws:sns:*:123456789012:MyTopic

Puede utilizar los caracteres comodín * e ? en el nombre del tema. Por ejemplo, el ejemplo siguiente podría hacer referencia a todos los temas creados por Bob a los que ha puesto el prefijo bob_.

arn:aws:sns:*:123456789012:bob_*

Para facilitarle su tarea, cuando crea un tema, Amazon SNS devuelve el ARN del tema en la respuesta.

Acciones de API de Amazon SNS

En una política de IAM, puede especificar cualquier acción que Amazon SNS ofrezca. Sin embargo, las acciones ConfirmSubscription y Unsubscribe no requieren autenticación, lo que significa que, incluso si especifica dichas acciones en una política, IAM no restringirá el acceso de los usuarios a estas acciones.

Cada acción que especifique en una política debe ir prefijada con la cadena en minúsculas sns:. Para especificar todas las acciones de Amazon SNS, utilizaría, por ejemplo, sns:*. Para obtener una lista de las acciones, vaya a la Referencia de la API de Amazon Simple Notification Service.

Claves de política de Amazon SNS

Amazon SNS implementa las siguientes claves de política en todo AWS, además de algunas claves específicas del servicio.

Para obtener una lista de las claves de condición que admite cada Servicio de AWS, consulte Acciones, recursos y claves de condición para Servicios de AWS en la Guía del usuario de IAM. Para obtener una lista de claves de condición que pueden utilizarse en múltiples Servicios de AWS, consulte Claves de contexto de condición global de AWS en la Guía del usuario de IAM.

Amazon SNS utiliza las siguientes claves específicas de servicio. Utilice estas claves en políticas que restringen el acceso a solicitudes Subscribe.

  • sns:Endpoint: la URL, la dirección de correo electrónico o el ARN de una solicitud Subscribe o una suscripción confirmada anteriormente. Utilícela con las condiciones de la cadena (consulte Ejemplos de políticas para Amazon SNS) para restringir el acceso a puntos de enlace específicos (por ejemplo, *@yourcompany.com).

  • sns:Protocol: el valor protocol de una solicitud Subscribe o de una suscripción confirmada anteriormente. Utilícela con las condiciones de la cadena (consulte Ejemplos de políticas para Amazon SNS) para restringir la publicación en protocolos de entrega (por ejemplo, https).

Ejemplos de políticas para Amazon SNS

En esta sección, se muestran varias políticas sencillas para controlar el acceso de los usuarios a Amazon SNS.

nota

En el futuro, Amazon SNS podría agregar nuevas acciones que deberán, lógicamente, incluirse en una de las políticas siguientes, en función de los objetivos indicados en esta.

ejemplo 1: Permitir a un grupo crear y administrar temas

En este ejemplo, creamos una política que concede acceso a CreateTopic, ListTopics, SetTopicAttributes y DeleteTopic.

{ "Statement": [{ "Effect": "Allow", "Action": ["sns:CreateTopic", "sns:ListTopics", "sns:SetTopicAttributes", "sns:DeleteTopic"], "Resource": "*" }] }
ejemplo 2: Permitir que el grupo de TI publique mensajes en un tema determinado

En este ejemplo, creamos un grupo de TI y asignamos una política que concede acceso a Publish en el tema de interés específico.

{ "Statement": [{ "Effect": "Allow", "Action": "sns:Publish", "Resource": "arn:aws:sns:*:123456789012:MyTopic" }] }
ejemplo 3: Conceder a los usuarios de la Cuenta de AWS capacidad para suscribirse a temas

En este ejemplo, creamos una política que concede acceso a la acción Subscribe, con condiciones de coincidencia de la cadena para las claves de política sns:Protocol y sns:Endpoint.

{ "Statement": [{ "Effect": "Allow", "Action": ["sns:Subscribe"], "Resource": "*", "Condition": { "StringLike": { "sns:Endpoint": "*@example.com" }, "StringEquals": { "sns:Protocol": "email" } } }] }
ejemplo 4: Permitir a un socio publicar mensajes en un tema determinado

Puede utilizar una política de Amazon SNS o una política de IAM para permitir a un socio publicar en un tema concreto. Si el socio tiene una Cuenta de AWS, puede que sea más fácil utilizar una política de Amazon SNS. Sin embargo, cualquier usuario de la empresa del socio que posea las credenciales de seguridad de AWS puede publicar mensajes en el tema. En este ejemplo se presupone que quiere limitar el acceso a una determinada persona (o aplicación). Para ello, debe tratar al socio como un usuario de su propia compañía y utilizar una política de IAM en vez de una política de Amazon SNS.

En este ejemplo, creamos un grupo denominado WidgetCo que representa a la compañía del socio; creamos un usuario para la persona (o la aplicación) específica en la compañía de la empresa que necesita el acceso y, a continuación, incluimos el usuario en el grupo.

Después asociamos una política que concede al grupo el acceso Publish para el tema específico denominado WidgetPartnerTopic.

También queremos evitar que el grupo WidgetCo ejecute cualquier otra acción en los temas, por lo que agregamos una instrucción que deniega el permiso para ejecutar cualquier acción de Amazon SNS que no sea Publish en los temas que no sean WidgetPartnerTopic. Este paso es necesario solo si existe una política amplia en cualquier otra parte del sistema que concede a los usuarios un acceso amplio a Amazon SNS.

{ "Statement": [{ "Effect": "Allow", "Action": "sns:Publish", "Resource": "arn:aws:sns:*:123456789012:WidgetPartnerTopic" }, { "Effect": "Deny", "NotAction": "sns:Publish", "NotResource": "arn:aws:sns:*:123456789012:WidgetPartnerTopic" } ] }

Políticas de Amazon SNS para puntos de conexión de correo electrónico

Amazon SNS normaliza las direcciones de correo electrónico en las políticas de acceso a los puntos de conexión eliminando los espacios en blanco iniciales y finales, convirtiendo todos los caracteres a minúsculas y normalizando los caracteres especiales y las secuencias de escape. Por ello, debe utilizar direcciones de correo electrónico en minúsculas en las definiciones de sus políticas para garantizar que las solicitudes de suscripción coincidan debidamente.

Ejemplo de política:

{ "Condition": { "StringEquals": { "sns:Endpoint": "user.name@example.com" } } }

Las siguientes direcciones de correo electrónico cumplen la condición anterior:

  • user.name@example.com

  • USER.NAME@EXAMPLE.COM

  • User.N\ame@Example.com

Políticas de Amazon SNS para puntos de conexión de HTTP/HTTPs

Amazon SNS normaliza los puntos de conexión de HTTP/HTTPs en las políticas de acceso de los puntos de conexión al convertir el esquema y el nombre de host a minúsculas y, al mismo tiempo, conservando exactamente el puerto, la ruta, los parámetros de consulta y los fragmentos. Por ello, debe utilizar el nombre de host y el esquema en minúsculas en las definiciones de sus políticas para garantizar la coincidencia correcta de las solicitudes de suscripción.

{ "Condition": { "StringEquals": { "sns:Endpoint": "https://example.com:443/path?A=B" } } }

Los siguientes HTTP/HTTPs cumplen la condición anterior:

  • HTTPS://EXAMPLE.COM:443/path?A=B

  • HTTPS://example.com:443/path?A=B

  • HTTPS://ExAmPlE.cOm:443/path?A=B