2013-08-02 5 views
3

Je souhaite configurer mon AWS pour les instances EC2 à l'échelle automatique (Windows Server 2012). Le problème est qu'ils doivent avoir leurs adresses IP ajoutées à un groupe de sécurité afin qu'ils puissent communiquer avec un autre EC2.Comment ajouter automatiquement une instance EC2 à mise à l'échelle automatique à un groupe de sécurité?

  1. Existe-t-il un moyen pour AWS de gérer cela automatiquement grâce à sa fonction de mise à l'échelle automatique? (Le plus approchante était d'attribuer un rôle IAM aux nouveaux cas, mais je ne je peux ajouter un rôle IAM à un groupe de sécurité, je ne peux ajouter des adresses IP.)

  2. La façon dont je suis actuellement en cours d'examen est d'utiliser l'AWS CLI (ligne de commande) en tant que script de démarrage.

    ec2-authorize mySecurityGroup -p 1433 -s xx.xx.xx.xx/32 
    

Mais comment puis-je obtenir l'adresse IP publique de l'instance actuelle? Existe-t-il une commande AWS CLI pour l'obtenir? Je préfère ne pas dépendre d'un site externe comme "curl echoip.com". J'ai entendu parler de ec2-metadata, mais je ne pense pas que cela fonctionne pour Windows, et je préfère ne pas utiliser un autre logiciel tiers.

+2

Y a-t-il une raison pour laquelle vous ne pouvez pas ajouter de règle pour autoriser toutes les instances dans un groupe de sécurité donné? Êtes-vous en train d'essayer d'établir un accès à travers les régions? – datasage

+0

Je suis ouvert à cette option. Je reste avec la même région. Je ne sais pas comment le faire (je suis assez nouveau pour AWS EC2). Je pensais que je peux seulement ajouter des adresses IP à un groupe de sécurité. – wisbucky

+1

Cela fonctionne de manière similaire à l'ajout d'une adresse IP, mais vous devez spécifier votre ID de groupe de sécurité (commence par sg-XXXXXX). – datasage

Répondre

4

Créez un groupe de sécurité appelé Web. Pour les besoins d'un exemple, disons que l'id de ce groupe est: sg-7aa91911

Créer un groupe de sécurité appelé db. Ajouter une nouvelle règle au groupe de sécurité db pour le port 1433 avec la source de sg-7aa91911

Créez une configuration de lancement Autoscaling et définissez SecurityGroups sur sg-7aa91911 et toute autre configuration dont vous avez besoin.

Créer un groupe Autoscaling avec cette configuration de lancement.

J'ai rédigé un modèle rapide CloudFormation pour effectuer cette tâche. Vous devriez pouvoir l'exécuter et créer un groupe Autoscaling avec les groupes de sécurité connectés. Il va également créer une instance vide où vous pouvez stocker votre db.

Si vous préférez ne pas utiliser un modèle CloudFormation, regardez simplement où les groupes de sécurité sont définis. Il montre comment les deux groupes de sécurité doivent être connectés

{ 
    "AWSTemplateFormatVersion" : "2010-09-09", 

    "Description" : "test tempalte", 

    "Parameters" : { 
    "KeyName" : { 
     "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instance", 
     "Type" : "String" 
    } 
    }, 

    "Mappings" : { 
    "RegionMap" : { 
     "us-east-1"  : { "AMI" : "ami-7f418316" }, 
     "us-west-1"  : { "AMI" : "ami-951945d0" }, 
     "us-west-2"  : { "AMI" : "ami-16fd7026" }, 
     "eu-west-1"  : { "AMI" : "ami-24506250" }, 
     "sa-east-1"  : { "AMI" : "ami-3e3be423" }, 
     "ap-southeast-1" : { "AMI" : "ami-74dda626" }, 
     "ap-northeast-1" : { "AMI" : "ami-dcfa4edd" } 
    } 
    }, 

    "Resources" : { 
    "WebServerGroup" : { 
     "Type" : "AWS::AutoScaling::AutoScalingGroup", 
     "Properties" : { 
     "AvailabilityZones" : { "Fn::GetAZs" : "" }, 
     "LaunchConfigurationName" : { "Ref" : "LaunchConfig" }, 
     "MinSize" : "1", 
     "MaxSize" : "10", 
     "DesiredCapacity" : "1" 
     } 
    }, 

    "LaunchConfig" : { 
     "Type" : "AWS::AutoScaling::LaunchConfiguration", 
     "Properties" : { 
     "InstanceType" : "m1.small", 
     "KeyName" : { "Ref" : "KeyName" }, 
     "SecurityGroups" : [ {"Ref" : "websg"} ], 
     "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]} 
     } 
    }, 
    "Ec2Instance" : { 
     "Type" : "AWS::EC2::Instance", 
     "Properties" : { 
     "KeyName" : { "Ref" : "KeyName" }, 
     "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]}, 
     "UserData" : { "Fn::Base64" : "80" } 
     } 
    }, 

    "websg" : { 
     "Type" : "AWS::EC2::SecurityGroup", 
     "Properties" : { 
     "GroupDescription" : "Enable SSH and access, 8080, and 80", 
     "SecurityGroupIngress" : [ 
      {"IpProtocol" : "tcp", "FromPort" : "8080", "ToPort" : "8080", "CidrIp" : "0.0.0.0/0"}, 
      {"IpProtocol" : "tcp", "FromPort" : "80", "ToPort" : "80", "CidrIp" : "0.0.0.0/0"}, 
      {"IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : "0.0.0.0/0"} 
     ] 
     } 
    }, 
    "dbsg" : { 
     "Type" : "AWS::EC2::SecurityGroup", 
     "Properties" : { 
     "GroupDescription" : "Port opened only to security group", 
     "SecurityGroupIngress" : [ 
      {"IpProtocol" : "tcp", "FromPort" : "1433", "ToPort" : "1433", "SourceSecurityGroupName" : {"Ref" : "websg"} 
      } 
     ] 
     } 
    } 
    } 
} 
+1

Merci pour votre exemple détaillé. En fin de compte, mon plus gros problème était que j'essayais de me connecter à la "DB" en utilisant son IP publique. J'ai finalement réalisé qu'il y a une bizarrerie lorsque vous utilisez la règle de groupe de sécurité, vous devez soit utiliser Public DNS ou Private DNS/IP. – wisbucky

Questions connexes