はじめに
Snowflake Key Pair Authentication Writebackコネクターを使用すると、すべてのデータをDomoに格納して正規化した後にSnowflakeに送り返し、同時にクエリでもそれを利用可能にすることが、簡単にできます。Data Warehouseのソリューションとして既にSnowflakeを使用している場合、このコネクターはデータを最大限に活用するためにDomoを併用する手助けをします。このコネクターを使用するには、Snowflakeアカウント名、Snowflakeホストの接続に使用するユーザー名、シークレットキー、パスフレーズ、およびDomo開発者アカウント認証情報(クライアントIDとクライアントシークレット)が必要になります。DomoのSnowflake Key Pair Authentication Writebackコネクターを使用すると、DomoのDataSetからSnowflakeアカウントにデータをエクスポートできます。Snowflake APIの詳細については、https://docs.snowflake.net/manualsにアクセスしてください。
このトピックでは、Snowflake Key Pair Authentication Writebackコネクターのユーザーインターフェースに固有のフィールドとメニューについて説明します。DataSetの追加や更新スケジュールの設定、DataSet情報の編集に関する一般的な情報については、「データコネクターを使用してDataSetを追加する」を参照してください。
必要条件
Snowflakeデータベースに接続し、DataSetを作成するには、以下が必要です。
-
アカウントのフルネーム(Snowflakeによって提供)。これは、SnowflakeURLのhttps://の直後に続く部分です。
アカウントのフルネームには、アカウントがホストされる地域とクラウドプラットフォームを識別する追加のセグメントが含まれる場合があることに注意してください。米国西部地域はaccount_name、その他の地域はaccount_name.region_idです。以下の表に、クラウドプラットフォームまたは地域別のアカウント名の例を示します。各行に対して、アカウント名が「xy12345」であると仮定しています。
-
Snowflakeホストへの接続に使用するユーザー名。
-
シークレットキー。
-
パスフレーズ。シークレットキーを暗号化する場合、OpenSSLが、シークレットキーファイルの暗号化に使用されるパスフレーズの入力を求めてきます。
パブリックキーペア/シークレットキーペアの設定
パブリックキーのペア/シークレットキーのペアを設定するには、以下のステップに従ってください。
- ターミナルウィンドウのコマンドラインからシークレットキーを生成します。
シークレットキーの暗号化バージョンも、シークレットキーの暗号化されていないバージョンも生成できます。
- 暗号化されていないバージョンを生成するには、以下のコマンドを使用します。
$opensslgenrsa-outrsa_key.pem2048
- 暗号化されたバージョンを生成するには、以下のコマンドを使用します。
$openssl genrsa 2048|openssl pkcs8-topk8-PEM-out rsa_key.p8
通常、暗号化されたバージョンを生成する方が安全です。
2番目のコマンドを使用してシークレットキーを暗号化する場合、OpenSSLがシークレットキーファイルの暗号化に使用されるパスフレーズの入力を求めます。シークレットキーを保護するために強力なパスフレーズを使用することをお勧めします。このパスフレーズを安全な場所に記録します。Snowflakeに接続する時にパスフレーズを入力します。パスフレーズはシークレットキーの保護にのみ使用され、Snowflakeに送信されることはないことに注意してください。
PEMシークレットキーの例を以下に示します。-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIE6TAbBgkqhkiG9w0BBQMwDgQILYPyCppzOwECAggABIIEyLiGSpeeGSe3xHP1
wHLjfCYycUPennlX2bd8yX8xOxGSGfvB+99+PmSlex0FmY9ov1J8H1H9Y3lMWXbL
...
-----END ENCRYPTED PRIVATE KEY-----
- 暗号化されていないバージョンを生成するには、以下のコマンドを使用します。
-
コマンドラインからシークレットキーを参照してパブリックキーを生成します。シークレットキーが暗号化され、「rsa_key.p8」という名前のファイルに含まれていると仮定して、次のコマンドを使用します。
$ openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
以下がPEMパブリックキーのサンプルです。-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy+Fw2qv4Roud3l6tjPH4
zxybHjmZ5rhtCz9jppCV8UTWvEXxa88IGRIHbJ/PwKW/mR8LXdfI7l/9vCMXX4mk
...
-----END PUBLIC KEY----- -
パブリックキーファイルとシークレットキーファイルをローカルディレクトリにコピーして保存します。ファイルのパスを記録します。シークレットキーはPKCS#8(公開鍵暗号標準)フォーマットを使用して保存され、前のステップで指定したパスフレーズで暗号化されることに注意してください。ただし、OSが提供するファイル許可機構を使用して、ファイルを不正アクセスから保護する必要があります。使用されていないときにファイルをセキュリティ保護するのはユーザーの責任です。
-
ALTER USERを使用して、Snowflakeユーザーにパブリックキーを割り当てます。例:
alter user jsmith set rsa_public_key='MIIBIjANBgkqh...';
注記:- セキュリティ管理者(例えばSECURITYADMIN権限を持つユーザー)以上がユーザーを変更できます。
- SQLステートメント内のパブリックキーヘッダーとフッターを除外します。
- DESCRIBEUSERを使用してユーザーのパブリックキーの指紋を確認します。
プロパティ 値 デフォルト 説明 名前 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 Key Pair Authentication Writebackコネクターページの[認証情報]および[詳細]ペインのオプションについて説明します。このページの他のペインの項目にある [スケジュール設定]や[DataSetの名前と説明]に関しては、ほとんどのタイプのコネクターで共通しています。詳細については「データコネクターを使用してDataSetを追加する」を参照してください。
[認証情報]ペイン
このペインには、Domoの開発者アカウントとSnowflakeアカウントの認証情報を入力するためのフィールドが含まれています。下テーブルは、各フィールドに必要な内容を説明しています。
フィールド |
説明 |
---|---|
アカウント名 | アカウントのフルネームを入力します(Snowflakeから提供されます)。米国西部地域ではaccount_name、その他の全地域ではaccount_name.region_idです。 |
ユーザー名 | Snowflakeホストへの接続に使用するユーザー名を入力します。 |
シークレットキー | シークレットキーを入力します。 |
パスフレーズ | シークレットキーを暗号化する場合、OpenSSLが、シークレットキーファイルの暗号化に使用されるパスフレーズの入力を求めてきます。パスフレーズをここに入力します。 |
権限 | 権限を入力します。 |
有効な認証情報を一度入力しておくと、随時同じアカウントを使用して新しいDomo-Snowflake接続を作成できます。コネクターアカウントは、Data Centerの[アカウント]タブで管理できます。このタブの詳細については、「コネクターのユーザーアカウントを管理する」を参照してください。
[詳細]ペイン
このペインには、メインの[レポート]メニューの他、選択したレポートタイプに応じて表示/非表示になるその他さまざまなメニューがあります。
メニュー |
説明 |
---|---|
入力DataSet ID |
SnowflakeにコピーするDataSetのDataSet ID(GUID)を入力します。Data CenterでDataSetの詳細ビューを開き、URLの「datasources/」に続く部分でIDを見つけることができます。例えば、URLがhttps://mycompany.domo.com/datasources/845305d8-da3d-4107-a9d6-13ef3f86d4a4/details/overviewであれば、DataSet IDは「845305d8-da3d-4107-a9d6-13ef3f86d4a4」になります。 |
テーブル名を選択 |
データがコピーされるテーブルの命名方法を選択します。
|
テーブル名を入力 |
データをコピーするSnowflakeテーブルの名前を入力します(スペースや特殊文字はアンダースコアに置き換えられます)。 |
列名と表名にすべてのマップを使用 | 列名とテーブル名がすべて大文字で書き戻されます。そのため、Snowflakeでは大文字と小文字の区別がありません。 |
その他のペイン
スケジュール設定、再試行、更新に関するオプションなど、コネクターインターフェースのその他のペインに表示されるオプションについては、「データコネクターを使用してDataSetを追加する」を参照してください。
コメント
0件のコメント
サインインしてコメントを残してください。