キーペア認証とキーペアローテーション

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

概要

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

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

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

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

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

クライアント

キーペア認証

キーペアローテーション

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

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

Snowflake CLI

✔

✔

✔

✔

SnowSQL (CLI クライアント)

✔

✔

✔

✔

Python用Snowflake Connector

✔

✔

✔

✔

Snowflake Connector for Spark

✔

✔

✔

Snowflake Connector for Kafka

✔

✔

✔

Snowflake Horizon Catalog endpoint

✔

✔

✔

✔

Go Driver

✔

✔

✔

JDBCドライバー

✔

✔

✔

✔

ODBCドライバー

✔

✔

✔

✔

Node.jsドライバー

✔

✔

✔

✔

NET ドライバー

✔

✔

✔

✔

Snowflake用 PHP PDO ドライバー

✔

✔

✔

✔

キーペア認証の構成

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

秘密キーの生成

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

Snowflakeは、次のアルゴリズムを使用して生成された暗号化キーをサポートしています。

  • RSA デジタル署名アルゴリズム RS256、 RS384 および RS512。

  • 楕円曲線のデジタル署名アルゴリズム(ECDSA)アルゴリズム ES256(P-256)、 ES384(P-384)、および ES512 (P-512)。

これらの署名はそれぞれ、 SHA-256、 SHA-384、および SHA-512ハッシュアルゴリズムを使用します。

Tip

暗号化されたキーを生成するコマンドは、キーへのアクセスを規制するためのパスフレーズの入力を求めます。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

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

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

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

-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIE6T...
-----END ENCRYPTED PRIVATE KEY-----

公開キーを生成する

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

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

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

-----BEGIN PUBLIC KEY-----
MIIBIj...
-----END PUBLIC KEY-----

秘密キーと公開キーを安全に保管する

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

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

Snowflakeユーザーに公開キーを割り当てる権限を付与します。

ユーザーにパブリックキーを割り当てるには、以下の ロールまたは権限 のいずれかを持っている必要があります。

  • ユーザーに対する MODIFY PROGRAMMATIC AUTHENTICATION METHODS 権限。

  • ユーザーに対する OWNERSHIP 権限。

GRANT <権限> ... TO ROLE または GRANT OWNERSHIP コマンドを使用して、ユーザーに対する MODIFY PROGRAMMATIC AUTHENTICATION METHODS または OWNERSHIP 権限をロールに付与できます。

For example, suppose that you want users with the my_service_owner_role custom role to assign the public key to the service user my_service_user. The following statement grants the MODIFY PROGRAMMATIC AUTHENTICATION METHODS privilege on the my_service_user user to the role my_service_owner_role:

GRANT MODIFY PROGRAMMATIC AUTHENTICATION METHODS ON USER my_service_user
  TO ROLE my_service_owner_role;

Snowflakeユーザーに公開キーを割り当てる

公開キーをユーザーに割り当てるには、 ALTER USER コマンドを実行して、ユーザーの RSA_PUBLIC_KEY プロパティをセットします。例:

ALTER USER example_user SET RSA_PUBLIC_KEY='MIIBIjANBgkqh...';

注釈

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

ユーザーの公開キーのフィンガープリントを検証する

  1. 以下のコマンドを実行して、ユーザーの公開キーのフィンガープリントを取得します。

    DESC USER example_user
      ->> SELECT SUBSTR(
            (SELECT "value" FROM $1
               WHERE "property" = 'RSA_PUBLIC_KEY_FP'),
            LEN('SHA256:') + 1) AS key;
    

    出力:

    Azk1Pq...
    
  2. 出力をコピーします。

  3. コマンドラインで次のコマンドを実行します。

    openssl rsa -pubin -in rsa_key.pub -outform DER | openssl dgst -sha256 -binary | openssl enc -base64
    

    出力:

    writing RSA key
    Azk1Pq...
    
  4. 両方の出力を比較します。両方の出力が一致する場合、公開キーは正しく設定されています。

キーペア認証を使用するようにSnowflakeクライアントを設定する

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

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

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

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

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

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

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

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

      ALTER USER example_user SET RSA_PUBLIC_KEY_2='JERUEHtcve...';
      
  2. Snowflakeに接続するようにコードを更新します。新しい秘密キーを指定します。

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

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

    ALTER USER example_user UNSET RSA_PUBLIC_KEY;