Manged VPC endpoints

我们的应用可能分布在不同VPC,甚至可能在另一个 AWS 账户中运行,运行着BI或ETL工具。

使用Redshift managed VPC Endpoints(背后是AWS PrivateLink)能连接到VPC内的私有Redshift 集群,可以从同一AWS 账户或另一个 AWS 账户的VPC走内网访问 Redshift,无需使用公共 IP。

当创建Redshift managed VPC Endpoints时,endpoint将显示为目标 VPC(连接Redshift的VPC) 中的私有 IP 地址的ENI。

本节我们将实现以下网络架构,上一节我们在私有子网里创建了Redshift,本节我们创建一个具有公网和私网的VPC,并在里面创建Managed VPC Endpoints,通过它连接到Redshift:

img

创建vpc

在VPC页面创建VPC,命名为redshift-connect, IP CIDR为172.31.0.0/16, 具有两个公网和两个私网:

image-20231022210424346

创建完成后,记下来private1 subnet的CIDR,用于下一步在Redshift中创建Managed Endpoints

image-20231022210954652

进入public1 subnet,开启自动分配公网IP,我们将在后面创建一台EC2, 并登录到EC2通过Managed Endpoint连接到Redshift:

image-20231022212822718

编辑子网设置:

image-20231022212849090

开启自动分配公网IP:

image-20231022212945583

为VPC创建出来的默认安全组(default)上添加一条规则,允许本VPC网段访问5439端口(后面在同一vpc上创建EC2访问Endpoint):

image-20231022214250126

开启 Cluster Relocation

使用Redshift-managed VPC endpoint时,一个前提条件是开启Cluster Relocation,它可以让集群转移到另一个AZ中。在Redshift的Maintenance -> backup details页面,开启Cluster Relocation

image-20231022210622363

img

创建Subnet group

刚才我们创建了一个Redshift connect VPC,我们要为这个VPC创建一个subnet group:

img

为这个subnet group命名为redshift-connect-subnet-group,添加VPC的第一个私网(上面创建VPC的步骤已经复制出来CIDR)

image-20231022211037500

创建Redshift-managed VPC endpoint

进入Redshift的configurations页面,点击Create endpoint

img

n the Endpoint settings section, give it a name as redshift-managed-endpoint and specify the target account and choose the Target VPC and subnet group to deploy the endpoint against.

命名为redshift-managed-endpoint, 选择自己的帐号,VPC选择本节新创建的,subnet group选择上面创建的,安全组选择default(我们已经提前放开5439端口对本VPC CIDR的访问):

image-20231022211308199

点击创建,创建完成后,显示出来Endpoint URL和JDBC URL等:

image-20231022212038784

通过Redshift-managed VPC endpoint连接到Redshift

我们在redshift-connect VPC的公网里创建一台EC2或Cloud 9,然后测试连接到Redshift。

这里以创建Cloud 9为例:

image-20231022212057516

VPC选择redshift-connect-vpc, 子网选择第一个公网(我们已经开启自动分配IP):

image-20231022212226709

创建完成后,打开Cloud 9页面,然后安装PSQL工具:

sudo amazon-linux-extras install postgresql10

通过Redshift-managed VPC endpoint连接到集群:

psql -h redshift-managed-endpoint-endpoint-ltcxd3jclql1y0hf3wbh.czi0m4pk0wjc.us-west-2.redshift.amazonaws.com  -U awsuser -p 5439 -d dev # 注意要显示使用5439端口,默认会用5432端口连接

测试可以连接成功,并执行sql命令:

image-20231023142539019


和VPC Peering的区别

假设我们的connect VPC在自己帐号或其他帐号,我们也可以通过VPC Peering将两个VPC打通,然后连接到Redshift上面去,使用VPC Peering和Redshift-managed VPC endpoint,两种方式有何区别呢?

  • Redshift-managed VPC endpoint优点: 如果使用VPC Peering,我们还要配置路由表,另外两个VPC完全打通会带来额外的安全风险。而使用Redshift-managed VPC endpoint,不用配路由,也足够安全,connect VPC访问不到Redshift VPC中其他的资源。
  • Redshift-managed VPC endpoint缺点:VPC Peering只收0.01$/GB的流量费,而且同AZ不收费。Redshift-managed VPC endpoint除了每小时的0.01$外,还收0.01$/GB的流量费,同AZ也收费。

参考: https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-cross-vpc.html