如何从本地计算机访问私有的 Amazon Redshift 集群?
上次更新日期:2021 年 7 月 9 日
我想使用本地计算机访问 Amazon Virtual Private Cloud (Amazon VPC) 私有子网中的 Amazon Redshift 集群。我该如何操作?
简短描述
使用 Amazon Elastic Compute Cloud (Amazon EC2) 实例和 SQL Workbench/J 创建一条 SSH 隧道。该隧道会将所有来自本地计算机的传入流量路由到该私有 Amazon Redshift 集群。
解决方法
创建 Amazon VPC、EC2 实例和 Amazon Redshift 集群
1. 使用公有和私有子网创建 Amazon VPC
2. 在您在第 1 步中创建的 Amazon VPC 公有子网中,从 Amazon Linux 2 Amazon Machine Image (AMI) 启动 EC2 实例。在创建实例时选择以下选项:
在第 3 步中,对于 Auto-assign Public IP(自动分配公有 IP),选择 Enable(启用)。或者,您也可为该实例分配一个弹性 IP 地址。
在第 6 步中,请创建一个包含 SSH 规则的新安全组。对于 Source (源),请选择 Custom (自定义),然后输入您的 IP CIDR 块,或选择 My IP (我的 IP)。
3. 在 Amazon Redshift 控制台中,创建一个集群子网组。
对于 VPC ID,请选择您在第 1 步中创建的 Amazon VPC 的 ID。
对于 Subnet ID (子网 ID),请选择该私有子网的 ID。
4. 创建一个新的安全组。
5. 向新创建的安全组添加一条规则以允许来自该实例安全组的入站流量:
对于 Type(类型),请选择 Custom TCP(自定义 TCP)。
对于端口范围,请输入 5439(Amazon Redshift 的默认端口)。
对于源,请选择自定义,然后输入您在第 2 步中创建的安全组的名称。
6. 启动新的 Amazon Redshift 集群或从快照还原集群。在 Additional Configuration (其他配置) 页面选择以下选项:
对于 Choose a VPC (选择 VPC),请选择您在第 1 步中创建的 Amazon VPC。
对于 Cluster subnet group (集群子网组),请选择您在第 3 步中创建的组。
对于允许公有访问,选择否。
对于 VPC security groups (VPC 安全组),请选择您在第 4 步中创建的安全组。
等集群处于可用状态之后,再继续操作。
7. 运行以下命令从本地计算机连接到 EC2 实例。将 your_key.pem 和 your_EC2_endpoint 替换为您自己的值。有关更多信息,请参阅使用 SSH 连接到 Linux 实例。
ssh -i "your_key.pem" ec2-user@your_EC2_endpoint
8. 运行以下命令安装 telnet:
sudo yum install telnet
9. 使用 telnet 来测试到 Amazon Redshift 集群的连接。在以下命令中,将 cluster-endpoint 和 cluster-port 替换为您自己的值。
telnet cluster-endpoint cluster-port
或者,使用 dig 来确认本地计算机可以到达 Amazon Redshift 集群的私有 IP 地址。在以下命令中,将 cluster-endpoint 替换为您的集群终端节点。
dig cluster-endpoint
创建隧道
1. 在本地计算机上安装 SQL Workbench/J。
2. 下载最新版本的 Amazon Redshift JDBC 驱动程序。
3. 在 SQL Workbench/J 中,使用您在第 2 步中下载的 JDBC 驱动程序创建一个连接配置文件。
4. 要在 SQL Workbench/J 中配置 SSH 连接,请选择 SSH,然后输入以下参数:
SSH 主机名:EC2 实例的公有 IP 地址或 DNS
SSH 端口:22
用户名:ec2-user
私有密钥文件:您在创建 EC2 实例时下载的 .pem 文件
密码:将此字段保留为空
本地端口:任何可用本地端口(默认情况下,您的 Amazon Redshift 集群使用端口 5439)
数据库主机名:集群终端节点(不应包含端口号或数据库名称)
数据库端口:5439
重写 JDBC URL:选择此选项
5. 选择确定以保存 SSH 设置。
6. 确认 JDBC URL 以及超级用户名和密码的输入正确。
7. 选择 Test(测试)以确认连接工作正常。有关更多信息,请参阅 SQL Workbench/J 文档的通过 SSH 隧道连接。
(可选)修改 AWS Identity and Access Management (IAM) 用户连接
要以 IAM 用户身份连接到 Amazon Redshift 集群,请修改您在上一步中创建的连接配置文件:
1. 确认该 IAM 用户拥有的策略允许对 dbgroup、dbuser 和 dbname 资源执行 GetClusterCredentials、JoinGroup 和 CreateClusterUser 等 Amazon Redshift 操作。替换下例中的如下值:
us-west-2:您的集群所在的区域
012345678912:您的 AWS 账户 ID
clustername:您的集群的名称
group_name:数据库组的名称
user_name:Amazon Redshift 用户的名称(您可以使用“*”而不指定具体用户)
database_name:数据库名称
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"redshift:GetClusterCredentials",
"redshift:CreateClusterUser",
"redshift:JoinGroup"
],
"Resource": [
"arn:aws:redshift:eu-west-2:012345678912:dbgroup:clustername/group_name",
"arn:aws:redshift:eu-west-2:012345678912:dbuser:clustername/user_name or * ",
"arn:aws:redshift:eu-west-2:012345678912:dbname:clustername/database_name"
]
}
]
}
2. 在 SQL Workbench/J 中,将连接配置文件 JDBC URL 的第一部分更改为 jdbc: redshift: iam。(例如,您可以将 JDBC URL 更改为“jdbc:redshift:iam://127.0.0.1:5439/example”。)
3. 选择扩展属性,然后创建以下属性:
AccessKeyID:该 IAM 用户的访问密钥 ID
SecretAccessKey:IAM 用户的秘密访问密钥
DbGroups:强制 IAM 用户加入某个现有组
DbUser:IAM 用户的名称
AutoCreate:设置为 true
ClusterID: Amazon Redshift 集群的名称(而不是数据库名称)
Region:该集群所在的 AWS 区域,例如 us-east-1
4. 在集群连接配置文件页面上,选择 Test(测试)。