使用 IAM 的交互式会话 - Amazon Glue
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用 IAM 的交互式会话

以下各节介绍 Amazon Glue 交互式会话的安全注意事项。

与交互式会话搭配使用的 IAM 主体

与 Amazon Glue 交互式会话搭配使用的两个 IAM 主体。

  • 客户端主体:客户端主体(用户或角色)授权从使用主体的身份式凭证配置的 Amazon Glue 客户端执行交互式会话的 API 操作。例如,这可能是其凭证用于Amazon Command Line Interface 的 IAM 用户,或者是交互式会话 Jupyter 内核使用的 Amazon Glue 客户端。这也可能是通常用于访问 Amazon Glue 控制台的 IAM 角色主体。

  • 运行时角色:运行时角色是客户端主体传递给交互式会话 API 操作的 IAM 角色。Amazon Glue 使用此角色在会话中运行语句。例如,此角色可能用于运行 Amazon Glue ETL 任务。

    有关更多信息,请参阅设置运行时角色

设置客户端主体

您必须将身份策略连接到客户端主体,才能调用交互式会话 API。这个角色必须具备执行角色的 iam:PassRole 访问权限,您将此角色传递给交互式会话 API(例如 CreateSession)。例如,您可以将 AWSGlueConsoleFullAccess 托管式策略附加到 IAM 用户,从而允许账户中附加相同或类似策略的所有 IAM 用户访问账户中创建的所有会话(例如运行时语句或取消语句)。

如果您要保护会话并将其设为仅对创建会话的 IAM 用户私有,则您可以使用 Amazon Glue 交互式会话的基于标签的授权控制(称为 TagOnCreate)。有关更多信息,请参阅 使用 TagOnCreate 将会话设为私有 ,了解拥有者基于标签的缩小范围托管式策略如何使用 TagOnCreate 将您的会话设为私有。有关基于身份的策略的更多信息,请参阅使用基于身份的策略

设置运行时角色

您必须将 IAM 角色传递给 CreateSession API 操作,才能允许 Amazon Glue 在交互式会话中担任该角色并运行语句。该角色应拥有与运行典型 Amazon Glue 任务所需相同的 IAM 权限。例如,您可以使用 AWSGlueServiceRole 策略创建服务角色,该策略允许 Amazon Glue 代表您调用 Amazon 服务。如果您使用 Amazon Glue 控制台,它将自动代表您创建服务角色或使用现有的服务角色。此外,您还可以创建自己的 IAM 角色并附加自己的 IAM 策略,以授予相似的权限。

如果您要保护会话并将其设为仅对创建会话的 IAM 用户私有,则您可以使用 Amazon Glue 交互式会话的基于标签的授权控制(称为 TagOnCreate)。有关更多信息,请参阅 使用 TagOnCreate 将会话设为私有 ,了解拥有者基于标签的缩小范围托管式策略如何使用 TagOnCreate 将您的会话设为私有。有关基于身份的策略的更多信息,请参阅使用基于身份的策略。如果您自己从 IAM 控制台创建执行角色,并且要使用 TagOnCreate 功能将服务设为私有,请按照以下步骤操作。

  1. 创建IAM 角色并将角色类型设置为 Glue

  2. 附加此 Amazon Glue 托管式策略:AwsGlueSessionUserRestrictedServiceRole

  3. 为角色名称添加策略名称前缀 AwsGlueSessionUserRestrictedServiceRole。例如,您可以使用名称 AwsGlueSessionUserRestrictedServiceRole-myrole 创建角色,并附加 Amazon Glue 托管式策略 AwsGlueSessionUserRestrictedServiceRole

  4. 附加如下所示的信任策略,以允许 Amazon Glue 代入角色:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "glue.amazonaws.com" ] }, "Action": [ "sts:AssumeRole" ] } }

对于交互式会话 Jupyter 内核,您可以在 Amazon Command Line Interface 配置文件中指定 iam_role 密钥。有关更多信息,请参阅使用 ~/.aws/configure 配置会话。如果你正在使用 Amazon Glue 笔记本与交互式会话进行交互,则可以运行的第一个单元格中传递 %iam_role 魔术命令中的执行角色。

使用 TagOnCreate 将会话设为私有

Amazon Glue 交互式会话 (IS) 支持将交互式会话的标记和基于标签的授权 (TBAC) 作为命名资源。除了使用 TagResource 和 UntagResource API 的 TBAC 之外,Amazon Glue 交互式会话支持 TagOnCreate 功能,以便仅在使用 CreateSession 操作创建会话期间使用给定的标签“标记”会话。这也意味着这些标签将在 DeleteSession(又称 UntagOnDelete)上被删除。

TagOnCreate 提供一种强大的安全机制,可以将会话设为对会话创建者私有。例如,您可以将包含“拥有者” RequestTag 且值为 ${aws:userId} 的 IAM 策略附加到客户端主体(例如 IAM 用户),以便仅在提供有调用方用户 ID 匹配值的“拥有者”标签作为 CreateSession 请求中的用户 ID 标签时,才允许创建会话。此策略允许 Amazon Glue 交互式会话仅在会话创建期间创建会话资源并使用 userId 标签标记会话。除此之外,您可以将包含“拥有者”ResourceTag 的 IAM 策略附加到 CreateSession 期间传递的执行角色,从而缩小访问权限(例如运行语句)的范围至仅限于会话的创建者(又称为包含值 ${aws:userId} 的拥有者标签)。

为使您轻松使用 TagOnCreate 功能将会话设为对会话创建者私有,Amazon Glue 提供专用托管式策略和服务角色。例如,您可以将 AWSGlueSessionUserRestrictedPolicy 附加到账户中的每个 IAM 用户,从而限制这些用户仅在使用拥有者标签(其值与自身 ${aws:userId} 匹配)时,才能创建会话。有关更多信息,请参阅使用基于身份的策略。此策略将缩小会话的访问权限至仅限于创建者(又称 IAM 用户的 ${aws:userId}),他们使用表明其自身 ${aws:userId} 的拥有者标签来创建会话。如果您按照设置运行时角色中的步骤使用 IAM 控制台自行创建了执行角色,则除了将 AwsGlueSessionUserRestrictedPolicy 托管式策略附加到账户中的每个 IAM 用户外,请也将以下内联策略附加到这些用户,以允许您之前创建的执行角色的 iam:PassRole

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::*:role/AwsGlueSessionUserRestrictedServiceRole*" ], "Condition": { "StringLike": { "iam:PassedToService": [ "glue.amazonaws.com" ] } } }] }

如果要使用 IAM AssumeRole 主体(即,使用代入 IAM 角色提供的凭证)创建 Amazon Glue 交互式会话,并且要将会话设为对创建者私有,请不要使用 AWSGlueSessionUserRestrictedPolicyAWSGlueSessionUserRestrictedServiceRole,您需要分别使用类似于 AWSGlueSessionUserRestrictedNotebookPolicyAWSGlueSessionUserRestrictedNotebookServiceRole 的策略。这些策略允许 Amazon Glue 使用 ${aws:PrincipalTag} 来提取拥有者标签值。这要求您传递值为 ${aws:userId} 的 userId 标签作为代入角色凭证中的 SessionTag。请参阅 ID 会话标签。如果您使用含提供凭证的实例配置文件的 Amazon EC2 实例,并且要从 Amazon EC2 实例内创建会话或与会话进行交互,则需要传递值为 ${aws:userId} 的 userId 标签作为代入角色凭证中的 SessionTag。

例如,如果您使用 IAM AssumeRole 主体凭证创建会话,并且要使用 TagOnCreate 功能将服务设为私有,请按照以下步骤操作。

  1. 从 IAM 控制台自行创建运行时角色。附加此 Amazon Glue 托管式策略:AwsGlueSessionUserRestrictedNotebookServiceRole 并为角色名称添加策略名称前缀 AwsGlueSessionUserRestrictedNotebookServiceRole。例如,您可以使用名称 AwsGlueSessionUserRestrictedNotebookServiceRole-myrole 创建角色,并附加 Amazon Glue 托管式策略 AwsGlueSessionUserRestrictedNotebookServiceRole

  2. 附加如下所示的信任策略,以允许 Amazon Glue 代入以上角色:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "glue.amazonaws.com" ] }, "Action": [ "sts:AssumeRole" ] } ] }
  3. 创建另一个名称含前缀 AwsGlueSessionUserRestrictedNotebookPolicy 的角色,并附加 Amazon Glue 托管式策略 AwsGlueSessionUserRestrictedNotebookPolicy 以将会话设为私有。除了托管式策略外,请附加以下内联策略,以允许 iam:PassRole 添加到您在步骤 1 中创建的角色。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::*:role/AwsGlueSessionUserRestrictedNotebookServiceRole*" ], "Condition": { "StringLike": { "iam:PassedToService": [ "glue.amazonaws.com" ] } } } ] }
  4. 将如下所示的信任策略附加到以上 IAM Amazon Glue 以代入角色。

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": [ "glue.amazonaws.com" ] }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] }] }
    注意

    或者,您可以使用单个角色(例如,笔记本角色)并附加以上两个托管式策略 AwsGlueSessionUserRestrictedNotebookServiceRoleAwsGlueSessionUserRestrictedNotebookPolicy。此外,将允许角色的 iam:passrole 的其他内联策略附加到 Amazon Glue。最后,请附加以上信任策略以允许 sts:AssumeRolests:TagSession

AWSGlueSessionUserRestrictedPolicy

仅当提供的标签键“拥有者”和值与其 Amazon 用户 ID 匹配时,AWSGlueSessionUserRestrictedPolicy 才提供使用 CreateSession API 创建 Amazon Glue 交互式会话的访问权限。此身份策略已附加到调用 CreateSession API 的 IAM 用户。此策略还允许与使用匹配 Amazon 用户 id 的“拥有者”标签和值创建的 Amazon Glue 交互式会话资源进行交互。此策略拒绝在创建会话后从 Amazon Glue 会话资源中更改或删除“拥有者”标签的权限。

AWSGlueSessionUserRestrictedServiceRole

AWSGlueSessionUserRestrictedServiceRole 提供对所有 Amazon Glue 资源(除会话外)的完全访问权限,允许用户仅创建和使用与用户关联的交互式会话。此策略还包括管理其他 Amazon 服务中的 Glue 资源,Amazon Glue 所需的其他权限。此策略还允许向其他 Amazon 服务中的 Amazon Glue 资源添加标签。

AWSGlueSessionUserRestrictedNotebookPolicy

仅当标签键“拥有者”和值与主体(IAM 用户或角色)的 Amazon 用户 id 匹配时,AWSGlueSessionUserRestrictedNotebookPolicy 才提供从笔记本创建 Amazon Glue 交互式会话的访问权限。有关更多信息,请参阅您可以使用策略变量的位置。此策略已附加到从 Amazon Glue Studio 创建 Amazon Glue 交互式会话笔记本的主体(IAM 用户或角色)。此策略还允许对 Amazon Glue Studio 笔记本的充分访问权限,以便与使用匹配主体的 Amazon 用户 ID 的“拥有者”标签值创建的 Amazon Glue Studio 交互式会话资源进行交互。此策略拒绝在创建会话后从 Amazon Glue 会话资源中更改或删除“拥有者”标签的权限。

AWSGlueSessionUserRestrictedNotebookServiceRole

AWSGlueSessionUserRestrictedNotebookServiceRole 提供对 Amazon Glue Studio 笔记本的充分访问权限,以与使用匹配笔记本创建者主体(IAM 用户或角色)的 Amazon 用户 ID 的“拥有者”标签值创建的 Amazon Glue 交互式会话资源进行交互。有关更多信息,请参阅您可以使用策略变量的位置。此服务角色策略将附加到以魔术命令传递给笔记本的或以执行角色传递给 CreateSession API 的角色。此策略还允许仅当标签键“拥有者”和值与主体的 Amazon 用户 ID 匹配时才从笔记本创建 Amazon Glue 交互式会话。此策略拒绝在创建会话后从 Amazon Glue 会话资源中更改或删除“拥有者”标签的权限。此策略还包括写入和读取 Amazon S3 存储桶、写入 CloudWatch Logs、为 Amazon Glue 使用的 Amazon EC2 资源创建和删除标签的权限。

IAM 策略注意事项

交互式会话是 Amazon Glue 中的 IAM 资源。由于它们是 IAM 资源,因此对会话的访问和交互受 IAM 策略的约束。根据附加到客户端主体或管理员配置的执行角色的 IAM 策略,客户端主体(用户或角色)将能够创建新会话并与自己的会话和其他会话进行交互。

如果管理员附加了允许访问该账户中所有 Amazon Glue 资源的 IAM 策略,例如 AWSGlueConsoleFullAccess (https://docs.aws.amazon.com/glue/latest/dg/using-identity-based-policies.html) 或 AWSGlueServiceRole (https://docs.aws.amazon.com/glue/latest/dg/using-identity-based-policies.html),则客户端主体将能够彼此协作。例如,如果策略允许,一个 IAM 用户将能够与其他 IAM 用户创建的会话进行交互。

如果您要配置针对特定需求量身定制的策略,请参阅为策略配置资源的 IAM 文档 例如,为了隔离属于 IAM 用户的会话,您可以使用 Glue IS 支持的 TagOnCreate 功能。请参阅 使用 TagOnCreate 将会话设为私有