我想使用本地计算机访问 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 集群
要创建 Amazon VPC、EC2 实例和 Amazon Redshift 集群,请完成以下步骤:
-
创建具有公有和私有子网的 Amazon VPC。
-
将 EC2 实例从 Amazon Linux 2 亚马逊机器映像(AMI)启动到 Amazon VPC 的公有子网中。创建实例时,选择以下选项:
对于自动分配公有 IP,请选择启用。或者,为实例分配弹性 IP 地址。
使用 SSH 规则创建新的安全组。
对于来源,选择自定义,然后输入您的 CIDR 块。或者,选择我的 IP。
-
在 Amazon Redshift 控制台上,创建集群子网。输入以下信息:
对于 VPC ID,选择 Amazon VPC 的 ID。
对于子网 ID,选择私有子网的 ID。
-
创建新的安全组。
-
向安全组添加规则,允许来自实例安全组的入站流量。输入以下信息:
对于类型,选择自定义 TCP。
在端口范围中,输入 Amazon Redshift 的默认端口 5439。
对于来源,选择自定义,然后输入安全组的名称。
-
启动新的 Amazon Redshift 集群,或从快照恢复集群。在其他配置页面上,选择以下选项:
对于选择 VPC,选择您的 Amazon VPC。
对于集群子网组,选择您的子网组。
对于可公开访问,选择否。
对于 VPC 安全组,选择您的安全组。待集群处于可用状态。
-
运行以下命令从本地计算机连接到 EC2 实例:
ssh -i "your_key.pem" ec2-user@your_EC2_endpoint
**注意:**将 your_key.pem 和 your_EC2_endpoint 替换为您的值。有关详细信息,请参阅使用 SSH 从 Linux 或 macOS 连接到 Linux 实例。
-
运行以下命令安装 telnet:
sudo yum install telnet
-
要使用 telnet 测试与 Amazon Redshift 集群的连接,请运行以下命令:
telnet cluster-endpoint cluster-port
**注意:**将 cluster-endpoint 和 cluster-port 替换为您的值。
或者,运行以下命令,使用 dig 来确认本地计算机可以访问 Amazon Redshift 集群的私有 IP 地址:
dig cluster-endpoint
**注意:**将 cluster-endpoint 替换为集群端点。
创建隧道
要创建隧道,请完成以下步骤:
- 在本地计算机上安装 SQL Workbench/J。
- 下载最新的 Amazon Redshift JDBC 驱动程序。
- 在 SQL Workbench/J 中,使用 JDBC 驱动程序创建连接配置文件。
- 要在 SQL Workbench/J 中配置 SSH 连接,请选择 SSH,然后输入以下信息:
对于 SSH 主机名,请输入 EC2 实例的公有 IP 地址或 DNS。
对于 SSH 端口,输入 22。
对于用户名,输入 ec2-user。
对于私钥文件,请输入在创建 EC2 实例时下载的 .pem 文件。
对于密码,将该字段留空。
对于本地端口,输入未被占用的本地端口。默认情况下,Amazon Redshift 集群会使用端口 5439。
对于数据库主机名,输入集群端点。该端点不能包含端口号或数据库名称。
对于数据库端口,输入 5439。
选择重写 JDBC URL 选项。
- 选择确定。
- 确保正确输入 JDBC URL、超级用户名和密码。
- 要确认连接正常,请选择测试。有关更多信息,请参阅 SQL Workbench/J 网站上的通过 SSH 隧道进行连接。
(可选)修改 AWS Identity and Access Management(AWS IAM)用户的连接
要以 IAM 用户身份连接到 Amazon Redshift 集群,请完成以下步骤以修改连接配置文件:
- 查看 IAM 用户策略。IAM 用户策略必须允许对 dbgroup、dbuser 和 dbname 资源执行 GetClusterCredentials、JoinGroup 和 CreateClusterUser Amazon Redshift 操作。以下是 IAM 策略示例:
{
"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"
]
}
]
}
注意:将 us-west-2 替换为集群所在的 AWS 区域,将 012345678912 替换为您的 AWS 账户 ID,将 user_name 替换为 Amazon Redshift 用户的名称。或者,可以使用“*”代替具体用户名。
- 在 SQL Workbench/J 中,将连接配置文件的 JDBC URL 的第一部分更改为 jdbc:redshift:iam。例如,将 JDBC URL 更改为 jdbc:redshift:iam://127.0.0.1:5439/example。
- 选择扩展属性,然后输入以下信息:
对于 AccessKeyID,输入 IAM 用户的访问密钥 ID。
对于 SecretAccessKey,输入 IAM 用户的秘密访问密钥。
(可选)对于 DbGroups,选择此选项以强制 IAM 用户加入现有群组。
对于 DbUser,输入 IAM 用户的名称。
对于 AutoCreate,将该选项设置为 true。
对于 ClusterID,输入 Amazon Redshift 集群的名称。
对于 Region,输入集群所在的区域,例如 us-east-1。
- 在集群连接配置文件页面上,选择测试。
相关信息
为什么我无法连接到我的 Amazon Redshift 集群?