Я определяю стек облачной информации, где группа безопасности должна разрешать входящий трафик с указанных 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
Есть ли способ обойти эту проблему?