Как автоматически добавить автоматически масштабированный экземпляр EC2 в группу безопасности?

Я хочу настроить AWS для автоматического масштабирования экземпляров EC2 (Windows Server 2012). Суть в том, что им нужно добавить свои IP-адреса в группу безопасности, чтобы они могли общаться с другим EC2.

  1. Есть ли способ, которым AWS может справиться с этим автоматически с помощью функции автоматического масштабирования? (Самое близкое, что я мог найти, - это назначить роль IAM новым экземплярам, ​​но я не могу добавить роль IAM в группу безопасности, я могу только добавлять IP-адреса.)

  2. В настоящее время я изучаю способ использования интерфейса командной строки AWS в качестве сценария запуска.

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

Но как мне получить публичный IP-адрес текущего экземпляра? Есть ли команда CLI AWS, чтобы получить это? Я бы предпочел не зависеть от внешнего сайта, такого как "curl echoip.com". Я слышал о метаданных ec2, но я не думаю, что это работает для Windows, и я предпочел бы не использовать другое стороннее программное обеспечение.

1 ответ

Решение

Создайте группу безопасности с именем web. Для примера скажем, что идентификатор этой группы: sg-7aa91911

Создайте группу безопасности с именем db. Добавьте новое правило в группу безопасности db для порта 1433 с источником sg-7aa91911.

Создайте конфигурацию запуска Autoscaling и установите для SecurityGroups значение sg-7aa91911 и любую другую необходимую вам конфигурацию.

Создайте группу Autoscaling с этой конфигурацией запуска.

Я написал быстрый шаблон CloudFormation для выполнения этой задачи. Вы должны иметь возможность просто запустить его, и он создаст группу Autoscaling с подключенными группами безопасности. Это также создаст пустой экземпляр, где вы можете хранить свою базу данных.

Если вы предпочитаете не использовать шаблон CloudFormation, просто посмотрите, где определены группы безопасности. Это показывает, как 2 группы безопасности должны быть связаны

{
  "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"}
          }
        ]
      }
    }
  }
}
Другие вопросы по тегам