外部 API 認証とシークレット

このトピックでは、外部 API 認証およびシークレットに関する概念を提供します。

このトピックの内容:

概要

外部 API 認証は、Snowflake の外部でホストされているサービスを認証するための経路を提供します。サービスにアクセスするための API リクエストでは、API リクエストが認証される必要があります。Snowflakeは、外部 API 認証を使用している場合、次の認証方法をサポートしています。

  • 基本認証。

  • コード許可フローを使用した OAuth

  • クライアント認証情報フローを使用した OAuth

Snowflake は、 RFC 7617 で指定されているように、API リクエストヘッダーで基本認証(つまり、ユーザー名とパスワード)をサポートします。ここで、認証情報はBase64を使用してエンコードされます。同様に、Snowflakeは RFC 6749 で指定されている OAuth 2.0をサポートしています。Snowflakeでは、認証情報が保存され、シークレットと呼ばれるオブジェクトから安全にアクセスされます。シークレットは、 ServiceNow 用Snowflakeコネクタ などのSnowflake外部のサービスにアクセスするためのコネクタで使用されます。 外部 API認証 のセキュリティ統合により、OAuth フローを使用する場合、SnowflakeはSnowflakeの外部でホストされているサービスに接続できます。

シークレットは、機密情報を格納し、 RBAC を使用して機密情報へのアクセスを制限し、Snowflake キー暗号化階層 を使用して暗号化されるスキーマレベルのオブジェクトです。シークレットオブジェクトに存在する情報は、キー階層のキーを用いて暗号化されます。シークレットを作成した後は、統合や外部関数などの専用のSnowflakeコンポーネントのみが機密情報を読み取ることができます。

たとえば、外部関数はシークレットにアクセスして読み取り、認証情報を API 認証ヘッダーに渡して、Snowflakeの外部のサービスに API リクエストを送信する必要があります。外部関数へのシークレットのバインドは、コネクタのインストールプロセス中に発生します。ただし、ユーザーがシークレットに対して DESCRIBE SECRET 操作を実行する場合、シークレットに保存されているパスワード値が公開されることはありません。

Snowflakeは、シークレットの API 認証に使用される認証情報の集中管理とアクセス制御を提供します。シークレットの管理とコネクタの管理に関連するロールのために、職務の分離(つまり SoD)を実装できます。コネクタはシークレット名のみを使用する必要があり、コネクタのロールを付与されたユーザーはシークレットに保存されている機密情報を表示する必要はありません。

シークレットの管理

Snowflakeは、シークレットオブジェクトを管理するために次のコマンドを提供します。

Snowflakeは、ユーザーがシークレットを作成、使用、および所有できるかどうかを決定するために、次の権限をサポートしています。

スキーマ内の任意のオブジェクトを操作するには、親データベースとスキーマに対する USAGE 権限も必要であることに注意してください。

権限

使用法

CREATE

スキーマで新しいシークレットを作成できるようにします。

USAGE

シークレットを使用できるようにします。

OWNERSHIP

シークレットの所有権を譲渡します。これにより、シークレットを包括的に制御できるようになります。シークレットのほとんどのプロパティを変更するために必要です。

次のテーブルは、シークレットのコマンド操作とそれらに必要な権限の関係をまとめたものです。

操作

権限

CREATE SECRET

同じスキーマ内で CREATE SECRET 権限を持つ親データベースおよび親スキーマでの USAGE 権限をもつロール。

ALTER SECRET

シークレットに対する OWNERSHIP 権限を持つロール。

DROP SECRET

シークレットに対する OWNERSHIP 権限を持つロール。

DESCRIBE SECRET

シークレットに対する USAGE 権限を持つロール。

SHOW SECRETS

シークレットに対する USAGE 権限を持つロール。

USE SECRET

シークレットに対する USAGE 権限を持つロール。

この権限は、シークレットを外部関数で使用する場合、外部関数を作成し、クエリの実行時に外部関数を呼び出すロールに必要です。

外部 API 認証とシークレットの使用

代表的な例については、次をご参照ください。

さらに、アカウント複製を使用してシークレットを複製することもできます。詳細については、 複製とシークレット をご参照ください。