0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DataSpider ServistaからSnowflakeにPrivateLinkで接続してみた

Posted at

はじめに

こんにちは、すぎもんです:grinning:
本記事では、DataSpider Servista(以下、DSS)からSnowflakeへPrivateLink 経由で接続してみようと思います。AWS PrivateLinkを使うことで、インターネットを経由せずに接続が可能です。

今回やること

DSSとSnowflakeをPrivateLinkで接続し、DSSで作成したスクリプトで、Snowflakeのデータベースのレコードを読み取り、CSVファイルに出力してみます。
image.png

それでは早速やってみましょう!

実施手順

以下の手順を実施します。
<AWS設定>
1.PrivateLinkの有効化
<Snowflake設定>
2.PrivateLink情報を取得
3.SnowflakeテストDB作成
4.キーペア認証の設定
<AWS設定>
5.DSS側のVPCエンドポイント作成
6.ホストゾーンにレコード登録
<Snowflake設定>
7.接続元IPアドレス許可
<DSS設定>
8.DSSの接続設定
9.テーブル読み取りスクリプト実行

1. PrivateLinkの有効化<AWS設定>

SnowflakeのPrivateLinkを有効化します。

① AWS CLI 用環境変数設定

AWS CloudShellで以下のコマンドを実行し、アクセスキー/シークレットキーを設定します。

export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
unset AWS_SESSION_TOKEN
unset AWS_PROFILE

② フェデレーショントークン取得
AWS CloudShellで以下のコマンドを実行し、フェデレーショントークンを取得します。

aws sts get-federation-token --name sam

以下のように結果が出力されます。
image.png

③ PrivateLinkを有効化する
SnowflakeコンソールのSQLワークシートで以下のコマンドを実行し、PrivateLinkを有効化します。

SELECT SYSTEM$AUTHORIZE_PRIVATELINK ( '<aws_id>' , '<federated_token>' );

<aws_id>は上記②の実行結果のFederatedUserに含まれる12桁の識別子
<federated_token>は上記②の実行結果全体

image.png
「Private link access authorized.」が出力されることを確認します。

2.PrivateLink 情報を取得<Snowflake設定>

DSSの接続設定に使用するSnowflakeのPrivateLink情報を取得します。

① PrivateLinkの情報取得
SnowflakeコンソールのSQLワークシートで以下のSQLを実行し、PrivateLink情報を取得します。

SELECT SYSTEM$GET_PRIVATELINK_CONFIG();

image.png

  • privatelink-account-url
    PrivateLinkのURL。以降の手順で使用するため値をメモしておく
  • privatelink-vpce-id
    VPCE Service 名。以降の手順で使用するため値をメモしておく

3.SnowflakeテストDB作成<Snowflake設定>

Snowflakeに検証用のテストDBを作成します。

① データベース作成
SnowflakeコンソールのSQLワークシートで以下のSQLを実行し、データベースを作成します。
※データベース名を「CONNECTION_TEST_DB」で作成する場合の例

CREATE OR REPLACE DATABASE CONNECTION_TEST_DB;

image.png
「successfully created.」が出力されることを確認します。

② スキーマ作成
以下のSQLを実行し、スキーマを作成します。
※データベース名を「CONNECTION_TEST_DB」、スキーマ名を「TEST_SCHEMA」で作成する場合の例

CREATE OR REPLACE SCHEMA CONNECTION_TEST_DB.TEST_SCHEMA;

image.png
「successfully created.」が出力されることを確認します。

③ テーブル作成
以下のSQLを実行し、テーブルを作成します。
※テーブル名を「TEST_TABLE」、カラムをNUMBER型のIDとVARCHAR型のMESSAGEで作成する場合の例

CREATE OR REPLACE TABLE TEST_TABLE (
    ID NUMBER(38,0),
    MESSAGE VARCHAR(16777216)
);

image.png
「successfully created.」が出力されることを確認します。

④ ウェアハウス名の確認
ウェアハウス名を確認します。

SELECT CURRENT_WAREHOUSE();

image.png
ウェアハウス名が出力されることを確認します。

4.キーペア認証の設定<Snowflake設定>

キーペア認証で使用するキーペアを作成し、Snowflakeユーザーに公開キーを割り当てます。

① 秘密鍵の生成
AWS CloudShell(opensslがインストールされている任意の環境)で以下のコマンドを実行し、任意のパスワードを入力します。

openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 des3 -inform PEM -out rsa_key.p8

image.png
秘密鍵が作成されていることを確認します。

②公開鍵の生成
以下のコマンドを実行し、任意のパスワードを入力します。

openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub

image.png
公開鍵が作成されていることを確認します。

③ Snowflakeユーザーに公開キーの割り当て
SnowflakeコンソールのSQLワークシートで以下のSQLを実行します。
RSA_PUBLIC_KEYの値に②で生成した公開キーを指定します。

ALTER USER DEV_ADMIN SET RSA_PUBLIC_KEY='(公開キーを指定)';

image.png

「Statment executed successfully.」が出力されることを確認します。

5.DSSのVPCエンドポイント作成<AWS設定>

DSS側のVPCエンドポイントを作成します。

①セキュリティグループ作成
VPCエンドポイントのセキュリティグループを作成します。
インバウンドルールは、DSSのVPCのCIDRからのHTTPS(TCP/443)通信を許可します。
image.png

② VPCエンドポイント作成
以下のようにVPCエンドポイントを作成します。

  • エンドポイントの設定
    任意の名前を設定し、タイプに「PrivateLink Ready パートナーのサービス」を選択します。
    image.png

  • サービス設定
    サービス名に2.PrivateLink 情報を取得<Snowflake設定>で確認したprivatelink-vpce-idの値を設定し、「サービスの検証」を押下します。
    image.png

  • ネットワーク設定
    VPCにDSSのEC2があるVPCを指定し、プライベートDNS名のチェックを外します。
    image.png

  • サブネット
    任意のアベイラビリティゾーンを選択し、任意のサブネットIDを指定します。
    image.png

  • セキュリティグループ
    ①で作成したセキュリティグループを指定します。
    image.png

  • タグ
    Nameタグに任意の名前を設定し、「エンドポイントを作成」ボタンを押下します。
    image.png

6.ホストゾーンにレコード登録<AWS設定>

AWS Route53のホストゾーンにレコードを登録します。

① ホストゾーン作成
以下のようにホストゾーンを設定し、「ホストゾーンの作成」を押下します。
・ドメイン名:ap-northeast-1.privatelink.snowflakecomputing.com
・タイプ:プライベートホストゾーン
・リージョン:DSSのEC2があるリージョン
・VPC ID:DSSのEC2があるVPCのID
image.png

② ホストゾーンのレコード作成
以下のようにレコードを設定し、「レコードを作成」を押下します。
・レコード名:2.PrivateLink 情報を取得<Snowflake設定>で確認したprivatelink-account-urlの値
・レコードタイプ:Aレコード
・エイリアス:ON
・トラフィックのルーティング先:5.DSSのVPCエンドポイント作成<AWS設定>で作成したVPCエンドポイントのDNS名

image.png

7.接続元IPアドレス許可<Snowflake設定>

DSSの接続元IPアドレス範囲をSnowflake側で許可するように設定します。

① 既存の許可リストを確認
SnowflakeコンソールのSQLワークシートで以下のSQLを実行し、既存の許可リストを確認します。
DESC NETWORK RULE SECURITY_DB.PUBLIC.SISCO_PROCY;

image.png

② DSSの許可設定を追加
DSSがあるVPCのIPv4 CIDRを確認します。
以下のSQLを実行し、接続元IPアドレス範囲を許可する設定をします。
ALTER NETWORK RULE SECURITY_DB.PUBLIC.SISCO_PROCY SET VALUE_LIST = ('X.X.X.X/X', 'Y.Y.Y.Y/Y');

本設定は追記ではなく、上書きであるため、
①で確認したCIDRとDSSがあるVPCのCIDRの両方を設定します。

image.png
「Statment executed successfully.」が出力されることを確認します。

8.DSSの接続設定<DSS設定>

DataSpider Studioのグローバルリソースの設定を作成します。

① グローバルリソース設定の作成
コントロールパネルを開き、グローバルリソースの設定をクリックします。
image.png

ファイルメニューから、「新規グローバルリソース作成」をクリックします。
image.png

クラウド⇒Snowflakeを選択します。
表示されたSnowflakeのアイコンをダブルクリックします。
image.png

以下の値を設定します。

image.png

接続テストボタンを押下し、接続成功となることを確認します。

最後にOKボタンを押下します。
image.png

9.テーブル読み取りスクリプト実行<DSS設定>

DataSpider Studioのテーブル読み取りスクリプトが正しく動作することを確認します。

① スクリプト作成
Snowflakeのテーブル読み取り、CSVファイルに出力する処理のスクリプトを作成します。
image.png

・get_table_dataのプロパティ
image.png

・mapping設定
image.png

・csv_writeのプロパティ
image.png

② スクリプト実行
スクリプトを実行します。
image.png
「スクリプトの実行に成功しました。」のポップアップが出力されることを確認します。

③ 結果確認
SnowflakeコンソールのSQLワークシートで以下のSQLを実行し、テーブルに登録されているデータの内容を確認します。
select * from test_table
image.png

DSSのスクリプト実行により作成されたCSVファイルの中身を確認します。
image.png

両方の内容が一致することを確認します。

おわりに

いかがだったでしょうか。
DSSからSnowflakeにPrivateLinkで接続して、Snowflakeのデータベースのレコードを読み取ることができました。
本記事では、DSSからSnowflakeへPrivateLinkを使って安全に接続する方法を紹介しました。
PrivateLinkを使うことで、インターネットを経由せずに閉域での通信が可能となり、セキュリティを確保できます。
今回の手順を参考に、PrivateLinkで安全にSnowflakeに接続してみてください。

ここまで読んでいただきありがとうございました。それでは、また!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?