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

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

Amazon Athena で AWS Glue Data Catalog を使用している場合は、Athena で使用されるデータカタログオブジェクト (データベースとテーブル) にリソースレベルのポリシーを定義できます。

アイデンティティベースの IAM ポリシーにリソースレベルの許可を定義します。

重要

このセクションでは、アイデンティティベースの IAM ポリシーにおけるリソースレベルの許可について説明します。これらはリソースベースのポリシーとは異なります。相違点の詳細については、IAM ユーザーガイドの「アイデンティティベースのポリシーおよびリソースベースのポリシー」を参照してください。

これらのタスクについては、以下のトピックを参照してください。

このタスクを実行するには 以下のトピックを参照してください。
リソースへのきめ細かなアクセス権を定義する IAM ポリシーを作成する IAM ユーザーガイドの「IAM ポリシーの作成」。
AWS Glue で使用する IAM アイデンティティベースポリシーについて説明します。 アイデンティティベースのポリシー (IAM ポリシー) (AWS Glue 開発者ガイド)。

このセクションの内容

Limitations

AWS Glue Data Catalog および Athena できめ細かなアクセスコントロールを使用する際は、以下の制限事項を考慮します。

  • データベースとテーブルにのみアクセスを制限することができます。きめ細かなアクセスコントロールはテーブルレベルで適用されるため、テーブル内の個々のパーティションへのアクセスを制限することはできません。詳細については、「AWS Glue のテーブルのパーティションとバージョン」を参照してください。

  • AWS Glue Data Catalog には CATALOGDATABASETABLEFUNCTION のリソースが含まれています。

    注記

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

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

  • CREATE DATABASECREATE TABLESHOW DATABASESHOW TABLE、または ALTER TABLE などの、リソースに対する削除以外の Athena アクションには、リソース (テーブルまたはデータベース) とそのリソースのすべての祖先でこのアクションを呼び出すための許可が必要です。例えば、テーブルの祖先は、それが属するデータベース、およびアカウントのカタログです。データベースの祖先はアカウントのカタログです。「きめ細かなポリシーの例」を参照してください。

  • DROP DATABASE または DROP TABLE などの Athena での削除アクションには、データカタログ内のリソースのすべての祖先と子孫で削除アクションを呼び出すための許可も必要です。たとえば、データベースを削除するには、データベース、その祖先であるカタログ、その子孫であるすべてのテーブルとユーザー定義関数に対するアクセス許可が必要です。テーブルに子孫はありません。DROP TABLE を実行するには、テーブル、その属する先のデータベース、カタログに対して、このアクションを呼び出すためのアクセス許可が必要です。「きめ細かなポリシーの例」を参照してください。

  • データカタログ内の特定のデータベースへのアクセスを制限する場合は、GetDatabase および CreateDatabase アクションについて、各 AWS リージョンの default データベースとカタログにアクセスポリシーを指定する必要もあります。複数のリージョンで Athena を使用している場合は、各リージョンにあるそれぞれの default データベースとカタログで、リソース ARN のポリシーに個別の行を追加します。

    たとえば、GetDatabase (北バージニア) リージョンにある example_db へのアクセスを us-east-1 に許可するには、2 つのアクション defaultGetDatabase に対して、そのリージョンのポリシーに CreateDatabase データベースとカタログも含めます。

    { "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default", "arn:aws:glue:us-east-1:123456789012:database/example_db" ] }

必須: AWS リージョンごとの Default データベースとカタログに対するアクセスポリシー

Athena で AWS Glue Data Catalog を使用するには、GetDatabaseCreateDatabase に対する、default データベースと AWS Glue Data Catalog へのアクセスポリシーが AWS リージョンごとに存在している必要があります。

{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "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 のテーブル myTableGetPartitions を実行するには、データカタログ、myDB データベース、および myTable での glue:GetPartitions アクションに対する許可が必要です。

  • きめ細かなアクセスコントロールはテーブルバージョンには適用されません。パーティションと同様に、テーブルの以前のバージョンへのアクセス権は、AWS Glue でテーブルとそのテーブルの祖先に対してテーブルバージョン API へのアクセス権を介して付与されます。

AWS Glue アクションに対するアクセス許可については、AWS Glue デベロッパーガイドの「AWS Glue API アクセス許可: アクションとリソースのリファレンス」を参照してください。

テーブルとデータベースのきめ細かなアクセス許可の例

以下の表には、Athena のデータベースとテーブルに対するきめ細かなアクセス権を有効にするアイデンティティベースの IAM ポリシーの例がリストされています。これらの例から開始することをお勧めします。必要に応じて特定のデータベースやテーブルの個別アクションを許可または拒否するように調整します。

以下の例では、default および GetDatabase アクションに対する、CreateDatabase データベースとカタログへのアクセスポリシーが含まれています。このポリシーは、Athena と AWS Glue Data Catalog が連携するために必要です。複数の AWS リージョンを利用している場合は、各 default データベースとカタログに対して、リージョンごとに 1 行、このポリシーを含めます。

さらに、example_db データベースと test テーブル名を使用するデータベースとテーブルの名前に置き換えます。

DDL ステートメント リソースへのアクセスを許可する IAM アクセスポリシーの例
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/default", "arn:aws:glue:us-east-1:123456789012:database/example_db" ] }
ALTER 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/default" ] }, { "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" ] }
DROP 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/default" ] }, { "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/*" ] }
SHOW DATABASES AWS Glue Data Catalog のすべてのデータベースをリストすることができます。
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ] }, { "Effect": "Allow", "Action": [ "glue:GetDatabases" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/*" ] }
CREATE TABLE test という名前のテーブルを 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/default" ] }, { "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetTable", "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" ] }
SHOW TABLES 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/default" ] }, { "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/*" ] }
DROP TABLE test データベースにある 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/default" ] }, { "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" ] }