AWS Lake Formation での EMR Serverless を使用したきめ細かなアクセスコントロール - Amazon EMR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Lake Formation での EMR Serverless を使用したきめ細かなアクセスコントロール

概要:

Amazon EMR リリース 7.2.0 以降では、 AWS Lake Formation を活用して、S3 でバックアップされた Data Catalog テーブルにきめ細かなアクセスコントロールを適用します。この機能を使用すると、Amazon EMR Serverless Spark ジョブ内の read クエリにテーブル、行、列、セルレベルのアクセスコントロールを設定できます。Apache Spark バッチジョブとインタラクティブセッションできめ細かなアクセスコントロールを設定するには、EMR Studio を使用します。Lake Formation の詳細と EMR Serverless での使用方法については、以下のセクションを参照してください。

で Amazon EMR Serverless AWS Lake Formation を使用すると、追加料金が発生します。詳細については、「Amazon EMR の料金」を参照してください。

EMR Serverless と AWS Lake Formationの連携の仕組み

EMR Serverless と Lake Formation を使用すると、各 Spark ジョブにアクセス許可のレイヤーを適用して、EMR Serverless がジョブを実行するときに Lake Formation アクセス許可コントロールを適用できます。EMR Serverless は、Spark リソースプロファイルを使用して 2 つのプロファイルを作成し、ジョブを効果的に実行します。ユーザープロファイルはユーザー提供のコードを実行し、システムプロファイルは Lake Formation ポリシーを適用します。詳細については、「AWS Lake Formationとは」および「考慮事項と制限事項」を参照してください。

Lake Formation で事前初期化された容量を使用する場合は、少なくとも 2 つの Spark ドライバーを使用することを提案します。Lake Formation 対応ジョブごとに 2 つの Spark ドライバー (1 つはユーザープロファイル用、1 つはシステムプロファイル用) を使用します。最高のパフォーマンスを得るには、Lake Formation を使用しない場合と比較して、Lake Formation 対応ジョブのドライバーの数を 2 倍にします。

EMR Serverless で Spark ジョブを実行するときは、リソース管理とクラスターパフォーマンスに対する動的割り当ての影響も考慮します。リソースプロファイルあたりのエグゼキュターの最大数である spark.dynamicAllocation.maxExecutors の設定は、ユーザーエグゼキュターとシステムエグゼキュターに適用されます。その数を最大許容エグゼキュター数と等しく設定すると、利用可能なすべてのリソースを使用する 1 つのタイプのエグゼキュターが原因でジョブの実行が停止し、ジョブの実行時に他のエグゼキュターが使用できなくなる可能性があります。

したがって、リソースが不足しないように、EMR Serverless はリソースプロファイルあたりのデフォルトの最大エグゼキュター数を spark.dynamicAllocation.maxExecutors 値の 90% に設定します。この設定は、spark.dynamicAllocation.maxExecutorsRatio を 0 から 1 までの値で指定すると上書きできます。さらに、リソースの割り当てと全体的なパフォーマンスを最適化するために、次のプロパティを設定します。

  • spark.dynamicAllocation.cachedExecutorIdleTimeout

  • spark.dynamicAllocation.shuffleTracking.timeout

  • spark.cleaner.periodicGC.interval

以下は、EMR Serverless が Lake Formation セキュリティポリシーで保護されたデータにアクセスする方法の概要を示します。

Amazon EMR が Lake Formation セキュリティポリシーで保護されているデータにアクセスする方法。
  1. ユーザーは、Spark ジョブを AWS Lake Formation有効な EMR Serverless アプリケーションに送信します。

  2. EMR Serverless はジョブをユーザードライバーに送信し、ユーザープロファイルでジョブを実行します。ユーザードライバーは、タスクの起動、エグゼキュターのリクエスト、S3 または Glue カタログへのアクセスができない Spark のリーンバージョンを実行します。ジョブプランを構築します。

  3. EMR Serverless は、システムドライバーと呼ばれる 2 番目のドライバーを設定し、システムプロファイルで (特権 ID を使用して) 実行します。EMR Serverless は、通信用の 2 つのドライバー間に暗号化された TLS チャネルを設定します。ユーザードライバーはチャネルを使用して、ジョブプランをシステムドライバーに送信します。システムドライバーは、ユーザーが送信したコードを実行しません。フル Spark を実行して、データアクセスのために S3 およびデータカタログと通信します。エグゼキュターをリクエストし、ジョブプランを一連の実行ステージにコンパイルします。

  4. 次に、EMR Serverless はユーザードライバーまたはシステムドライバーを使用してエグゼキュターでステージを実行します。どのステージのユーザーコードも、ユーザープロファイルのエグゼキュターでのみ実行されます。

  5. で保護された Data Catalog テーブルからデータを読み取るステージ AWS Lake Formation 、またはセキュリティフィルターを適用するステージは、システムエグゼキュターに委任されます。

Amazon EMR での Lake Formation の有効化

Lake Formation を有効にするには、EMR Serverless アプリケーションの作成時に、ランタイム設定パラメータの spark-defaults 分類で spark.emr-serverless.lakeformation.enabledtrue に設定します。

aws emr-serverless create-application \ --release-label emr-7.12.0 \ --runtime-configuration '{ "classification": "spark-defaults", "properties": { "spark.emr-serverless.lakeformation.enabled": "true" } }' \ --type "SPARK"

EMR Studio で新しいアプリケーションを作成するときに Lake Formation を有効にすることもできます。[追加の設定] で利用可能な [Lake Formation のきめ細かなアクセスコントロールを使用する] を選択します。

EMR Serverless で Lake Formation を使用することにより、ワーカー間の暗号化がデフォルトで有効になるため、ワーカー間の暗号化を再度明示的に有効にする必要はありません。

Spark ジョブの Lake Formation の有効化

個々の Spark ジョブの Lake Formation を有効にするには、spark-submit の使用時に spark.emr-serverless.lakeformation.enabled を true に設定します。

--conf spark.emr-serverless.lakeformation.enabled=true

ジョブランタイムロールの IAM アクセス許可

Lake Formation のアクセス許可は、Glue Data Catalog AWS リソース、Amazon S3 ロケーション、およびそれらのロケーションの基盤となるデータへのアクセスを制御します。IAM アクセス許可は、Lake Formation および AWS Glue API とリソースへのアクセスを制御します。データカタログ内のテーブルにアクセスするための Lake Formation アクセス許可 (SELECT) を持っていても、glue:Get* API オペレーションに対する IAM アクセス許可がない場合、操作は失敗します。

以下は、S3 のスクリプトにアクセスするための IAM アクセス許可、S3 AWS へのログのアップロード、Glue API アクセス許可、Lake Formation へのアクセス許可を指定する方法のポリシー例です。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "ScriptAccess", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::*.amzn-s3-demo-bucket/scripts", "arn:aws:s3:::*.amzn-s3-demo-bucket/*" ] }, { "Sid": "LoggingAccess", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/logs/*" ] }, { "Sid": "GlueCatalogAccess", "Effect": "Allow", "Action": [ "glue:Get*", "glue:Create*", "glue:Update*" ], "Resource": [ "*" ] }, { "Sid": "LakeFormationAccess", "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": [ "*" ] } ] }

ジョブランタイムロールの Lake Formation アクセス許可の設定

まず、Hive テーブルの場所を Lake Formation に登録します。次に、目的のテーブルにジョブランタイムロールのアクセス許可を作成します。Lake Formation の詳細については、「 AWS Lake Formation デベロッパーガイド」の「What is AWS Lake Formation?」を参照してください。

Lake Formation アクセス許可を設定したら、Amazon EMR Serverless で Spark ジョブを送信します。Spark ジョブの詳細については、「Spark example」を参照してください。

ジョブ実行の送信

Lake Formation 許可の設定が完了したら、EMR Serverless で Spark ジョブを送信できます。次のセクションでは、ジョブ実行プロパティを設定して送信する方法の例を示します。

アクセス許可の要件

に登録されていないテーブル AWS Lake Formation

に登録されていないテーブルの場合 AWS Lake Formation、ジョブランタイムロールは AWS Glue データカタログと Amazon S3 の基盤となるテーブルデータの両方にアクセスします。これには、ジョブランタイムロールに Glue オペレーションと Amazon S3 AWS オペレーションの両方に対する適切な IAM アクセス許可が必要です。 Amazon S3

に登録されたテーブル AWS Lake Formation

に登録されたテーブルの場合 AWS Lake Formation、ジョブランタイムロールは AWS Glue データカタログメタデータにアクセスし、Lake Formation によって提供された一時的な認証情報は Amazon S3 の基盤となるテーブルデータにアクセスします。オペレーションの実行に必要な Lake Formation のアクセス許可は、Spark ジョブが開始する AWS Glue データカタログと Amazon S3 API コールに依存し、次のように要約できます。

  • DESCRIBE アクセス許可により、ランタイムロールは Data Catalog 内のテーブルまたはデータベースメタデータを読み取ることができます。

  • ALTER アクセス許可により、ランタイムロールは Data Catalog のテーブルまたはデータベースメタデータを変更できます。

  • DROP アクセス許可により、ランタイムロールは Data Catalog からテーブルまたはデータベースメタデータを削除できます。

  • SELECT アクセス許可により、ランタイムロールは Amazon S3 からテーブルデータを読み取ることができます。

  • INSERT アクセス許可により、ランタイムロールは Amazon S3 にテーブルデータを書き込むことができます。

  • DELETE アクセス許可により、ランタイムロールは Amazon S3 からテーブルデータを削除できます。

    注記

    Lake Formation は、Spark ジョブが AWS Glue を呼び出してテーブルメタデータを取得し、Amazon S3 を呼び出してテーブルデータを取得するときに、アクセス許可を遅延的に評価します。アクセス許可が不十分なランタイムロールを使用するジョブは、Spark が不足しているアクセス許可を必要とする AWS Glue または Amazon S3 呼び出しを行うまで失敗しません。

注記

次のサポートされているテーブルマトリックス:

  • サポート対象とマークされたオペレーションは、Lake Formation 認証情報のみを使用して、Lake Formation に登録されたテーブルのテーブルデータにアクセスします。Lake Formation のアクセス許可が不十分な場合、オペレーションはランタイムロールの認証情報にフォールバックしません。Lake Formation に登録されていないテーブルの場合、ジョブランタイムロールの認証情報はテーブルデータにアクセスします。

  • Amazon S3 ロケーションで IAM アクセス許可でサポートとマークされたオペレーションは、Amazon S3 の基盤となるテーブルデータにアクセスするために Lake Formation 認証情報を使用しません。これらのオペレーションを実行するには、テーブルが Lake Formation に登録されているかどうかにかかわらず、ジョブランタイムロールにテーブルデータにアクセスするために必要な Amazon S3 IAM アクセス許可が必要です。

Hive
運用 AWS Lake Formation アクセス許可 サポートステータス
SELECT SELECT サポート
CREATE TABLE CREATE_TABLE サポート
CREATE TABLE LIKE CREATE_TABLE Amazon S3 ロケーションでの IAM アクセス許可でサポート
CREATE TABLE AS SELECT CREATE_TABLE Amazon S3 ロケーションでの IAM アクセス許可でサポート
DESCRIBE TABLE DESCRIBE サポート
SHOW TBLPROPERTIES DESCRIBE サポート
SHOW COLUMNS DESCRIBE サポート
SHOW PARTITIONS DESCRIBE サポート
SHOW CREATE TABLE DESCRIBE サポート
テーブルの変更 tablename SELECT と ALTER サポート
テーブルtablenameセットの場所の変更 - サポートされていません
テーブルtablename追加パーティションの変更 SELECT、INSERT、ALTER サポート
REPAIR TABLE SELECT と ALTER サポート
データを読み込む サポートされていません
INSERT INSERT と ALTER サポート
INSERT OVERWRITE SELECT、INSERT、DELETE、ALTER サポート
DROP TABLE SELECT、DROP、DELETE、ALTER サポート
TRUNCATE TABLE SELECT、INSERT、DELETE、ALTER サポート
データフレームライター V1 対応する SQL オペレーションと同じ

既存のテーブルにデータを追加するときにサポートされます。詳細については、「考慮事項と制限事項」を参照してください。

データフレームライター V2 対応する SQL オペレーションと同じ

既存のテーブルにデータを追加するときにサポートされます。詳細については、「考慮事項と制限事項」を参照してください。

Iceberg
運用 AWS Lake Formation アクセス許可 サポートステータス
SELECT SELECT サポート
CREATE TABLE CREATE_TABLE サポート
CREATE TABLE LIKE CREATE_TABLE Amazon S3 ロケーションでの IAM アクセス許可でサポート
CREATE TABLE AS SELECT CREATE_TABLE Amazon S3 ロケーションでの IAM アクセス許可でサポート
テーブルを SELECT に置き換える SELECT、INSERT、ALTER サポート
DESCRIBE TABLE DESCRIBE Amazon S3 ロケーションでの IAM アクセス許可でサポート
SHOW TBLPROPERTIES DESCRIBE Amazon S3 ロケーションでの IAM アクセス許可でサポート
SHOW CREATE TABLE DESCRIBE Amazon S3 ロケーションでの IAM アクセス許可でサポート
ALTER TABLE SELECT、INSERT、ALTER サポート
ALTER TABLE SET LOCATION SELECT、INSERT、ALTER Amazon S3 ロケーションでの IAM アクセス許可でサポート
によって順序付けられたテーブルの書き込みを変更する SELECT、INSERT、ALTER Amazon S3 ロケーションでの IAM アクセス許可でサポート
によって分散されたテーブル書き込みを変更する SELECT、INSERT、ALTER Amazon S3 ロケーションでの IAM アクセス許可でサポート
テーブル名の変更テーブル CREATE_TABLE、および DROP サポート
INSERT INTO SELECT、INSERT、ALTER サポート
INSERT OVERWRITE SELECT、INSERT、ALTER サポート
DELETE SELECT、INSERT、ALTER サポート
UPDATE SELECT、INSERT、ALTER サポート
MERGE INTO SELECT、INSERT、ALTER サポート
DROP TABLE SELECT、DELETE、DROP サポート
DataFrame ライター V1 - サポートされていません
DataFrame ライター V2 対応する SQL オペレーションと同じ

既存のテーブルにデータを追加するときにサポートされます。詳細については、「考慮事項と制限事項」を参照してください。

メタデータテーブル SELECT サポート対象。特定のテーブルは非表示になります。詳細については、「考慮事項と制限事項」を参照してください。
ストアドプロシージャ - 次の条件を満たすテーブルでサポートされています。
  • に登録されていないテーブル AWS Lake Formation

  • register_table と を使用しないテーブル migrate

    詳細については、「考慮事項と制限事項」を参照してください。

Iceberg の Spark 設定: 以下の例は、Iceberg で Spark を設定する方法を示しています。Iceberg ジョブを実行するには、次の spark-submit プロパティを指定します。

--conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog --conf spark.sql.catalog.spark_catalog.warehouse=<S3_DATA_LOCATION> --conf spark.sql.catalog.spark_catalog.glue.account-id=<ACCOUNT_ID> --conf spark.sql.catalog.spark_catalog.client.region=<REGION> --conf spark.sql.catalog.spark_catalog.glue.endpoint=https://glue.<REGION>.amazonaws.com
Hudi
運用 AWS Lake Formation アクセス許可 サポートステータス
SELECT SELECT サポート
CREATE TABLE CREATE_TABLE Amazon S3 ロケーションでの IAM アクセス許可でサポート
CREATE TABLE LIKE CREATE_TABLE Amazon S3 ロケーションでの IAM アクセス許可でサポート
CREATE TABLE AS SELECT - サポートされていません
DESCRIBE TABLE DESCRIBE Amazon S3 ロケーションでの IAM アクセス許可でサポート
SHOW TBLPROPERTIES DESCRIBE Amazon S3 ロケーションでの IAM アクセス許可でサポート
SHOW COLUMNS DESCRIBE Amazon S3 ロケーションでの IAM アクセス許可でサポート
SHOW CREATE TABLE DESCRIBE Amazon S3 ロケーションでの IAM アクセス許可でサポート
ALTER TABLE SELECT Amazon S3 ロケーションでの IAM アクセス許可でサポート
INSERT INTO SELECT と ALTER Amazon S3 ロケーションでの IAM アクセス許可でサポート
INSERT OVERWRITE SELECT と ALTER Amazon S3 ロケーションでの IAM アクセス許可でサポート
DELETE - サポートされていません
UPDATE - サポートされていません
MERGE INTO - サポートされていません
DROP TABLE SELECT と DROP Amazon S3 ロケーションでの IAM アクセス許可でサポート
DataFrame ライター V1 - サポートされていません
DataFrame ライター V2 対応する SQL オペレーションと同じ Amazon S3 ロケーションでの IAM アクセス許可でサポート
メタデータテーブル - サポートされていません
テーブルのメンテナンスとユーティリティの機能 - サポートされていません

以下の例では、Hudi を使用して Spark を設定し、ファイルの場所と使用に必要なその他のプロパティを指定します。

Hudi の Spark 設定: このスニペットをノートブックで使用することにより、Hudi Spark バンドル JAR ファイルへのパスが指定され、Spark の Hudi 機能が有効になります。また、 Glue データカタログをメタストアとして使用するように AWS Spark を設定します。

%%configure -f { "conf": { "spark.jars": "/usr/lib/hudi/hudi-spark-bundle.jar", "spark.hadoop.hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory", "spark.serializer": "org.apache.spark.serializer.JavaSerializer", "spark.sql.catalog.spark_catalog": "org.apache.spark.sql.hudi.catalog.HoodieCatalog", "spark.sql.extensions": "org.apache.spark.sql.hudi.HoodieSparkSessionExtension" } }

AWS Glue を使用した Hudi の Spark 設定: このスニペットをノートブックで使用すると、Hudi はサポートされているデータレイク形式として有効になり、Hudi ライブラリと依存関係が利用可能になります。

%%configure { "--conf": "spark.serializer=org.apache.spark.serializer.JavaSerializer --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension", "--datalake-formats": "hudi", "--enable-glue-datacatalog": True, "--enable-lakeformation-fine-grained-access": "true" }
Delta Lake
運用 AWS Lake Formation アクセス許可 サポートステータス
SELECT SELECT サポート
CREATE TABLE CREATE_TABLE サポート
CREATE TABLE LIKE - サポートされていません
CREATE TABLE AS SELECT CREATE_TABLE サポート
テーブルを SELECT に置き換える SELECT、INSERT、ALTER サポート
DESCRIBE TABLE DESCRIBE Amazon S3 ロケーションでの IAM アクセス許可でサポート
SHOW TBLPROPERTIES DESCRIBE Amazon S3 ロケーションでの IAM アクセス許可でサポート
SHOW COLUMNS DESCRIBE Amazon S3 ロケーションでの IAM アクセス許可でサポート
SHOW CREATE TABLE DESCRIBE Amazon S3 ロケーションでの IAM アクセス許可でサポート
ALTER TABLE SELECT と INSERT サポート
ALTER TABLE SET LOCATION SELECT と INSERT Amazon S3 ロケーションでの IAM アクセス許可でサポート
テーブルtablenameクラスターの変更 SELECT と INSERT Amazon S3 ロケーションでの IAM アクセス許可でサポート
テーブルtablename追加制約の変更 SELECT と INSERT Amazon S3 ロケーションでの IAM アクセス許可でサポート
テーブルtablenameドロップ制約の変更 SELECT と INSERT Amazon S3 ロケーションでの IAM アクセス許可でサポート
INSERT INTO SELECT と INSERT サポート
INSERT OVERWRITE SELECT と INSERT サポート
DELETE SELECT と INSERT サポート
UPDATE SELECT と INSERT サポート
MERGE INTO SELECT と INSERT サポート
DROP TABLE SELECT、DELETE、DROP サポート
DataFrame ライター V1 - サポートされていません
DataFrame ライター V2 対応する SQL オペレーションと同じ

サポート

テーブルのメンテナンスとユーティリティの機能 - サポートされていません

Delta Lake での EMR Serverless: EMR Serverless で Lake Formation で Delta Lake を使用するには、以下のコマンドを実行します。

spark-sql \ --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension,com.amazonaws.emr.recordserver.connector.spark.sql.RecordServerSQLExtension \ --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog \