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 できめ細かなアクセスコントロールを使用する際は、以下の制限事項を考慮します。
-
データベースとテーブルにのみアクセスを制限することができます。きめ細かなアクセスコントロールはテーブルレベルで適用されるため、テーブル内の個々のパーティションへのアクセスを制限することはできません。詳細については、「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
を実行するには、テーブル、その属する先のデータベース、カタログに対して、このアクションを呼び出すためのアクセス許可が必要です。「テーブルとデータベースのきめ細かなアクセス許可の例」を参照してください。 -
データカタログ内の特定のデータベースへのアクセスを制限する場合は、
GetDatabase
およびCreateDatabase
アクションについて、各 AWS リージョン のdefault
データベースとカタログにアクセスポリシーを指定する必要もあります。複数のリージョンで Athena を使用している場合は、各リージョンにあるそれぞれのdefault
データベースとカタログで、リソース ARN のポリシーに個別の行を追加します。例えば、
us-east-1
(バージニア北部) リージョンにあるexample_db
へのアクセスをGetDatabase
に許可するには、GetDatabase
、GetDatabases
、およびCreateDatabase
アクションのために、そのリージョンのポリシーにdefault
データベースとカタログも含めます。{ "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"
,"arn:aws:glue:us-east-1:123456789012:database/example_db"
] }
必須: AWS リージョン ごとの Default
データベースとカタログに対するアクセスポリシー
Athena で AWS Glue Data Catalog を使用するには、GetDatabase
、GetDatabases
、および CreateDatabase
のために、AWS リージョンごとに default
データベースと AWS Glue Data Catalog に対するアクセスポリシーが存在している必要があります。
{ "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 ポリシーの例がリストされています。これらの例から開始することをお勧めします。必要に応じて特定のデータベースやテーブルの個別アクションを許可または拒否するように調整します。
以下の例では、GetDatabase
および CreateDatabase
アクションに対する、default
データベースとカタログへのアクセスポリシーが含まれています。このポリシーは、Athena と AWS Glue Data Catalog が連携するために必要です。複数の AWS リージョンを利用している場合は、各 default
データベースとカタログに対して、リージョンごとに 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 データベースにあるすべてのテーブルをリストすることができます。
|