首页 > 其他分享 >个人随记 —— AWS RDS 的 Private Link 访问方案

个人随记 —— AWS RDS 的 Private Link 访问方案

时间:2023-01-28 21:55:30浏览次数:35  
标签:子网 RDS ip AWS NLB EC2 VPC 随记

一句话简述问题

AWS RDS 服务并没有官方提供 private link 的链接通路,需要手动配置。

方案设计

image
如图所示,需要申请规划

  • VPC、Subnet、Security Group
  • RDS-MySQL
  • Proxy
  • NLB
  • Private Link Service
    最后通过在需要访问 RDS-MySQL 的 VPC 中申请 Endpoint,从而打通网络。
  1. 为什么引入NLB
    Private link service 申请需要绑定一个 NLB 来实现。
  2. 为什么需要引入Proxy?
    RDS MySQL 暴露的链接串是 DNS 链路,绑定的实际的后端的 ip 是会因为主备倒换等发生不可控的改变,我们必须确定到具体的 ip,保证 nlb 挂在的后端 ip 正确。
    Proxy 会在每个 az 的 subnet 拉起进程,其 ip 会保持不变。引入 Proxy,将 Proxy 的 ip 作为 NLB 的后端 ip。
    PS:其实 Proxy 本质上也使用了 Privatelink Service,但是这个由 RDS 服务托管,不允许用户私自建立 endpoint 进行链接。

AWS 手动验证方案步骤

账号准备

这边需要准备两个AWS账号。

  • 每个账户一个 VPC,其中有 2 个公有/私有子网。
  • 每个账户(公共子网)中有一个 EC2 实例,用于测试访问

VPC、subnet规划

两个账号都新建一个VPC,其中包含两个子网
image

新建安全组

在service端账号的VPC下创建两个安全组,一个名为sgEC2,另一个名为sgRDS。

  • 对于sgEC2组,允许来自某些 IP 的 SSH,例如来自工作/家庭的 IP。我们将创建的 EC2 实例将位于公共子网中。
  • 对于sgRDS组,允许来自sgEC2组的实际子网 ID 的端口 3306 (MySQL) 和另一个规则以允许从其自身访问 3306。这就是sgRDS规则的样子。
    现在,对consumer端帐户执行相同的操作,但只创建sgEC2组。
  • sgEC2:
    image
  • sgRDS:
    image

新建EC2

在两个账号都创建一台EC2。

  • 挂载在公网subnet下,且需要绑定公网ip,用于登录验证使用。
  • 登录时证书权限需要缩小。如下操作即可
    image

申请RDS MySQL

选择私网子网,不激活公网且安全组绑定 sgRDS 即可。
Test:登录 EC2,测试直接连接 RDS 的 DNS 地址能够正常登录
image

mysql -h${link} -u${root} -p${pws}

申请RDS PROXY

申请RDS PROXY的时候需要选择一个secert。这个secert的账号密码需要和RDS MYSQL的保持一致。
image
创建新的secert时候,需要创建一个KMS KEY,类型选择默认即可
image
RDS PROXY 需要一个新建一个 IAM ROLE,托管给 RDS 服务使用,这个 ROLE 需要绑定刚才新建的 secert 还有 KMS KEY 的相关使用权限,并且允许 RDS 进行 assume token。这边注意 AWS RDS console 的一个 bug。console 选择新建一个 ROLE 时候,授予的 KMS KEY 权限相关的 ARN 是错误的。需要在 IAM 管理平台手动修正!!
image
Test:登录 EC2,测试直接连接 RDS PROXY 的地址能够正常登录

新建NLB

在 EC2 通过 nslookup 命令查询 RDS PROXY 对应的 ip 地址。
image
新建 NLB 时候需要注意选择内部子网,且在测试链接之前需要确认 sgRDS 安全组是否允许这两个内部子网访问 RDS 数据库。
Test:登录 EC2,测试直接连接 NLB 的地址能够正常登录

  • 创建endpoint service
    选择 Network 类型,绑定上面创建的 NLB
  • 创建endpoint
    在对应 VPC 的公网 subent 创建 endpoint,并且绑定 sgECS 的安全组。确保放开 sgECS 对于公网 subnet 对于 3306 端口的访问。
    Endpoint service 记得接受建立链接
  • 测试
    登录EC2,测试直接连接engpoint service的地址能够正常登录
    image

对于MetaDB Privatelink 自动化接受认证

  • acceptanceRequired = false
    无需认证直接接受。可以配合允许访问的 arn 限定范围配合使用
  • acceptanceRequired = true
    需要手动调用 aws api,通过 Endpoint ID 捞取待验证的链接,自动进行验证。

标签:子网,RDS,ip,AWS,NLB,EC2,VPC,随记
From: https://www.cnblogs.com/BlueMountain-HaggenDazs/p/17071343.html

相关文章

  • [Docker] Storing Container Data in AWS S3
    StoringContainerDatainAWSS3IntroductionUsingDockervolumesisthepreferredmethodofstoringcontainerdatalocally.Volumesupportisbuiltdirectly......
  • [LeetCode] 472. Concatenated Words
    Givenanarrayofstrings words (withoutduplicates),return allthe concatenatedwords inthegivenlistof words.A concatenatedword isdefinedasa......
  • 使用GTID同步RDS到自建mysql
    使用GTID同步RDS到自建mysql这篇博客应该是我春节结束前关于工作上的最后一篇博客。。。在我上家公司里,经常做mysql传统方式下的主从同步,面试题也经常考。而......
  • 跟AWS学极致服务
    春节期间,除了还在看技术书籍外,我一直抽空断断续续地在看《极致服务:创造不可思议的客户体验》一书。之前创业的经历,让我一直反思,除了赛道和落地之外,是否在服务质量上也有缺......
  • VC下这样创建实例m_pRecordset.CreateInstance(_uuidof(Connection))不一定成功!...
    //昨天在打开数据库的记录集时,出现了一个错误,错误提示为无效的指针类型,上网查了一下,原来是我的//的程序在创建实例时,出现了错误,呵呵,以前我都是这样创建实例的:m_pRecordset.......
  • 【优秀论文解读】BoW3D: Bag of Words for Real-time Loop Closing in 3D LiDAR SLAM
    论文简介本论文新颖性在于3D激光雷达中实时闭环且能够实时进行回环矫正词袋模型为BoW3D实时构建词袋效率高但是鲁棒性未知词袋存储word包含两种变量:Dim_value为描......
  • tensorboard 可视化 No dashboards are active for the current data set.
    错误运行后出现:补救修正logs文件位置,添加绝对路径......
  • 【随记】2023-1-15 生活感想
    眨眼睛进入it行业也有5年之久,一直没什么成绩,也找不到方向和目标。因为这个原因,一度抑郁,看不到未来。比我年轻的人陆陆续续涌入这个行业,我能做的活他们也能做,甚至比我做得更......
  • UVA1502 GRE Words
    一道\(AC\)自动机\(+\)线段树难题。#include<algorithm>#include<cstring>#include<cmath>#include<cstdio>usingnamespacestd;constintN=3e5+10;tem......
  • CnWizards v0.9.9.621
    +增加对RADStudioXE2的支持。+增加ImageList的组件编辑器,支持Alpha通道与在线搜索图标。*代码高亮修正Delphi2009以及以上版本中Tab键导致错位的问题。*......