背景:
我有一个现有的蓝/绿架构设置,它使用两个负载均衡器(蓝/绿),并基于 Route53 配置进行交换。这些负载均衡器中的每组应用程序都有自己独特的蓝/绿目标组,以及自己的安全组(蓝/绿共享)。
由于各种原因,我正在考虑更改此设置以使用单个负载均衡器,但只需交换目标组。
我正在使用 CDK 来执行此操作。我正在为这个负载均衡器中的新实例重新使用现有的安全组。当我部署 CloudFormation 时,它确认我想要修改安全组以允许来自新负载均衡器的入口。说得通; 是的,我愿意。
这是添加的结果 cloudformation 的片段AWS::EC2::SecurityGroupIngress
。
Resources:
somerandomnamebythecdk:
Type: AWS::EC2::SecurityGroupIngress
Properties:
IpProtocol: tcp
Description: Load balancer to target
FromPort: 80
GroupId: sg-XXXXX
SourceSecurityGroupId: sg-YYYYYY
ToPort: 80
Metadata:
aws:cdk:path: somerandomnamebythecdkformetadata:80
sg-XXXXX
CDK 的参数在哪里sg-YYYYYY
,而 ALB 的 SG 也在此特定 CloudFormation 之外进行管理。SG 本身不是此 Cloudformation 的一部分。
因此,通过 CDK 的“部署”可能会更改 CloudFormation 模板以交换负载均衡器正在使用的蓝/绿目标组。我正在使用测试侦听器端口(8443)。因此,无论哪个目标群体是“次要的”,都会被连接到那个听众。如果我完全关闭一侧,那么我将 prod 和 test listener (443/8443) 都映射到同一个(活动)目标组。这种模仿 ECS 蓝/绿部署的情况。但是,就我而言,我正在使用 EC2 实例/AMI 执行此操作。
问题
当我拆除这个云层时,它正确地撤消了AWS::EC2::SecurityGroupIngress
添加。然而,它似乎也AWS::EC2::SecurityGroupIngress
从当前的蓝/绿负载均衡器中删除了现有规则,这使得这些应用程序在蓝/绿 ALB 中无法访问/不健康,因为它们无法在端口 80 上获得成功的健康检查。
我可以在 CloudTrail 中知道发生了一个RevokeSecurityGroupIngres
事件。但是,它运行蓝色/绿色 ALB 之一,而不是/附加到新的/单个 ALB。
这是该事件的净化版本:
{
"eventVersion": "1.05",
"userIdentity": {
"type": "AssumedRole",
"principalId": "ACCOUNT:MYUSER",
"arn": "arn:aws:sts::999999999999:assumed-role/ROLE/MYUSER",
"accountId": "999999999999",
"sessionContext": {
"sessionIssuer": {
"type": "Role",
"principalId": "ACCOUNT",
"arn": "arn:aws:iam::999999999999:role/ROLE",
"accountId": "999999999999",
"userName": "ROLE"
},
"webIdFederationData": {},
"attributes": {
"mfaAuthenticated": "false",
"creationDate": "2020-11-18T15:39:08Z"
}
},
"invokedBy": "cloudformation.amazonaws.com"
},
"eventTime": "2020-11-18T18:14:02Z",
"eventSource": "ec2.amazonaws.com",
"eventName": "RevokeSecurityGroupIngress",
"awsRegion": "us-east-1",
"sourceIPAddress": "cloudformation.amazonaws.com",
"userAgent": "cloudformation.amazonaws.com",
"requestParameters": {
"groupId": "sg-XXXXX",
"ipPermissions": {
"items": [
{
"ipProtocol": "tcp",
"fromPort": 80,
"toPort": 80,
"groups": {
"items": [
{
"groupId": "sg-ZZZZZ"
}
]
},
"ipRanges": {},
"ipv6Ranges": {},
"prefixListIds": {}
}
]
}
},
"responseElements": {
"requestId": "GUID1",
"_return": true,
"unknownIpPermissionSet": {}
},
"requestID": "GUID1",
"eventID": "GUID2",
"eventType": "AwsApiCall",
"recipientAccountId": "999999999999"
}
问题
是否有什么我做错了导致拆除删除与 CloudFormation 无关的入口规则?
有没有人见过这个?