はじめに
Snowflakeは、すべてのデータを簡単にまとめて、分析する必要のあるすべてのユーザーとシステムが利用できるようにするData Warehouseソフトウェアです。DomoのSnowflake Using Key Pair Authenticationコネクターを使用すると、指定したウェアハウス、データベース、そしてデータベーススキーマから、SQL クエリを入力することでデータを取得することができるようになります。Snowflake API の詳細については、 https://docs.snowflake.net/manualsを参照してください。
このバージョンのSnowflakeコネクターは、通常のユーザー名/パスワード認証ではなくキーペア認証の使用をサポートしていることを除いて、基本的に標準のSnowflakeコネクターと同じです。この認証方式では2048ビット(最小)のRSAキーペアが必要です。OpenSSLを使用してパブリックキーとシークレットキーのペアを生成することができます。キーペアを生成するステップは以下のとおりです。パブリックキーは、Snowflakeクライアントを使用するSnowflakeユーザーに割り当てられます。
Snowflake Using Key Pair Authenticationコネクターは「データベース」コネクターであり、クエリを使用してデータベースからデータを取得します。Data Centerでは、ウィンドウ上部のツールバーで[データベース]をクリックし、これを含むほかのデータベースコネクターのページにアクセスできます。
このトピックでは、Snowflake Using Key Pair Authenticationコネクターのユーザーインターフェースに固有のフィールドとメニューについて説明します。DataSetの追加、更新スケジュールの設定およびDataSet情報の編集に関する一般的な情報は、「データコネクターを使用してDataSetを追加する」を参照してください。
必要条件
Snowflakeデータベースに接続し、DataSetを作成するには、以下が必要です。
-
アカウントのフルネーム(Snowflakeにより提供)。これは、SnowflakeURLのhttps://の直後に続く部分です。
アカウントのフルネームはアカウントがホストされる地域とクラウドプラットフォームを識別する追加のセグメントが含まれる場合があることに注意してください。以下の表に、クラウドプラットフォーム/地域別のアカウント名の例を示します。各行に対して、アカウント名が「xy12345」であると仮定しています。
-
Snowflakeホストに接続するために使用されるユーザ名
-
Snowflakeシークレットキー
-
暗号化された鍵を作成した場合にシークレットキーファイルを暗号化するために使用するパスフレーズ
パブリックキーペア/シークレットキーペアの設定
パブリックキーのペア/シークレットキーのペアを設定するには、以下のステップに従ってください。
- ターミナルウィンドウのコマンドラインからシークレットキーを生成します。
シークレットキーの暗号化バージョンも、シークレットキーの暗号化されていないバージョンも生成できます。
- 暗号化されていないバージョンを生成するには、以下のコマンドを使用します。
$opensslgenrsa-outrsa_key.pem2048
- 暗号化されたバージョンを生成するには、以下のコマンドを使用します。
$openssl genrsa 2048|openssl pkcs8-topk8-PEM-out rsa_key.p8
通常、暗号化されたバージョンを生成する方が安全です。
2番目のコマンドを使用してシークレットキーを暗号化する場合、OpenSSLがシークレットキーファイルの暗号化に使用されるパスフレーズの入力を求めます。シークレットキーを保護するために強力なパスフレーズを使用することをお勧めします。このパスフレーズを安全な場所に記録します。Snowflakeに接続する時にパスフレーズを入力します。パスフレーズはシークレットキーの保護にのみ使用され、Snowflakeに送信されることはないことに注意してください。
PEMシークレットキーの例を以下に示します。
-----暗号化されたシークレットキーを開始する-----
MIIE6TAbBgkqhkiG9w0BBQMwDgQILYPyCppzOwECAggABIIEyLiGSpeeGSe3xHP1
wHLjfCYycUPennlX2bd8yX8xOxGSGfvB+99+PmSlex0FmY9ov1J8H1H9Y3lMWXbL
...
-----暗号化されたシークレットキーを終了する-----
- 暗号化されていないバージョンを生成するには、以下のコマンドを使用します。
-
コマンドラインからシークレットキーを参照してパブリックキーを生成します。シークレットキーが暗号化され、「rsa_key.p8」という名前のファイルに含まれていると仮定して、次のコマンドを使用します。
$opensslrsa-inrsa_key.p8-pubout-outrsa_key.pub
以下がPEMパブリックキーのサンプルです。-----パブリックキーを開始する-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy+Fw2qv4Roud3l6tjPH4
zxybHjmZ5rhtCz9jppCV8UTWvEXxa88IGRIHbJ/PwKW/mR8LXdfI7l/9vCMXX4mk
...
-----パブリックキーを終了する----- -
パブリックキーファイルとシークレットキーファイルをローカルディレクトリにコピーして保存します。ファイルのパスを記録します。シークレットキーはPKCS#8(公開鍵暗号標準)フォーマットを使用して保存され、前のステップで指定したパスフレーズで暗号化されることに注意してください。ただし、OSが提供するファイル許可機構を使用して、ファイルを不正アクセスから保護する必要があります。使用されていないときにファイルをセキュリティ保護するのはユーザーの責任です。
-
ALTERUSERを使用して、Snowflakeユーザーにパブリックキーを割り当てます。例:
alter user jsmith set rsa_public_key='MIIBIjANBgkqh...';
注記:
-
セキュリティ管理者(例えばSECURITYADMIN権限を持つユーザー)以上がユーザーを変更できます。
-
SQLステートメント内のパブリックキーヘッダーとフッターを除外します。
-
- DESCRIBE USERを使用してユーザーのパブリックキーの指紋を確認します。
プロパティ 値 デフォルト 説明 名前 JSMITH NULL値 名前 RSA_PUBLIC_KEY_FP SHA256:nvnONUsfiuycCLMXIEWG4eTp4FjhVUZQUQbNpbSHXiA= NULL値 ユーザーのRSAパブリックキーの指紋。 RSA_PUBLIC_KEY_2_FP NULL値 NULL値 ユーザーの2番目のRSAパブリックキーの指紋。 注記:RSA_PUBLIC_KEY_2_FPプロパティの詳細については、「キーローテーション」を参照してください。 - 下のサンプルコードを修正して実行します。このコードはシークレットキーファイルを復号してSnowflakeドライバーに渡し、接続を作成します。
- セキュリティパラメーターを更新:
は作成したシークレットキーファイルへのローカルパスを指定します。
- セッションのパラメーターを更新:
はSnowflakeログイン名を指定します。 はアカウントの名前を指定します(Snowflakeにより提供される)。
- サンプルコードは以下のとおりです。
import java.util.Properties;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.DriverManager;
import java.io.File;
import java.io.FileInputStream;
import java.io.DataInputStream;
import java.util.Base64;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.KeyFactory;
import java.security.PrivateKey;
import javax.crypto.EncryptedPrivateKeyInfo;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;public class TestJdbc
{
public static void main(String[] args)
throws Exception
{
File f = new File("/rsa_key.p8");
FileInputStream fis = new FileInputStream(f);
DataInputStream dis = new DataInputStream(fis);
byte[] keyBytes = new byte[(int) f.length()];
dis.readFully(keyBytes);
dis.close();String encrypted = new String(keyBytes);
String passphrase = System.getenv("PRIVATE_KEY_PASSPHRASE");
encrypted = encrypted.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----", "");
encrypted = encrypted.replace("-----END ENCRYPTED PRIVATE KEY-----", "");
EncryptedPrivateKeyInfo pkInfo = new EncryptedPrivateKeyInfo(Base64.getMimeDecoder().decode(encrypted));
PBEKeySpec keySpec = new PBEKeySpec(passphrase.toCharArray());
SecretKeyFactory pbeKeyFactory = SecretKeyFactory.getInstance(pkInfo.getAlgName());
PKCS8EncodedKeySpec encodedKeySpec = pkInfo.getKeySpec(pbeKeyFactory.generateSecret(keySpec));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey encryptedPrivateKey = keyFactory.generatePrivate(encodedKeySpec);String url = "jdbc:snowflake://
.snowflakecomputing.com";
Properties prop = new Properties();
prop.put("user", "");
prop.put("account", "");
prop.put("privateKey", encryptedPrivateKey);Connection conn = DriverManager.getConnection(url, prop);
Statement stat = conn.createStatement();
ResultSet res = stat.executeQuery("select 1");
res.next();
System.out.println(res.getString(1));
conn.close();
}
}
- セキュリティパラメーターを更新:
キーローテーション
Snowflakeは、中断しないローテーションができるように、複数のアクティブキーをサポートします。内部で従っている有効期限スケジュールにもとづき、パブリックキーとシークレットキーをローテーションし、置換します。
現在、ALTER USER ではRSA_PUBLIC_KEYと RSA_PUBLIC_KEY_2のパラメーターを使用して、最大2つのパブリックキーを1人のユーザーに関連付けることができます。
鍵をローテーションするには、以下の手順を実行します。
- キーペア使用認証のステップを完了します...
- 新しいシークレットキーとパブリックキーセットを生成します。
- ユーザーにパブリックキーを割り当てます。パブリックキーの値をRSA_PUBLIC_KEY または RSA_PUBLIC_KEY_2(どちらでも、キーの値が現在使用されていないもの)に設定します。
例えば、
alter user jsmis set rsa_public_key_2='JERUE Htcve...';
- 新しいシークレットキーとパブリックキーセットを生成します。
- コードを更新してSnowflakeに接続します。新しいシークレットキーを指定します。
Snowflakeは、接続情報とともに送信されたシークレットキーにもとづいて、認証用の正しいアクティブなパブリックキーを検証します。
- ユーザープロフィールから古いパブリックキーを削除します。例えば、
alter user jsmith unset rsa_public_key;
Snowflakeアカウントに接続する
このセクションでは、Snowflake Using Key Pair Authenticationコネクターページの[認証情報]および[詳細]ペインのオプションについて説明します。このページ内のほかのペインに含まれるコンポーネントである[スケジュール設定]や[DataSetに名前を付け、説明を入力]に関しては、ほとんどのタイプのコネクターで共通しています。詳細については「データコネクターを使用してDataSetを追加する」を参照してください。
認証情報ペイン
このペインには、Snowflakeアカウントに接続するための認証情報を入力するフィールドがあります。下表は、各フィールドに必要な内容を説明しています。
フィールド |
説明 |
---|---|
アカウント名 |
Snowflakeアカウント名を入力します。アカウント名を検索する方法については、「必要条件」を参照してください。 |
ユーザー名 |
Snowflakeアカウントに関連するユーザー名を入力します。 |
シークレットキー |
シークレットキーを入力します。シークレットキーの生成の詳細については、「パブリックキー/シークレットキーペアの設定」を参照してください。 |
パスフレーズ | 暗号化された鍵を作成した場合、シークレットキーファイルの暗号化に使用したパスフレーズを入力します。 |
権限 | ユーザー権限を入力します。 |
有効なSnowflakeの認証情報を入力しておくと、いつでもDomoで同じアカウントを使用してSnowflake Using Key Pair Authentication DataSetを作成することができます。コネクターのアカウントはData Centerの[アカウント]タブで管理できます。このタブの詳細については、「コネクターのユーザーアカウントを管理する」を参照してください。
詳細ペイン
このペインには、SQLクエリを入力したり、取得するデータの場所を指定する多数のフィールドとメニューがあります。
パラメーター |
説明 |
---|---|
クエリ |
データを取得するために使用するSQLクエリを入力します。クエリヘルパーパラメーターを使用して、使用可能なSQLクエリを記述できます。クエリヘルパーを使用するには、以下を実行します。
|
ウェアハウス |
取得したいデータが格納されているウェアハウスを選択します。このリストには、認証情報にもとづいてアクセスできるすべてのウェアハウスが表示されます。 |
データベース |
取得したいデータが格納されているデータベースを選択します。このリストには、認証情報にもとづいてアクセスできるすべてのデータベースが表示されます。 |
データベーススキーマ |
取得したいデータが含まれているデータベーススキーマを選択します。このリストには、認証情報にもとづいてアクセスできるすべてのスキーマが表示されます。 |
データベース表(オプション) |
取得するデータベース表を選択します。このリストには、認証情報にもとづいてアクセスできるすべての表が表示されます。データベーステーブルを選択しない場合は、コネクターはデータベーススキーマ全体を取得します。 |
表の列(オプション) |
取得する表の列を選択します。このリストには、認証情報にもとづいてアクセスできるすべての列が表示されます。表の列を選択しないと、コネクターは選択したデータベース表全体を取得します。 |
クエリヘルパー(オプション) |
上のメニューから、ウェアハウス、データベース、スキーマ、表などを選択すると、利用可能なSQLクエリがこのフィールドに作成されます。このフィールドのSQLステートメントをコピーして、[クエリ]フィールドに貼り付けます。詳細については、上記の「クエリ」を参照してください。 |
フェッチサイズ(オプション) | メモリのパフォーマンスのフェッチサイズを入力します。空白にすると、デフォルトサイズの1000が適用されます。DataSetに「メモリー不足」エラーが発生した場合は、フェッチサイズの縮小を試みます。 |

その他のペイン
スケジュール設定、再試行、更新に関するオプションなど、コネクターインターフェースのその他のペインに表示されるオプションについては、「データコネクターを使用してDataSetを追加する」を参照してください。
よくある質問
注意すべきAPI制限はありますか?
制限は使用するサーバー構成によって異なります。
データ更新の頻度はどのくらいですか?
必要に応じて。
クエリの記述の際に注意すべき点はありますか?
すべての単語、テーブル名、フィールド名が正しく記述されていることを確認します。クエリのヘルプについては、[クエリヘルパー]フィールドを参照してください。
Snowflakeデータベースに接続できない理由は?IPアドレスのホワイトリスト登録が必要でしょうか?
Snowflakeデータベースに接続する前に、接続するポート上のデータベースサーバーにある多数のIPアドレスをホワイトリストに登録する必要があります。IPアドレスの詳細なリストは、「DomoでIPアドレスをホワイトリストに登録する」を参照してください。
これはプロダクションレベルのコネクターですか?
このコネクターは、中小規模のDataSetと、大規模なDataSetのコンセプト実証作業のために設計されています。
ウェアハウス、データベース、スキーマなどのリストが正しく設定されていない理由
Snowflakeでアカウントに入力されたユーザー権限にもとづいてアクセスできるコンテンツのみが表示されます。目的のものが見つからない場合は、権限がそのウェアハウス、データベース、テーブルなどにアクセスできることを確認してください。
Snowflakeで権限を入力しない場合、デフォルトではSYSADMIN権限が使用されます。
コメント
0件のコメント
サインインしてコメントを残してください。