今天来带各位一起解读下Azure中private endpoint这个服务的作用,以及使用方式,private endpoint是在设计Azure架构以及组网时必不可少的一项服务,我们都知道微软有很多PaaS服务,微软的PaaS服务其实和其他云的多少有点区别,其他云的PaaS服务,很多其实可以直接部署到客户云上的虚拟网络中,但是微软的PaaS服务一部分是可以部署在虚拟网络中的,比如说HDInsight,或者SQL MI,但是还有一些PaaS服务没办法部署到虚拟网络里,像是Storage, Azure SQL等等
所以在以前设计一些安全架构的时候,碰到这种PaaS产品就比较头疼,因为这种一般都是需要通过service endpoint来将流量限制到只能在某一个虚拟网络的范围内,但是一旦需要考虑跨账号,跨订阅的情况,这种方案基本就不能做了
private endpoint的出现很大程度上缓解了这种问题,按照官网的话讲
Azure 专用终结点是一个网络接口,可以将你通过专用且安全的方式连接到 Azure 专用链接支持的服务。 专用终结点使用 虚拟网络中的专用 IP 地址将服务有效地引入 虚拟网络中。 服务可以是 Azure 存储、Azure Cosmos DB、SQL 等 Azure 服务,也可以是你自己的专用链接服务。
也就是说使用private endpoint,你可以以一种很私密的方式来访问Azure的PaaS服务,所有流量也将会保留在Azure数据中心内部,不需要担心暴露在Internet上,当然也能够满足大公司的安全合规要求,而且这种方式也不需要考虑是否在同一个订阅,租户内,下边就来演示下一个跨租户的访问场景:
首先介绍下实验环境
Azure账号两个
Storage account属于账户A region East US
虚拟网络属于账户B region Korea Central
现在想要在账户B建立一个private endpoint,以私密方式访问账户A的storage account,属于跨region同时跨tenant,也就是说账户B的虚拟网络里的VM,访问账户A的storage account
首先在账户B里创建private endpoint,首先找到private link服务,选择private endpoint,在private endpoint里选择add
这里要选好region,这个region是指的虚拟网络的region,而非storage account的
因为我们要连接的资源不在同一个目录下,所以需要使用resource id连接
ResourceID直接在storage account的property里就能找到
输入进去之后需要提供subresource,因为storage account里也会分blob, table, file等多种资源,所以private endpoint需要能精确到具体访问哪个服务,这里直接输入Blob
可以输入的Subresource需要在这里找
接下来就需要选择要连接的虚拟网络了,注意这里因为没办法集成private DNS Zone,所以之后一定要手动配置DNS记录,正常DNS记录会由private DNS Zone自动配置
直接创建即可
本质上其实private endpoint会在需要连接PaaS服务的虚拟网络里创建一个网卡,这个网卡会被分配一个私网IP,这个IP也就是我们以后需要访问PaaS服务时用到的IP,可以理解成它就是我们要连接的PaaS服务
因为是跨tenant的,账户B也没权限操作storage account,所以没办法自动approve,需要在账户A下手动approve这个private endpoint的请求
接下来我们到PLTEST这个虚拟网络的一个虚机中,ping下storage account的url,可以看到还是一个公网IP
这是因为我们之前没办法集成private DNS Zone,所以只能手动修改DNS配置
接下来我们尝试用storage SAS 在虚拟网络里访问下blob
Wget ‘https://deststoragemxy.blob.core.windows.net/test/bash.txt?sp=r&st=2020-10-29T05:20:48Z&se=2020-10-29T13:22:48Z&spr=https&sv=2019-12-12&sr=b&sig=Szev0Kz7W%2BUlTDnd%2BFabz%2Fs7rfNROH2pW7adisMmeoc%3D’ -O bash.txt
可以看到连接的地址已经是私网地址,而且可以顺利访问到Blob