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_backendpg_use_reserved_connectionspg_create_subscriptionpg_read_all_settingspg_read_all_statspg_stat_scan_tablespg_monitorsnowflake_admin_group
``application``ロール。¶
application ロールは非スーパーユーザーロールであり、デフォルトで postgres データベースでオブジェクトを作成する権限を持っています。このロールの新しい権限または所有権は、 snowflake_admin ロールによって付与される必要があります。
Postgresのパスワードセキュリティ¶
Snowflake Postgres管理ロールの認証情報の再生成¶
snowflake_admin および application ロールの認証情報はインスタンスの作成時に生成され、1回だけ表示されます。これらの認証情報はいつでも再生成でき、既存の認証情報は無効になります。
ダッシュボードから、インスタンスの snowflake_admin ロールの認証情報を再生成できます。
ナビゲーションメニューで Postgres を選択します。
インスタンスを選択します。
右上の Manage メニューで Regenerate credentials を選択します。
Acknowledge & continue ボタンをクリックして、アクションを確認します。
To regenerate credentials for the
snowflake_adminorapplicationrole, you can use an ALTER POSTGRES INSTANCE command with the RESET ACCESS FOR parameter. The value that you specify is a quoted string, either'snowflake_admin'or'application'. For example:ALTER POSTGRES INSTANCE my_instance_1 RESET ACCESS FOR 'snowflake_admin'; ALTER POSTGRES INSTANCE my_instance_2 RESET ACCESS FOR 'application';
Requires OWNERSHIP privilege
そのコマンドは、次の列を持つ1行を返します。
password
認証情報のローテーションの例
my_instanceという名前のSnowflake Postgresインスタンスのsnowflake_adminロールのアクセスをリセットします。ALTER POSTGRES INSTANCE my_instance RESET ACCESS FOR 'snowflake_admin';
他の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 クライアントプログラムには既存のユーザーのパスワードを変更するために使用できる 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
流出したパスワード保護¶
Leaked password protection is provided for roles on Snowflake Postgres instances. Discovery and notification work as described in our main 流出したパスワード保護. When Snowflake discovers a leaked password for one of your Snowflake Postgres roles:
ロールが特別な
snowflake_nologinPostgresグループロールに追加され、今後のログインを防ぎます。ロールの既存の接続はすべて終了します。
受信するメール通知には、件名に「緊急 - Snowflake Postgres ロールのパスワードがリセットされ、不正なアクセスを防ぎます」が含まれます。
Should you receive this email you should immediately securely update the role's password as described above. When regenerating credentials
for managed roles they are automatically removed from the snowflake_nologin Postgres role group. For non-managed roles, after updating
the role's password they can be removed from the snowflake_nologin group role by running this Postgres with the snowflake_admin role:
REVOKE snowflake_nologin FROM {rolename};
ロールの制限¶
Snowflake Postgresでは、特定の操作がサービス自体に予約されており、 snowflake_admin などの顧客管理ロールでは実行できません。例は次のとおりです。
Snowflakeによって管理されている、保護されたサーバーレベルの構成パラメーターの変更。
Snowflake管理のコアコンポーネントまたは拡張機能の変更または無効化。
サービスによって使用されるSnowflake管理のシステムデータベースまたはスキーマへのアクセスまたは変更。
Snowflake Postgresインスタンスファイルシステムへのアクセスまたは変更。
システムカタログテーブルの直接変更。
その他のスーパーユーザーの作成。
インスタンスで64を超えるロールの作成。
インスタンスで32を超えるデータベースの作成。
ALTER SYSTEM コマンドの実行。
ファイルシステムのアクセスを許可するには、Postgresの 汎用ファイルアクセス関数 にアクセスします。
Snowflake Postgres拡張機能は、インスタンス内で snowflake_admin および application 両方の機能を制限する可能性があります。これらの拡張機能固有の制限は、時間の経過とともに進化する可能性があり、対応する拡張機能の動作とともに文書化されます。操作がブロックされた場合、Snowflake Postgresで許可されていないことを示すエラーが表示されます。