Amazon ステップのランタイムロール EMR - Amazon EMR

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

Amazon ステップのランタイムロール EMR

ランタイムロールは、Amazon EMRクラスターにジョブまたはクエリを送信するときに指定できる AWS Identity and Access Management (IAM) ロールです。Amazon EMRクラスターに送信するジョブまたはクエリは、ランタイムロールを使用して Amazon S3 のオブジェクトなどの AWS リソースにアクセスします。Amazon EMR for Spark ジョブと Hive ジョブでランタイムロールを指定できます。

で Amazon EMRクラスターに接続するとき、 Amazon SageMaker および Amazon EMR Studio Workspace を EMR クラスターにアタッチするときに、ランタイムロールを指定することもできます。詳細については、「Studio から Amazon EMRクラスターに接続する」および「」を参照してくださいランタイムロールを使用して EMR Studio Workspace を実行する

以前は、Amazon EMRクラスターは、クラスターの起動に使用したインスタンスプロファイルにアタッチされたIAMポリシーに基づくアクセス許可を持つ Amazon EMRジョブまたはクエリを実行していました。つまり、ポリシーには、Amazon EMRクラスターで実行されたすべてのジョブとクエリに対するすべてのアクセス許可の結合を含める必要がありました。ランタイムロールを使用すると、クラスターの Amazon EMRインスタンスプロファイルを共有する代わりに、各ジョブまたはクエリのアクセスコントロールを個別に管理できるようになりました。

ランタイムロールを持つ Amazon EMRクラスターでは、データレイクに対して Spark、Hive、Presto のジョブとクエリに AWS Lake Formation ベースのアクセスコントロールを適用することもできます。との統合方法の詳細については、 AWS Lake Formation「」を参照してくださいAmazon EMRを と統合する AWS Lake Formation

注記

Amazon EMR ステップのランタイムロールを指定すると、送信するジョブまたはクエリは、ランタイムロールにアタッチされたポリシーで許可されている AWS リソースにのみアクセスできます。これらのジョブとクエリは、EC2クラスターのインスタンスのインスタンスメタデータサービスにアクセスしたり、クラスターのEC2インスタンスプロファイルを使用してリソースにアクセスしたりすることはできません AWS 。

ランタイムロールを使用して Amazon EMRクラスターを起動するための前提条件

ステップ 1: Amazon でセキュリティ設定をセットアップする EMR

次のJSON構造を使用して、 AWS Command Line Interface (AWS CLI) にセキュリティ設定を作成し、 EnableApplicationScopedIAMRoleを に設定しますtrue。セキュリティ設定の詳細については、「セキュリティ設定を使用してクラスターセキュリティをセットアップする」を参照してください。

{ "AuthorizationConfiguration":{ "IAMConfiguration":{ "EnableApplicationScopedIAMRole":true } } }

インターネット経由で転送されるデータがプレーンテキストではなく暗号化されるように、セキュリティ設定では転送時の暗号化オプションを常に有効にすることが推奨されます。Runtime Studio または EMR Studio のランタイムロールを使用して Amazon SageMaker EMRクラスターに接続しない場合は、これらのオプションをスキップできます。データ暗号化を設定するには、「データ暗号化の設定」を参照してください。

または、AWS Management Consoleを使用して、カスタム設定でセキュリティ設定を作成することもできます。

ステップ 2: Amazon EMRクラスターのEC2インスタンスプロファイルを設定する

Amazon EMRクラスターは、Amazon EC2インスタンスプロファイルロールを使用してランタイムロールを引き受けます。Amazon EMR ステップでランタイムロールを使用するには、インスタンスプロファイルIAMロールとして使用する予定のロールに次のポリシーを追加します。IAM ロールにポリシーを追加したり、既存のインラインポリシーまたは管理ポリシーを編集したりするには、IAM「ID アクセス許可の追加と削除」を参照してください。

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowRuntimeRoleUsage", "Effect":"Allow", "Action":[ "sts:AssumeRole", "sts:TagSession" ], "Resource":[ <runtime-role-ARN> ] } ] }

ステップ 3: 信頼ポリシーを設定する

ランタイムIAMロールとして使用する予定のロールごとに、次の信頼ポリシーを設定し、 をインスタンスプロファイルロールEMR_EC2_DefaultRoleに置き換えます。IAM ロールの信頼ポリシーを変更するには、「ロールの信頼ポリシーの変更」を参照してください。

{ "Sid":"AllowAssumeRole", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::<AWS_ACCOUNT_ID>:role/EMR_EC2_DefaultRole" }, "Action":"sts:AssumeRole" }

ロールベースのアクセスコントロールを使用して Amazon EMRクラスターを起動する

設定をセットアップしたら、 のセキュリティ設定を使用して Amazon EMRクラスターを起動できますステップ 1: Amazon でセキュリティ設定をセットアップする EMR。Amazon ステップでランタイムロールを使用するにはEMR、リリースラベル emr-6.7.0以降を使用し、クラスターアプリケーションとして Hive、Spark、またはその両方を選択します。 SageMaker Studio から接続するには、リリース emr-6.9.0以降を使用し、クラスターアプリケーションとして Livy、Spark、Hive、Presto を選択します。クラスターを起動する手順については、「クラスターのセキュリティ設定を指定する」を参照してください。

Amazon EMR ステップを使用して Spark ジョブを送信する

Apache Spark に含まれている HdfsTest 例を実行する方法の例を次に示します。このAPI呼び出しは、提供された Amazon EMR ランタイムロールが にアクセスできる場合にのみ成功しますS3_LOCATION

RUNTIME_ROLE_ARN=<runtime-role-arn> S3_LOCATION=<s3-path> REGION=<aws-region> CLUSTER_ID=<cluster-id> aws emr add-steps --cluster-id $CLUSTER_ID \ --steps '[{ "Name": "Spark Example", "ActionOnFailure": "CONTINUE","HadoopJarStep": { "Jar":"command-runner.jar","Args" : ["spark-example","HdfsTest", "$S3_LOCATION"] } }]' \ --execution-role-arn $RUNTIME_ROLE_ARN \ --region $REGION
注記

Amazon EMRクラスターSSHへのアクセスをオフにし、Amazon にのみクラスターEMRAddJobFlowStepsAPIへのアクセスを許可することをお勧めします。

Amazon EMR ステップを使用して Hive ジョブを送信する

次の例では、Amazon ステップで Apache Hive を使用して、QUERY_FILE.hqlファイルを実行するジョブEMRを送信します。このクエリは、指定されたランタイムロールがクエリファイルの Amazon S3 パスにアクセスできる場合にのみ成功します。

RUNTIME_ROLE_ARN=<runtime-role-arn> REGION=<aws-region> CLUSTER_ID=<cluster-id> aws emr add-steps --cluster-id $CLUSTER_ID \ --steps '[{ "Name": "Run hive query using command-runner.jar - simple select","ActionOnFailure":"CONTINUE","HadoopJarStep": { "Jar": "command-runner.jar","Args" :["hive - f","s3://DOC_EXAMPLE_BUCKET/QUERY_FILE.hql"] } }]' \ --execution-role-arn $RUNTIME_ROLE_ARN \ --region $REGION

Studio ノートブックからランタイムロールを使用して Amazon EMR SageMakerクラスターに接続する

SageMaker Studio から Amazon EMRクラスターで実行するクエリに Amazon EMRランタイムロールを適用できます。これを行うには、次のステップを実行します。

  1. 「Amazon SageMaker Studio を起動する」の指示に従って SageMaker Studio を作成します。

  2. SageMaker Studio UI で、サポートされているカーネルを使用してノートブックを起動します。例えば、 PySpark カーネルを使用して SparkMagic イメージを開始します。

  3. SageMaker Studio で Amazon EMRクラスターを選択し、接続 を選択します。

  4. ランタイムロールを選択し、[接続] を選択します。

これにより、選択した Amazon EMRランタイムロールを使用して Amazon EMRクラスターに接続するためのマジックコマンドを含む SageMaker ノートブックセルが作成されます。ノートブックセルでは、ランタイムロールと Lake Formation ベースのアクセスコントロールを使用して、クエリを入力および実行できます。より詳細な例については、「Amazon SageMaker Studio EMRから AWS Lake Formation および Amazon を使用してきめ細かなデータアクセスコントロールを適用する」を参照してください。

Amazon EMRランタイムロールへのアクセスを制御する

条件キー elasticmapreduce:ExecutionRoleArn を使用して、ランタイムロールへのアクセスを制御できます。次のポリシーでは、プリンIAMシパルが という名前のIAMロールCaller、または文字列 で始まる任意のIAMロールをランタイムロールCallerTeamRoleとして使用することを許可します。

重要

次の例に示すように、発信者に AddJobFlowStepsまたは GetClusterSessionCredentials を呼び出すためのアクセス権を付与するときはAPIs、elasticmapreduce:ExecutionRoleArnコンテキストキーに基づいて条件を作成する必要があります。

{ "Sid":"AddStepsWithSpecificExecRoleArn", "Effect":"Allow", "Action":[ "elasticmapreduce:AddJobFlowSteps" ], "Resource":"*", "Condition":{ "StringEquals":{ "elasticmapreduce:ExecutionRoleArn":[ "arn:aws:iam::<AWS_ACCOUNT_ID>:role/Caller" ] }, "StringLike":{ "elasticmapreduce:ExecutionRoleArn":[ "arn:aws:iam::<AWS_ACCOUNT_ID>:role/CallerTeamRole*" ] } } }

ランタイムロールと Amazon EMRクラスター間の信頼を確立する

Amazon は、ランタイムロール認証がアクティブ化されたセキュリティ設定ExternalIdごとに一意の識別子EMRを生成します。この認証により、すべてのユーザーが自分に属するクラスターで使用できる一連のランタイムロールを所有できるようになります。例えば、企業では、各部門がそれぞれの外部 ID を使用して、所有する一連のランタイムロールの信頼ポリシーを更新できます。

次の例に示すようにAPI、外部 ID は Amazon EMR DescribeSecurityConfiguration で確認できます。

aws emr describe-security-configuration --name 'iamconfig-with-lf'{"Name": "iamconfig-with-lf", "SecurityConfiguration": "{\"AuthorizationConfiguration\":{\"IAMConfiguration\":{\"EnableApplicationScopedIAMRole\ ":true,\"ApplicationScopedIAMRoleConfiguration\":{\"PropagateSourceIdentity\":true,\"Exter nalId\":\"FXH5TSACFDWUCDSR3YQE2O7ETPUSM4OBCGLYWODSCUZDNZ4Y\"}},\"Lake FormationConfiguration\":{\"AuthorizedSessionTagValue\":\"Amazon EMR\"}}}", "CreationDateTime": "2022-06-03T12:52:35.308000-07:00" }

外部 ID の使用方法については、AWS 「 リソースへのアクセスをサードパーティに付与するときに外部 ID を使用する方法」を参照してください。

監査

エンドユーザーがIAMロールで実行するアクションをモニタリングおよび制御するには、ソース ID 機能をオンにします。ソース ID の詳細については、「引き受けたロールで実行されるアクションのモニタリングと制御」を参照してください。

ソース ID を追跡するには、次のように、セキュリティ設定で ApplicationScopedIAMRoleConfiguration/PropagateSourceIdentitytrue に設定します。

{ "AuthorizationConfiguration":{ "IAMConfiguration":{ "EnableApplicationScopedIAMRole":true, "ApplicationScopedIAMRoleConfiguration":{ "PropagateSourceIdentity":true } } } }

PropagateSourceIdentity を に設定するとtrue、Amazon は呼び出し元の認証情報から、ランタイムロールで作成したジョブまたはクエリセッションにソース ID EMRを適用します。呼び出し元の認証情報にソース ID が存在しない場合、Amazon EMRはソース ID を設定しません。

このプロパティを使用するには、次のように、インスタンスプロファイルに sts:SetSourceIdentity アクセス許可を付与します。

{ // PropagateSourceIdentity statement "Sid":"PropagateSourceIdentity", "Effect":"Allow", "Action":"sts:SetSourceIdentity", "Resource":[ <runtime-role-ARN> ], "Condition":{ "StringEquals":{ "sts:SourceIdentity":<source-identity> } } }

また、AllowSetSourceIdentity ステートメントをランタイムロールの信頼ポリシーに追加する必要があります。

{ // AllowSetSourceIdentity statement "Sid":"AllowSetSourceIdentity", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::<AWS_ACCOUNT_ID>:role/EMR_EC2_DefaultRole" }, "Action":[ "sts:SetSourceIdentity", "sts:AssumeRole" ], "Condition":{ "StringEquals":{ "sts:SourceIdentity":<source-identity> } } }

追加の考慮事項

注記

Amazon EMRリリース ではemr-6.9.0、 SageMaker Studio から Amazon EMRクラスターに接続すると、断続的な障害が発生する可能性があります。この問題に対処するには、クラスターの起動時にブートストラップアクションを使用してパッチをインストールします。パッチの詳細については、「Amazon EMRリリース 6.9.0 の既知の問題」を参照してください。

さらに、Amazon のランタイムロールを設定するときは、次の点を考慮してくださいEMR。

  • Amazon EMR は、すべての商用 でランタイムロールをサポートしています AWS リージョン。

  • Amazon EMR ステップは、リリース emr-6.7.0以降を使用する場合、ランタイムロールを持つ Apache Spark および Apache Hive ジョブをサポートします。

  • SageMaker Studio は、リリース emr-6.9.0以降を使用する場合、ランタイムロールを持つ Spark、Hive、Presto クエリをサポートします。

  • の次のノートブックカーネルはランタイムロール SageMaker をサポートしています。

    • DataScience – Python 3 カーネル

    • DataScience 2.0 – Python 3 カーネル

    • DataScience 3.0 – Python 3 カーネル

    • SparkAnalytics 1.0 – SparkMagic および PySpark カーネル

    • SparkAnalytics 2.0 – SparkMagic および PySpark カーネル

    • SparkMagic – PySpark カーネル

  • Amazon は、クラスターの作成時にRunJobFlowのみ を使用するステップEMRをサポートしています。これはランタイムロールをサポートAPIしていません。

  • Amazon EMRは、高可用性になるように設定したクラスターでのランタイムロールをサポートしていません。

  • command-runner.jar JAR ファイルでコマンドを実行するときは、Bash コマンド引数をエスケープする必要があります。

    aws emr add-steps --cluster-id <cluster-id> --steps '[{"Name":"sample-step","ActionOnFailure":"CONTINUE","Jar":"command-runner.jar","Properties":"","Args":["bash","-c","\"aws s3 ls\""],"Type":"CUSTOM_JAR"}]' --execution-role-arn <IAM_ROLE_ARN>
  • ランタイムロールは、 HDFSや などのクラスター上のリソースへのアクセスを制御するためのサポートを提供しませんHMS。