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

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

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

概要

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. で保護されたデータカタログテーブルからデータを読み取るステージ 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.7.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 へのアクセス許可を指定する方法のポリシー例です。

{ "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 の例」を参照してください。

ジョブ実行の送信

Lake Formation 許可の設定が完了したら、EMR Serverless で 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

オープンテーブル形式のサポート

Amazon EMR リリース 7.2.0 には、Lake Formation に基づくきめ細かなアクセスコントロールのサポートが含まれています。EMR Serverless は、Hive テーブルタイプと Iceberg テーブルタイプをサポートしています。次の表で、サポートされているすべてのオペレーションについて説明します。

オペレーション [Hive] Iceberg
DDL コマンド IAM ロールのアクセス許可のみ IAM ロールのアクセス許可のみ
増分クエリ 該当しない 完全サポートされています
タイムトラベルクエリ このテーブル形式には適用されません 完全サポートされています
メタデータテーブル このテーブル形式には適用されません サポートされていますが、特定のテーブルは非表示になっています。詳細については、「考慮事項と制限事項」を参照してください。
DML INSERT IAM アクセス許可のみ IAM アクセス許可のみ
DML UPDATE このテーブル形式には適用されません IAM アクセス許可のみ
DML DELETE このテーブル形式には適用されません IAM アクセス許可のみ
読み込みオペレーション 完全サポートされています 完全サポートされています
ストアドプロシージャ 該当しない register_table および migrate の例外でサポートされます。詳細については、「考慮事項と制限事項」を参照してください。