将任务执行角色与 Amazon EMR on EKS 结合使用 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

将任务执行角色与 Amazon EMR on EKS 结合使用

要使用 StartJobRun 命令在 EKS 集群上提交任务运行,则必须首先引导任务执行角色与虚拟集群一起使用。有关更多信息,请参阅设置步骤中的创建任务执行角色

任务执行角色的信任策略中必须包含以下权限。

{ "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 托管的 Kubernetes 服务账户授予权限,并且服务账户的名称与 emr-containers-sa-*-*-AWS_ACCOUNT_ID-BASE36_ENCODED_ROLE_NAME 模式相匹配。具有此模式的服务账户将在任务提交时自动创建,作用域为提交任务的命名空间。此信任策略允许这些服务账户担任执行角色并获取执行角色的临时凭证。不同 EKS 集群的任何其它服务账户、同一 EKS 集群内不同命名空间的任何其它服务账户都不能担任执行角色。

您可以运行以下命令来自动更新上述给定格式的信任策略。

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

控制访问执行角色

EKS 集群管理员可以创建多租户 Amazon EMR on EKS 虚拟集群,IAM 管理员可以向其添加多个执行角色。这些执行角色可由运行任意代码的不受信任租户提交任务。因此,您可能需要限制这些租户,使他们无法运行代码来为一个或多个执行角色分配权限。您可以使用条件键来限制对执行角色的访问。IAM 管理员可使用名为 emr-containers:ExecutionRoleArn 的可选字符串条件键来限制添加到 IAM 身份的 IAM 策略。此条件接受有权限使用虚拟集群的执行角色 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": { "StringEquals": { "emr-containers:ExecutionRoleArn": [ "execution_role_arn_1", "execution_role_arn_2", ... ] } } } ] }

如果您想允许所有执行角色以特定前缀开头(如 MyRole),则条件运算符 StringEquals 可以替换为 StringLike 运算符,并且条件中的 execution_role_arn 值可以替换为通配符 *。例如:arn:aws:iam::AWS_ACCOUNT_ID:role/MyRole*。所有其它字符串条件键也受支持。

注意

Amazon EMR on EKS 目前不支持对执行角色应用基于标记的访问控制(TBAC)。您不能根据标签授予执行角色权限。