Ejemplos de casos de control de acceso con Amazon SNS - Amazon Simple Notification Service

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.

Ejemplos de casos de control de acceso con Amazon SNS

En esta sección, se ofrecen algunos ejemplos de casos de uso habituales de control de acceso.

Conceder Cuenta de AWS acceso a un tema

Supongamos que tiene un tema en Amazon SNS y desea permitir que uno o varios de ellos Cuentas de AWS realicen una acción específica sobre ese tema, como publicar mensajes. Para ello, puede utilizar la acción de API de Amazon SNS AddPermission.

La AddPermission acción le permite especificar un tema, una lista de Cuenta de AWS IDs, una lista de acciones y una etiqueta. A continuación, Amazon SNS genera y añade automáticamente una nueva instrucción de política a la política de control de acceso del tema. No es necesario que escriba usted mismo la instrucción de política: Amazon SNS se encarga de ello por usted. Si necesita eliminar la política más adelante, puede hacerlo llamando a RemovePermission y proporcionando la etiqueta que utilizó al añadir el permiso.

Por ejemplo, si llamas al AddPermission tema arn:aws:sns:us-east- 2:444455556666:MyTopic, especificas el Cuenta de AWS ID 1111-2222-3333, la Publish acción y la etiquetagrant-1234-publish, Amazon SNS generará e insertará la siguiente declaración de política en la política de control de acceso del tema:

{ "Statement": [{ "Sid": "grant-1234-publish", "Effect": "Allow", "Principal": { "AWS": "111122223333" }, "Action": ["sns:Publish"], "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic" }] }

Tras añadir esta declaración, el 1111-2222-3333 tendrá permiso para publicar mensajes sobre el tema. Cuenta de AWS

Información adicional:

  • Administración de políticas personalizada: aunque AddPermission resulta práctico para conceder permisos, a menudo es útil administrar manualmente la política de control de acceso del tema en escenarios más complejos, como añadir condiciones o conceder permisos a roles de IAM o servicios específicos. Para ello, puede utilizar la API SetTopicAttributes para actualizar el atributo de política directamente.

  • Prácticas recomendadas de seguridad: Tenga cuidado al conceder permisos para asegurarse de que solo las entidades Cuentas de AWS o de confianza tengan acceso a sus temas de Amazon SNS. Revise y audite periódicamente las políticas adjuntas a sus temas para mantener la seguridad.

  • Límites de las políticas: tenga en cuenta que existen límites en cuanto al tamaño y la complejidad de las políticas de Amazon SNS. Si necesita añadir muchos permisos o condiciones complejas, asegúrese de que su política se mantenga dentro de estos límites.

Limitar las suscripciones a HTTPS

Para restringir el protocolo de entrega de notificaciones para su tema de Amazon SNS a HTTPS, debe crear una política personalizada. La acción AddPermission de Amazon SNS no le permite especificar restricciones de protocolo al conceder acceso a su tema. Por lo tanto, debe crear manualmente una política que imponga esta restricción y, a continuación, utilizar la acción SetTopicAttributes para aplicar la política a su tema.

A continuación, le explicamos cómo crear una política que limite las suscripciones a HTTPS:

  1. Escriba la política. La política debe especificar el ID de Cuenta de AWS al que desea conceder el acceso e imponer la condición de que solo se permitan las suscripciones HTTPS. A continuación, se muestra un ejemplo de política que concede a la Cuenta de AWS con el ID 1111-2222-3333 permiso para suscribirse al tema, pero solo si el protocolo utilizado es HTTPS.

    { "Statement": [{ "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "111122223333" }, "Action": ["sns:Subscribe"], "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringEquals": { "sns:Protocol": "https" } } }] }
  2. Aplique la política. Utilice la acción SetTopicAttributes de la API de Amazon SNS para aplicar esta política a su tema. Establezca el atributo Policy del tema en la política JSON que creó.

    snsClient.setTopicAttributes(SetTopicAttributesRequest.builder() .topicArn("arn:aws:sns:us-east-2:444455556666:MyTopic") .attributeName("Policy") .attributeValue(jsonPolicyString) // The JSON policy as a string .build());

Información adicional:

  • Personalización del control de acceso. Este enfoque le permite aplicar controles de acceso más detallados, como restringir los protocolos de suscripción, lo que no es posible solo con una acción AddPermission. Las políticas personalizadas ofrecen flexibilidad en situaciones que requieren condiciones específicas, como la aplicación de protocolos o las restricciones de direcciones IP.

  • Prácticas recomendadas de seguridad. Limitar las suscripciones a HTTPS mejora la seguridad de las notificaciones al garantizar que los datos en tránsito estén cifrados. Revise periódicamente las políticas de los temas para asegurarse de que cumplen sus requisitos de seguridad y conformidad.

  • Pruebas de la política. Antes de aplicar la política en un entorno de producción, pruébela en un entorno de desarrollo para asegurarse de que se comporta según lo previsto. Esto ayuda a evitar problemas de acceso accidental o restricciones no deseadas.

Publique en una cola de Amazon SQS.

Para publicar mensajes desde su tema de Amazon SNS en una cola de Amazon SQS, debe configurar los permisos correctos en la cola de Amazon SQS. Si bien tanto Amazon SNS como Amazon SQS AWS utilizan el lenguaje de políticas de control de acceso, debe establecer explícitamente una política en la cola de Amazon SQS para permitir el envío de mensajes desde el tema Amazon SNS.

Para ello, utilice la acción SetQueueAttributes para aplicar una política personalizada a la cola de Amazon SQS. A diferencia de Amazon SNS, Amazon SQS no admite la acción AddPermission para crear instrucciones de política con condiciones. Por lo tanto, debe escribir la política manualmente.

A continuación, se muestra un ejemplo de una política de Amazon SQS que concede permiso a Amazon SNS para enviar mensajes a la cola. Tenga en cuenta que esta política está asociada a la cola de Amazon SQS, no al tema de Amazon SNS. Las acciones especificadas son acciones de Amazon SQS y el recurso es el Nombre de recurso de Amazon (ARN) de la cola. Puede recuperar el ARN de la cola mediante la acción GetQueueAttributes.

{ "Statement": [{ "Sid": "Allow-SNS-SendMessage", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": ["sqs:SendMessage"], "Resource": "arn:aws:sqs:us-east-2:444455556666:MyQueue", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:sns:us-east-2:444455556666:MyTopic" } } }] }

Esta política utiliza la condición aws:SourceArn para restringir el acceso a la cola de SQS en función del origen de los mensajes que se envían. Esto garantiza que solo los mensajes que se originen en el tema de SNS especificado (en este caso, arn:aws:sns:us-east- 2:444455556666:) puedan entregarse a la cola. MyTopic

Información adicional:

  • ARN de la cola. Asegúrese de recuperar el ARN correcto de la cola de Amazon SQS mediante la acción GetQueueAttributes. Este ARN es esencial para establecer los permisos correctos.

  • Prácticas recomendadas de seguridad. Al configurar políticas, siga siempre el principio de privilegios mínimos. Conceda únicamente los permisos necesarios al tema Amazon SNS para interactuar con la cola de Amazon SQS y revise sus políticas periódicamente para asegurarse de que son seguras. up-to-date

  • Políticas predeterminadas en Amazon SNS. Amazon SNS no concede automáticamente una política predeterminada que permita a otras cuentas Servicios de AWS o a otras cuentas acceder a los temas recién creados. De forma predeterminada, los temas de Amazon SNS se crean sin permisos, lo que significa que son privados y solo puede acceder a ellos la cuenta que los creó. Para permitir el acceso a otras Servicios de AWS cuentas o entidades principales, debe definir y adjuntar de forma explícita una política de acceso al tema. Esto se ajusta al principio del privilegio mínimo, que garantiza que no se conceda ningún acceso no intencionado de forma predeterminada.

  • Pruebas y validación. Tras configurar la política, pruebe la integración publicando los mensajes en el tema Amazon SNS y verificando que se hayan entregado correctamente a la cola de Amazon SQS. Esto ayuda a confirmar que la política está configurada correctamente.

Permitir que las notificaciones de eventos de Amazon S3 publiquen en un tema

Para permitir que un bucket de Amazon S3 de otro Cuenta de AWS publique notificaciones de eventos en su tema de Amazon SNS, debe configurar la política de acceso del tema en consecuencia. Esto implica escribir una política personalizada que conceda permiso al servicio Amazon S3 desde la Cuenta de AWS específica y, a continuación, aplicar esta política a su tema de Amazon SNS.

Así es como se puede configurar:

  1. Escriba la política. La política debe conceder el servicio Amazon S3 (s3.amazonaws.com) los permisos necesarios para publicar en su tema de Amazon SNS. Utilizará la SourceAccount condición para asegurarse de que solo la persona especificada Cuenta de AWS, que es la propietaria del bucket de Amazon S3, pueda publicar notificaciones en su tema.

    A continuación se muestra un ejemplo de política:

    { "Statement": [{ "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:111122223333:MyTopic", "Condition": { "StringEquals": { "AWS:SourceAccount": "444455556666" } } }] }
    • Propietario del tema: 111122223333 es el Cuenta de AWS ID propietario del tema de Amazon SNS.

    • Propietario del bucket de Amazon S3: 444455556666 es el Cuenta de AWS ID propietario del bucket de Amazon S3 que envía las notificaciones.

  2. Aplique la política. Utilice la acción SetTopicAttributes para establecer esta política en su tema de Amazon SNS. Esto actualizará el control de acceso del tema para incluir los permisos especificados en su política personalizada.

    snsClient.setTopicAttributes(SetTopicAttributesRequest.builder() .topicArn("arn:aws:sns:us-east-2:111122223333:MyTopic") .attributeName("Policy") .attributeValue(jsonPolicyString) // The JSON policy as a string .build());

Información adicional:

  • Uso de la condición SourceAccount. La SourceAccount condición garantiza que solo los eventos que se originen en lo especificado Cuenta de AWS (444455556666 en este caso) puedan activar el tema de Amazon SNS. Se trata de una medida de seguridad para evitar que cuentas no autorizadas envíen notificaciones a su tema.

  • Otros servicios que admiten SourceAccount. La condición SourceAccount se admite en los siguientes servicios. Es fundamental utilizar esta condición si quiere restringir el acceso a su tema de Amazon SNS en función de la cuenta de origen.

    • Amazon API Gateway

    • Amazon CloudWatch

    • El DevOps gurú de Amazon

    • Amazon EventBridge

    • GameLift Servidores Amazon

    • API de SMS y voz de Amazon Pinpoint

    • Amazon RDS

    • Amazon Redshift

    • Amazon S3 Glacier

    • Amazon SES

    • Amazon Simple Storage Service

    • AWS CodeCommit

    • AWS Directory Service

    • AWS Lambda

    • Administrador de incidentes de AWS Systems Manager

  • Pruebas y validación. Tras aplicar la política, pruebe la configuración desencadenando un evento en el bucket de Amazon S3 y confirmando que se ha publicado correctamente en su tema de Amazon SNS. Esto ayudará a garantizar que la política esté configurada correctamente.

  • Prácticas recomendadas de seguridad. Revise y audite periódicamente las políticas de los temas de Amazon SNS para asegurarse de que cumplen sus requisitos de seguridad y conformidad. Limitar el acceso únicamente a cuentas y servicios de confianza es fundamental para mantener la seguridad de las operaciones.

Permitir que Amazon SES publique en un tema propiedad de otra cuenta

Puedes permitir que otra Servicio de AWS persona publique en un tema que sea propiedad de otra persona Cuenta de AWS. Supongamos que ha iniciado sesión en la cuenta 111122223333, ha abierto Amazon SES y ha creado un correo electrónico. Para publicar notificaciones sobre este correo electrónico en un tema de Amazon SNS que posee la cuenta 444455556666, debe crear una política como la siguiente. Para ello, debe proporcionar información sobre la entidad principal (el otro servicio) y la propiedad de cada recurso. En la instrucción Resource, se proporciona el tema ARN, que incluye el ID de cuenta del propietario del tema, 444455556666. En la instrucción "aws:SourceOwner": "111122223333", se especifica que su cuenta es propietaria del correo electrónico.

{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__default_statement_ID", "Effect": "Allow", "Principal": { "Service": "ses.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringEquals": { "aws:SourceOwner": "111122223333" } } } ] }

Al publicar eventos en Amazon SNS, los siguientes servicios son compatibles con aws:SourceOwner:

  • Amazon API Gateway

  • Amazon CloudWatch

  • El DevOps gurú de Amazon

  • GameLift Servidores Amazon

  • API de SMS y voz de Amazon Pinpoint

  • Amazon RDS

  • Amazon Redshift

  • Amazon SES

  • AWS CodeCommit

  • AWS Directory Service

  • AWS Lambda

  • Administrador de incidentes de AWS Systems Manager

aws:SourceAccount frente a aws:SourceOwner

importante

aws:SourceOwner está obsoleto y los nuevos servicios pueden integrarse con Amazon SNS solo a través de aws:SourceArn y aws:SourceAccount. Amazon SNS sigue manteniendo la compatibilidad con versiones anteriores para los servicios existentes que actualmente admiten aws:SourceOwner.

Cuando publican en un tema de Amazon SNS, algunos Servicios de AWS establecen las claves de condición aws:SourceAccount y aws:SourceOwner. Si se admite, el valor será el ID de AWS cuenta de 12 dígitos en cuyo nombre el servicio publica los datos. Algunos servicios admiten uno, y otros apoyan el otro.

Permita que las cuentas de una organización AWS Organizations publiquen en un tema de una cuenta diferente

El AWS Organizations servicio le ayuda a gestionar de forma centralizada la facturación, controlar el acceso y la seguridad y compartir los recursos entre sus clientes Cuentas de AWS.

Puede encontrar su ID de organización en la consola de organizaciones. Para obtener más información, consulte Ver detalles de una organización desde la cuenta de administración.

En este ejemplo, cualquier miembro de la organización myOrgId puede publicar Cuenta de AWS en Amazon SNS el tema MyTopic de la cuenta. 444455556666 La política comprueba el valor del ID de organización mediante la clave de condición global aws:PrincipalOrgID.

{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "myOrgId" } } } ] }

Permita que cualquier CloudWatch alarma se publique en un tema de otra cuenta

Siga los siguientes pasos para invocar un tema de Amazon SNS con CloudWatch una alarma en diferentes canales. Cuentas de AWS En este ejemplo se utilizan dos cuentas:

  • La cuenta A se utiliza para crear la CloudWatch alarma.

  • La cuenta B se usa para crear un tema de SNS.

Crea un tema de SNS en la cuenta B.

  1. Inicie sesión en la consola de Amazon SNS.

  2. En el panel de navegación, elige Temas y, a continuación, seleccione Crear tema.

  3. Elija Estándar como tipo de tema y, a continuación, cree un nombre para el tema.

  4. Seleccione Crear tema y, a continuación, copie el ARN del tema.

  5. En el panel de navegación, seleccione Suscripciones y, a continuación, elija Crear suscripción.

  6. Agregue el ARN del tema en la sección ARN del tema, elija Correo electrónico como protocolo y, a continuación, introduzca una dirección de correo electrónico.

  7. Selecciona Crear suscripción y, a continuación, comprueba tu correo electrónico para confirmar la suscripción.

Crea una CloudWatch alarma en la cuenta A

  1. Abra la CloudWatch consola en https://console.aws.amazon.com/cloudwatch/.

  2. En el panel de navegación, selecciona Alarmas y, a continuación, selecciona Crear alarmas.

  3. Si aún no ha creado una alarma, cree una ahora. De lo contrario, seleccione su métrica y, a continuación, proporcione los detalles del umbral y los parámetros de comparación.

  4. En Configurar acciones, en Notificaciones, elija Usar el ARN del tema para notificar a otras cuentas y, a continuación, introduzca el tema ARN de la cuenta B.

  5. Cree un nombre para la alarma y, a continuación, elija Crear alarma.

Actualice la política de acceso del tema de SNS en la cuenta B

  1. Inicie sesión en la consola de Amazon SNS.

  2. En el panel de navegación, elija Temas y, a continuación, seleccione el tema.

  3. Elija Editar y, a continuación, añada lo siguiente a la política:

nota

Sustituya los valores de ejemplo de la política siguiente por los suyos propios.

{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__default_statement_ID", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "SNS:GetTopicAttributes", "SNS:SetTopicAttributes", "SNS:AddPermission", "SNS:RemovePermission", "SNS:DeleteTopic", "SNS:Subscribe", "SNS:ListSubscriptionsByTopic", "SNS:Publish" ], "Resource": "example-topic-arn-account-b", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:cloudwatch:example-region:111122223333:alarm:" } } } ] }

Pruebe la alarma

Para probar la alarma, cambie el umbral de la alarma en función de los puntos de datos métricos o cambie manualmente el estado de la alarma. Al cambiar el umbral o el estado de la alarma, recibirá una notificación por correo electrónico.

Solución alternativa para usar un tema local de Amazon SNS y reenviar mensajes

Siga los siguientes pasos para activar las notificaciones CloudWatch multicuenta de Amazon SNS para las alarmas:

  1. Crea un tema de Amazon SNS en la misma cuenta que la CloudWatchalarma (111122223333).

  2. Suscriba una función de Lambda o una EventBridgeregla de Amazon a ese tema de Amazon SNS.

  3. A continuación, la función o EventBridge regla de Lambda puede publicar el mensaje en el tema Amazon SNS de la cuenta de destino (444455556666).

Restringir las publicaciones en un tema de Amazon SNS únicamente desde un punto de enlace de la VPC específico

En este caso, el tema de la cuenta 444455556666 puede publicar únicamente desde el punto de enlace de la VPC con el ID vpce-1ab2c34d.

{ "Statement": [{ "Effect": "Deny", "Principal": "*", "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1ab2c34d" } } }] }