配置 EMR Studio 用户权限 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

配置 EMR Studio 用户权限

在 Amazon EMR Studio,您可以配置用户授权(权限)Amazon Identity and Access Management(IAM) 基于身份的策略。通过这些策略,您可以指定允许的操作和资源以及允许操作的条件。

无论身份验证模式如何,您都可以按照相同的步骤为 EMR Studio 创建权限策略。然而,针对应用于用户的策略,您选用的方法因身份验证模式而变化。

  • 使用 IAM 身份验证或联合身份验证,您可以为 EMR Studio 创建一个或多个 IAM 权限策略,并将这些策略直接应用于 EMR Studio 的 IAM 身份(用户、组或角色)。

  • 进行 Amazon Web Services SSO 身份验证时,您可以使用会话策略创建单个 EMR Studio 用户角色。然后,当您将用户和组分配到 Studio 时,您可以将会话策略映射到该用户或组以应用权限。

注意

要设置用于存储笔记本文件的 Amazon S3 访问权限,以及在将 Workspaces 链接到 Git 存储库时读取密钥的 Amazon Secrets Manager 访问权限,请使用 EMR Studio 服务角色。

IAM 身份验证模式的用户权限

在使用 EMR Studio 的 IAM 身份验证时,要设置用户权限,您必须允许 IAM 权限策略的elasticmapreduce:RunJobFlow 等操作。您可以创建一个或多个应用的权限策略。例如,您可以创建禁止用户创建新的 Amazon EMR 集群的基本策略,也可以创建允许创建集群的策略。有关 Studio 的所有操作列表,请参阅 EMR Studio 用户的 Amazon Identity and Access Management 权限

在创建您的策略之后,您可以将策略附加到 EMR Studio 的 IAM 身份(用户、用户组或角色)。

下表总结了您在使用 IAM 身份验证时附加权限策略的方法。

当您使用… 将策略附加到…
IAM 身份验证 您的 IAM 身份(用户、用户组或角色)。例如,您可以将权限策略附加到 Amazon Web Services 账户 中的用户。
与外部身份提供商 (IdP) 进行 IAM 联合身份验证

您为外部 IdP 创建的一个或多个 IAM 角色。例如,用于 SAML 2.0 联合身份验证的 IAM 角色。

EMR Studio 将为具有 Studio 联合访问权限的用户使用附加到 IAM 角色的权限。

有关 IAM 身份验证和 IAM 联合身份验证之间差异的信息,请参阅 为 Amazon EMR Studio 选择身份验证模式

Amazon Web Services SSO 身份验证模式的用户权限

当您使用 Amazon Web Services SSO 身份验证时,您可以创建单个 EMR Studio 用户角色。用户角色 是指 Studio 在用户登录时担任的专用 IAM 角色。

您可以将 IAM 会话策略附加到 EMR Studio 用户角色。会话策略是一种特殊的 IAM 权限策略,它限制了联合身份用户在 Studio 登录会话期间可以执行的操作。会话策略让您可以为用户或组设置特定的 EMR Studio 权限,而无需创建多个 IAM 角色。

当您将用户和组分配到 Studio 时,您可以将会话策略映射到该用户或组以应用精细的权限。您还可以随时更新用户或组的会话策略。Amazon EMR 存储您创建的每个会话策略映射。

有关会话策略的更多信息,请参阅《Amazon Identity and Access Management 用户指南》中的策略与权限

创建 Amazon Web Services SSO 身份验证模式的 EMR Studio 用户角色

当您使用Amazon Web Services SSO EMR Studio 的身份验证模式时,您必须创建用户角色。用户角色是指您的 Studio 在用户登录时担任的专用 IAM 角色。

在您为 EMR Studio 创建用户角色之前,您需要具备以下各项:

  • Amazon Web Services 账户 为您的 EMR 工作室。在同一账户中创建您的用户角色和会话策略。如果您在 Amazon 组织中使用多个账户,请使用成员账户。要了解有关 Amazon 术语的更多信息,请参阅 Amazon Organizations 术语和概念

  • 创建 IAM 角色所需的权限。有关更多信息,请参阅《Amazon Identity and Access Management 用户指南》中的服务角色权限

创建 EMR Studio 用户角色

  1. 按照《Amazon Identity and Access Management 用户指南》中的创建向Amazon服务委派权限的角色中的说明,创建用户角色。

    在创建角色时,使用以下信任关系策略。

    { "Version": "2008-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "elasticmapreduce.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. 删除与角色关联的默认权限或策略。

  3. 在将用户和组分配给 Studio 之前,将所有 EMR Studio 会话策略附加到用户角色。有关如何创建会话策略的说明,请参阅 为 EMR Studio 用户创建权限策略

为 EMR Studio 用户创建权限策略

无论您使用哪种身份验证模式(IAM 或 Amazon Web Services SSO),您都可以参照以下说明为 EMR Studio 创建权限策略。

在创建策略之前,您必须获得创建 IAM 资源的授权。有关更多信息,请参阅《Amazon Identity and Access Management 用户指南》中的服务角色权限

有关每个示例策略权限的更多信息,请参阅 EMR Studio 用户的 Amazon Identity and Access Management 权限

  1. 按照创建 IAM 策略中的说明创建权限策略。EMR Studio 用户的 Amazon Identity and Access Management 权限表细分了用户可能执行的每个 Studio 运营,并列出了执行该运营所需的最低 IAM 操作。

    您的权限策略必须包含以下语句。

    { "Sid": "AllowAddingTagsOnSecretsWithEMRStudioPrefix", "Effect": "Allow", "Action": "secretsmanager:TagResource", "Resource": "arn:aws:secretsmanager:*:*:secret:emr-studio-*" }, { "Sid": "AllowPassingServiceRoleForWorkspaceCreation", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::*:role/<your-emr-studio-service-role>" ], "Effect": "Allow" }

    您可以重复此步骤以创建自己认为合适的不同权限策略。例如,您可以为基本、中间和高级 Studio 用户创建三个独立策略。

  2. 将权限策略附加到您的 IAM 身份。

    下表总结了您将权限策略附加到的具体 IAM 身份,其取决于您的 EMR Studio 身份验证模式。有关如何附加策略的说明,请参阅添加和删除 IAM 身份权限

    如果您使用... 将策略附加到…
    IAM 身份验证 您的 IAM 身份(用户、用户组或角色)。例如,您可以将权限策略附加到 Amazon Web Services 账户 中的用户。
    与外部身份提供商 (IdP) 进行 IAM 联合身份验证

    您为外部 IdP 创建的一个或多个 IAM 角色。例如,用于 SAML 2.0 联合身份验证的 IAM。

    对于具有 Studio 联合访问权限的用户,EMR Studio 使用您附加到 IAM 单个或多个角色的权限。

    Amazon Web Services SSO 您的 Amazon EMR Studio 用户角色。

    有关 IAM 身份验证、IAM 联合身份验证与 Amazon Web Services SSO 身份验证之间差异的信息,请参阅 为 Amazon EMR Studio 选择身份验证模式

示例:基本用户策略

以下基本用户策略允许大多数 EMR Studio 操作,但不允许用户创建新的 Amazon EMR 集群。策略包括Condition元素,这些元素对"for-use-with-amazon-emr-managed-policies": "true"标签执行基于标签的访问控制 (TBAC)。EMR Studio 的示例服务角色中定义了相同的基于标签的访问控制 (TBAC)。有关更多信息,请参阅 创建 EMR Studio 服务角色

要修改示例权限策略,请使用以下准则:

  • <region> 替换为与 Studio 关联的Amazon区域的代码。

  • <aws-account-id> 替换为与 Studio 关联的 Amazon Web Services 账户 ID。

  • <your-emr-studio-service-role> 替换为您的 EMR Studio 服务角色的名称。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEMRBasicActions", "Action": [ "elasticmapreduce:CreateEditor", "elasticmapreduce:DescribeEditor", "elasticmapreduce:ListEditors", "elasticmapreduce:StartEditor", "elasticmapreduce:StopEditor", "elasticmapreduce:DeleteEditor", "elasticmapreduce:OpenEditorInConsole", "elasticmapreduce:AttachEditor", "elasticmapreduce:DetachEditor", "elasticmapreduce:CreateRepository", "elasticmapreduce:DescribeRepository", "elasticmapreduce:DeleteRepository", "elasticmapreduce:ListRepositories", "elasticmapreduce:LinkRepository", "elasticmapreduce:UnlinkRepository", "elasticmapreduce:DescribeCluster", "elasticmapreduce:ListInstanceGroups", "elasticmapreduce:ListBootstrapActions", "elasticmapreduce:ListClusters", "elasticmapreduce:ListSteps", "elasticmapreduce:CreatePersistentAppUI", "elasticmapreduce:DescribePersistentAppUI", "elasticmapreduce:GetPersistentAppUIPresignedURL", "elasticmapreduce:GetOnClusterAppUIPresignedURL" ], "Resource": "*", "Effect": "Allow" }, { "Sid": "AllowEMRContainersBasicActions", "Action": [ "emr-containers:DescribeVirtualCluster", "emr-containers:ListVirtualClusters", "emr-containers:DescribeManagedEndpoint", "emr-containers:ListManagedEndpoints", "emr-containers:CreateAccessTokenForManagedEndpoint", "emr-containers:DescribeJobRun", "emr-containers:ListJobRuns" ], "Resource": "*", "Effect": "Allow" }, { "Sid": "AllowSecretManagerListSecrets", "Action": [ "secretsmanager:ListSecrets" ], "Resource": "*", "Effect": "Allow" }, { "Sid": "AllowSecretCreationWithEMRTagsAndEMRStudioPrefix", "Effect": "Allow", "Action": "secretsmanager:CreateSecret", "Resource": "arn:aws:secretsmanager:*:*:secret:emr-studio-*", "Condition": { "StringEquals": { "aws:RequestTag/for-use-with-amazon-emr-managed-policies": "true" } } }, { "Sid": "AllowAddingTagsOnSecretsWithEMRStudioPrefix", "Effect": "Allow", "Action": "secretsmanager:TagResource", "Resource": "arn:aws:secretsmanager:*:*:secret:emr-studio-*" }, { "Sid": "AllowPassingServiceRoleForWorkspaceCreation", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::*:role/<your-emr-studio-service-role>" ], "Effect": "Allow" }, { "Sid": "AllowS3ListAndLocationPermissions", "Action": [ "s3:ListAllMyBuckets", "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::*", "Effect": "Allow" }, { "Sid": "AllowS3ReadOnlyAccessToLogs", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::aws-logs-<aws-account-id>-<region>/elasticmapreduce/*" ], "Effect": "Allow" } ] }

示例:中间用户策略

以下中间用户策略允许大多数 EMR Studio 操作,并允许用户使用集群模板创建新的 Amazon EMR 集群。策略包括Condition元素,这些元素对"for-use-with-amazon-emr-managed-policies": "true"标签执行基于标签的访问控制 (TBAC)。EMR Studio 的示例服务角色中定义了相同的基于标签的访问控制 (TBAC)。有关更多信息,请参阅 创建 EMR Studio 服务角色

要修改示例权限策略,请使用以下准则:

  • <region> 替换为与 Studio 关联的Amazon区域的代码。

  • <aws-account-id> 替换为与 Studio 关联的 Amazon Web Services 账户 ID。

  • <your-emr-studio-service-role> 替换为您的 EMR Studio 服务角色的名称。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEMRBasicActions", "Action": [ "elasticmapreduce:CreateEditor", "elasticmapreduce:DescribeEditor", "elasticmapreduce:ListEditors", "elasticmapreduce:StartEditor", "elasticmapreduce:StopEditor", "elasticmapreduce:DeleteEditor", "elasticmapreduce:OpenEditorInConsole", "elasticmapreduce:AttachEditor", "elasticmapreduce:DetachEditor", "elasticmapreduce:CreateRepository", "elasticmapreduce:DescribeRepository", "elasticmapreduce:DeleteRepository", "elasticmapreduce:ListRepositories", "elasticmapreduce:LinkRepository", "elasticmapreduce:UnlinkRepository", "elasticmapreduce:DescribeCluster", "elasticmapreduce:ListInstanceGroups", "elasticmapreduce:ListBootstrapActions", "elasticmapreduce:ListClusters", "elasticmapreduce:ListSteps", "elasticmapreduce:CreatePersistentAppUI", "elasticmapreduce:DescribePersistentAppUI", "elasticmapreduce:GetPersistentAppUIPresignedURL", "elasticmapreduce:GetOnClusterAppUIPresignedURL" ], "Resource": "*", "Effect": "Allow" }, { "Sid": "AllowEMRContainersBasicActions", "Action": [ "emr-containers:DescribeVirtualCluster", "emr-containers:ListVirtualClusters", "emr-containers:DescribeManagedEndpoint", "emr-containers:ListManagedEndpoints", "emr-containers:CreateAccessTokenForManagedEndpoint", "emr-containers:DescribeJobRun", "emr-containers:ListJobRuns" ], "Resource": "*", "Effect": "Allow" }, { "Sid": "AllowSecretManagerListSecrets", "Action": [ "secretsmanager:ListSecrets" ], "Resource": "*", "Effect": "Allow" }, { "Sid": "AllowSecretCreationWithEMRTagsAndEMRStudioPrefix", "Effect": "Allow", "Action": "secretsmanager:CreateSecret", "Resource": "arn:aws:secretsmanager:*:*:secret:emr-studio-*", "Condition": { "StringEquals": { "aws:RequestTag/for-use-with-amazon-emr-managed-policies": "true" } } }, { "Sid": "AllowAddingTagsOnSecretsWithEMRStudioPrefix", "Effect": "Allow", "Action": "secretsmanager:TagResource", "Resource": "arn:aws:secretsmanager:*:*:secret:emr-studio-*" }, { "Sid": "AllowClusterTemplateRelatedIntermediateActions", "Action": [ "servicecatalog:DescribeProduct", "servicecatalog:DescribeProductView", "servicecatalog:DescribeProvisioningParameters", "servicecatalog:ProvisionProduct", "servicecatalog:SearchProducts", "servicecatalog:UpdateProvisionedProduct", "servicecatalog:ListProvisioningArtifacts", "servicecatalog:ListLaunchPaths", "servicecatalog:DescribeRecord", "cloudformation:DescribeStackResources" ], "Resource": "*", "Effect": "Allow" }, { "Sid": "AllowPassingServiceRoleForWorkspaceCreation", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::*:role/<your-emr-studio-service-role>" ], "Effect": "Allow" }, { "Sid": "AllowS3ListAndLocationPermissions", "Action": [ "s3:ListAllMyBuckets", "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::*", "Effect": "Allow" }, { "Sid": "AllowS3ReadOnlyAccessToLogs", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::aws-logs-<aws-account-id>-<region>/elasticmapreduce/*" ], "Effect": "Allow" } ] }

示例:高级用户策略

以下中间用户策略允许所有 EMR Studio 操作,并允许用户使用集群模板或通过提供集群配置创建新的 Amazon EMR 集群。策略包括Condition元素,这些元素对"for-use-with-amazon-emr-managed-policies": "true"标签执行基于标签的访问控制 (TBAC)。EMR Studio 的示例服务角色中定义了相同的基于标签的访问控制 (TBAC)。有关更多信息,请参阅 创建 EMR Studio 服务角色

要修改示例权限策略,请使用以下准则:

  • <region> 替换为与 Studio 关联的Amazon区域的代码。

  • <aws-account-id> 替换为与 Studio 关联的 Amazon Web Services 账户 ID。

  • <your-emr-studio-service-role> 替换为您的 EMR Studio 服务角色的名称。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEMRBasicActions", "Action": [ "elasticmapreduce:CreateEditor", "elasticmapreduce:DescribeEditor", "elasticmapreduce:ListEditors", "elasticmapreduce:StartEditor", "elasticmapreduce:StopEditor", "elasticmapreduce:DeleteEditor", "elasticmapreduce:OpenEditorInConsole", "elasticmapreduce:AttachEditor", "elasticmapreduce:DetachEditor", "elasticmapreduce:CreateRepository", "elasticmapreduce:DescribeRepository", "elasticmapreduce:DeleteRepository", "elasticmapreduce:ListRepositories", "elasticmapreduce:LinkRepository", "elasticmapreduce:UnlinkRepository", "elasticmapreduce:DescribeCluster", "elasticmapreduce:ListInstanceGroups", "elasticmapreduce:ListBootstrapActions", "elasticmapreduce:ListClusters", "elasticmapreduce:ListSteps", "elasticmapreduce:CreatePersistentAppUI", "elasticmapreduce:DescribePersistentAppUI", "elasticmapreduce:GetPersistentAppUIPresignedURL", "elasticmapreduce:GetOnClusterAppUIPresignedURL" ], "Resource": "*", "Effect": "Allow" }, { "Sid": "AllowEMRContainersBasicActions", "Action": [ "emr-containers:DescribeVirtualCluster", "emr-containers:ListVirtualClusters", "emr-containers:DescribeManagedEndpoint", "emr-containers:ListManagedEndpoints", "emr-containers:CreateAccessTokenForManagedEndpoint", "emr-containers:DescribeJobRun", "emr-containers:ListJobRuns" ], "Resource": "*", "Effect": "Allow" }, { "Sid": "AllowSecretManagerListSecrets", "Action": [ "secretsmanager:ListSecrets" ], "Resource": "*", "Effect": "Allow" }, { "Sid": "AllowSecretCreationWithEMRTagsAndEMRStudioPrefix", "Effect": "Allow", "Action": "secretsmanager:CreateSecret", "Resource": "arn:aws:secretsmanager:*:*:secret:emr-studio-*", "Condition": { "StringEquals": { "aws:RequestTag/for-use-with-amazon-emr-managed-policies": "true" } } }, { "Sid": "AllowAddingTagsOnSecretsWithEMRStudioPrefix", "Effect": "Allow", "Action": "secretsmanager:TagResource", "Resource": "arn:aws:secretsmanager:*:*:secret:emr-studio-*" }, { "Sid": "AllowClusterTemplateRelatedIntermediateActions", "Action": [ "servicecatalog:DescribeProduct", "servicecatalog:DescribeProductView", "servicecatalog:DescribeProvisioningParameters", "servicecatalog:ProvisionProduct", "servicecatalog:SearchProducts", "servicecatalog:UpdateProvisionedProduct", "servicecatalog:ListProvisioningArtifacts", "servicecatalog:ListLaunchPaths", "servicecatalog:DescribeRecord", "cloudformation:DescribeStackResources" ], "Resource": "*", "Effect": "Allow" }, { "Sid": "AllowEMRCreateClusterAdvancedActions", "Action": [ "elasticmapreduce:RunJobFlow" ], "Resource": "*", "Effect": "Allow" }, { "Sid": "AllowPassingServiceRoleForWorkspaceCreation", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::*:role/<your-emr-studio-service-role>", "arn:aws:iam::*:role/EMR_DefaultRole", "arn:aws:iam::*:role/EMR_EC2_DefaultRole" ], "Effect": "Allow" }, { "Sid": "AllowS3ListAndLocationPermissions", "Action": [ "s3:ListAllMyBuckets", "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::*", "Effect": "Allow" }, { "Sid": "AllowS3ReadOnlyAccessToLogs", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::aws-logs-<aws-account-id>-<region>/elasticmapreduce/*" ], "Effect": "Allow" } ] }