Comment publier dans une rubrique Amazon SNS à partir d'une instance Amazon EC2 inter-comptes à l'aide d'un rôle IAM EC2 ?

Dernière mise à jour : 20/07/2021

Je souhaite publier dans une rubrique Amazon Simple Notification Service (Amazon SNS) depuis une instance Amazon Elastic Compute Cloud (Amazon EC2) inter-comptes. Pour ce faire, je souhaite utiliser un rôle AWS Identity and Access Management (IAM) pour une instance EC2 qui utilise un sous-réseau public.

Résolution

Remarque : si vous recevez des messages d'erreurs lors de l'exécution de commandes depuis l'AWS Command Line Interface (AWS CLI), vérifiez que vous utilisez la version la plus récente d'AWS CLI.

Configuration du compte avec votre instance EC2

1.    Créez une politique IAM avec des autorisations pour publier dans votre rubrique SNS. Par exemple :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid":
    "VisualEditor0",
            "Effect": "Allow",
            "Action": "sns:Publish",
           
    "Resource": "arn:aws:sns:us-east-2:123456789012:cross-account-ec2-sns"
        }
    ]
}

2.    Créez un rôle IAM pour votre instance EC2. Par exemple : cross-acc-ec2-sns-publish-role. Ensuite, attachez la politique à votre rôle IAM.

3.    Créez une instance EC2 dans un sous-réseau public avec accès Internet.

Attachez le nouveau rôle IAM à votre instance EC2

Vérifiez que votre instance EC2 est en cours d'exécution, puis effectuez les opérations suivantes :

1.    Ouvrez la console Amazon EC2.

2.    Dans le panneau de navigation, choisissez Instances.

3.    Sélectionnez votre instance (cross-acc-ec2-sns-publish-role), puis choisissez Actions, Security (Sécurity), Modify IAM role (Modifier le rôle IAM).

4.    Sélectionnez le rôle IAM créé précédemment pour l’attacher à votre instance, puis choisissez Save (Enregistrer).

Remarque : si votre instance EC2 ne peut pas se connecter à Internet avec une passerelle Internet, consultez Pourquoi mon instance EC2 ne peut-elle pas se connecter à Internet via une passerelle Internet ?

Configuration du compte avec votre rubrique SNS

1.    Créez une rubrique SNS avec un nom similaire au nom suivant : cross-account-ec2-sns

2.    Abonnez un point de terminaison à votre rubrique sur la base de votre cas d'utilisation, puis confirmez l'abonnement.

3.    Ajoutez des autorisations à la stratégie d'accès de votre rubrique SNS. Les autorisations doivent permettre au rôle IAM EC2 d'effectuer l'opération API Publish (Publier) pour Amazon SNS.

Pour modifier la stratégie d'accès de votre rubrique SNS et ajouter les autorisations, procédez comme suit :

1.    Ouvrez la console Amazon SNS.

2.    Dans le panneau de navigation, choisissez Topics (Rubriques), puis choisissez la rubrique SNS dans laquelle vous souhaitez publier.

3.    Choisissez l'onglet Access policy (Stratégie d'accès).

4.    Dans la section Details (Détails) de la page de votre rubrique, choisissez Edit (Modifier).

5.    Développez la section Access policy (Stratégie d’accès), puis ajoutez des autorisations pour autoriser le rôle IAM (cross-acc-ec2-sns-publish-role) de votre instance EC2 à publier dans la rubrique SNS. Par exemple :

{
  "Sid": "grant-65864586-publish",
  "Effect": "Allow",
  "Principal": {
    "AWS": [
      "arn:aws:iam::111122223333:role/cross-acc-ec2-sns-publish-role"
    ]
  },
  "Action": "sns:Publish",
  "Resource": "arn:aws:sns:us-east-2:123456789012:cross-account-ec2-sns"
}

6.    Choisissez Save changes (Enregistrer les modifications).

Testez la configuration en publiant la notification depuis votre instance EC2

1.    Connectez-vous au compte avec votre instance EC2, puis connectez-vous à votre instance EC2. Pour les instances Windows, consultez Connexion à votre instance Windows. Pour les instances Linux, consultez Connexion à votre instance Linux.

2.    Exécutez la commande Amazon SNS Publish (Publier) dans le terminal EC2, puis surveillez la réponse. Par exemple, vous pouvez utiliser une requête de test dans AWS CLI, comme suit :

aws sns publish  --topic-arn "arn:aws:sns:us-east-2:123456789012:cross-account-ec2-sns"
    --message "test" --region us-east-2
{
    "MessageId": "c72e7c2f-f95a-5c57-97c5-25448b2a7e71"
}

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?