如何连接到 Redshift 中的私有集群?

Posted

技术标签:

【中文标题】如何连接到 Redshift 中的私有集群?【英文标题】:How to connect to a private cluster in Redshift? 【发布时间】:2018-06-25 12:37:40 【问题描述】:

我正在尝试尽可能安全地将数据从 mysql 数据库转移到 Amazon Redshift。我已经能够连接到集群,使用 boto3 将 csv 放入 S3,在 redshift 中为数据创建一个表,然后使用 copy 命令将数据从 S3 移动到 redshift。这一切都是在将集群设置为可公开访问的情况下进行的。

我意识到为了我们的安全需求,最好将集群设置为私有。但是,在这样做之后,我不再能够连接到 redshift 来创建表、从 S3 加载数据,并且我一直用来查询的 SQL 客户端也不再连接。但是,我的 VPC 设置为允许我的 IP 连接。有谁知道如何连接到私有集群?

*旁注,这一切仍处于研发阶段,因此我们实际上并未将任何敏感数据放入云端

【问题讨论】:

【参考方案1】:

来自Creating a Cluster in a VPC - Amazon Redshift:

可公开访问:如果您希望集群具有可从公共 Internet 访问的公共 IP 地址,请选择 > 如果您希望集群拥有只能从 VPC 内部访问的私有 IP 地址。

通过选择,集群不再有公共 IP 地址。这意味着它只能从 VPC 内访问。你没有说明你从哪里连接到 Redshift,但听起来你是从互联网上做的。

人们连接到私有数据库(无法从 Internet 访问)的一种常见方式是通过可从互联网。

例如,请参阅:Easy ssh tunneling and port forwarding | AVM Consulting

与 Redshift 实例关联的安全组也需要允许从您连接的任何地方进行访问。

【讨论】:

谢谢,我一直在研究使用EC2实例作为堡垒服务器进行连接【参考方案2】:

我意识到为了我们的安全需求,最好将集群设置为私有。

AWS 中的所有内容都可以启用公共/私有/自定义安全性,您现在启用了 VPC 并将其设为私有,这很好。

但是,在这样做之后,我不再能够连接到 Redshift 以创建表、从 S3 加载数据,并且我用来查询的 SQL 客户端将不再连接。

您可以使用任何客户端厚 (psql) 与瘦客户端 (jdbc/odbc) 使用正确的凭据和 URL 连接到 Redshift。示例 psql:

psql postgresql://username:password@redhift-url-datawarehouse.:5439/dbname?sslmode=require

S3 您将其设为私有或私有文件,然后通过在执行Copy 时提供您的 IAM 角色和凭证来使用复制功能。

这里是复制命令示例。

COPY my_tablename
    (C1  
    ,C2   
    ,C3,...    
  )
    FROM 's3://<<YOUR-BUCKET>>/<<YOUR-FILE>>'
    credentials 'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret- access-key>';

但是,我的 VPC 设置为允许我的 IP 进行连接。有谁知道如何连接到私有集群?

我上面提到的命令应该可以在Redshift 上列入白名单的机器上正常运行。

如果错过任何问题,请告诉我。

【讨论】:

当我在 SQL 客户端中连接时,我使用的是凭据和 url,但是当它设置为私有时连接总是超时。同样使用复制命令并在创建表时输入了我的凭据,但它仍然不想连接。我不确定为什么 我认为您可能缺少启用与端口5439 的TCP 输入/输出连接• 验证您的入站/出站连接规则。我们所做的与我在回答我们的生产/as/dev Redshift 环境时提到的完全相同,它确实有效。 谢谢,我在哪里启用它?是在 VPC 还是 Redshift 控制台中? 它是 VPC 安全规则的一部分,然后您将特定的 VPC 附加到您的实例中,这里是 Redshift 您的情况。 您是否尝试使用本地机器上的工具连接到 redshift?

以上是关于如何连接到 Redshift 中的私有集群?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Node.js 连接到我的 redshift 集群?

如何从我的 Amazon EC2 实例中连接到 Amazon Redshift 集群

创建与 redshift 的粘合连接

如何从本地安装的 spark 连接到 aws-redshift?

如何将 redshift 数据库连接到在 ec2 实例上运行的 bash 脚本

将 IntelliJ 连接到 Amazon Redshift