Snowflake Postgresのロール

Postgresには、データベースへの接続を管理し、Postgresサーバーでデータベースを使用するための独自のロールベース認証があります。これらのロールは、Snowflakeのロールとは別です。Postgresロールは、Snowflake Postgresインスタンス内のデータベース、テーブル、およびその他のオブジェクトにアクセスして管理するために使用されます。

インスタンスを作成すると、Snowflakeは自動的に2つの特別な管理ロールを作成します。それらのロールについて以下で説明しています。

Postgresロールの管理の詳細については、 Postgresドキュメント をご参照ください。

注釈

ここや他の多くの場所で、Postgresユーザー管理の文脈において互換的に使用される「ロール」と「ユーザー」という用語を見かけるでしょう。これは、Postgresユーザーが単にPostgresロール LOGIN 属性を持つロールであるためです。

Snowflake Postgres管理ロール

Snowflake Postgresは、インスタンスの作成時に2つの管理ロールを自動的に作成します。

``snowflake_admin``ロール。

snowflake_admin ロール は、Snowflake Postgresインスタンスを管理するために使用される、高い権限を持つPostgresロールです。完全なPostgresスーパーユーザーでは ありません 。一部の操作は引き続き制限されており、Snowflakeによって管理されます。ただし、次のような昇格された権限を持ちます。

  • Postgresロールの作成と管理。

  • データベースの作成と管理。

  • Snowflake Postgresインスタンスの複製の管理。

  • 行レベルセキュリティ( RLS )ポリシーのバイパス(該当する場合)。

さらに、 snowflake_admin は、次のような監視と操作機能を付与する複数のPostgres組み込みロールのメンバーです。

  • pg_signal_backend

  • pg_use_reserved_connections

  • pg_create_subscription

  • pg_read_all_settings

  • pg_read_all_stats

  • pg_stat_scan_tables

  • pg_monitor

  • snowflake_admin_group

``application``ロール。

application ロールは非スーパーユーザーロールであり、デフォルトで postgres データベースでオブジェクトを作成する権限を持っています。このロールの新しい権限または所有権は、 snowflake_admin ロールによって付与される必要があります。

Postgresのパスワードセキュリティ

Snowflake Postgres管理ロールの認証情報の再生成

snowflake_admin および application ロールの認証情報はインスタンスの作成時に生成され、1回だけ表示されます。これらの認証情報はいつでも再生成でき、既存の認証情報は無効になります。

ダッシュボードから、インスタンスの snowflake_admin ロールの認証情報を再生成できます。

  1. ナビゲーションメニューで Postgres を選択します。

  2. インスタンスを選択します。

  3. 右上の Manage メニューで Regenerate credentials を選択します。

  4. Acknowledge & continue ボタンをクリックして、アクションを確認します。

他のPostgresロールのパスワードの設定

Snowflake Postgresインスタンスは、scram-sha-256パスワード認証用に構成されています。新しいパスワードが設定されると、サーバーがscram-sha-256ハッシュを生成して保存しますが、Postgres log_statement パラメーターは none 以外の値に設定されます。 CREATE ROLE および ALTER ROLE DDL コマンドは、Postgresサーバーログに完全に記録されます。したがって、平文のパスワードがこれらのステートメントの一部としてログに記録されないようにする必要があります。

CREATE ROLE および ALTER ROLE Postgres DDL コマンドのステートメントログの無効化

CREATE ROLE および ALTER ROLE DDL ステートメントで使用される平文パスワードがPostgresサーバーログに表示されないようにする最もシンプルな方法は、 SET LOCAL を使用することで、それらを実行するトランザクションの log_statement パラメーターを無効にすることです。

BEGIN;
SET LOCAL log_statement = 'none';
CREATE USER mynewrole PASSWORD 'mynewpassword';
COMMIT;

psql Postgresクライアントの \password コマンドの使用

Postgres psql <https://www.postgresql.org/docs/current/app-psql.html>`_クライアントプログラムには、既存ユーザーのパスワードの変更に使用できる\password <https://www.postgresql.org/docs/current/app-psql.html>_`_メタコマンドがあります。\password メタコマンドは、入力されたパスワードのscram-sha-256ハッシュを事前に計算し、それをサーバーに送信される ALTER ROLE コマンドで使用します。このメソッドを使用するには、まずパスワードなしで新しいユーザーを作成し、次に各ユーザーのパスワードをpsqlの \password メタコマンドで設定する必要があります。

postgres=# CREATE ROLE mynewrole LOGIN;
CREATE ROLE

postgres=# \password mynewrole
Enter new password for user "mynewrole":
Enter it again:

log_statement'none' 以外の値に設定されている場合、上記の \password``コマンドに ``psql で送信される ALTER ROLE コマンドのログエントリには、実際の平文パスワードではなく、計算されたscram-sha-256ハッシュが含まれます。このメソッドは、上記で説明されているように log_statement の完全な無効化と組み合わせることができ、そのハッシュがPostgresログに表示されないようにします。

postgres=# CREATE ROLE mynewrole LOGIN;
CREATE ROLE

postgres=# BEGIN;
BEGIN

postgres=# SET LOCAL log_statement = 'none';
SET

postgres=# \password mynewrole
Enter new password for user "mynewrole":
Enter it again:

postgres=# COMMIT;
COMMIT

流出したパスワード保護

流出したパスワード保護は、Snowflake Postgresインスタンスのロールに提供されます。メインの 流出したパスワード保護 で説明されている検出と通知の仕組み。SnowflakeがSnowflake Postgresロールの1つのパスワード流出を検出した場合:

  • ロールが特別な snowflake_nologin Postgresグループロールに追加され、今後のログインを防ぎます。

  • ロールの既存の接続はすべて終了します。

  • 受信するメール通知には、件名に「緊急 - Snowflake Postgres ロールのパスワードがリセットされ、不正なアクセスを防ぎます」が含まれます。

このメールを受信したら、上記のようにロールのパスワードをすぐに安全に更新する必要があります。管理ロールの認証情報を再生成すると、それらは snowflake_nologin Postgresロールグループから自動的に削除されます。管理されていないロールの場合は、ロールのパスワードを更新した後、``snowflake_admin``ロールでこのPostgres SQLを実行することにより、``snowflake_nologin``グループロールから削除できます。

REVOKE snowflake_nologin FROM {rolename};

ロールの制限

Snowflake Postgresでは、特定の操作がサービス自体に予約されており、``snowflake_admin``を含む顧客管理ロールでは実行できません。

制限される操作の例は次のとおりです。

  • ``postgres``や``snowflake_superuser``などのスーパーユーザーロールでのログイン、またはSETROLEを使用したそのようなロールの引き受け。

  • 他のスーパーユーザーの作成。

  • ALTER SYSTEMコマンドの実行。

  • Snowflakeによって管理されている、保護されたサーバーレベルの構成パラメーターの変更。

  • Snowflake管理のコアコンポーネントまたは拡張機能の変更または無効化。

  • サービスによって使用されるSnowflake管理のシステムデータベースまたはスキーマへのアクセスまたは変更。

  • Snowflake Postgresインスタンスファイルシステムへのアクセスまたは変更。

  • システムカタログテーブルの直接変更。

  • インスタンスでの64を超えるロールの作成。

  • インスタンスでの32を超えるデータベースの作成。

  • ファイルシステムへのアクセスを許可するPostgresの`汎用ファイルアクセス関数<https://www.postgresql.org/docs/current/functions-admin.html#FUNCTIONS-ADMIN-GENFILE>`_へのアクセス。

Snowflake Postgres拡張機能は、インスタンス内で snowflake_admin および application 両方の機能を制限する可能性があります。これらの拡張機能固有の制限は、時間の経過とともに進化する可能性があり、対応する拡張機能の動作とともに文書化されます。操作がブロックされた場合、Snowflake Postgresで許可されていないことを示すエラーが表示されます。