Amazon EMR on EKS でのジョブ実行ロールの使用 - Amazon EMR

Amazon EMR on EKS でのジョブ実行ロールの使用

StartJobRun コマンドを使用して EKS クラスターでのジョブ実行を送信するには、まず、仮想クラスターで使用するジョブ実行ロールをオンボーディングする必要があります。詳細については、「Amazon EMR on EKS のセットアップ」の ジョブ実行ロールを作成する を参照してください。また、Amazon EMR on EKS Workshop の「Create IAM Role for job execution」セクションの指示に従うこともできます。

ジョブ実行ロールの信頼ポリシーに、次のアクセス許可を含める必要があります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::AWS_ACCOUNT_ID:oidc-provider/OIDC_PROVIDER" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringLike": { "OIDC_PROVIDER:sub": "system:serviceaccount:NAMESPACE:emr-containers-sa-*-*-AWS_ACCOUNT_ID-BASE36_ENCODED_ROLE_NAME" } } } ] }

前述の例の信頼ポリシーでは、名前が emr-containers-sa-*-*-AWS_ACCOUNT_ID-BASE36_ENCODED_ROLE_NAME パターンに一致する Amazon EMR 管理の Kubernetes サービスアカウントにのみ権限が付与されます。このパターンのサービスアカウントは、ジョブの送信時に自動的に作成され、ジョブが送信される名前空間にスコープされます。この信頼ポリシーにより、これらのサービスアカウントは実行ロールを引き受けて、実行ロールの一時認証情報を取得できます。別の Amazon EKS クラスターのサービスアカウントや、同じ EKS クラスター内の別の名前空間のサービスアカウントは、実行ロールを引き受けることができません。

次のコマンドを実行すると、上記の形式で信頼ポリシーを自動的に更新できます。

aws emr-containers update-role-trust-policy \ --cluster-name cluster \ --namespace namespace \ --role-name iam_role_name_for_job_execution

実行ロールへのアクセスの制御

Amazon EKS クラスターの管理者は、IAM 管理者が複数の実行ロールを追加できるマルチテナントの Amazon EMR on EKS 仮想クラスターを作成できます。信頼できないテナントであっても、こうした実行ロールを使用して、任意のコードを実行するジョブを送信できます。そのため、信頼できないテナントではこうした実行ロールの 1 つ以上に割り当てられた権限を取得するコードを実行できないように制限することをお勧めします。IAM ID にアタッチされている IAM ポリシーを制限する場合、IAM 管理者はオプションの Amazon リソースネーム (ARN) 条件キー emr-containers:ExecutionRoleArn を使用できます。この条件は、次の権限ポリシーで示すように、仮想クラスターに対する権限を持つ実行ロール ARN のリストを受け入れます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "emr-containers:StartJobRun", "Resource": "arn:aws:emr-containers:REGION:AWS_ACCOUNT_ID:/virtualclusters/VIRTUAL_CLUSTER_ID", "Condition": { "ArnEquals": { "emr-containers:ExecutionRoleArn": [ "execution_role_arn_1", "execution_role_arn_2", ... ] } } } ] }

MyRole など特定のプレフィックスで始まるすべての実行ロールを許可する場合は、条件演算子 ArnEquals を演算子 ArnLike に置き換えることができるほか、条件内の execution_role_arn 値をワイルドカード文字 * に置き換えることができます。例えば、arn:aws:iam::AWS_ACCOUNT_ID:role/MyRole* と指定します。その他の ARN 条件キーもすべてサポートされています。

注記

Amazon EMR on EKS では、タグや属性に基づいて実行ロールに権限を付与することはできません。Amazon EMR on EKS は、実行ロールに対してタグベースのアクセスコントロール (TBAC) や属性ベースのアクセスコントロール (ABAC) をサポートしていません。