使用 IAM 的交互式会话 - AWS Glue

使用 IAM 的交互式会话

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

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

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

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

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

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

设置客户端主体

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

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

设置运行时角色

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

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

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

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

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

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

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

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

使用 TagOnCreate 将会话设为私有

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

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

为使您轻松使用 TagOnCreate 功能将会话设为对会话创建者私有,AWS Glue 提供专用托管式策略和服务角色。

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

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

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

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

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "glue.amazonaws.com" ] }, "Action": [ "sts:AssumeRole" ] } ] }
  3. 创建另一个名称含前缀 AwsGlueSessionUserRestrictedNotebookPolicy 的角色,并附加 AWS 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 AWS Glue 以代入角色。

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

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

AWSGlueSessionUserRestrictedNotebookPolicy

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

AWSGlueSessionUserRestrictedNotebookServiceRole

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

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

您可以将 AWSGlueSessionUserRestrictedPolicy 附加到账户中每个用户的 IAM 角色,从而限制这些角色仅在使用拥有者标签(其值与自身 ${aws:userId} 匹配)时才能创建会话。不要使用 AWSGlueSessionUserRestrictedNotebookPolicyAWSGlueSessionUserRestrictedNotebookServiceRole,而需要分别使用与 AWSGlueSessionUserRestrictedPolicyAWSGlueSessionUserRestrictedServiceRole 相似的策略。有关更多信息,请参阅 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

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

AWSGlueSessionUserRestrictedServiceRole

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

IAM policy 注意事项

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

如果管理员附加了 IAM policy,例如 AWSGlueConsoleFullAccess 或 AWSGlueServiceRole 允许访问账户中所有 AWS Glue 资源,客户主体将能够彼此协作。例如,如果策略允许,一个用户将能够与其他用户创建的会话进行交互。

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

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