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

2 分钟阅读
0

我想使用本地计算机访问 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 集群,请完成以下步骤:

  1. 创建具有公有和私有子网的 Amazon VPC。

  2. 将 EC2 实例从 Amazon Linux 2 亚马逊机器映像(AMI)启动到 Amazon VPC 的公有子网中。创建实例时,选择以下选项:
    对于自动分配公有 IP,请选择启用。或者,为实例分配弹性 IP 地址
    使用 SSH 规则创建新的安全组
    对于来源,选择自定义,然后输入您的 CIDR 块。或者,选择我的 IP

  3. Amazon Redshift 控制台上,创建集群子网。输入以下信息:
    对于 VPC ID,选择 Amazon VPC 的 ID。
    对于子网 ID,选择私有子网的 ID。

  4. 创建新的安全组

  5. 向安全组添加规则,允许来自实例安全组的入站流量。输入以下信息:
    对于类型,选择自定义 TCP
    端口范围中,输入 Amazon Redshift 的默认端口 5439
    对于来源,选择自定义,然后输入安全组的名称。

  6. 启动新的 Amazon Redshift 集群,或从快照恢复集群。在其他配置页面上,选择以下选项:
    对于选择 VPC,选择您的 Amazon VPC。
    对于集群子网组,选择您的子网组。
    对于可公开访问,选择
    对于 VPC 安全组,选择您的安全组。待集群处于可用状态。

  7. 运行以下命令从本地计算机连接到 EC2 实例:

    ssh -i "your_key.pem" ec2-user@your_EC2_endpoint

    **注意:**将 your_key.pemyour_EC2_endpoint 替换为您的值。有关详细信息,请参阅使用 SSH 从 Linux 或 macOS 连接到 Linux 实例

  8. 运行以下命令安装 telnet

    sudo yum install telnet
  9. 要使用 telnet 测试与 Amazon Redshift 集群的连接,请运行以下命令:

    telnet cluster-endpoint cluster-port

    **注意:**将 cluster-endpointcluster-port 替换为您的值。
    或者,运行以下命令,使用 dig 来确认本地计算机可以访问 Amazon Redshift 集群的私有 IP 地址:

    dig cluster-endpoint

    **注意:**将 cluster-endpoint 替换为集群端点。

创建隧道

要创建隧道,请完成以下步骤:

  1. 在本地计算机上安装 SQL Workbench/J
  2. 下载最新的 Amazon Redshift JDBC 驱动程序
  3. 在 SQL Workbench/J 中,使用 JDBC 驱动程序创建连接配置文件。
  4. 要在 SQL Workbench/J 中配置 SSH 连接,请选择 SSH,然后输入以下信息:
    对于 SSH 主机名,请输入 EC2 实例的公有 IP 地址或 DNS。
    对于 SSH 端口,输入 22
    对于用户名,输入 ec2-user
    对于私钥文件,请输入在创建 EC2 实例时下载的 .pem 文件。
    对于密码,将该字段留空。
    对于本地端口,输入未被占用的本地端口。默认情况下,Amazon Redshift 集群会使用端口 5439。
    对于数据库主机名,输入集群端点。该端点不能包含端口号或数据库名称。
    对于数据库端口,输入 5439
    选择重写 JDBC URL 选项。
  5. 选择确定
  6. 确保正确输入 JDBC URL、超级用户名和密码。
  7. 要确认连接正常,请选择测试。有关更多信息,请参阅 SQL Workbench/J 网站上的通过 SSH 隧道进行连接

(可选)修改 AWS Identity and Access Management(AWS IAM)用户的连接

要以 IAM 用户身份连接到 Amazon Redshift 集群,请完成以下步骤以修改连接配置文件:

  1. 查看 IAM 用户策略。IAM 用户策略必须允许对 dbgroup、dbuser 和 dbname 资源执行 GetClusterCredentialsJoinGroupCreateClusterUser 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 用户的名称。或者,可以使用“*”代替具体用户名。
  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,输入集群所在的区域,例如 us-east-1
  4. 在集群连接配置文件页面上,选择测试

相关信息

为什么我无法连接到我的 Amazon Redshift 集群?

AWS 官方
AWS 官方已更新 4 个月前