1
votes

Envoyer un message SNS via Cloudformation / lambda pour mettre à jour le groupe de sécurité

J'essaye de "peupler" un SG qui est attaché à mon ALB pour autoriser le trafic de Cloudfront vers.

Cette distribution ALB / CF est en cours de création via Cloudformation. J'ai actuellement une fonction Lambda qui traite les messages SNS d'AmazonIpSpaceChanged. Cependant, lorsque je crée cette pile CF, ce message SNS doit être déclenché pour remplir initialement le SG.

Existe-t-il un moyen de créer un message SNS pour déclencher cette fonction Lambda? J'ai regardé les ressources personnalisées soutenues par SNS, mais cela ne semble pas fonctionner.


0 commentaires

3 Réponses :


2
votes

J'ai également personnellement rencontré ce problème. Je n'ai pas pu faire fonctionner ma rubrique SNS pour déclencher la fonction lambda. Cependant, j'ai pu le faire avec des ressources personnalisées.

Chaque fois qu'une fonction lambda est associée à une ressource personnalisée dans un modèle CloudFormation, elle est appelée lors de la création de cette ressource personnalisée. Vous devrez le dépendre de la ressource cloudformation qui contient le code, car cela ne fonctionnera pas s'il se déclenche avant la création de la fonction lambda.

Ceci est un lien vers la documentation des ressources personnalisées


3 commentaires

Je fais actuellement cela. Je crée une ressource personnalisée avec une fonction basée sur lambda qui utilise python pour OBTENIR le fichier ip-ranges.json, puis mettre à jour les SG avec cette liste récupérée. CEPENDANT, je préférerais faire cela d'une manière différente, car cette fonction lambda est presque un double d'une autre fonction lambda qui écoute les messages SNS d'AWS pour AmazonIpSpaceChanged.


Eh bien, toutes vos possibilités sont déjà répertoriées ici, vous pouvez choisir votre poison, chacune a ses propres inconvénients EDIT: Toutes les possibilités dont je suis conscient, au moins


C'est en quelque sorte ce qui m'inquiète. C'est étrange parce qu'il y a une ressource personnalisée soutenue par SNS que j'espérais accomplir cela, mais pour la vie de moi, je ne peux pas trouver de bonne documentation ni d'exemples.



0
votes

Pourquoi ne pas ajouter la règle au groupe de sécurité directement depuis CloudFormation avec AWS :: EC2 :: SecurityGroupIngress ?

  InboundRule:
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      IpProtocol: tcp
      FromPort: 0
      ToPort: 65535
      SourceSecurityGroupId:
        Fn::GetAtt:
        - XX_NEW_SECURITY_GROUP_XX
        - GroupId
      GroupId: sg-XX_EXISTING_GROUP_XX


1 commentaires

Je ne connais les plages IP qu'après avoir envoyé une demande GET à AWS pour extraire le fichier ip-ranges.json.



0
votes

Une option que vous pouvez utiliser est la fonction de notification offerte par l'API CloudFormation: lors de l'appel de UpdateStack , vous pouvez fournir une liste de NotificationARNs , qui est une liste de sujets SNS qui sont informés de chaque changement lié à CloudFormation dans votre pile. Vous pouvez définir la rubrique SNS de notification sur la rubrique SNS à laquelle vous avez abonné votre fonction AWS Lambda. Cela ne fonctionne bien sûr que si vous ne créez pas le sujet SNS dans le cadre de votre pile CloudFormation, vous ne comptez pas sur le contenu du message SNS et avez simplement besoin d'un tel message comme déclencheur et si vous filtrez les messages SNS dans votre Fonction Lambda pour ne réagir qu'aux messages qui comptent pour vous (comme effectuer des mises à jour uniquement lors de la création de la pile et non de la suppression de la pile).

Utilisation de l'AWS CLI et de son commande deploy , en spécifiant un ARN de notification ressemblant à:

< pré> XXX


1 commentaires

J'ai pensé à cette route mais c'est essentiellement une étape "manuelle" dans le processus de création d'un environnement à partir de zéro.