Quiero publicar un tema de Amazon Simple Notification Service (Amazon SNS) desde una instancia de Amazon Elastic Compute Cloud (Amazon EC2) en otra cuenta de AWS. Quiero usar un rol de AWS Identity and Access Management (IAM) para una instancia de EC2 que utilice una subred pública.
Solución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
Configuración de la cuenta con una instancia
Sigue estos pasos:
- Crea una política de IAM con permisos para publicar en tu tema de SNS. Ejemplo de política:
{ "Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sns:Publish",
"Resource": "arn:aws:sns:us-east-1:123456789012:cross-account-ec2-sns"
}
]
}
Nota: Sustituye us-east-1 por tu región de AWS y 123456789012 por el ID de tu cuenta.
- Crea un rol de IAM para tu instancia con un nombre similar a cross-acc-ec2-sns-publish-role. A continuación, asocia la política a tu rol de IAM.
- Inicia una instancia en una subred pública con acceso a Internet.
Asociación del rol de IAM a una instancia
Sigue estos pasos:
- Abre la consola de Amazon EC2.
- En el panel de navegación, selecciona Instancias.
- Elige tu instancia, como cross-acc-ec2-sns-publish-role, y, a continuación, elige Acciones.
- Selecciona Seguridad y, a continuación, elige Modificar rol de IAM.
- Selecciona el rol de IAM que acabas de crear y, a continuación, elige Guardar.
Nota: Para solucionar problemas de conectividad de Internet de la instancia, consulta ¿Por qué mi instancia de Amazon EC2 no puede acceder a Internet mediante una puerta de enlace de Internet?
Configuración de la cuenta con un tema de SNS
Completa los siguientes pasos para crear un tema de SNS y agregar permisos para permitir que el rol de IAM de Amazon EC2 lleve a cabo la acción de publicación:
- Crea un tema de SNS con un nombre similar a cross-account-ec2-sns.
- Suscribe un punto de enlace a tu tema y, a continuación, confirma la suscripción.
- Abre la consola de Amazon SNS.
- En el panel de navegación, elige Temas y, a continuación, elige el tema de SNS en el que deseas publicar.
- Selecciona la pestaña Política de acceso.
- En ** Detalles**, selecciona Editar.
- Amplía la sección Política de acceso y, a continuación, introduce la siguiente política de acceso a SNS:
{
"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:Publish",
"SNS:Receive"
],
"Resource": "arn:aws:sns:us-east-1: 123456789012:cross-account-ec2-sns",
"Condition": {
"StringEquals": {
"AWS:SourceOwner": "123456789012"
}
}
},
{
"Sid": "grant-65864586-publish-and-listsubscriptionsbytopic",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam:: 111122223333:role/cross-acc-ec2-sns-role"
},
"Action": [
"sns:Publish",
"sns:ListSubscriptionsByTopic"
],
"Resource": "arn:aws:sns:us-east-1:123456789012:cross-account-ec2-sns"
}
]
}
Nota: Sustituye us-east-1 por tu región, 123456789012 por el ID de tu cuenta y 111122223333 por el ID de usuario de IAM.
- Selecciona Guardar cambios.
Publicación de la notificación desde una instancia y prueba de la configuración
Sigue estos pasos:
- Abre la consola de Amazon EC2 con la cuenta que tiene tu instancia.
- Conéctate a tu instancia. Para las instancias de Windows, consulta Conexión a una instancia de Windows mediante RDP. Para las instancias de Linux, consulta Conexión a la instancia de Linux mediante SSH.
- Ejecuta el siguiente comando de publicación de la AWS CLI para ejecutar una consulta de prueba:
aws sns publish --topic-arn "arn:aws:sns:us-east-1:123456789012:cross-account-ec2-sns" --message "test" --region us-east-1
Nota: Sustituye us-east-1 por tu región y 123456789012 por el ID de tu cuenta.