はじめに
こんにちは、すぎもんです![]()
本記事では、DataSpider Servista(以下、DSS)からSnowflakeへPrivateLink 経由で接続してみようと思います。AWS PrivateLinkを使うことで、インターネットを経由せずに接続が可能です。
今回やること
DSSとSnowflakeをPrivateLinkで接続し、DSSで作成したスクリプトで、Snowflakeのデータベースのレコードを読み取り、CSVファイルに出力してみます。

それでは早速やってみましょう!
実施手順
以下の手順を実施します。
<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
③ PrivateLinkを有効化する
SnowflakeコンソールのSQLワークシートで以下のコマンドを実行し、PrivateLinkを有効化します。
SELECT SYSTEM$AUTHORIZE_PRIVATELINK ( '<aws_id>' , '<federated_token>' );
※<aws_id>は上記②の実行結果のFederatedUserに含まれる12桁の識別子
※<federated_token>は上記②の実行結果全体

「Private link access authorized.」が出力されることを確認します。
2.PrivateLink 情報を取得<Snowflake設定>
DSSの接続設定に使用するSnowflakeのPrivateLink情報を取得します。
① PrivateLinkの情報取得
SnowflakeコンソールのSQLワークシートで以下のSQLを実行し、PrivateLink情報を取得します。
SELECT SYSTEM$GET_PRIVATELINK_CONFIG();
- 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;

「successfully created.」が出力されることを確認します。
② スキーマ作成
以下のSQLを実行し、スキーマを作成します。
※データベース名を「CONNECTION_TEST_DB」、スキーマ名を「TEST_SCHEMA」で作成する場合の例
CREATE OR REPLACE SCHEMA CONNECTION_TEST_DB.TEST_SCHEMA;

「successfully created.」が出力されることを確認します。
③ テーブル作成
以下のSQLを実行し、テーブルを作成します。
※テーブル名を「TEST_TABLE」、カラムをNUMBER型のIDとVARCHAR型のMESSAGEで作成する場合の例
CREATE OR REPLACE TABLE TEST_TABLE (
ID NUMBER(38,0),
MESSAGE VARCHAR(16777216)
);

「successfully created.」が出力されることを確認します。
④ ウェアハウス名の確認
ウェアハウス名を確認します。
SELECT CURRENT_WAREHOUSE();
4.キーペア認証の設定<Snowflake設定>
キーペア認証で使用するキーペアを作成し、Snowflakeユーザーに公開キーを割り当てます。
① 秘密鍵の生成
AWS CloudShell(opensslがインストールされている任意の環境)で以下のコマンドを実行し、任意のパスワードを入力します。
openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 des3 -inform PEM -out rsa_key.p8
②公開鍵の生成
以下のコマンドを実行し、任意のパスワードを入力します。
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
③ Snowflakeユーザーに公開キーの割り当て
SnowflakeコンソールのSQLワークシートで以下のSQLを実行します。
RSA_PUBLIC_KEYの値に②で生成した公開キーを指定します。
ALTER USER DEV_ADMIN SET RSA_PUBLIC_KEY='(公開キーを指定)';
「Statment executed successfully.」が出力されることを確認します。
5.DSSのVPCエンドポイント作成<AWS設定>
DSS側のVPCエンドポイントを作成します。
①セキュリティグループ作成
VPCエンドポイントのセキュリティグループを作成します。
インバウンドルールは、DSSのVPCのCIDRからのHTTPS(TCP/443)通信を許可します。

② VPCエンドポイント作成
以下のようにVPCエンドポイントを作成します。
-
エンドポイントの設定
任意の名前を設定し、タイプに「PrivateLink Ready パートナーのサービス」を選択します。

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

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

② ホストゾーンのレコード作成
以下のようにレコードを設定し、「レコードを作成」を押下します。
・レコード名:2.PrivateLink 情報を取得<Snowflake設定>で確認したprivatelink-account-urlの値
・レコードタイプ:Aレコード
・エイリアス:ON
・トラフィックのルーティング先:5.DSSのVPCエンドポイント作成<AWS設定>で作成したVPCエンドポイントのDNS名
7.接続元IPアドレス許可<Snowflake設定>
DSSの接続元IPアドレス範囲をSnowflake側で許可するように設定します。
① 既存の許可リストを確認
SnowflakeコンソールのSQLワークシートで以下のSQLを実行し、既存の許可リストを確認します。
DESC NETWORK RULE SECURITY_DB.PUBLIC.SISCO_PROCY;
② 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の両方を設定します。

「Statment executed successfully.」が出力されることを確認します。
8.DSSの接続設定<DSS設定>
DataSpider Studioのグローバルリソースの設定を作成します。
① グローバルリソース設定の作成
コントロールパネルを開き、グローバルリソースの設定をクリックします。

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

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

以下の値を設定します。
- アカウント識別子:xxxxxxx.ap-northeast-1.privatelink(2.PrivateLink 情報を取得<Snowflake設定>のprivatelink-account-urlの先頭からprivatelinkまでの値)
- ロール名:ACCOUNTADMIN(Snowflakeに接続するユーザに付与されているロール)
- ウェアハウス名:BASE_WH(3.SnowflakeテストDB作成<Snowflake設定>の④で確認した値)
- データベース名:CONNECTION_TEST_DB(3.SnowflakeテストDB作成<Snowflake設定>の①で作成した値)
- スキーマ名:TEST_SCHEMA(3.SnowflakeテストDB作成<Snowflake設定>の②で作成した値)
- URLを直接入力する:チェックを入れない
- ユーザ名: (Snowflakeに接続するユーザ名)
- 認証方式:キーペア認証
- 秘密鍵:/data/mount/rsa_key.p8(4.キーペア認証の設定<Snowflake設定>の①で作成した秘密鍵をDataSpider Studio内のフォルダに格納したパス)
- 秘密鍵パスフレーズ:(4.キーペア認証の設定<Snowflake設定>の①で入力したパスワード)
接続テストボタンを押下し、接続成功となることを確認します。
9.テーブル読み取りスクリプト実行<DSS設定>
DataSpider Studioのテーブル読み取りスクリプトが正しく動作することを確認します。
① スクリプト作成
Snowflakeのテーブル読み取り、CSVファイルに出力する処理のスクリプトを作成します。

② スクリプト実行
スクリプトを実行します。

「スクリプトの実行に成功しました。」のポップアップが出力されることを確認します。
③ 結果確認
SnowflakeコンソールのSQLワークシートで以下のSQLを実行し、テーブルに登録されているデータの内容を確認します。
select * from test_table

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

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
















