如何连接到 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 中的私有集群?的主要内容,如果未能解决你的问题,请参考以下文章