アクセス制御¶
このセクションでは、Snowflakeオープンカタログのアクセス制御の仕組みについて説明します。
オープンカタログでは、ロールベースのアクセス制御(RBAC)モデルを使用しています。このモデルでは、オープンカタログ管理者がカタログロールにアクセス権限を割り当て、カタログロールをプリンシパルロールに割り当てることによって、サービスプリンシパルにリソースへのアクセスを付与します。
オープンカタログのアクセス制御を理解するための重要な概念は次のとおりです。
セキュリティ保護可能なオブジェクト
プリンシパルロール
カタログロール
権限
セキュリティ保護可能なオブジェクト¶
セキュリティ保護可能なオブジェクトとは、アクセスを付与できるオブジェクトのことです。オープンカタログには、以下のセキュリティ保護可能なオブジェクトがあります。
カタログ
名前空間
Icebergテーブル
ビュー
オープンカタログの RBAC モデルは、カタログ全体またはカタログ内の名前空間、テーブル、ビューに権限を付与できるように、きめ細かく設定されています。名前空間に権限を付与する場合、その名前空間の下にグループ化されたテーブルと、その名前空間の下にネストされた子名前空間またはテーブルも保護するオプションがあります。
プリンシパルロール¶
プリンシパルロールとはオープンカタログのリソースで、オープンカタログのサービスプリンシパルを論理的にグループ化し、セキュリティ保護可能なオブジェクトに権限を付与するために使用できます。
オープンカタログは、サービスプリンシパルとプリンシパルロールの間の多対一の関係をサポートします。例えば、複数のサービスプリンシパルに同じ権限を付与するために、それらのサービスプリンシパルに単一のプリンシパルロールを付与することができます。サービスプリンシパルには、1つのプリンシパルロールを付与することができます。サービス接続を登録する際、オープンカタログ管理者はサービスプリンシパルに付与されているプリンシパルロールを指定します。
プリンシパルロールに直接権限を付与することはできません。その代わりに、カタログロールレベルでオブジェクト権限を構成し、プリンシパルロールにカタログロールを付与します。
次の表は、オープンカタログで構成するプリンシパルロールの例です。
プリンシパルロール名 |
説明 |
---|---|
Data_engineer |
データエンジニアリングジョブを実行するために、複数のサービスプリンシパルに付与されるロール。 |
Data_scientist |
データサイエンスや AI のジョブを実行するために、複数のサービスプリンシパルに付与されるロール。 |
カタログロール¶
カタログロールは、オープンカタログの特定のカタログリソースに属し、カタログ、またはカタログ名前空間やテーブルなどのカタログ内のオブジェクトに対するアクションに一連の権限を指定します。カタログには、1つまたは複数のカタログロールを作成できます。
カタログロールに権限を付与し、そのカタログロールをプリンシパルロールに付与して、1つまたは複数のサービスプリンシパルに権限を付与します。
注意
サービスプリンシパルに付与された権限を更新した場合、更新は最大1時間後まで有効になりません。これは、あるカタログの権限を取り消したり付与したりしても、そのカタログにアクセスできるサービスプリンシパルに対して更新された権限は最大1時間後まで有効にならないことを意味します。
オープンカタログは、カタログロールとプリンシパルロールの間の多対多の関係もサポートしています。同じカタログロールを1つ以上のプリンシパルロールに付与することができます。同様に、プリンシパルロールには1つ以上のカタログロールを付与することができます。
次の表は、オープンカタログで構成するカタログロールの例を表しています。
カタログロールの例 |
説明 |
---|---|
カタログ管理者 |
カタログへのフルアクセスを模倣するために複数の権限を付与されたロール。 |
カタログリーダー |
カタログ内のテーブルへの読み取り専用権限が付与されたロール。 |
カタログコントリビューター |
カタログに属するすべてのテーブルへの読み取りと書き込みアクセス権限が付与されたロール。 |
ユーザーのロール¶
ユーザーとは、オープンカタログのアカウントを管理するためにオープンカタログのウェブインターフェイスにサインインする人のことです。しかし、ユーザーがアカウントを管理する前に、少なくとも1つのユーザーロールが付与されている必要があります。ユーザーに付与できるユーザーロールは、サービス管理者とカタログ管理者です。
サービス管理者ロール¶
サービス管理者ロールにより、ユーザーはいくつかの例外を除いてアカウント全体を管理できます。
許可されている権限¶
サービス管理者権限を持つユーザーは、サービス管理者です。サービス管理者は、アカウントで以下のタスクを実行できます。
サービス接続の作成
ネットワークポリシーを使用します。
ユーザーの管理: ユーザーの作成と削除、ユーザーへのロールの付与、ユーザーからのロールの取り消し
カタログを作成し、作成したカタログを管理します。
サービス管理者がカタログを作成すると、そのカタログのカタログ管理者ロールも自動的に付与されます。サービス管理者は、カタログ管理者権限があるカタログに対して以下を行うことができます。
カタログ管理者ロールを持つ別のユーザーをカタログに付与する。その結果、どちらのユーザーもカタログにアクセスできます。
カタログへの自分のカタログ管理者権限を取り消す。これにより、カタログへのアクセスを失います。ただし、カタログ管理者権限を取り消す前に、まず別のユーザーにそのカタログのカタログ管理者権限を付与する必要があります。
許可されていない権限¶
サービス管理者権限を持つユーザーは、そのアカウント内で以下のタスクを実行できません。
自分が作成したものではないカタログにアクセスしたり、管理したりする。
サービス管理者が作成していないカタログに、カタログ管理者権限を付与する。
カタログ管理者ロール¶
カタログ管理者ロールにより、ユーザーはアカウント内のカタログを管理できます。カタログ管理者ロールは、個々のカタログに付与する必要があります。
許可されている権限¶
カタログ管理者ロールは、カタログにアクセスして管理する次のような権限をユーザーに付与します。
カタログにアクセスする
カタログで名前空間を作成する
カタログにカタログロールを作成し、権限を付与する。
プリンシパルロールにカタログロールを付与する。これはサービスプリンシパルにカタログロールに付与されている権限を与えます。
許可されていない権限¶
カタログ管理者権限のみを持つユーザーは、そのアカウントで以下のタスクを実行できません。
サービス接続を作成する
カタログ管理者ロールが付与されていないカタログにアクセスまたは管理する
カタログを作成または削除する
ネットワークポリシーを使用する
ユーザーを管理する
RBAC モデル¶
次の図は、オープンカタログが使用する RBAC モデルを表しています。各カタログについて、オープンカタログのカタログ管理者は、カタログロールにアクセス権限を割り当て、カタログロールをプリンシパルロールに割り当てることによって、サービスプリンシパルにリソースへのアクセスを付与します。オープンカタログは、サービスプリンシパルとプリンシパルロールの間の多対一の関係をサポートします。
テーブルレベルまたは名前空間レベルでアクセス制御権限を付与することもできます。例えば、以下の図は、カタログ内の名前空間とテーブルに対する権限の付与を表しています。
アクセス制御権限¶
このセクションでは、オープンカタログのアクセス制御モデルで使用できる権限について説明します。サービスプリンシパルがオープンカタログのオブジェクトに対して実行できる操作を指定するには、権限をカタログロールに付与し、カタログロールをプリンシパルロールに付与し、プリンシパルロールをサービスプリンシパルに付与します。
オブジェクトの全権限(ドロップ、リスト表示、読み取り、書き込みなど)を与えるには、 フル権限 オプションを使用します。
カタログ権限¶
権限 |
説明 |
---|---|
CATALOG_MANAGE_CONTENT |
カタログのコンテンツを完全に管理できます。この権限には以下の権限が含まれます:
|
CATALOG_MANAGE_METADATA |
カタログ、カタログロール、名前空間、およびテーブルを完全に管理できます。 |
CATALOG_READ_PROPERTIES |
カタログを一覧表示し、カタログのプロパティを読み取ることができます。 |
CATALOG_WRITE_PROPERTIES |
カタログプロパティを設定できます。 |
NAMESPACE_CREATE |
カタログで名前空間を作成できます。 |
NAMESPACE_DROP |
名前空間をカタログから削除できます。 |
NAMESPACE_FULL_METADATA |
すべての名前空間権限を付与します。 |
NAMESPACE_LIST |
ネストされた名前空間やテーブルを含め、名前空間内のすべてのオブジェクトを一覧表示できます。 |
NAMESPACE_READ_PROPERTIES |
すべての名前空間プロパティを読み取ることができます。 |
NAMESPACE_WRITE_PROPERTIES |
名前空間プロパティを設定できます。 |
TABLE_CREATE |
テーブルをカタログに登録できます。 |
TABLE_DROP |
カタログからテーブルを削除できます。 |
TABLE_FULL_METADATA |
TABLE_READ_DATA と TABLE_WRITE_DATA を除くすべてのテーブル権限を付与します。これは個別に付与する必要があります。 |
TABLE_LIST |
カタログ内のテーブルを一覧表示できます。 |
TABLE_READ_DATA |
カタログから一時的な読み取り専用ストレージ認証情報を受け取ることで、テーブルからのデータを読み取ることができます。 |
TABLE_READ_PROPERTIES |
テーブルのプロパティを読み取ることができます。 |
TABLE_WRITE_DATA |
カタログから一時的な読み取りと書き込みのストレージ認証情報を受け取ることで、テーブルにデータを書き込むことができます。 |
TABLE_WRITE_PROPERTIES |
テーブルのプロパティを設定できます。 |
VIEW_CREATE |
ビューをカタログに登録できます。 |
VIEW_DROP |
カタログからビューをドロップできます。 |
VIEW_FULL_METADATA |
すべてのビュー権限を付与します。 |
VIEW_LIST |
カタログのビューを一覧表示できます。 |
VIEW_READ_PROPERTIES |
すべてのビュープロパティを読み取ることができます。 |
名前空間権限¶
権限 |
説明 |
---|---|
CATALOG_MANAGE_CONTENT |
名前空間、その下にグループ化されたテーブル、および名前空間の下にネストされた名前空間とテーブル(該当する場合)のコンテンツを完全に管理できます。この権限はカタログ全体に対して付与されません。この権限には以下の権限が含まれます:
|
CATALOG_MANAGE_METADATA |
名前空間、カタログロール、およびその下にグループ化されているテーブル、またはその下に入れ子になっている子名前空間やテーブルを完全に管理できます。 |
NAMESPACE_CREATE |
名前空間から子名前空間を作成できます。 |
NAMESPACE_DROP |
名前空間をカタログから削除できます。 |
NAMESPACE_FULL_METADATA |
名前空間に対するすべての権限を付与します。 |
NAMESPACE_LIST |
ネストされた名前空間やテーブルを含め、名前空間内のすべてのオブジェクトを一覧表示できます。 |
NAMESPACE_READ_PROPERTIES |
すべての名前空間プロパティを読み取ることができます。 |
NAMESPACE_WRITE_PROPERTIES |
名前空間プロパティを設定できます。 |
TABLE_CREATE |
名前空間にテーブルを登録できます。 |
TABLE_DROP |
名前空間からテーブルをドロップできます。 |
TABLE_FULL_METADATA |
名前空間にグループ化されたテーブルのすべてのテーブル権限を付与します。ただし、 TABLE_READ_DATA と TABLE_WRITE_DATA は個別に付与する必要があります。 |
TABLE_LIST |
名前空間内のすべてのテーブルを一覧表示できます。 |
TABLE_READ_DATA |
カタログから一時的な読み取り専用ストレージ認証情報を受け取ることで、名前空間の下にグループ化された任意のテーブルからデータを読み取ることができます。 |
TABLE_READ_PROPERTIES |
名前空間の下にグループ化されたテーブルのプロパティを読み取ることができます。 |
TABLE_WRITE_DATA |
カタログから一時的な読み取りと書き込みのストレージ認証情報を受け取ることで、名前空間でグループ化された任意のテーブルにデータを書き込むことができます。 |
TABLE_WRITE_PROPERTIES |
名前空間の下にグループ化された任意のテーブルに対してプロパティを構成できます。 |
VIEW_CREATE |
名前空間にビューを登録できます。 |
VIEW_DROP |
名前空間からビューを削除できます。 |
VIEW_FULL_METADATA |
名前空間内のすべてのビューに対してすべてのビュー権限を付与します。 |
VIEW_LIST |
名前空間内のすべてのビューを一覧表示できます。 |
VIEW_READ_PROPERTIES |
名前空間内のすべてのビューのすべてのビュープロパティを読み取ることができます。 |
VIEW_WRITE_PROPERTIES |
名前空間内の任意のビューのビュープロパティを設定できます。 |
テーブル権限¶
権限 |
説明 |
---|---|
TABLE_DROP |
カタログからテーブルを削除できるようにします。 |
TABLE_FULL_METADATA |
TABLE_READ_DATA と TABLE_WRITE_DATA を除くすべてのテーブル権限を付与します。これは個別に付与する必要があります。 |
TABLE_LIST |
カタログ内のテーブルを一覧表示できます。 |
TABLE_READ_DATA |
カタログから一時的な読み取り専用ストレージ認証情報を受け取ることで、テーブルからのデータを読み取ることができます。 |
TABLE_READ_PROPERTIES |
テーブルのプロパティを読み取ることができます。 |
TABLE_WRITE_DATA |
カタログから一時的な読み取りと書き込みのストレージ認証情報を受け取ることで、テーブルにデータを書き込むことができます。 |
TABLE_WRITE_PROPERTIES |
テーブルのプロパティを設定できます。 |
VIEW_READ_PROPERTIES |
すべてのビュープロパティを読み取ることができます。 |
ビュー権限¶
権限 |
説明 |
---|---|
VIEW_CREATE |
ビューをカタログに登録できます。 |
VIEW_DROP |
カタログからビューをドロップできます。 |
VIEW_LIST |
カタログのビューを一覧表示できます。 |
VIEW_READ_PROPERTIES |
すべてのビュープロパティを読み取ることができます。 |
VIEW_WRITE_PROPERTIES |
ビューのプロパティを設定できます。 |
VIEW_FULL_METADATA |
すべてのビュー権限を付与します。 |
RBAC の例¶
次の図は、オープンカタログで RBAC がカタログレベルでどのように機能するかを示したもので、以下のユーザーを含みます。
Alice: オープンカタログに登録するサービス管理者。Aliceはサービスプリンシパルを作成できます。また、カタログと名前空間を作成し、オープンカタログリソースのアクセス制御を設定することもできます。
注意
Aliceのサービスプリンシパルはオープンカタログのユーザーインターフェイスには表示されません。
Bob: (Snowflakeの)Snowpipe StreamingとApache Spark™接続を使用してオープンカタログとやりとりするデータエンジニア。
AliceはBobのためにサービスプリンシパルを作成しました。Data_engineerプリンシパルロールが付与されたため、カタログコントリビューターとデータ管理者(以下の図ではSilverゾーンとGoldゾーンの両方のカタログ)のカタログロールが付与されました。
カタログコントリビューターロールは、Bronzeゾーンカタログに名前空間とテーブルを作成する権限を与えます。
データ管理者ロールは、SilverゾーンカタログおよびGoldゾーンカタログに対する完全な管理権限を付与します。
Mark: Snowflake AI サービスを使ってオープンカタログとやり取りするデータサイエンティスト。
AliceはMarkのためにサービスプリンシパルを作成しました。Data_scientistプリンシパルロールが付与され、カタログリーダーというカタログロールが付与されました。。
カタログリーダーロールは、Goldゾーンカタログという名前のカタログに対する読み取り専用アクセスを付与します。