Snowflakeでの Snowflake REST APIs 認証¶
このトピックでは、 Snowflake REST APIs を使用するときにサーバーに対して認証する方法について説明します。
リクエストを送信する場合、リクエストには以下のいずれかを使用する認証情報が含まれている必要があります。
キーペア認証の使用¶
キーペア認証を使用する場合は、以下のタスクを完了する必要があります。
キーペア認証を設定する¶
キーペア認証を使用するには、次のステップに従います。
- キーペア認証を設定します。 - このプロセスの一環として、次を実行する必要があります。 - 公開キーと秘密キーのペアを生成します。生成された秘密キーはファイル内にある必要があります(例: - rsa_key.p8という名前)。
- 公開キーをSnowflakeユーザーに割り当てます。ユーザーにキーを割り当てたら、 DESCRIBE USER コマンドを実行します。出力では、 - RSA_PUBLIC_KEY_FPプロパティは、ユーザーに割り当てられた公開キーのフィンガープリントに設定する必要があります。
 - キーペアを生成してユーザーにキーを割り当てる方法については、 キーペア認証とキーペアローテーション をご参照ください。 
- 生成された秘密キーを使用して |sf-cli|Snowflake に接続 :ref:`<label-snowcli_private_key> できることを確認するために、 ` を使用します。 - $ snow connection test --account <account_identifier> --user <user> --private-key-path <path>/rsa_key.p8 - 暗号化された秘密キーを生成した場合、 Snowflake CLI は、キーの生成時に作成したパスフレーズの入力を求めます。 
JWT トークンの生成¶
アプリケーション・コード内で JWT トークンを生成するには、以下の手順を使用します。
- ユーザーの公開キーのフィンガープリント(SHA-256ハッシュ)を生成します。フィンガープリントの前に - SHA256:を付けます。
- ペイロードに次のフィールドを含む JSON Webトークン(JWT) を生成します。 - フィールド - 説明 - 例 - iss- JWT の発行者。次の値に設定します。 - account_identifier.user.SHA256:public_key_fingerprint- 条件: - account_identifierは、Snowflakeの使用する アカウント識別子 です。- アカウントロケーター を使用している場合は、アカウントロケーターからリージョン情報を除外します。 
- userは、Snowflakeユーザー名です。
- SHA256:public_key_fingerprintは、前のステップで生成したフィンガープリントです。
 - 注釈 - account_identifierと- userの値は、すべて大文字を使用する必要があります。- MYORGANIZATION-MYACCOUNT.MYUSER.SHA256:public_key_fingerprint- sub- JWT の件名。次の値に設定します。 - account_identifier.user- MYORGANIZATION-MYACCOUNT.MYUSER- iat- JWT の発行時刻(UTC)。値を秒またはミリ秒の現在の時間値に設定します。 - 1615370644(秒) .- 1615370644000(ミリ秒)- exp- JWT の有効期限(UTC)。 値は、秒またはミリ秒で指定できます。 - 注釈 - JWT は、より長い有効期限を指定した場合でも、トークンが発行されてから最大1時間まで有効です。 - 1615374184(秒) .- 1615374184000(ミリ秒)
- 送信する各 API リクエストで、次のヘッダーを設定します。 - Authorization: Bearer JWT- JWTは、生成したトークンです。
- (オプション) - X-Snowflake-Authorization-Token-Type: KEYPAIR_JWT- X-Snowflake-Authorization-Token-Typeヘッダーを省略した場合、Snowflakeはトークンを調べてトークンのタイプを決定します。- このヘッダーはオプションですが、このヘッダーを指定することもできます。ヘッダーは以下の値のいずれかにセットできます。 - KEYPAIR_JWT(キーペア認証用)
- OAUTH( OAuthの場合)
- PROGRAMMATIC_ACCESS_TOKEN(プログラムアクセストークン 用)
 
 
OAuth の使用¶
OAuth を使用するには、次のステップに従います。
- 認証のために OAuth を設定します。 - OAuth を設定して OAuth トークンを取得する方法の詳細については、 OAuth の紹介 をご参照ください。 
- 生成された Snowflake CLI トークンを使用してSnowflakeに接続できることを確認するために、 OAuth を使用します。 - Linuxおよび MacOS システムの場合 
 - $ snow connection test --account <account_identifier> --user <user> --authenticator=oauth --token=<oauth_token> - Windowsシステムの場合 
 - $ snow connection test --account <account_identifier> --user <user> --authenticator=oauth --token="<oauth_token>" 
- 送信する各 API リクエストで、次のヘッダーを設定します。 - Authorization: Bearer oauth_token- ここで、 - oauth_tokenは生成された OAuth トークンです。
- (オプション) - X-Snowflake-Authorization-Token-Type: OAUTH- X-Snowflake-Authorization-Token-Typeヘッダーを省略した場合、Snowflakeはトークンを調べてトークンのタイプを決定します。- このヘッダーはオプションですが、このヘッダーを指定することもできます。ヘッダーは以下の値のいずれかにセットできます。 - KEYPAIR_JWT(キーペア認証用)
- OAUTH( OAuthの場合)
- PROGRAMMATIC_ACCESS_TOKEN(プログラムアクセストークン 用)
 
 
プログラムアクセストークン(PAT)の使用¶
プログラムアクセストークンで認証するには、リクエストに以下の HTTP ヘッダーをセットします。
- Authorization: Bearer token_secret
- X-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>"
リクエストが PAT_INVALID エラーで失敗した場合、エラーは以下のいずれかの理由で発生した可能性があります。
- プログラムアクセストークンに関連付けられたユーザーが見つかりませんでした。 
- 検証に失敗しました。 
- プログラムアクセストークンに関連付けられたロールが見つかりませんでした。 
- ユーザーは指定されたプログラムアクセストークンに関連付けられていません。 
詳細については、 エンドポイントの認証にプログラム アクセス トークンを使用します。 をご参照ください。