AWS Glue Data Catalog のデータベースとテーブルへのきめ細かなアクセス - Amazon Athena

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 には CATALOGDATABASETABLEFUNCTION のリソースが含まれています。

    注記

    このリストによれば、Athena と AWS Glue Data Catalog に共通のリソースは各アカウントの TABLEDATABASECATALOG です。Function は AWS Glue に固有です。Athena での削除アクションの場合、AWS Glue アクションへの許可を含める必要があります。「テーブルとデータベースのきめ細かなアクセス許可の例」を参照してください。

    CATALOG は各アカウントのすべての DATABASES の祖先であり、各 DATABASE はそのすべての TABLESFUNCTIONS の祖先であるという階層になっています。たとえば、アカウント内のカタログでデータベース db に属している table_test という名前のテーブルの場合、その祖先は db とアカウント内のカタログです。データベース db の場合、その祖先はアカウント内のカタログであり、その子孫はテーブルおよび関数です。リソースの階層構造に関する詳細については、AWS Glue デベロッパーガイドの「データカタログ内の ARN のリスト」を参照してください。

  • CREATE DATABASECREATE TABLESHOW DATABASESHOW 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 データベースのプロパティを変更できます。
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:UpdateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db" ] }
CREATE DATABASE example_db という名前のデータベースを作成できます。
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db" ] }
CREATE TABLE test という名前のテーブルを example_db データベースに作成できます。
{ "Sid": "DatabasePermissions", "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetDatabases" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db" ] }, { "Sid": "TablePermissions", "Effect": "Allow", "Action": [ "glue:GetTables", "glue:GetTable", "glue:GetPartitions", "glue:CreateTable" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db", "arn:aws:glue:us-east-1:123456789012:table/example_db/test" ] }
DROP DATABASE すべてのテーブルを含む、example_db データベースを削除できます。
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:DeleteDatabase", "glue:GetTables", "glue:GetTable", "glue:DeleteTable" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db", "arn:aws:glue:us-east-1:123456789012:table/example_db/*", "arn:aws:glue:us-east-1:123456789012:userDefinedFunction/example_db/*" ] }
DROP TABLE example_db データベースにある test という名前のパーティション分割されたテーブルを削除できます。テーブルにパーティションがない場合は、パーティションのアクションを含めません。
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetTable", "glue:DeleteTable", "glue:GetPartitions", "glue:GetPartition", "glue:DeletePartition" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db", "arn:aws:glue:us-east-1:123456789012:table/example_db/test" ] }
MSCK REPAIR TABLE example_db データベースで Hive 互換パーティションを test という名前のテーブルに追加した後、カタログメタデータを更新できます。
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase", "glue:GetTable", "glue:GetPartitions", "glue:GetPartition", "glue:BatchCreatePartition" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db", "arn:aws:glue:us-east-1:123456789012:table/example_db/test" ] }
SHOW DATABASES AWS Glue Data Catalog のすべてのデータベースをリストすることができます。
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetDatabases" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/*" ] }
SHOW TABLES example_db データベースにあるすべてのテーブルをリストすることができます。
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetTables" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db", "arn:aws:glue:us-east-1:123456789012:table/example_db/*" ] }