ローカルマシンからプライベート Amazon Redshift クラスターにアクセスする方法を教えて下さい。

最終更新日: 2020 年 8 月 27 日

ローカルコンピュータを使用して、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.    Amazon Linux 2 Amazon マシンイメージ (AMI) から、ステップ 1 で作成した VPC のパブリックサブネットに、EC2 インスタンスを起動します 。インスタンスを作成するときに、以下のオプションを選択します。
手順 3 の [自動割り当てパブリック IP] で、[有効化] を選択します。または、Elastic IP アドレスをインスタンスに割り当てることができます。
ステップ 6 で、SSH ルールで新しいセキュリティグループを作成します。[ソース] で [カスタム] を選択してから、 IP CIDR ブロックを入力するか、[マイ IP] をクリックします。

3.    Amazon Redshift コンソールで、クラスターサブネットグループを作成します
[VPC ID] で、ステップ 1 で作成した VPC の ID を選択します。
[Subnet ID] で、プライベートサブネットの ID を選択します。

4.    新しい セキュリティグループを作成します。

5.    インスタンスのセキュリティグループからのインバウンドトラフィックを許可する新たに作成したセキュリティグループにルールを追加します。
[Type] で、[Custom TCP] を選択します。
[Port Range] に、5439 (Amazon Redshift のデフォルトのポート) を入力します。
[Source] で、[Custom] をクリックしてから、ステップ 2 で作成したセキュリティグループの名前を入力します。

6.    新しい Amazon Redshift クラスターを起動するか、スナップショットからクラスターを復元します。Additional Configuration ページで、以下のオプションを選択します。
[Choose a VPC] で、ステップ 1 で作成した VPC を選択します。
[Cluster subnet group] で、ステップ 3 で作成したグループを選択します。
[Publicly accessible] で、[No] を選択します。
[VPC security groups] で、ステップ 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 hostname: EC2 インスタンスのパブリック IP アドレスまたは DNS
SSH port: 22
Username: ec2-user
Private key file: EC2 インスタンスの作成時にダウンロードした .pem ファイル
Password: このフィールドを空にしておきます
Local port: 任意の空きローカルポート (Amazon Redshift クラスターはデフォルトでポート 5439 を使用します)
DB hostname: クラスターエンドポイント (ポート番号やデータベース名を含めないでください)
DB port: 5439
Rewriet JDBC URL: このオプションを選択します。

5.    [OK] をクリックして SSH 設定を保存します。

6.    JDBC URL とスーパーユーザー名およびパスワードが正しく入力されていることを確認します。

7.    [Test] をクリックして、 この接続が機能していることを確認します。詳細については、SQL Workbench/J ドキュメントの「Connecting through an SSH tunnel」をご参照ください。

(オプション) 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.    [Extended Properties] を選択し、次のプロパティを作成します。
AccessKeyID
: IAM ユーザーのアクセスキー ID
SecretAccessKey: IAM ユーザーのシークレットアクセスキー
DbGroups: オプション。IAM ユーザーが既存のグループに参加するよう強制します。
DbUser: IAM ユーザーの名前
AutoCreate: true に設定
ClusterID
: Amazon Redshift クラスターの名前 (データベース名ではありません)
Region
: クラスターがある AWS リージョン。us-east-1など

4.    クラスター接続プロファイルのページで、[Test] を選択します。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術的なサポートが必要ですか?