0

背景:

我有一个现有的蓝/绿架构设置,它使用两个负载均衡器(蓝/绿),并基于 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-XXXXXCDK 的参数在哪里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 无关的入口规则?

有没有人见过这个?

4

0 回答 0