Как правильно выводить SecurityGroupEgress и SecurityGroupIngress в CloudFormation - PullRequest
1 голос
/ 14 марта 2019

С помощью приведенного ниже шаблона CloudFormation я могу подключиться по SSH к экземпляру EC2.

PublicSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
        GroupName: PublicSecurityGroup
        GroupDescription: Public Security Group
        VpcId:
            Ref: Vpc
        SecurityGroupEgress:
            - IpProtocol: "-1"
                FromPort: 0
                ToPort: 65535
                CidrIp: 0.0.0.0/0
        SecurityGroupIngress:
            - IpProtocol: tcp
                FromPort: 22
                ToPort: 22
                CidrIp: 0.0.0.0/0
PublicEc2Instance:
    Type: AWS::EC2::Instance
    Properties:
        ImageId:
            Ref: ImageId
        InstanceType:
            Ref: InstanceType
        KeyName:
            Ref: KeyName
        SecurityGroupIds:
            - Fn::GetAtt:
                    - PublicSecurityGroup
                    - GroupId
        SubnetId:
            Ref: PublicSubnet
        Tags:
            - Key: Name
                Value: PublicEc2Instance

Когда я изменяю определение SecurityGroup на структуру ниже

PublicSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
        GroupName: PublicSecurityGroup
        GroupDescription: Public Security Group
        VpcId:
            Ref: Vpc
PublicOutboundRule1:
    Type: AWS::EC2::SecurityGroupEgress
    Properties:
        GroupId: !Ref PublicSecurityGroup
        SourceSecurityGroupId: !Ref PublicSecurityGroup
        IpProtocol: "-1"
        FromPort: 0
        ToPort: 65535
PublicInboundRule1:
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
        GroupId: !Ref PublicSecurityGroup
        SourceSecurityGroupId: !Ref PublicSecurityGroup
        IpProtocol: tcp
        FromPort: 22
        ToPort: 22

Я больше не могу использовать SSH в экземпляре EC2.

Почему экстернализация SecurityGroupEgress и SecurityGroupIngress блокирует доступ SSH к EC2?

Спасибо!

Ответы [ 2 ]

1 голос
/ 15 марта 2019

Вы не устанавливаете правильную связь между AWS :: EC2 :: SecurityGroup и AWS :: EC2 :: SecurityGroupIngress / AWS :: EC2 :: SecurityGroupEgress

В первом описании вы разрешаете доступ кПорт 22 из любого местоположения: SecurityGroupIngress: - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 0.0.0.0/0

Но во втором определении вы определяете доступ к порту 22 только из одной и той же группы безопасности, поскольку параметр SourceSecurityGroupId указывает идентификатор группы безопасности Amazon EC2, чтобы разрешить доступи вы хотите предоставить доступ с 0.0.0.0/, это не то же самое:

SourceSecurityGroupId: !Ref PublicSecurityGroup IpProtocol: tcp FromPort: 22 ToPort: 22

Необходимо удалить параметр SourceSecurityGroupId

1 голос
/ 14 марта 2019

Вы ограничили трафик в вашем правиле входа до PublicSecurityGroup в этой строке: SourceSecurityGroupId: !Ref PublicSecurityGroup Вместо SourceSecurityGroupId укажите блок CIDR, который вы использовали в верхнем фрагменте yaml:

PublicSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
        GroupName: PublicSecurityGroup
        GroupDescription: Public Security Group
        VpcId:
            Ref: Vpc
PublicOutboundRule1:
    Type: AWS::EC2::SecurityGroupEgress
    Properties:
        GroupId: !Ref PublicSecurityGroup
        IpProtocol: "-1"
        FromPort: 0
        ToPort: 65535
        CidrIp: 0.0.0.0/0

PublicInboundRule1:
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
        GroupId: !Ref PublicSecurityGroup
        IpProtocol: tcp
        FromPort: 22
        ToPort: 22
        CidrIp: 0.0.0.0/0

Обратите внимание, что я также удалил SourceSecurityGroupId из вашего правила Egress, потому что правила Egress не предполагают источники, они ожидают места назначения (другие SG, блоки CIDR), потому что они, ну, выходной :).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...