AWS Glue Data Catalog のデータベースとテーブルへのアクセスを構成する
Amazon Athena で AWS Glue Data Catalog を使用している場合は、Athena で使用されるデータベースとテーブルの Data Catalog オブジェクトのリソースレベルのポリシーを定義できます。
注記
このトピックでは、データベースレベルとテーブルレベルのセキュリティについて説明します。列レベル、行レベル、およびセルレベルのセキュリティの構成については、「Lake Formation でのデータフィルタリングとセルレベルのセキュリティ」を参照してください。
アイデンティティベースの IAM ポリシーにリソースレベルの許可を定義します。
重要
このセクションでは、アイデンティティベースの IAM ポリシーにおけるリソースレベルの許可について説明します。これらはリソースベースのポリシーとは異なります。相違点の詳細については、「IAM ユーザーガイド」の「アイデンティティベースのポリシーおよびリソースベースのポリシー」を参照してください。
これらのタスクについては、以下のトピックを参照してください。
このタスクを実行するには | 以下のトピックを参照してください。 |
---|---|
リソースへのアクセスを定義する IAM ポリシーを作成する | 「IAM ユーザーガイド」の「IAM ポリシーの作成」。 |
AWS Glue で使用する IAM アイデンティティベースポリシーについて説明します。 | 「AWS Glue デベロッパーガイド」の「アイデンティティベースのポリシー (IAM ポリシー)」。 |
このセクションの内容
制約事項
AWS Glue Data Catalog および Athena でデータベースおよびテーブルレベルのアクセス制御を使用する場合は、次の制限を考慮してください。
-
IAM アイデンティティセンターが有効な Athena ワークグループでは、IAM アイデンティティセンターの ID を使用するように Lake Formation を設定する必要があります。詳細情報については、「AWS Lake Formation デベロッパーガイドガイド」の「Integrating IAM Identity Center」を参照してください。
-
データベースとテーブルにのみアクセスを制限することができます。これらの制御はテーブルレベルで適用されます。テーブル内の個別パーティションへのアクセスを制限することはできません。詳細については、「AWS Glue のテーブルパーティションとバージョンのアクセス制御について」を参照してください。
-
AWS Glue Data Catalog には
CATALOG
、DATABASE
、TABLE
、FUNCTION
のリソースが含まれています。注記
このリストによれば、Athena と AWS Glue Data Catalog に共通のリソースは各アカウントの
TABLE
、DATABASE
、CATALOG
です。Function
は AWS Glue に固有です。Athena での削除アクションの場合、AWS Glue アクションへの許可を含める必要があります。「データベースとテーブルレベルのアクセス許可の例」を参照してください。CATALOG
は各アカウントのすべてのDATABASES
の祖先であり、各DATABASE
はそのすべてのTABLES
とFUNCTIONS
の祖先であるという階層になっています。たとえば、アカウント内のカタログでデータベースdb
に属しているtable_test
という名前のテーブルの場合、その祖先はdb
とアカウント内のカタログです。データベースdb
の場合、その祖先はアカウント内のカタログであり、その子孫はテーブルおよび関数です。リソースの階層構造に関する詳細については、AWS Glue デベロッパーガイドの「データカタログ内の ARN のリスト」を参照してください。 -
CREATE DATABASE
、CREATE TABLE
、SHOW DATABASE
、SHOW TABLE
、またはALTER TABLE
などの、リソースに対する削除以外の Athena アクションには、リソース (テーブルまたはデータベース) とそのリソースのすべての祖先でこのアクションを呼び出すための許可が必要です。例えば、テーブルの祖先は、それが属するデータベース、およびアカウントのカタログです。データベースの祖先はアカウントのカタログです。「データベースとテーブルレベルのアクセス許可の例」を参照してください。 -
DROP DATABASE
またはDROP TABLE
などの Athena での削除アクションには、データカタログ内のリソースのすべての祖先と子孫で削除アクションを呼び出すための許可も必要です。たとえば、データベースを削除するには、データベース、その祖先であるカタログ、その子孫であるすべてのテーブルとユーザー定義関数に対するアクセス許可が必要です。テーブルに子孫はありません。DROP TABLE
を実行するには、テーブル、その属する先のデータベース、カタログに対して、このアクションを呼び出すためのアクセス許可が必要です。「データベースとテーブルレベルのアクセス許可の例」を参照してください。
AWS リージョン ごとのカタログとデータベースへの AWS Glue アクセスを構成する
Athena が AWS Glue と連携するには、AWS リージョン ごとに、データベースおよびアカウントの AWS Glue Data Catalog へのアクセス権限を付与するポリシーが必要です。データベースを作成するには、CreateDatabase
許可も必要です。次のポリシー例では、AWS リージョン、AWS アカウント ID、およびデータベース名を独自のものに置き換えます。
{ "Sid": "DatabasePermissions", "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetDatabases", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:
us-east-1
:123456789012
:catalog", "arn:aws:glue:us-east-1
:123456789012
:database/default
" ] }
AWS Glue のテーブルパーティションとバージョンのアクセス制御について
AWS Glue では、テーブルがパーティションとバージョンを持つことができます。テーブルのバージョンとパーティションは、AWS Glue での独立したリソースとは見なされません。テーブルのバージョンとパーティションへのアクセスは、そのテーブルとその祖先リソースに対するアクセス許可を付与することで許可します。
アクセス制御を行う場合は、以下のアクセス許可を適用します。
-
制御はテーブルレベルで適用されます。データベースとテーブルにのみアクセスを制限することができます。たとえば、パーティション分割されたテーブルへのアクセスを許可すると、そのアクセス権はそのテーブル内のすべてのパーティションに適用されます。テーブル内の個別パーティションへのアクセスを制限することはできません。
重要
AWS Glue でパーティションに対してのアクションを実行するには、カタログ、データベース、テーブルレベルでパーティションアクションの許可が必要です。テーブル内のパーティションにアクセスできるだけでは十分ではありません。例えば、データベース
myDB
内のテーブルmyTable
に対してGetPartitions
を実行するには、カタログ、myDB
データベース、およびmyTable
リソースに対するglue:GetPartitions
のアクセス許可を付与する必要があります。 -
アクセス制御はテーブルのバージョンには適用されません。パーティションと同様に、テーブルの以前のバージョンへのアクセス権は、AWS Glue でテーブルとそのテーブルの祖先に対してテーブルバージョン API へのアクセス権を介して付与されます。
AWS Glue アクションに対する許可については、「AWS Glue デベロッパーガイド」の「AWS Glue API アクセス許可: アクションとリソースのリファレンス」を参照してください。
データベースとテーブルレベルのアクセス許可の例
以下の表には、Athena のデータベースとテーブルへのアクセスを許可する IAM アイデンティティベースのポリシーの例がリストされています。これらの例から開始することをお勧めします。必要に応じて特定のデータベースやテーブルの個別アクションを許可または拒否するように調整します。
これらの例には、Athena と AWS Glue が連携できるようにするデータベースとカタログへのアクセス権限が含まれます。複数の AWS リージョンの場合は、データベースとカタログごとに同様のポリシーを含めます (リージョンごとに 1 行)。
例では、example_db
データベースと test
テーブルを独自のデータベース名とテーブル名に置き換えます。
DDL ステートメント | リソースへのアクセスを許可する IAM アクセスポリシーの例 |
---|---|
ALTER DATABASE | example_db データベースのプロパティを変更できます。
|
CREATE DATABASE | example_db という名前のデータベースを作成できます。
|
CREATE TABLE | test という名前のテーブルを example_db データベースに作成できます。
|
DROP DATABASE | すべてのテーブルを含む、example_db データベースを削除できます。
|
DROP TABLE | example_db データベースにある test という名前のパーティション分割されたテーブルを削除できます。テーブルにパーティションがない場合は、パーティションのアクションを含めません。
|
MSCK REPAIR TABLE | example_db データベースで Hive 互換パーティションを test という名前のテーブルに追加した後、カタログメタデータを更新できます。
|
SHOW DATABASES | AWS Glue Data Catalog のすべてのデータベースをリストすることができます。
|
SHOW TABLES | example_db データベースにあるすべてのテーブルをリストすることができます。
|