为了允许 API Gateway 访问我在 AWS 中的私有网络负载均衡器,我需要将属性
Enforce inbound rules on PrivateLink traffic
设置为 Off
(参见参考资料)。从 AWS 控制台可以很容易地做到这一点,只需转到指定负载均衡器的安全选项卡即可:
但是,在查看了 Load Balancer 和 Security Group CDK 参考资料后,我无法找到从 CDK 执行此操作的方法。即使是普通的 CloudFormation 似乎也没有与此功能相关的属性(AWS::ElasticLoadBalancingV2::LoadBalancer、AWS::EC2::SecurityGroup)。有没有办法从 CDK 设置这个属性?我有严格的任务要求自动化所有基础设施。
TL;DR 使用自定义资源通过
SetSecurityGroups
SDK 调用设置属性。
SetSecurityGroups API 有一个
EnforceSecurityGroupInboundRulesOnPrivateLinkTraffic
参数,可设置为 on
或 off
。请参阅文档中的为 API Gateway 私有集成设置网络负载均衡器。
您可以使用自定义资源将此 API 调用与您的 CDK 应用程序集成。在 CloudFormation 不支持某个属性的情况下,自定义资源是一个后备选项。 CDK 和 CloudFormation 中都存在这个概念。自定义资源通常由 Lambda 支持,CloudFormation 在部署期间为您调用。 CDK 提供多种类型的自定义资源。选项可能会让人不知所措。
幸运的是,您可以使用 AwsCustomResource,这是一种专为进行 AWS SDK 调用而定制的构造。将
SetSecurityGroups
作为 action
属性传递,并将 EnforceSecurityGroupInboundRulesOnPrivateLinkTraffic: off
作为 parameter
。