認証のためのプログラム アクセス トークンの使用¶
プログラム アクセス トークンを使用して、以下のSnowflakeエンドポイントを認証できます。
Snowpark Container Services エンドポイント。
Snowpark Connect for Spark を持つSnowflakeでホストされるSparkランタイム。詳細については、 Run Spark workloads from VS Code, Jupyter Notebooks, or a terminal をご参照ください。
また、 プログラム アクセス トークンをパスワードの代わりとして 使用することもできます。
Snowflake に接続するサードパーティアプリケーション(Tableau や PowerBI など)。
Snowflake APIsおよびライブラリ(Snowpark API、 Snowflake Python API など)。
Snowflakeコマンドラインクライアント(Snowflake CLI や SnowSQL など)。
人間ユーザー(TYPE=PERSON のユーザー)だけでなく、サービスユーザー(TYPE=SERVICE のユーザー)にもプログラム アクセス トークンを生成できます。
前提条件¶
プログラム アクセス トークンを生成して使用するには、以下の前提条件を満たす必要があります。
ネットワークポリシー要件¶
デフォルトでは、プログラム・アクセス・トークンを生成または使用するには、ユーザーは1つ以上の ネットワーク・ルール を持つ ネットワークポリシー に従わなければなりません。
For service users (where TYPE=SERVICE or TYPE=LEGACY_SERVICE for the user), you can only generate or use a token if the user is subject to a network policy.
この前提条件は、トークンの使用を特定のアドレスセットまたはネットワーク識別子からのリクエストに制限します。
人間のユーザー(ユーザーに対して TYPE=PERSON)の場合、ユーザーがネットワークポリシーの対象でなくてもトークンを生成できますが、このトークンで認証するには、ユーザーがネットワークポリシーの対象である必要があります。
ネットワークポリシーの適用を受けない人間のユーザーが認証のためにプログラム アクセス トークンを使用する必要がある場合、ネットワークポリシーの要件を一時的にバイパスすることができますが、これはお勧めしません。プログラム アクセス トークンの生成 をご参照ください。
注釈
ユーザーはネットワークポリシー自体を迂回することはできません。
ネットワークポリシーは、 アカウント内のすべてのユーザーに対して または 特定のユーザーに対して 有効にすることができます。
この要件を変更するには、プログラム アクセス トークンポリシーを指定する 認証ポリシー を作成または変更します。
To create an authentication policy:
CREATE AUTHENTICATION POLICY または ALTER AUTHENTICATION POLICY コマンドを実行します。PAT_POLICY 句で、 NETWORK_POLICY_EVALUATION を以下の値のいずれかにセットします。
ENFORCED_REQUIRED(デフォルトの動作)ユーザーは、プログラムによるアクセストークンを生成および使用するためのネットワークポリシーに従う必要があります。
ユーザーがネットワークポリシーの対象である場合、認証時にネットワークポリシーが適用されます。
ENFORCED_NOT_REQUIREDユーザーは、プログラムによるアクセストークンを生成・使用するためにネットワークポリシーに従う必要は ありません。
ユーザーがネットワークポリシーの対象である場合、認証時にネットワークポリシーが適用されます。
NOT_ENFORCEDユーザーは、プログラムによるアクセストークンを生成・使用するためにネットワークポリシーに従う必要は ありません。
ユーザーがネットワークポリシーの対象である場合、認証時にネットワークポリシーは適用 されません。
たとえば、ネットワークポリシーの要件を削除する認証ポリシーを作成する場合、ユーザーが適用されるネットワークポリシーはすべて適用されます。
CREATE AUTHENTICATION POLICY my_authentication_policy PAT_POLICY=( NETWORK_POLICY_EVALUATION = ENFORCED_NOT_REQUIRED );
The following example alters an existing authentication policy to remove the network policy requirement and prevent the enforcement of any network policy that the user is subject to:
ALTER AUTHENTICATION POLICY my_authentication_policy
SET PAT_POLICY = (
NETWORK_POLICY_EVALUATION = NOT_ENFORCED
);
認証ポリシー権限¶
ユーザーの認証方法を制限する 認証ポリシー がある場合、そのポリシーの AUTHENTICATION_METHODS リストに 'PROGRAMMATIC_ACCESS_TOKEN' が含まれていなければ、ユーザーはプログラム アクセス トークンを生成および使用できません。
例えば、ある認証ポリシーが、ユーザーの認証に OAuth とパスワード方式を使うことを制限しているとします。
CREATE AUTHENTICATION POLICY my_auth_policy
...
AUTHENTICATION_METHODS = ('OAUTH', 'PASSWORD')
...
AUTHENTICATION_METHODS リストに 'PROGRAMMATIC_ACCESS_TOKEN' を追加しない限り、ユーザーはプログラム アクセス トークンを生成および使用できません。このリストを更新するには、 ALTER AUTHENTICATION POLICY コマンドを使用します。
例:
ALTER AUTHENTICATION POLICY my_auth_policy
SET AUTHENTICATION_METHODS = ('OAUTH', 'PASSWORD', 'PROGRAMMATIC_ACCESS_TOKEN');
デフォルトおよび最大有効期限の構成¶
管理者 (ACCOUNTADMIN ロールを持つユーザー) は、プログラム アクセス トークンの有効期限に影響する以下の設定を構成できます。
最大有効期限のセット¶
デフォルトでは、トークンの有効期限は365日まで指定できます。これをより短い時間に短縮したい場合は、 認証ポリシー を作成または変更し、最大有効期限を持つプログラム アクセス トークンポリシーを指定します。
CREATE AUTHENTICATION POLICY または ALTER AUTHENTICATION POLICY コマンドを実行します。PAT_POLICY 句では、 MAX_EXPIRY_IN_DAYS を デフォルトの有効期限 から 365 までの範囲の値に設定します。
たとえば、最大日数を100日にセットする認証ポリシーを作成します。
CREATE AUTHENTICATION POLICY my_authentication_policy
PAT_POLICY=(
MAX_EXPIRY_IN_DAYS=100
);
次に、 認証ポリシーをアカウントまたはユーザーに適用します。
別の例として、既存の認証ポリシーを変更し、最大90日間にセットします。
ALTER AUTHENTICATION POLICY my_authentication_policy
SET PAT_POLICY = (
MAX_EXPIRY_IN_DAYS=90
);
注釈
新しい最大有効期限を超える有効期限のプログラムによるアクセストークンが存在する場合、それらのトークンによる認証は失敗します。
例えば、 my_token という名前のプログラムによるアクセストークンを7日間の有効期限で生成したとします。後ですべてのトークンの最大有効期限を2日に変更すると、トークンの有効期限が新しい最大有効期限を超えるため、 my_token での認証は失敗します。
デフォルトの有効期限のセット¶
デフォルトでは、プログラム アクセス トークンの有効期限は15日間です。これを変更したい場合は、 認証ポリシー を作成または変更し、デフォルトの有効期限を持つプログラム アクセス トークンポリシーを指定します。
CREATE AUTHENTICATION POLICY または ALTER AUTHENTICATION POLICY コマンドを実行します。PAT_POLICY 句で、 1 から 最大有効期限 までの値を DEFAULT_EXPIRY_IN_DAYS にセットします。
たとえば、デフォルトを 5 日に設定する認証ポリシーを作成します。
CREATE AUTHENTICATION POLICY my_authentication_policy
PAT_POLICY=(
DEFAULT_EXPIRY_IN_DAYS=5
);
次に、 認証ポリシーをアカウントまたはユーザーに適用します。
別の例として、既存の認証ポリシーを変更し、デフォルトを30日にセットする場合について説明します。
ALTER AUTHENTICATION POLICY my_authentication_policy
SET PAT_POLICY = (
DEFAULT_EXPIRY_IN_DAYS=30
);
Removing the role restriction for service users¶
By default, if you generate a programmatic access token for a service user (a user with TYPE=SERVICE or TYPE=LEGACY_SERVICE), you must specify the role that will be used during sessions authenticated with that token. That role will be used for privilege evaluation and object creation.
You can lift this restriction when you use the ALTER USER ADD PROGRAMMATIC ACCESS TOKEN command to generate a programmatic access token for a service user.
To lift this restriction:
Create or modify an authentication policy that specifies that you can generate a programmatic access token without a role restriction for service users.
To create an authentication policy, run the CREATE AUTHENTICATION POLICY command, setting REQUIRE_ROLE_RESTRICTION_FOR_SERVICE_USERS to FALSE in the PAT_POLICY clause. For example:
CREATE AUTHENTICATION POLICY my_authentication_policy PAT_POLICY = ( REQUIRE_ROLE_RESTRICTION_FOR_SERVICE_USERS = FALSE );To alter an existing authentication policy, run the ALTER AUTHENTICATION POLICY command, setting REQUIRE_ROLE_RESTRICTION_FOR_SERVICE_USERS to FALSE in the PAT_POLICY clause. For example:
ALTER AUTHENTICATION POLICY my_authentication_policy SET PAT_POLICY = ( REQUIRE_ROLE_RESTRICTION_FOR_SERVICE_USERS = FALSE );
Apply the authentication policy to an account or user:
To lift the restriction for all service users in the account, apply the authentication policy to the account.
To lift the restriction for specific service users, apply the authentication policy to those users.
注釈
Currently, the authentication policy does not lift the restriction if you are using Snowsight to generate the programmatic access token, but support will be added in the future.
Changing REQUIRE_ROLE_RESTRICTION_FOR_SERVICE_USERS from FALSE back to TRUE invalidates any programmatic access tokens for service users that were generated without the role restriction.
プログラム・アクセス・トークンに必要な権限¶
プログラム アクセス トークンを作成・管理するには、以下の権限を付与されたロールを使用する必要があります。
人間ユーザー(TYPE=PERSON)の場合、 自分自身のための プログラム アクセス トークンを生成、変更、削除、表示するのに、特別な権限は必要ありません。
異なるユーザーまたはサービスユーザー(TYPE=SERVICE)のプログラム アクセス トークンを生成、変更、削除、または表示する場合は、そのユーザーの OWNERSHIP または MODIFY PROGRAMMATIC AUTHENTICATION METHODS 権限を持つロールを使用する必要があります。
例えば、
my_service_owner_roleカスタムロールを持つユーザーに、サービスユーザーmy_service_userのプログラム アクセス トークンを生成・管理する権限を付与したいとします。my_service_userユーザーの MODIFY PROGRAMMATIC AUTHENTICATION METHODS 権限をロールmy_service_owner_roleに付与することができます。GRANT MODIFY PROGRAMMATIC AUTHENTICATION METHODS ON USER my_service_user TO ROLE my_service_owner_role;
プログラム アクセス トークンの生成¶
Snowsight、または SQL コマンドを実行することで、プログラム アクセス トークンを生成できます。
Snowsight にサインインします。
ナビゲーションメニューで Governance & security » Users & roles を選択します。
プログラム アクセス トークンを生成したいユーザーを選択します。
Programmatic access tokens の下で、 Generate new token を選択します。
New programmatic access token ダイアログで、以下の情報を入力します。
Name フィールドに、トークンの名前を入力します。
名前にはアルファベット、数字、アンダースコアのみを使用できます。名前はアルファベットまたはアンダースコアで始める必要があります。名前の文字は大文字として保存され、解決されます。
Comment フィールドに、トークンに関する説明的なコメントを入力します。
トークンを作成すると、このコメントが Programmatic access tokens セクションのトークンの基に表示されます。
Expires in から、トークンの有効期限が切れるまでの日数を選択します。
If you want to restrict the scope of the operations that can be performed:
Select One specific role (recommended).
Select the role that should be used for privilege evaluation and object creation.
注釈
If you are generating a token for a service user (a user with TYPE=SERVICE or TYPE=LEGACY_SERVICE), you must select a role.
認証にこのトークンを使用すると、作成したオブジェクトはすべてこのロールが所有し、権限評価にはこのロールが使用されます。
注釈
ユーザーの DEFAULT_SECONDARY_ROLES が('ALL')に設定されていても、セカンダリロールは使用されません。
代わりに Any of my roles を選択した場合、プライマリロールが所有するオブジェクトを作成し、権限が アクティブロール に対して評価されます。
Generate を選択します。
生成されたプログラム アクセス トークンをコピーまたはダウンロードし、トークンを認証情報として使用できるようにします。
注釈
このメッセージボックスを閉じた後は、このトークンをコピーしたりダウンロードしたりすることはできません。
新しいトークンは Programmatic access tokens セクションにリストされています。
前述したように、プログラム・アクセス・トークンを使用するには、トークン()に関連付けら れているユーザーがネットワークポリシー()の対象である必要があります。ただし、この要件を変更する認証ポリシーをセットアップする場合はこの限りではありません。
ネットワークポリシーの対象ではない人間のユーザーが認証にプログラムのアクセストークンを使用する必要がある場合は、
» :ui:`Bypass requirement for network policy`を選択して、ネットワークポリシーの要件を一時的に回避することができます。
注釈
Bypass requirement for network policy は、ユーザーがネットワークポリシー自体をバイパスすることを許可しません。
トークンの名前を指定して ALTER USER ... ADD PROGRAMMATIC ACCESS TOKEN (PAT) を実行します。
トークンを自分で生成する場合は、
usernameパラメーターを省略します。例えば、example_tokenという名前のトークンを生成する場合:ALTER USER ADD PROGRAMMATIC ACCESS TOKEN example_token;
あるユーザーの代わりにトークンを生成する場合(USER オブジェクトが TYPE=PERSON の場合)、ユーザー名を指定します。例えば、ユーザー
example_userに対してexample_tokenという名前のトークンを生成する場合:ALTER USER IF EXISTS example_user ADD PROGRAMMATIC ACCESS TOKEN example_token;
Tip
キーワード PROGRAMMATIC ACCESS TOKEN を指定する短い方法として、キーワード PAT を使うことができます。
次の点に注意してください。
サービスのユーザーを代表してトークンを生成する場合(USER オブジェクトが TYPE=SERVICE の場合)や、実行できる演算子の範囲を制限したい場合は、 ROLE_RESTRICTION を権限評価とオブジェクト生成に使用するロールにセットします。
これはユーザーに付与されたロールでなければなりません。このロールはトークン生成時にのみ指定できます。
注釈
If you are generating a token for a service user (a user with TYPE=SERVICE or TYPE=LEGACY_SERVICE), you must specify the ROLE_RESTRICTION parameter, unless you have set up an authentication policy to bypass this restriction. For information, see Removing the role restriction for service users.
認証にこのトークンを使用すると、作成したオブジェクトはすべてこのロールが所有し、権限評価にはこのロールが使用されます。
注釈
ユーザーの DEFAULT_SECONDARY_ROLES が('ALL')に設定されていても、セカンダリロールは使用されません。
例えば、サービスユーザー
example_service_userに対してexample_service_user_tokenというトークンを生成したいとします。サービスユーザがこのトークンで認証されると、(そのサービスユーザに付与された)example_service_user_roleロールを使用して権限を評価し、ユーザが作成したオブジェクトを所有する必要があります。この場合のトークンを生成するには、以下のステートメントを実行します。
ALTER USER IF EXISTS example_service_user ADD PROGRAMMATIC ACCESS TOKEN example_service_user_token ROLE_RESTRICTION = 'example_service_user_role';
ROLE_RESTRICTION を省略した場合、プライマリロールが所有するオブジェクトを作成し、権限が アクティブロール に対して評価されます。
トークンの有効期限を指定する(デフォルトの有効期限 を上書きする)には、 DAYS_TO_EXPIRY パラメーターにトークンの有効期限が切れるまでの日数をセットします。
1(1日の場合)から 最大有効期限 の値まで指定できます。例えば、10日後に失効するプログラム アクセス トークンを生成する場合:
ALTER USER IF EXISTS example_user ADD PROGRAMMATIC ACCESS TOKEN example_token DAYS_TO_EXPIRY = 10 COMMENT = 'An example of a token that expires in 10 days';
前述したように、プログラム・アクセス・トークンを使用するには、トークン()に関連付けら れているユーザーがネットワークポリシー()の対象である必要があります。ただし、この要件を変更する認証ポリシーをセットアップする場合はこの限りではありません。
ネットワークポリシーが適用されない人間ユーザー(ユーザーの TYPE プロパティが PERSON の場合)については、 MINS_TO_BYPASS_NETWORK_POLICY_REQUIREMENT をこの要件を回避したい分数に設定することで、ネットワークポリシーがあることの要件を一時的に回避できます。
例えば、あなたがネットワークポリシーの適用を受けないユーザーで、認証にプログラム アクセス トークンを使いたいとします。MINS_TO_BYPASS_NETWORK_POLICY_REQUIREMENT を 240 にセットすることで、4時間のネットワークポリシーの要件を回避できます。
注釈
MINS_TO_BYPASS_NETWORK_POLICY_REQUIREMENT を設定しても、ユーザーはネットワークポリシー自体をバイパスすることはできません。
ALTER USER ... ADD PROGRAMMATIC ACCESS TOKEN は token_secret 列のトークンを出力に表示します。
+---------------+-----------------+
| token_name | token_secret |
|---------------+-----------------|
| EXAMPLE_TOKEN | ... (token) ... |
+---------------+-----------------+
注釈
トークンが表示されるのは、このコマンドの出力だけです。エンドポイントへの認証として使用するために、出力からトークンをコピーします。
プログラム アクセス トークンを作成した後、有効期限を変更することはできません。トークンを取り消し、新しい有効期限で新しいトークンを生成する必要があります。
ロールに制限されているプログラムのアクセストークンの場合、ロールがユーザーから取り消されるか、ロールがドロップされると、ユーザーは認証にプログラムのアクセストークンを使用できなくなります。
プログラム アクセス トークンの使用¶
以下のセクションでは、プログラム アクセス トークンをパスワードとして使用し、Snowflakeエンドポイントへの認証情報として使用する方法について説明します。
プログラム アクセス トークンのパスワードとしての使用¶
プログラム アクセス トークンをパスワードとして認証接続するには、ドライバーのセットまたはSnowflakeへの接続コールで、パスワードの値にトークンを指定します。
たとえば、Snowflake Connector for Python を使用している場合、 snowflake.connector.connect メソッドを呼び出すときに、 password 引数としてプログラム アクセス トークンを指定できます。
conn = snowflake.connector.connect(
user=USER,
password=<programmatic_access_token>,
account=ACCOUNT,
warehouse=WAREHOUSE,
database=DATABASE,
schema=SCHEMA
)
同様に、サードパーティのアプリケーション(Tableau や PowerBI など)でも、パスワードの代わりにプログラム アクセス トークンを使用できます。パスワードのフィールドにプログラム アクセス トークンを貼り付けます。
注釈
デフォルトでは、プログラマティック・アクセストークン を使用するには、アカウント 内のユーザーまたはすべてのユーザーに対してネットワークポリシーを有効にする必要があります。サードパーティアプリケーションでプログラム アクセス トークンを使用するには、サードパーティアプリケーションの IP アドレス範囲からのリクエストを許可するネットワークポリシーを作成する必要があります。
エンドポイントの認証にプログラム アクセス トークンを使用します。¶
プログラムアクセストークンで認証するには、リクエストに以下の HTTP ヘッダーをセットします。
Authorization: Bearer token_secretX-Snowflake-Authorization-Token-Type: PROGRAMMATIC_ACCESS_TOKEN(オプション)
例えば、 cURL を使用して、 Snowflake REST API エンドポイントにリクエストを送信する場合:
curl --location "https://myorganization-myaccount.snowflakecomputing.com/api/v2/databases" \
--header "Authorization: Bearer <token_secret>"
別の例として、 cURL を使用して Snowflake SQL API エンドポイントにリクエストを送信する場合:
curl -si -X POST https://myorganization-myaccount.snowflakecomputing.com/api/v2/statements \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Authorization: Bearer <token_secret>" \
--data '{"statement": "select 1"}'
リクエストが PAT_INVALID エラーで失敗した場合、エラーは以下のいずれかの理由で発生した可能性があります。
プログラムアクセストークンに関連付けられたユーザーが見つかりませんでした。
検証に失敗しました。
プログラムアクセストークンに関連付けられたロールが見つかりませんでした。
ユーザーは指定されたプログラムアクセストークンに関連付けられていません。
プログラム アクセス トークンの管理¶
次のセクションでは、プログラムによるアクセストークンの使用、変更、リスト、ローテーション、取り消し、および再有効化する方法について説明します。
注釈
認証にプログラム アクセス トークンを使用したセッションでは、プログラム アクセス トークンの変更、名前の変更、ローテーション、取り消しはできません。
プログラム・アクセス・トークンのリスト¶
Snowsight または SQL コマンドを実行することで、ユーザーのプログラム アクセス トークンをリストすることができます。
Snowsight にサインインします。
ナビゲーションメニューで Governance & security » Users & roles を選択します。
プログラム アクセス トークンを所有するユーザーを選択します。
ユーザーのプログラム アクセス トークンは、 Programmatic access tokens にリストされています。
SHOW USER PROGRAMMATIC ACCESS TOKENS コマンドを実行します。例えば、ユーザー example_user に関連付けられたプログラム アクセス トークンに関する情報を表示するには:
SHOW USER PROGRAMMATIC ACCESS TOKENS FOR USER example_user;
アカウント内の全ユーザーのプログラムのアクセストークンをリストするには、 type 列に 'PAT' が含まれる行を CREDENTIALS ビュー でクエリします。例:
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.CREDENTIALS WHERE type = 'PAT';
注釈
7日が経過すると、期限切れのプログラム・アクセス・トークンは削除され、 Snowsight にも SHOW USER PROGRAMMATIC ACCESS TOKENS コマンドの出力にも表示されなくなります。
プログラム アクセス トークンの名前の変更¶
注釈
認証にプログラムアクセストークンを使用したセッションでは、プログラムアクセストークンの名前を変更することはできません。
プログラム アクセス トークンの名前は、 Snowsight または SQL コマンドを実行することで変更できます。
ALTER USER ... MODIFY PROGRAMMATIC ACCESS TOKEN ... RENAME TO を実行します。例:
ALTER USER IF EXISTS example_user MODIFY PROGRAMMATIC ACCESS TOKEN old_token_name RENAME TO new_token_name;
プログラム アクセス トークンのローテーション¶
注釈
認証にプログラムアクセストークンを使用したセッションで、プログラムアクセストークンをローテーションすることはできません。
Snowsight、または SQL コマンドを実行することで、プログラム アクセス トークンをローテーションすることができます。
トークンをローテーションすると、同じ名前で有効期限が延長された新しいトークンシークレットが返されます。トークンをローテーションすると、既存のトークンのシークレットも失効します。新しいトークンをSnowflakeの認証に使用します。
Snowsight にサインインします。
ナビゲーションメニューで Governance & security » Users & roles を選択します。
プログラム アクセス トークンに関連付けられたユーザーを選択します。
:ui:`Programmatic access tokens`で、プログラムのアクセストークンを見つけて、
» :ui:`Rotate`を選択します。以前のトークンのシークレットをすぐに失効させたい場合は、 Expire current secret immediately を選択します。
Rotate token を選択します。
生成されたプログラム アクセス トークンをコピーまたはダウンロードし、トークンを認証情報として使用できるようにします。
注釈
このメッセージボックスを閉じた後は、このトークンをコピーしたりダウンロードしたりすることはできません。
ALTER USER ... ROTATE PROGRAMMATIC ACCESS TOKEN (PAT) コマンドを実行します。
例えば、ユーザー example_user に関連付けられたプログラム アクセス トークン example_token をローテーションさせるためです。
ALTER USER IF EXISTS example_user ROTATE PROGRAMMATIC ACCESS TOKEN example_token;
古いトークンの有効期限を指定したい場合は、 EXPIRE_ROTATED_TOKEN_AFTER_HOURS に古いトークンの有効期限までの時間数をセットします。例えば、古いトークンをすぐに失効させたい場合などです。
ALTER USER IF EXISTS example_user
ROTATE PROGRAMMATIC ACCESS TOKEN example_token
EXPIRE_ROTATED_TOKEN_AFTER_HOURS = 0;
コマンドは出力の token_secret 列にトークンを表示します。
+---------------+-----------------+-------------------------------------+
| token_name | token_secret | rotated_token_name |
|---------------+-----------------+-------------------------------------|
| EXAMPLE_TOKEN | ... (token) ... | EXAMPLE_TOKEN_ROTATED_1744239049066 |
+---------------+-----------------+-------------------------------------+
注釈
このコマンドの出力は、新しいトークンが現れる唯一の場所です。エンドポイントへの認証として使用するために、出力からトークンをコピーします。
出力にはローテーションされた古いトークンの名前も含まれます。
トークンの有効期限を知りたい場合は、 SHOW USER PROGRAMMATIC ACCESS TOKENS コマンドでトークン名を検索します。例:
SHOW USER PROGRAMMATIC ACCESS TOKENS FOR USER example_user;
+--------------------------------------+--------------+------------------+-------------------------------+---------+---------+-------------------------------+--------------+-------------------------------------------+----------------+ | name | user_name | role_restriction | expires_at | status | comment | created_on | created_by | mins_to_bypass_network_policy_requirement | rotated_to | |--------------------------------------+--------------+------------------+-------------------------------+---------+---------+-------------------------------+--------------+-------------------------------------------+----------------| | EXAMPLE_TOKEN | EXAMPLE_USER | MY_CUSTOM_ROLE | 2025-05-09 07:18:47.360 -0700 | ACTIVE | | 2025-04-09 07:18:47.360 -0700 | EXAMPLE_USER | NULL | NULL | | EXAMPLE_TOKEN_ROTATED_1744239049066 | EXAMPLE_USER | MY_CUSTOM_ROLE | 2025-04-10 15:21:49.652 -0700 | ACTIVE | | 2025-04-09 15:21:49.652 -0700 | EXAMPLE_USER | NULL | EXAMPLE_TOKEN | +--------------------------------------+--------------+------------------+-------------------------------+---------+---------+-------------------------------+--------------+-------------------------------------------+----------------+
このトークンを取り消したい場合は、 ALTER USER ... REMOVE PROGRAMMATIC ACCESS TOKEN (PAT) コマンドを使用し、古いトークンの名前を指定します。例:
ALTER USER IF EXISTS example_user REMOVE PROGRAMMATIC ACCESS TOKEN EXAMPLE_TOKEN_ROTATED_1744239049066;
+-------------------------------------------------------------------------------------+ | status | |-------------------------------------------------------------------------------------| | Programmatic access token EXAMPLE_TOKEN_ROTATED_1744239049066 successfully removed. | +-------------------------------------------------------------------------------------+
プログラム アクセス トークンの取り消し¶
注釈
認証にプログラムアクセストークンを使用したセッションで、プログラムアクセストークンを取り消すことはできません。
プログラム アクセス トークンを取り消すには、 Snowsight または SQL コマンドを実行します。
ALTER USER ... REMOVE PROGRAMMATIC ACCESS TOKEN (PAT) コマンドを実行します。
例えば、ユーザー example_user に関連付けられたプログラム アクセス トークン example_token を取り消す場合です。
ALTER USER IF EXISTS example_user REMOVE PROGRAMMATIC ACCESS TOKEN example_token;
無効化されたプログラム アクセス トークンの再有効化¶
注釈
認証にプログラムアクセストークンを使用したセッションで、プログラムアクセストークンを変更することはできません。
ユーザーのログインアクセスを無効にする場合 または Snowflake がユーザーのログインをロックアウトする場合、そのユーザーのプログラム アクセス トークンは自動的に無効になります。
注釈
プログラマティック・アクセストークンは、ユーザーが 一時的にロックアウトされた場合 (例えば、認証に 5 回以上失敗した場合など)、無効化され ません。
SHOW USER PROGRAMMATIC ACCESS TOKENS コマンドを実行すると、 status 列の値は、そのユーザーに関連付けられているトークンの DISABLED になります。
SHOW USER PROGRAMMATIC ACCESS TOKENS FOR USER example_user;
+---------------+--------------+------------------+-------------------------------+----------+---------+-------------------------------+--------------+-------------------------------------------+------------+
| name | user_name | role_restriction | expires_at | status | comment | created_on | created_by | mins_to_bypass_network_policy_requirement | rotated_to |
|---------------+--------------+------------------+-------------------------------+----------+---------+-------------------------------+--------------+-------------------------------------------+------------|
| EXAMPLE_TOKEN | EXAMPLE_USER | MY_ROLE | 2025-04-28 12:13:46.431 -0700 | DISABLED | NULL | 2025-04-13 12:13:46.431 -0700 | EXAMPLE_USER | NULL | NULL |
+---------------+--------------+------------------+-------------------------------+----------+---------+-------------------------------+--------------+-------------------------------------------+------------+
後でそのユーザーのログインアクセスを有効にした場合、または Snowflake がそのユーザーのログインアクセスをロック解除した場合でも、そのユーザーのプログラム アクセス トークンは無効のままです。トークンを再び有効にするには、 ALTER USER ... MODIFY PROGRAMMATIC ACCESS TOKEN (PAT) コマンドを実行し、 DISABLED を FALSE にセットします。例:
ALTER USER example_user MODIFY PROGRAMMATIC ACCESS TOKEN example_token SET DISABLED = FALSE;
シークレットからのプログラム アクセス トークンの情報取得¶
プログラム アクセス トークンに関する情報が必要な場合、そのトークンのシークレットが与えられたら、 SYSTEM$DECODE_PAT 関数を呼び出します。シークレットが漏洩し、トークンに関連付けられたユーザー、トークンの名前、トークンの状態を知りたい場合にこの関数を使用できます。
例:
SELECT SYSTEM$DECODE_PAT('abC...Y5Z');
+------------------------------------------------------------------------+
| SYSTEM$DECODE_PAT('☺☺☺...☺☺☺') |
|------------------------------------------------------------------------|
| {"STATE":"ACTIVE","PAT_NAME":"MY_EXAMPLE_TOKEN","USER_NAME":"MY_USER"} |
+------------------------------------------------------------------------+
流出したプログラムのアクセストークンの処理¶
Snowflakeは `GitHubシークレットスキャンパートナープログラム<https://docs.github.com/en/code-security/secret-scanning/secret-scanning-partnership-program/secret-scanning-partner-program>`_ の一部です。プログラムのアクセストークンのシークレットがパブリック GitHub リポジトリにチェックインされている場合、Snowflakeに通知され、プログラムのアクセストークンを自動的に無効にします。Snowflakeは、流出したトークンに関するメール通知をアカウント管理者とトークンに関連付けられているユーザーに送信します。
通知には次が含まれます。
Snowflakeアカウント名
Snowflakeユーザー名
プログラムのアクセストークンの名前、 ID およびステータス
GitHub リポジトリの URL
注釈
アカウント管理者とユーザーは、 メールアドレスを確認した 場合にのみメール通知を受け取ります。
GitHub リポジトリを所有している場合、 `シークレットスキャンの有効化<https://docs.github.com/en/code-security/secret-scanning/enabling-secret-scanning-features/enabling-secret-scanning-for-your-repository>`_ で流出したトークンを無効にすることをSnowflakeに許可することができます。また、 プッシュ保護 を有効にして、Snowflakeプログラムのアクセストークンが GitHub リポジトリにコミットされるのを防ぐこともできます。
プログラムのアクセストークンが流出した場合は、認証にプログラムのアクセストークンを使用したセッション中に実行されたクエリを調べる必要があります。これらのクエリを識別するには、次を SQL ステートメントを使用できます。
WITH session_ids_with_leaked_pats AS (
SELECT DISTINCT s.session_id
FROM SNOWFLAKE.ACCOUNT_USAGE.SESSIONS s JOIN SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY lh
ON s.login_event_id= lh.event_id
WHERE
lh.first_authentication_factor_id = '<pat_id>'
)
SELECT qh.*
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY qh JOIN session_ids_with_leaked_pats slp
ON qh.session_id = slp.session_id;
さらに、プログラムのアクセストークンが別のアカウントに複製されている場合は、そのアカウントでトークンを無効にする必要があります。複製されたトークンを含む可能性のあるアカウントを特定するには、 SHOW REPLICATION GROUPS コマンドを実行します。
プログラムのアクセストークンが使用されたログインセッションの識別¶
プログラムのアクセストークンが認証に使用されたかどうかを確認するには、認証情報 ID を含む列の ACCOUNT_USAGE スキーマの:doc:LOGIN_HISTORY</sql-reference/account-usage/login_history> ビューおよび CREDENTIALS ビューを結合します。
first_authentication_factor列にPROGRAMMATIC_ACCESS_TOKENが含まれている場合、 LOGIN_HISTORY ビューのfirst_authentication_factor_id列には認証情報 ID が含まれます。CREDENTIALS ビューには
credential_id列に認証情報 ID が含まれています。
例:
SELECT
login.event_timestamp,
login.user_name,
cred.name
FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY login
JOIN SNOWFLAKE.ACCOUNT_USAGE.CREDENTIALS cred
ON login.first_authentication_factor_id = cred.credential_id
WHERE login.first_authentication_factor = 'PROGRAMMATIC_ACCESS_TOKEN';
+-------------------------------+-----------+-----------+
| EVENT_TIMESTAMP | USER_NAME | NAME |
|-------------------------------+-----------+-----------|
| 2025-08-01 09:01:06.098 -0700 | USER_A | PAT_FOR_A |
| 2025-07-08 13:33:07.687 -0700 | USER_B | MY_PAT |
| 2025-07-08 14:15:26.234 -0700 | USER_C | MY_TOKEN |
+-------------------------------+-----------+-----------+
このログインセッション中に実行されたクエリに関する情報を取得するには、 login_event_id 列で LOGIN_HISTORY ビューと SESSIONS ビューを結合してセッション ID を取得し、それを使用して QUERY_HISTORY ビューを結合します。
ベストプラクティス¶
プログラム アクセス トークンを保存する必要がある場合は、(パスワードやシークレットマネージャーを使用するなどして)安全に保存してください。
コード内でプログラム アクセス トークンを公開することは避けてください。
トークンを生成する 際に、トークンの使用を特定のロールに制限します。
プログラム アクセス トークンを定期的に見直し、ローテーションします。ユーザーは トークンを生成する 際に有効期限をセットでき、管理者は すべてのトークンの最大有効期限を短縮できます。トークンのローテーションを奨励するためです。
制限事項¶
プログラム アクセス トークンのシークレットを表示できるのは、トークンを作成したときだけです。プログラム アクセス トークンを作成した後は、トークンに関する情報のみを表示することができ、トークンのシークレットを表示することはできません。
トークンを生成した後は、プログラムのアクセストークンのプロパティの一部を変更することができません。
トークンを生成した後は、そのトークンの制限されているロールを変更したり削除したりすることはできません。
トークンを生成した後に、トークンの有効期限を変更することはできません。プログラムアクセストークンを取り消し、有効期限が異なる新しいトークンを生成することができます。
Each user can have a maximum of 15 programmatic access tokens.
This number includes tokens that have been disabled.
This number does not include tokens that have expired.
管理者が実行して特定のユーザーのすべてのプログラムアクセストークンをリストできるコマンドがありますが(SHOW USER PROGRAMMATIC ACCESS TOKENS)、アカウント内のすべてのプログラムアクセストークンをリストするコマンドはありません。
ただし、管理者は:doc:
/sql-reference/account-usage/credentialsビューをクエリして、アカウント内のプログラムアクセストークンをリストすることができます。プログラム アクセス トークンを取り消した後、それを回復することはできません。
認証にプログラム アクセス トークンを使用したセッションでは、プログラム アクセス トークンの変更、名前の変更、ローテーション、取り消しはできません。