Конфигурация Cloudformation Security Group с использованием списка - PullRequest
0 голосов
/ 03 июня 2019

Я определяю стек облачной информации, где группа безопасности должна разрешать входящий трафик с указанных IP-адресов.Я определил эти IP-адреса как сопоставления, и они будут расти в будущем, когда мы добавим новых клиентов на нашу платформу.Мой текущий стек облачной информации выглядит как

AWSTemplateFormatVersion: '2010-09-09'  
Description: Security group.

Parameters:
  VPCStackName:
    Type: String
    Description: The name of VPC stack

Mappings:
  # Security group configuration for different environments
  SecurityGroupConfiguration:
    PROD: 
      IPAddress: "149.250.241.202/32 149.250.241.202/32"
    NON-PROD: 
      IPAddress: "149.250.241.202/32, 149.250.241.204/32, 149.250.241.205/32"

Resources:

  # Add security groups and their ingress
  PublicSubnetSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Test security group
      VpcId: 
        Fn::ImportValue:
          !Sub "${VPCStackName}-vpcid"
      SecurityGroupIngress:
        - CidrIp: !FindInMap ['SecurityGroupConfiguration', 'PROD', 'IPAddress']
          IpProtocol: -1

Это не позволяет создавать SG, независимо от того, разделяю ли я их '', ',' или ';'.

2-й метод IЯ хотел попытаться определить эти отображения в виде списка и динамически выполнять их итерацию в зависимости от количества настроенных элементов.Для PROD и NON-PROD список будет иметь разное количество IP-адресов, поэтому я не смогу определить индексы.Например, у Production будет 4 IP-адреса, а у не-Prod может быть только 2 IP-адреса.Если я определю индексы для! Select, один и тот же шаблон CFN не будет работать в обеих средах.

AWSTemplateFormatVersion: '2010-09-09'  
Description: Security group.

Parameters:
  VPCStackName:
    Type: String
    Description: The name of VPC stack

Mappings:
  # Security group configuration for different environments

  SecurityGroupConfiguration:
  PROD: 
    IPAddress: 
      - 149.250.241.202/32
      - 149.250.241.203/32
  NON-PROD: 
    IPAddress: 
      - 149.250.241.202/32
      - 149.250.241.204/32
      - 149.250.241.205/32

Resources:

  # Add security groups and their ingress
  PublicSubnetSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Test security group
      VpcId: 
        Fn::ImportValue:
          !Sub "${VPCStackName}-vpcid"
      SecurityGroupIngress:
        - CidrIp: for (i in SecurityGroupConfiguration)
            <Dynamically iterate over list to produce all the ip addresses>
            !Select [i, !FindInMap ['SecurityGroupConfiguration', 'PROD', 'IPAddress']]
          IpProtocol: -1

Есть ли способ обойти эту проблему?

1 Ответ

0 голосов
/ 06 июля 2019

Пользовательские ресурсы облачной информации AWS позволяют писать настраиваемую логику обеспечения в шаблонах, которые AWS CloudFormation запускает при каждом создании, обновлении (если вы изменили пользовательский ресурс) или удалении стеков.

Вы можете использовать Пользовательские ресурсы AWS с лямбда-поддержкой .Когда вы связываете лямбда-функцию с пользовательским ресурсом, функция вызывается всякий раз, когда пользовательский ресурс создается, обновляется или удаляется.AWS CloudFormation вызывает Lambda API для вызова функции и передачи всех данных запроса (например, типа запроса и свойств ресурса) в функцию.

Мощные и настраиваемые функции Lambda в сочетании с AWS CloudFormation позволяют настраивать группу безопасности произвольным образом.

Существует несколько проектов с открытым исходным кодом, которые могут помочь вам быстро написать ее

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