如何从本地计算机访问私有的 Amazon Redshift 集群?

上次更新时间:2019 年 9 月 12 日

我想使用本地计算机访问 Amazon Virtual Private Cloud (VPC) 私有子网中的 Amazon Redshift 集群。

简短描述

使用 Amazon Elastic Compute Cloud (Amazon EC2) 实例和 SQL Workbench/J 创建一条 SSH 隧道。该隧道会将所有来自本地计算机的传入流量路由到该私有 Amazon Redshift 集群。

解决方法

创建 VPC、EC2 实例和 Amazon Redshift 集群

1.    创建 VPC(带有公有子网和私有子网)。

2.    在您在第 1 步中创建的 VPC 公有子网中,从 Amazon Linux 2 Amazon 系统映像 (AMI) 启动 EC2 实例。在创建实例时选择以下选项:
第 3 步:配置实例详细信息中,对于自动分配公有 IP,选择启用。您也可为该实例分配一个弹性 IP 地址
第 6 步:配置安全组中,请创建一个含有 SSH 规则的新安全组。对于“源”,请选择自定义然后输入您的 IP CIDR 块,或选择我的 IP。记住安全组的名称 — 您将在第 5 步中用到它。

3.    在 Amazon Redshift 控制台中,创建一个集群子网组
对于 VPC ID,请选择您在第 1 步中创建的 VPC 的 ID。
对于子网 ID,请选择该私有子网的 ID。

4.    创建一个新的安全组

5.    向该安全组添加一条规则以允许来自该实例安全组的入站流量:
对于类型,请选择自定义 TCP
对于端口范围,请输入 5439(Amazon Redshift 的默认端口)。
对于,请选择自定义,然后输入您在第 2 步中创建的安全组的名称。

6.    启动新的 Amazon Redshift 集群从快照还原集群。在其他配置页面选择以下选项:
对于选择 VPC,请选择您在第 1 步中创建的 VPC。
对于集群子网组,请选择您在第 3 步中创建的组。
对于允许公有访问,选择
对于 VPC 安全组,请选择您在第 4 步中创建的安全组。

集群的启动可能需要几分钟。等集群处于可用状态之后,再继续操作。

7.    运行以下命令从本地计算机连接到 EC2 实例。将 your_key.pemyour_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-endpointcluster-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 文件
密码:将此字段留空
本地端口:任何未被占用的本地端口。为简便起见,您可以使用与集群所用端口相同的端口(默认为 5439)。
数据库主机名:集群终端节点。请勿包含端口号或数据库名称。
数据库端口:5439
重写 JDBC URL:选中此框

5.    选择确定以保存 SSH 设置。

6.    确认 JDBC URL 以及主用户名和密码的输入正确。

7.    选择测试以确认连接工作正常。

有关更多信息,请参阅 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: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.    在集群连接配置文件页面上,选择测试


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助吗?