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-258ハッシュが生成され、サーバーによって保存されますが、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;
Copy

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

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

postgres=# CREATE ROLE mynewrole LOGIN;
CREATE ROLE

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

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
Copy

ロールの制限

Snowflake Postgresでは、特定の操作がサービス自体に予約されており、 snowflake_admin などの顧客管理ロールでは実行できません。例は次のとおりです。

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

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

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

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

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

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

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

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

  • ALTER SYSTEM コマンドの実行

  • ファイルシステムのアクセスを許可するには、Postgresの 汎用ファイルアクセス関数 にアクセスします。

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