Amazon EMR での Amazon S3 Access Grants の使用 - Amazon EMR

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

Amazon EMR での Amazon S3 Access Grants の使用

Amazon EMR 用 S3 Access Grants の概要

Amazon EMR リリース 6.15.0 以降では、Amazon S3 Access Grants によるスケーラブルなアクセスコントロールソリューションの提供により、Amazon EMR からの Amazon S3 データへのアクセスが強化されています。S3 データで複雑または大規模なアクセス許可設定が必要となる場合は、Access Grants を使用して、ユーザー、グループ、ロール、アプリケーションの S3 データ権限をスケーリングできます。

S3 Access Grants を使用すると、EMR クラスターへあのアクセス権を持つ ID に関連付けられているランタイム ロールまたは IAM ロールによって付与されるアクセス許可を超えたレベルまで、Amazon S3 データへのアクセスを強化することができます。詳細については、「Amazon S3 ユーザーガイド」の「S3 Access Grants によるアクセス管理」を参照してください。

他の Amazon EMR デプロイで S3 Access Grants を使用する手順については、以下のドキュメントを参照してください。

Amazon EMR が S3 Access Grants と連携する仕組み

Amazon EMR リリース 6.15.0 以降では、S3 Access Grants がネイティブ統合されています。Amazon EMR で S3 ア Access Grants を有効にし、Spark ジョブを実行することができます。Spark ジョブが S3 データをリクエストすると、Amazon S3 は特定のバケット、プレフィックス、またはオブジェクトを対象とする一時的な認証情報を提供します。

以下に、Amazon EMR が S3 Access Grants で保護されたデータにアクセスする方法の概要を示します。

Amazon EMR が S3 Access Grants と連携する仕組み
  1. ユーザーが、Amazon S3 に保存されているデータを使用する Amazon EMR Spark ジョブを送信します。

  2. Amazon EMR はユーザーに代わって、バケット、プレフィックス、またはオブジェクトへのアクセス許可を S3 Access Grants に対してリクエストします。

  3. Amazon S3 は、ユーザーの AWS Security Token Service (STS) トークンの形式で一時的な認証情報を返します。トークンのスコープは、S3 バケット、プレフィックス、またはオブジェクトへのアクセスを対象としています。

  4. Amazon EMR は STS トークンを使用して S3 からデータを取得します。

  5. Amazon EMR は S3 からデータを受け取り、結果をユーザーに返します。

Amazon EMR での S3 Access Grants の使用に関する考慮事項

Amazon EMR で S3 Access Grants を使用するときは、以下の動作と制限に注意してください。

機能のサポート

  • S3 Access Grants は、Amazon EMR リリース 6.15.0 以降でサポートされています。

  • Amazon EMR で S3 Access Grants を使用する際にサポートされるクエリエンジンは Spark のみです。

  • Amazon EMR で S3 Access Grants を使用する際にサポートされるオープンテーブル形式は、Delta Lake と Hudi だけです。

  • 以下の Amazon EMR 機能は、S3 Access Grants との使用においてはサポートされません。

    • Apache Iceberg テーブル

    • LDAP ネイティブ認証

    • Apache Ranger ネイティブ認証

    • AWS CLI IAM ロールを使用する Amazon S3 への リクエスト

    • オープンソースの S3A プロトコルによる S3 アクセス

  • fallbackToIAM オプションは、IAM Identity Center による信頼できる ID 伝達を使用する EMR クラスターではサポートされていません。

  • AWS Lake Formationでの S3 Access Grants は、Amazon EC2 で動作する Amazon EMR クラスターでのみサポートされます。

動作に関する注意事項

  • Apache Ranger と Amazon EMR のネイティブ統合は、EMRFS S3 Apache Ranger プラグインの一部として S3 Access Grants に対応する機能を備えています。Apache Ranger をきめ細かなアクセスコントロール (FGAC) に使用する場合は、S3 Access Grants の代わりに Apache Ranger プラグインを使用することをお勧めします。

  • Amazon EMR では、ユーザーが Spark ジョブ内で同じ認証情報を繰り返しリクエストする必要がないように、EMRFS 内に認証情報キャッシュを持ちます。そのため、Amazon EMR は認証情報をリクエストするときは常にデフォルトレベルの権限を要求します。詳細については、「Amazon S3 ユーザーガイド」の「S3 データへのアクセスをリクエストする」を参照してください。

  • Amazon EMR は、S3 Access Grants でサポートしていないアクションをユーザーが実行する場合にジョブ実行用に指定された IAM ロールを使用するように設定されています。詳細については、「IAM ロールにフォールバックする」を参照してください。

S3 Access Grants を使用した Amazon EMR クラスターの起動

このセクションでは、Amazon EC2 で動作する EMR クラスターを起動し、S3 Access Grants を使用して Amazon S3 内のデータへのアクセスを管理する方法について説明します。他の Amazon EMR デプロイで S3 Access Grants を使用する手順については、以下のドキュメントを参照してください。

Amazon EC2 で実行される、S3 Access Grants を使用して Amazon S3 内のデータへのアクセスを管理する EMR クラスターを起動するには、以下の手順に従います。

  1. EMR クラスターのジョブ実行ロールを設定します。Spark ジョブの実行に必要な IAM アクセス許可 (s3:GetDataAccess および s3:GetAccessGrantsInstanceForPrefix) を含めてください。

    { "Effect": "Allow", "Action": [ "s3:GetDataAccess", "s3:GetAccessGrantsInstanceForPrefix" ], "Resource": [ //LIST ALL INSTANCE ARNS THAT THE ROLE IS ALLOWED TO QUERY "arn:aws_partition:s3:Region:account-id1:access-grants/default", "arn:aws_partition:s3:Region:account-id2:access-grants/default" ] }
    注記

    Amazon EMR では、S3 Access Grants は IAM ロールに設定されたアクセス権限を補完します。ジョブ実行用に指定した IAM ロールに S3 に直接アクセスする権限が含まれている場合、ユーザーは S3 Access Grants で定義するデータだけでなく、さらに多くのデータにアクセスできる可能性があります。

  2. 次に、 を使用して Amazon EMR 6.15 以降でクラスター AWS CLI を作成し、 emrfs-site分類を使用して S3 Access Grants を有効にします。例は次のとおりです。

    aws emr create-cluster --release-label emr-6.15.0 \ --instance-count 3 \ --instance-type m5.xlarge \ --configurations '[{"Classification":"emrfs-site", "Properties":{"fs.s3.s3AccessGrants.enabled":"true", "fs.s3.s3AccessGrants.fallbackToIAM":"false"}}]'

を使用した S3 Access Grants AWS Lake Formation

AWS Lake Formation 統合で Amazon EMR を使用する場合、Amazon S3 Access Grants を使用すれば、Amazon S3 のデータに直接アクセスすることも、表形式でアクセスすることもできます。

注記

を使用した S3 Access Grants AWS Lake Formation は、Amazon EC2 で実行される Amazon EMR クラスターでのみサポートされます。

直接アクセス

直接アクセスには、Lake Formation が Amazon EMR のメタストアとして使用する AWS Glue サービスの API を呼び出さない S3 データにアクセスするためのすべての呼び出しが含まれます。例えば、 を呼び出す場合ですspark.read

spark.read.csv("s3://...")

Amazon EMR AWS Lake Formation で S3 Access Grants を で使用すると、すべての直接アクセスパターンが S3 Access Grants を通過して一時的な S3 認証情報を取得します。

表形式のアクセス

表形式アクセスは、Lake Formation がメタストア API を呼び出して S3 ロケーションにアクセスし、たとえばテーブルデータをクエリするときに発生します。

spark.sql("select * from test_tbl")

Amazon EMR AWS Lake Formation で S3 Access Grants を で使用すると、すべての表形式のアクセスパターンが Lake Formation を通過します。

IAM ロールにフォールバックする

S3 Access Grants がサポートしていないアクションをユーザーが実行しようとすると、Amazon EMR は、fallbackToIAM 設定が true の場合、ジョブ実行用に指定された IAM ロールをデフォルトとして使用します。これにより、S3 Access Grants が対象としていないシナリオでも、ユーザーはジョブ実行ロールにフォールバックして S3 アクセス用の認証情報を付与できます。

fallbackToIAM を有効にすると、ユーザーは Access Grants で許可されているデータにアクセスできます。ターゲットデータ用の S3 Access Grants トークンがない場合、Amazon EMR はジョブ実行ロールの権限を確認します。

注記

本番環境のワークロードではこのオプションを無効にする予定がある場合でも、一度 fallbackToIAM 設定を有効にしてみてアクセス権限をテストすることをお勧めします。Spark ジョブでは、ユーザーが IAM 認証情報を使用してすべての権限セットにアクセスできる方法が他にもあります。EMR クラスターで S3 からの許可を有効にすると、Spark ジョブは S3 ロケーションにアクセスできます。これらの S3 ロケーションを EMRFS の外部からのアクセスから確実に保護する必要があります。たとえば、ノートブックで使用している S3 クライアントや、Hive や Presto などの S3 Access Grants でサポートされていないアプリケーションからのアクセスから S3 ロケーションを保護する必要があります。