公司两个AWS VPC有互通的需求,分别是PROD-VPC和PCI-VPC。PCI是Payment Card Industry的简称,通常PCI-VPC部署支付后端服务。关于PCI的相关资料参考AWS PCI DSS,Payment Card Industry 数据安全标准。
PROD服务请求PCI服务是跨VPC访问,在当前架构中通过Transit Gateway(以下简称TGW)实现。如下图所示,当PROD APP子网的应用需要访问PCI APP子网的应用时,会经过Prod VPC Software GW, Transit Gateway,PCI Software GW(图中NLB做负载均衡),最终到PCI APP。其中,TGW相关的路由表明确了目标地址为10.1.0.0/18的请求被路由到PCI-VPC;PCI Software GW所在子网的NACL默认全开,Software GW中EC2的安全组对PROD-VPC的80,443请求全开。
显然,按照当前的路由规则和NACL,安全组配置。从PROD APP子网,Software GW子网的任意应用可以访问PCI区EC2的80,443端口。这是不满足PCI区安全审计的需求的,因此我们需要想办法收敛PROD-VPC到PCI-VPC的访问入口,进行更严格的访问控制。
通过Endpoint service把PCI-VPC的Software GW作为一个服务暴露出来。通过Endpoint在PROD-VPC作为一个接入点,转发PROD服务请求到PCI区的Endpoint service。这样PROD至PCI的请求收敛到PROD-Endpoint至PCI-Endpoint service,方便在Endpoint上通过安全组做网络层面的控制,在Endpoint Service上做AWS账户,IAM用户的访问控制。如下图所示:
新方案搭建完成后即可关闭TGW。
首先创建PCI区的Endpoint Service,选择Load balancer type,AWS会列出该region的所有对应Load balancer。选择我们的目标NLB即可。
按需填写Require acceptance for endpoint,参考:Accept or reject connection requests。按需填写是否开启private DNS name,是否支持IPv4,IPv6以及所需的Tag
?
在Endpoint service的详情页创建Endpoint connection
?
选Other endpoint services,填入创建的Endpoint service name,并verify service。若存在Endpoint service, 则会显示 Service name verified。
??
选择需要创建Endpoint的vpc,AZ,子网。选择附加到endpoint上的安全组。
?
创建 Endpoint。
?
?
创建完成后,可以在Endpoint service的Endpoint connections tab看到刚刚创建并关联的Endpoint
用户可以通过Endpoint,Details tab中的DNS names访问此endpoint;也可以通过Endpoint-Subnets tab中的IP addresss访问Endpoint
?
?
?
在Endpoint的Security Groups tab,可以添加安全组,对进出inbound, outbound请求做限制。
在Endpoint service的 Allow principals tab,可以添加principals以控制哪些账户可以通过Endpoints请求该Endpoint service(用在跨Account/Role/User访问场景)。参考:https://docs.aws.amazon.com/vpc/latest/privatelink/configure-endpoint-service.html#add-remove-permissions
至此,我们将PROD VPC -> PCI VPC的请求都收敛到PROD VPC内的Endpoint。能够通过Endpoint安全组,Endpoint Service Allow principals对请求进行访问控制。消除了PROD区任意服务可访问PCI区EC2 80,443端口的安全隐患。满足了PCI区安全审计的要求。架构如图所示:
AWS PrivateLink Concepts:https://docs.aws.amazon.com/vpc/latest/privatelink/concepts.html