キーペア認証およびキーペアローテーション

このトピックでは、Snowflakeでのキーペア認証とキーペアローテーションの使用について説明します。

このトピックの内容:

概要

Snowflakeは、基本認証(つまり、ユーザー名とパスワード)の代わりに、認証セキュリティを強化するためのキーペア認証の使用をサポートしています。

この認証方法では、少なくとも2048ビットの RSA キーペアが必要です。OpenSSL を使用して、Privacy Enhanced Mail(PEM)公開/秘密キーペアを生成できます。一部の サポートされているSnowflakeクライアント では、暗号化された秘密キーを使用してSnowflakeに接続できます。公開キーは、Snowflakeクライアントを使用してSnowflakeに接続し、認証する、Snowflakeユーザーに割り当てられます。

Snowflakeは、より堅牢なセキュリティとガバナンスに対する姿勢に準拠できるように、公開キーのローテーションもサポートしています。

サポートされているSnowflakeクライアント

次のテーブルは、Snowflakeクライアント間のキーペア認証のサポートをまとめたものです。チェックマーク(つまり、 ✔)は、完全にサポートされていることを示します。チェックマークがない場合は、キーペア認証がサポートされていないことを示します。

クライアント

キーペア認証

キーペアローテーション

暗号化されていない秘密キー

SnowSQL (CLI クライアント)

Python用Snowflakeコネクタ

Spark用Snowflakeコネクター

Kafka用のSnowflakeコネクタ。

Go Driver

JDBCドライバー

ODBCドライバー

Node.jsドライバー

.NETドライバー

Snowflake用 PHP PDO ドライバー

キーペア認証の構成

サポートされているすべてのSnowflakeクライアントのキーペア認証を構成するには、次のステップを実行します。

ステップ1:秘密キーを生成する

Snowflakeへの接続に使用する サポートされているSnowflakeクライアント のいずれかに応じて、暗号化された秘密キーまたは暗号化されていない秘密キーを生成するオプションがあります。一般に、暗号化されたキーを生成する方が安全です。Snowflakeは、このステップを完了する前に、内部セキュリティおよびガバナンスの担当者と連絡を取り、生成するキータイプを決定することをお勧めします。

ちなみに

暗号化されたキーを生成するコマンドは、キーへのアクセスを規制するためのパスフレーズの入力を求めます。Snowflakeは、ローカルで生成された秘密キーを保護するために、 PCI DSS 標準に準拠したパスフレーズを使用することをお勧めします。さらに、パスフレーズは安全な場所に保管することをお勧めします。暗号化されたキーを使用してSnowflakeに接続する場合は、最初の接続時にパスフレーズを入力します。パスフレーズは秘密キーの保護のみに使用され、Snowflakeには送信されません。

PCI DSS 標準に基づき、長くて複雑なパスフレーズを生成するには、

  1. PCI セキュリティ標準ドキュメントライブラリ にアクセスします。

  2. PCI DSS には、最新バージョンと希望の言語を選択します。

  3. フォームに入力して、ドキュメントにアクセスします。

  4. Passwords/passphrases must meet the following: を検索し、パスワード/パスフレーズの要件、テスト、およびガイダンスに関する推奨事項に従ってください。ドキュメントのバージョンによっては、フレーズは Requirement 8: Identify and authenticate access to system components (または類似の名前)と呼ばれるセクションにある可能性があります。

開始するには、ターミナルウィンドウを開き、秘密キーを生成します。

秘密キーは、暗号化バージョンまたは非暗号化バージョンのいずれかを生成できます。

非暗号化バージョンを生成するには、次のコマンドを使用します。

$ openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
Copy

暗号化バージョンを生成するには、次の(「-nocrypt」を省略する)コマンドを使用します。

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

コマンドは、 PEM 形式の秘密キーを生成します。

-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIE6TAbBgkqhkiG9w0BBQMwDgQILYPyCppzOwECAggABIIEyLiGSpeeGSe3xHP1
wHLjfCYycUPennlX2bd8yX8xOxGSGfvB+99+PmSlex0FmY9ov1J8H1H9Y3lMWXbL
...
-----END ENCRYPTED PRIVATE KEY-----
Copy

ステップ2:公開キーを生成する

コマンドラインから、秘密キーを参照して公開キーを生成します。次のコマンドでは、秘密キーが暗号化され、 rsa_key.p8 という名前のファイルに含まれていると仮定しています。

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

このコマンドは、公開キーを PEM 形式で生成します。

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy+Fw2qv4Roud3l6tjPH4
zxybHjmZ5rhtCz9jppCV8UTWvEXxa88IGRIHbJ/PwKW/mR8LXdfI7l/9vCMXX4mk
...
-----END PUBLIC KEY-----
Copy

ステップ3:秘密キーと公開キーを安全に保管する

公開キーファイルと秘密キーファイルを保存用のローカルディレクトリにコピーします。ファイルへのパスを記録します。秘密キーは PKCS#8(公開キー暗号化標準)形式を使用して保存され、前のステップで指定したパスフレーズを使用して暗号化されることに注意してください。

ただし、オペレーティングシステムが提供するファイル許可メカニズムを使用して、ファイルを不正アクセスから保護する必要があります。ファイルが使用されていない場合、ファイルを保護するのはユーザーの責任です。

ステップ4:Snowflakeユーザーに公開キーを割り当てる

ALTER USER コマンドを実行して、公開キーをSnowflakeユーザーに割り当てます。

ALTER USER jsmith SET RSA_PUBLIC_KEY='MIIBIjANBgkqh...';
Copy

注釈

  • ユーザーを変更できるのは、セキュリティ管理者(つまり、 SECURITYADMIN ロールのユーザー)以上のみです。

  • SQL ステートメントで公開キー区切り文字を除外します。

ステップ5:ユーザーの公開キーのフィンガープリントを検証する

DESCRIBE USER コマンドを実行して、ユーザーの公開キーを検証します。

DESC USER jsmith;
+---------------------+-----------------------------------------------------+---------+----------------------------------------------+
| property            | value                                               | default | description                                  |
+---------------------+-----------------------------------------------------+---------+----------------------------------------------+
| NAME                | JSMITH                                              | null    | Name                                         |
...
...
| RSA_PUBLIC_KEY      | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...     | null    | RSA public key of the user                   |
| RSA_PUBLIC_KEY_FP   | SHA256:nvnONUsfiuycCLMXIEWG4eTp4FjhVUZQUQbNpbSHXiA= | null    | Fingerprint of user's RSA public key.        |
| RSA_PUBLIC_KEY_2    | null                                                | null    | Second RSA public key of the user            |
| RSA_PUBLIC_KEY_2_FP | null                                                | null    | Fingerprint of user's second RSA public key. |
...
+---------------------+-----------------------------------------------------+---------+----------------------------------------------+
Copy

ステップ6:キーペア認証を使用するようにSnowflakeクライアントを構成する

Snowflakeへの接続にキーペア認証を使用するように、クライアントを更新します。

キーペアローテーションの構成

Snowflakeは、複数のアクティブキーをサポートして、連続したローテーションを可能にします。内部的に従う有効期限のスケジュールに基づいて、公開キーと秘密キーをローテーションして交換します。

現在、 ALTER USERRSA_PUBLIC_KEY および RSA_PUBLIC_KEY_2 パラメーターを使用して、最大2個の公開キーを1人のユーザーに関連付けることができます。

次のステップを実行して、キーペアのローテーションを構成し、キーをローテーションします。

  1. 次の更新を使用して、 キーペア認証の構成 のステップすべてを完了します。

    • 新しい秘密キーと公開キーのセットを生成します。

    • ユーザーに公開キーを割り当てます。公開キーの値を RSA_PUBLIC_KEY または RSA_PUBLIC_KEY_2 (現在使用されていないキーの値)に設定します。例:

      alter user jsmith set rsa_public_key_2='JERUEHtcve...';
      
      Copy
  2. Snowflakeに接続するようにコードを更新します。新しい秘密キーを指定します。

    Snowflakeは、接続情報とともに送信された秘密キーに基づいて、認証用の正しいアクティブな公開キーを検証します。

  3. ALTER USER コマンドを使用し、ユーザープロファイルから古い公開キーを削除します。

    alter user jsmith unset rsa_public_key;
    
    Copy