Casos de ejemplo para el control de SNS acceso de Amazon - 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.

Casos de ejemplo para el control de SNS acceso de Amazon

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 tienes un tema en Amazon SNS y quieres permitir que uno o más de ellos Cuentas de AWS realicen una acción específica sobre ese tema, como publicar mensajes. Para ello, puede utilizar la SNS API acción AmazonAddPermission.

La AddPermission acción te permite especificar un tema, una lista de Cuenta de AWS IDs, una lista de acciones y una etiqueta. SNSA continuación, Amazon genera y añade automáticamente una nueva declaración de política a la política de control de acceso del tema. No es necesario que redactes tú mismo la declaración de política: Amazon se SNS encarga de ello por ti. Si necesitas eliminar la política más adelante, puedes hacerlo llamando RemovePermission y proporcionando la etiqueta que utilizaste 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 etiqueta, SNS Amazon generará e insertará la siguiente declaración de política en la política de grant-1234-publish 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 personalizadas: si bien AddPermission resulta práctico para conceder permisos, suele ser útil gestionar manualmente la política de control de acceso del tema en situaciones más complejas, como añadir condiciones o conceder permisos a funciones o servicios específicosIAM. Para ello, puede utilizar el atributo SetTopicAttributes API para actualizar directamente el atributo de la política.

  • Mejores prácticas de seguridad: Ten cuidado al conceder permisos para asegurarte de que solo las entidades Cuentas de AWS o de confianza tengan acceso a tus SNS temas de Amazon. Revisa y audita periódicamente las políticas adjuntas a tus temas para mantener la seguridad.

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

Limite las suscripciones a HTTPS

Para restringir el protocolo de envío de notificaciones para tu SNS tema de Amazon aHTTPS, debes crear una política personalizada. La AddPermission acción de Amazon SNS no te permite especificar restricciones de protocolo al conceder acceso a tu tema. Por lo tanto, debes escribir manualmente una política que imponga esta restricción y, a continuación, utilizar la SetTopicAttributes acción para aplicar la política a tu tema.

Así es como puedes crear una política que limite las suscripciones aHTTPS:

  1. Redacta la política. La política debe especificar el Cuenta de AWS identificador al que deseas conceder el acceso e imponer la condición de que solo se permitan HTTPS las suscripciones. A continuación se muestra un ejemplo de política que concede al Cuenta de AWS ID 1111-2222-3333 permiso para suscribirse al tema, pero solo si el protocolo utilizado lo 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. Aplica la política. Usa la SetTopicAttributes acción de Amazon SNS API para aplicar esta política a tu tema. Defina el Policy atributo del tema en la JSON política 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 AddPermission acción. 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.

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

  • Pruebas de políticas. 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 como se espera. Esto ayuda a evitar problemas de acceso accidental o restricciones no deseadas.

Publicar mensajes en una SQS cola de Amazon

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

Puedes lograrlo utilizando la SetQueueAttributes acción para aplicar una política personalizada a la SQS cola de Amazon. A diferencia de AmazonSNS, Amazon SQS no apoya la AddPermission acción de crear declaraciones de política con condiciones. Por lo tanto, debes escribir la política manualmente.

El siguiente es un ejemplo de una SQS política de Amazon que otorga SNS permiso a Amazon para enviar mensajes a tu cola. Ten en cuenta que esta política está asociada a la SQS cola de Amazon, no al SNS tema de Amazon. Las acciones especificadas son SQS acciones de Amazon y el recurso es el nombre del recurso de Amazon (ARN) de la cola. Puede recuperar las colas ARN mediante la GetQueueAttributes acción.

{ "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 aws:SourceArn condición de restringir el acceso a la SQS cola en función de la fuente de los mensajes que se envían. Esto garantiza que solo los mensajes que se originen en el SNS tema especificado (en este caso, arn:aws:sns:us-east- 2:444455556666:) puedan entregarse a la cola. MyTopic

Información adicional:

  • Cola. ARN Asegúrate de recuperar la lista correcta ARN de tu SQS cola de Amazon mediante la GetQueueAttributes acción. Esto ARN es esencial para configurar los permisos correctos.

  • Mejores prácticas de seguridad. Al configurar políticas, siga siempre el principio del privilegio mínimo. Concede solo los permisos necesarios al SNS tema de Amazon para interactuar con la SQS cola de Amazon y revisa tus políticas con regularidad para asegurarte de que son seguras up-to-date .

  • Políticas predeterminadas en AmazonSNS. Contrariamente a algunos malentendidos, Amazon SNS no otorga automáticamente una política predeterminada que permita el servicios de AWS acceso de otras personas a los temas recién creados. Debes definir y adjuntar políticas de forma explícita para controlar el acceso a tus SNS temas de Amazon.

  • Pruebas y validación. Tras configurar la política, prueba la integración publicando los mensajes en el SNS tema de Amazon y verificando que se hayan entregado correctamente a la SQS cola de Amazon. 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 SNS tema de Amazon, debe configurar la política de acceso del tema en consecuencia. Esto implica redactar una política personalizada que conceda permiso al servicio Amazon S3 desde el punto de vista específico Cuenta de AWS y, a continuación, aplicar esta política a su SNS tema de Amazon.

Puedes configurarlo de la siguiente manera:

  1. Redacta la política. La política debe conceder al servicio Amazon S3 (s3.amazonaws.com) los permisos necesarios para publicar en su SNS tema de Amazon. 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 AmazonSNS.

    • 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. Aplica la política. Usa la SetTopicAttributes acción para establecer esta política en tu SNS tema de Amazon. Esto actualizará el control de acceso del tema para incluir los permisos especificados en tu 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:

  • SourceAccountCondición de uso. 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 AmazonSNS. Se trata de una medida de seguridad para evitar que cuentas no autorizadas envíen notificaciones a tu tema.

  • Otros servicios de apoyoSourceAccount. Esta SourceAccount afección está respaldada por los siguientes servicios. Es fundamental utilizar esta condición si quieres restringir el acceso a tu SNS tema de Amazon en función de la cuenta de origen.

    • Amazon API Gateway

    • Amazon CloudWatch

    • El DevOps gurú de Amazon

    • Amazon ElastiCache

    • Amazon EventBridge

    • Amazon GameLift

    • Amazon Pinpoint SMS y Voice API

    • Amazon RDS

    • Amazon Redshift

    • Amazon S3 Glacier

    • Amazon SES

    • Amazon Simple Storage Service

    • AWS CodeCommit

    • AWS Directory Service

    • AWS Lambda

    • AWS Systems Manager Incident Manager

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

  • Mejores prácticas de seguridad. Revisa y audita periódicamente tus políticas SNS temáticas de Amazon para asegurarte de que cumplen con tus requisitos de seguridad. Limitar el acceso únicamente a cuentas y servicios confiables es esencial para mantener las operaciones seguras.

Permitir SES que Amazon publique en un tema que sea 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 has iniciado sesión en la cuenta 111122223333, has abierto Amazon SES y has creado un correo electrónico. Para publicar notificaciones sobre este correo electrónico en un SNS tema de Amazon propiedad de la cuenta 444455556666, debes 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. La Resource declaración proporciona el temaARN, 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 AmazonSNS, se admiten los siguientes serviciosaws:SourceOwner:

  • Amazon API Gateway

  • Amazon CloudWatch

  • El DevOps gurú de Amazon

  • Amazon ElastiCache

  • Amazon GameLift

  • Amazon Pinpoint SMS y Voice API

  • Amazon RDS

  • Amazon Redshift

  • Amazon SES

  • AWS CodeCommit

  • AWS Directory Service

  • AWS Lambda

  • AWS Systems Manager Incident Manager

aws:SourceAccount frente a aws:SourceOwner

importante

aws:SourceOwnerestá en desuso y los nuevos servicios SNS solo se pueden integrar con Amazon a través de aws:SourceArn yaws:SourceAccount. Amazon SNS sigue manteniendo la compatibilidad con versiones anteriores de los servicios existentes que actualmente son compatiblesaws:SourceOwner.

Algunas personas configuran cada una de las claves de aws:SourceOwner condición aws:SourceAccount y servicios de AWS cuando se publican en un SNS tema de Amazon. 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 otra cuenta

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 el SNS tema de MyTopic la cuenta444455556666. 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" } } } ] }

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

En este caso, cualquier CloudWatch alarma de la cuenta 111122223333 puede publicarse en un SNS tema de Amazon de la cuenta444455556666.

{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:cloudwatch:us-east-2:111122223333:alarm:*" } } } ] }

Restringir la publicación a un SNS tema de Amazon solo desde un VPC punto de enlace específico

En este caso, el tema de la cuenta 444455556666 solo puede publicarse desde el VPC punto de enlace 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" } } }] }