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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 IAM 的交互式会话

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

交互式会话中使用的 IAM 主体

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

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

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

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

设置客户端主体

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

如果您想保护您的会话并使其仅对某些 IAM 角色设为私有,例如与创建会话的用户关联的角色,则可以使用名为 Interact Amazon Glue ive Session 的基于标签的授权控制 TagOnCreate。有关更多信息,请参阅 将您的会话设为私密会话 TagOnCreate 基于所有者标签的限定范围的托管策略如何将您的会话设为私有。 TagOnCreate有关基于身份的策略的更多信息,请参阅基于身份的策略。Amazon Glue

设置运行时角色

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

如果您想保护您的会话并使其仅对创建会话的用户保密,则可以使用名为 Interact Amazon Glue ive Session 的基于标签的授权控件 TagOnCreate。有关更多信息,请参阅 将您的会话设为私密会话 TagOnCreate 基于所有者标签的限定范围的托管策略如何将您的会话设为私有。 TagOnCreate有关基于身份的策略的更多信息,请参阅 适用于 Amazon Glue 的基于身份的策略。如果您通过 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/config 配置会话。如果您正在使用 Amazon Glue 笔记本与交互式会话进行交互,则可以传递运行的第一个单元格中的 %iam_role 魔术命令中的执行角色。

将您的会话设为私密会话 TagOnCreate

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

TagOnCreate 提供了一种强大的安全机制,可将您的会话设为私密会话,仅供会话创建者使用。例如,您可以将一个 “owner” RequestTag 且值为 $ {aws: userId} 的 IAM 策略附加到客户委托人(例如用户),以便仅在请求中提供与来电者 userID 值匹配的 “所有者” 标签作为用户 ID 标签时才允许创建会话。 CreateSession 此策略允许 Amazon Glue 交互式会话仅在会话创建期间创建会话资源并使用 userId 标签标记会话。除此之外,您还可以通过将带有 “owner” ResourceTag 的 IAM 策略附加到您在此期间传入的执行角色来缩小对会话的访问权限(如正在运行的语句),仅限于会话的创建者(又名值为 $ {aws: userId} 的所有者标签)。 CreateSession

为了便于您使用 TagOnCreate 功能将会话设为私有会话创建者,Amazon Glue提供了专门的托管策略和服务角色。

如果您想使用 IAM AssumeRole 委托人(即使用通过担任 IAM 角色获得的凭证)创建Amazon Glue交互式会话,并且想要将该会话设为对创建者私有,请分别使用与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托管策略AwsGlueSessionUserRestrictedNotebookService角色,并在角色名称前加上策略名称 Role AwsGlueSessionUserRestrictedNotebookService。例如,您可以创建一个名为 AwsGlueSessionUserRestrictedNotebookServiceRole-myRole 的角色并附加Amazon Glue托管策略角色。AwsGlueSessionUserRestrictedNotebookService

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

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

    { "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" ] }] }
    注意

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

AWSGlueSessionUserRestrictedNotebookPolicy

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

AWSGlueSessionUserRestrictedNotebookServiceRole

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

使用用户策略将会话设为私有

您可以将关联AWSGlueSessionUserRestrictedPolicy到您账户中每个用户的 IAM 角色,以限制他们只能使用值与他们自己的 $ {aws: userId} 匹配的所有者标签创建会话。AWSGlueSessionUserRestrictedNotebookServiceRole您需要AWSGlueSessionUserRestrictedServiceRole分别使用与AWSGlueSessionUserRestrictedNotebookPolicy和类似的AWSGlueSessionUserRestrictedPolicy策略。有关更多信息,请参阅 Using-identity based policies。此策略将缩小会话的访问权限至仅限于创建者(又称用户的 ${aws:userId}),他们使用表明自身 ${aws:userId} 的拥有者标签来创建会话。如果您按照中的步骤使用 IAM 控制台自己创建了执行角色设置运行时角色,那么除了附加AwsGlueSessionUserRestrictedPolicy托管策略外,还要将以下内联策略附加到您账户中的每个用户,以允许您之前创建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" ] } } }] }

AWSGlueSessionUserRestrictedPolicy

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

AWSGlueSessionUserRestrictedServiceRole

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

IAM policy 注意事项

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

如果管理员附加了允许访问 AWSGlueServiceRole 该账户中所有Amazon Glue资源的 IAM 策略(如 AWSGlueConsoleFullAccess 或),则客户委托人将能够相互协作。例如,如果策略允许,一个用户将能够与其他用户创建的会话进行交互。

如果您想配置根据您的特定需求量身定制的策略,请参阅有关为策略配置资源的 IAM 文档。例如,为了隔离属于某个用户的会话,您可以使用Amazon Glue交互会话支持的 TagOnCreate 功能。请参阅 将您的会话设为私密会话 TagOnCreate

交互式会话支持根据特定 VPC 条件限制会话创建。请参阅使用条件键控制设置的策略