翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon EMR ステップのランタイムロール
ランタイムロールは、Amazon EMRクラスターにジョブまたはクエリを送信するときに指定できる AWS Identity and Access Management (IAM) ロールです。Amazon EMRクラスターに送信するジョブまたはクエリは、ランタイムロールを使用して Amazon S3 のオブジェクトなどの AWS リソースにアクセスします。Amazon EMR for Spark ジョブと Hive ジョブでランタイムロールを指定できます。
で Amazon EMRクラスターに接続するとき、 Amazon SageMaker AI および Amazon EMR Studio Workspace を EMRクラスターにアタッチするときに、ランタイムロールを指定することもできます。詳細については、 SageMaker 「AI 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
。セキュリティ設定の詳細については、「セキュリティ設定を使用して Amazon EMRクラスターセキュリティを設定する」を参照してください。
{ "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 AI Studio から接続するには、リリース emr-6.9.0
以降を使用し、クラスターアプリケーションとして Livy、Spark、Hive、または Presto を選択します。クラスターを起動する手順については、「Amazon EMRクラスターのセキュリティ設定を指定する」を参照してください。
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 のみにクラスターEMRAddJobFlowSteps
APIへのアクセスを許可することをお勧めします。
Amazon EMR ステップを使用して Hive ジョブを送信する
次の例では、Amazon EMR ステップで Apache Hive を使用して、QUERY_FILE.hql
ファイルを実行するジョブを送信します。このクエリは、指定されたランタイムロールがクエリファイルの 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
SageMaker AI Studio ノートブックからランタイムロールを使用して Amazon EMRクラスターに接続する
SageMaker AI Studio から Amazon EMRクラスターで実行するクエリに Amazon EMRランタイムロールを適用できます。これを行うには、次のステップを実行します。
-
「Amazon SageMaker AI Studio を起動する」の手順に従って SageMaker AI Studio を作成します。
-
SageMaker AI Studio UI で、サポートされているカーネルでノートブックを起動します。たとえば、 PySpark カーネルを使用して SparkMagic イメージを開始します。
-
SageMaker AI Studio で Amazon EMRクラスターを選択し、接続を選択します。
-
ランタイムロールを選択し、[接続] を選択します。
これにより、選択した Amazon EMRランタイムロールを使用して Amazon EMRクラスターに接続するためのマジックコマンドを含む SageMaker AI ノートブックセルが作成されます。ノートブックセルでは、ランタイムロールと Lake Formation ベースのアクセスコントロールを使用して、クエリを入力および実行できます。より詳細な例については、「Amazon SageMaker AI 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/PropagateSourceIdentity
を true
に設定します。
{ "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 AI Studio から Amazon EMRクラスターに接続すると、断続的な障害が発生する可能性があります。この問題に対処するには、クラスターの起動時にブートストラップアクションを使用してパッチをインストールします。パッチの詳細については、「Amazon EMRリリース 6.9.0 の既知の問題」を参照してください。
さらに、Amazon のランタイムロールを設定するときは、次の点を考慮してくださいEMR。
-
Amazon は、すべての商用 でランタイムロールEMRをサポートしています AWS リージョン。
-
Amazon EMR ステップは、リリース
emr-6.7.0
以降を使用するときに、ランタイムロールを持つ Apache Spark および Apache Hive ジョブをサポートします。 -
SageMaker AI Studio は、リリース
emr-6.9.0
以降を使用する場合、ランタイムロールを持つ Spark、Hive、Presto クエリをサポートします。 -
SageMaker AI の次のノートブックカーネルはランタイムロールをサポートしています。
-
DataScience – Python 3 カーネル
-
DataScience 2.0 – Python 3 カーネル
-
DataScience 3.0 – Python 3 カーネル
-
SparkAnalytics 1.0 – PySpark SparkMagic およびカーネル
-
SparkAnalytics 2.0 – PySpark SparkMagic およびカーネル
-
SparkMagic – PySpark カーネル
-
-
Amazon は、クラスターの作成時に
RunJobFlow
のみ を使用するステップEMRをサポートしています。これはランタイムロールをサポートAPIしていません。 -
Amazon EMRは、高可用性になるように設定したクラスターのランタイムロールをサポートしていません。
Amazon EMRリリース 7.5.0 以降、ランタイムロールは、Spark Live UI、Spark History Server、、 などの Spark YARN NodeManagerおよびYARNユーザーインターフェイス (UIs) の表示をサポートしていますYARN ResourceManager。これらの に移動するとUIs、ユーザー名とパスワードプロンプトが表示されます。ユーザー名とパスワードは、 を使用して生成できますEMR GetClusterSessionCredentials API。の使用の詳細についてはAPI、「」を参照してくださいGetClusterSessionCredentials。
の使用方法の例を次EMR GetClusterSessionCredentials APIに示します。
aws emr get-cluster-session-credentials --cluster-id
<cluster_ID>
--execution-role-arn<IAM_role_arn>
-
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。