Glue 基于身份的策略示例 AWS - AWS Glue

Glue 基于身份的策略示例 AWS

默认情况下,用户和角色无权创建或修改 AWS Glue 资源。他们也无法使用 AWS Management Console、 AWS Command Line Interface (AWS CLI) 或来执行任务 AWS API。要授予用户对其所需资源执行操作的权限,IAM管理员可以创建IAM策略。然后,管理员可以将IAM策略添加到角色中,用户可以代入角色。

要了解如何使用这些示例策略文档创建IAM基于身份的JSON策略,请参阅IAM用户指南中的创建IAM策略(控制台)

有关 AWS Glue 定义的操作和资源类型(包括每种资源类型的格式)的详细信息,请参阅《服务授权参考》中的 AWS Glue 的操作、资源和条件键。ARNs

注意

本节中提供的示例均使用 us-west-2 区域。您可以将其替换为要使用的 AWS 区域。

策略最佳实践

基于身份的策略决定了某人是否可以在您的账户中创建、访问或删除 G AWS lue 资源。这些操作可能会使 AWS 账户产生成本。创建或编辑基于身份的策略时,请遵循以下指南和建议:

  • 开始使用 AWS 托管策略并转向最低权限权限 — 要开始向用户和工作负载授予权限,请使用为许多常见用例授予权限的AWS 托管策略。它们在你的版本中可用 AWS 账户。我们建议您通过定义针对您的用例的 AWS 客户托管策略来进一步减少权限。有关更多信息,请参阅《IAM用户指南》中的AWS 托AWS 管策略或工作职能托管策略。

  • 应用最低权限权限-使用IAM策略设置权限时,仅授予执行任务所需的权限。为此,您可以定义在特定条件下可以对特定资源执行的操作,也称为最低权限许可。有关使用应用权限IAM的更多信息,请参阅《IAM用户指南》IAM中的策略和权限

  • 使用IAM策略中的条件进一步限制访问权限-您可以在策略中添加条件以限制对操作和资源的访问权限。例如,您可以编写一个策略条件来指定所有请求都必须使用发送SSL。如果服务操作是通过特定的方式使用的,则也可以使用条件来授予对服务操作的访问权限 AWS 服务,例如 AWS CloudFormation。有关更多信息,请参阅《IAM用户指南》中的IAMJSON策略元素:条件

  • 使用 A IAM ccess Analyzer 验证您的IAM策略以确保权限的安全性和功能性 — A IAM ccess Analyzer 会验证新的和现有的策略,以便策略符合IAM策略语言 (JSON) 和IAM最佳实践。IAMAccess Analyzer 提供了 100 多项策略检查和可行的建议,可帮助您制定安全和实用的策略。有关更多信息,请参阅《IAM用户指南》中的使用 A IAM ccess Analyzer 验证策略

  • 需要多重身份验证 (MFA)-如果您的场景需要IAM用户或 root 用户 AWS 账户,请打开MFA以提高安全性。要要求MFA何时调用API操作,请在策略中添加MFA条件。有关更多信息,请参阅《IAM用户指南》MFA中的使用进行安全API访问

有关中最佳做法的更多信息IAM,请参阅《IAM用户指南》IAM中的安全最佳实践

资源级权限仅适用于特定的 AWS Glue objects

您只能在中为特定对象定义精细控制 AWS Glue。 因此,您必须编写客户的IAM策略,这样允许使用Amazon Resource Names (ARNs) Resource 语句的API操作不会与不允许的API操作混为一谈ARNs。

例如,以下IAM策略允许对GetClassifier和进行API操作GetJobRun。它将 “定义为” 是*Resource为 AWS Glue 不允许使用ARNs分类器和作业运行。ARNs因为允许API执行诸如GetDatabase和之类的特定操作GetTable,因此ARNs可以在策略的后半部分中指定。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetClassifier*", "glue:GetJobRun*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "glue:Get*" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default", "arn:aws:glue:us-east-1:123456789012:table/default/e*1*", "arn:aws:glue:us-east-1:123456789012:connection/connection2" ] } ] }

有关清单 AWS Glue 允许的对象ARNs,请参阅指定 AWS Glue 资源 ARN

使用 AWS Glue 控制台

要访问 AWS Glue 控制台,您必须拥有一组最低权限。这些权限必须允许您列出和查看有关您的 AWS Glue 资源的详细信息 AWS 账户。如果创建比必需的最低权限更为严格的基于身份的策略,对于附加了该策略的实体(用户或角色),控制台将无法按预期正常运行。

您无需为仅拨打 AWS CLI 或的用户设置最低控制台权限 AWS API。相反,只允许访问与他们尝试执行的API操作相匹配的操作。

为确保用户和角色仍然可以使用 AWS Glue 控制台,还需要将 AWS Glue ConsoleAccessReadOnly AWS 托管策略附加到实体。有关更多信息,请参阅《用户指南》中的向IAM用户添加权限

让用户使用 AWS Glue 控制台,该用户必须拥有允许他们使用的最低权限集 AWS Glue 他们 AWS 账户的资源。除了这些 AWS Glue 权限,控制台需要以下服务的权限:

  • Amazon CloudWatch Logs 显示日志的权限。

  • AWS Identity and Access Management (IAM) 列出和传递角色的权限。

  • AWS CloudFormation 使用堆栈的权限。

  • 亚马逊弹性计算云 (AmazonEC2) 列VPCs出、子网、安全组、实例和其他对象的权限。

  • 用于列出存储桶和对象以及检索和保存脚本的 Amazon Simple Storage Service(Amazon S3)权限。

  • 用于使用集群的 Amazon Redshift 权限。

  • 亚马逊关系数据库服务 (AmazonRDS) 列出实例的权限。

有关用户查看和使用所需的权限的更多信息 AWS Glue 控制台,请参阅步骤 3:将策略附加到访问 AWS Glue 的用户或组

如果您创建的IAM策略比所需的最低权限更严格,则控制台将无法按预期运行,供拥有该IAM策略的用户使用。为了确保这些用户仍然可以使用 AWS Glue 控制台,还要附加AWSGlueConsoleFullAccess托管策略,如中所述适用于 AWS Glue 的 AWS 托管(预定义)策略

允许用户查看他们自己的权限

此示例说明如何创建允许IAM用户查看附加到其用户身份的内联和托管策略的策略。此策略包括在控制台上或使用或以编程方式完成此操作的 AWS CLI 权限。 AWS API

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": ["arn:aws:iam::*:user/${aws:username}"] }, { "Sid": "NavigateInConsole", "Effect": "Allow", "Action": [ "iam:GetGroupPolicy", "iam:GetPolicyVersion", "iam:GetPolicy", "iam:ListAttachedGroupPolicies", "iam:ListGroupPolicies", "iam:ListPolicyVersions", "iam:ListPolicies", "iam:ListUsers" ], "Resource": "*" } ] }

授予对表的只读权限

以下策略授予对数据库 db1 中的 books 表的只读权限。有关资源 Amazon 资源名称 (ARNs) 的更多信息,请参阅数据目录 ARN

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetTablesActionOnBooks", "Effect": "Allow", "Action": [ "glue:GetTables", "glue:GetTable" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:catalog", "arn:aws:glue:us-west-2:123456789012:database/db1", "arn:aws:glue:us-west-2:123456789012:table/db1/books" ] } ] }

此策略授予对名为 db1 的数据库中的名为 books 的表的只读权限。要授予对表的 Get 权限,同时需要对目录和数据库资源授予这一权限。

以下策略授予在数据库 db1 中创建表 tb1 所需的最低权限:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:CreateTable" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:table/db1/tbl1", "arn:aws:glue:us-west-2:123456789012:database/db1", "arn:aws:glue:us-west-2:123456789012:catalog" ] } ] }

按 GetTables 权限筛选表

假设在数据库 db1 中有三个表,即 customersstoresstore_sales。以下策略向 storesstore_sales 授予 GetTables 权限,但不向 customers 授予此权限。当您使用此策略调用 GetTables 时,结果将只包含两个授权表(不返回 customers 表)。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetTablesExample", "Effect": "Allow", "Action": [ "glue:GetTables" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:catalog", "arn:aws:glue:us-west-2:123456789012:database/db1", "arn:aws:glue:us-west-2:123456789012:table/db1/store_sales", "arn:aws:glue:us-west-2:123456789012:table/db1/stores" ] } ] }

通过使用 store* 匹配以 store 开头的任何表名称,可简化上面的策略。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetTablesExample2", "Effect": "Allow", "Action": [ "glue:GetTables" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:catalog", "arn:aws:glue:us-west-2:123456789012:database/db1", "arn:aws:glue:us-west-2:123456789012:table/db1/store*" ] } ] }

同样,使用 /db1/* 匹配 db1 中的所有表,以下策略将授予对 db1 中所有表的 GetTables 访问权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetTablesReturnAll", "Effect": "Allow", "Action": [ "glue:GetTables" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:catalog", "arn:aws:glue:us-west-2:123456789012:database/db1", "arn:aws:glue:us-west-2:123456789012:table/db1/*" ] } ] }

如果未提供表,ARN则调用GetTables成功,但会返回一个空列表。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetTablesEmptyResults", "Effect": "Allow", "Action": [ "glue:GetTables" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:catalog", "arn:aws:glue:us-west-2:123456789012:database/db1" ] } ] }

如果策略中缺少数据库,ARN则调用将GetTables失败,并显示为AccessDeniedException

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetTablesAccessDeny", "Effect": "Allow", "Action": [ "glue:GetTables" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:catalog", "arn:aws:glue:us-west-2:123456789012:table/db1/*" ] } ] }

授予对表和所有分区的完整访问权限

以下策略授予对数据库 db1 中名为 books 的表的所有权限。这包括对表本身、对其存档版本及其所有分区的读取和写入权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "FullAccessOnTable", "Effect": "Allow", "Action": [ "glue:CreateTable", "glue:GetTable", "glue:GetTables", "glue:UpdateTable", "glue:DeleteTable", "glue:BatchDeleteTable", "glue:GetTableVersion", "glue:GetTableVersions", "glue:DeleteTableVersion", "glue:BatchDeleteTableVersion", "glue:CreatePartition", "glue:BatchCreatePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition", "glue:UpdatePartition", "glue:DeletePartition", "glue:BatchDeletePartition" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:catalog", "arn:aws:glue:us-west-2:123456789012:database/db1", "arn:aws:glue:us-west-2:123456789012:table/db1/books" ] } ] }

在实践中,可以简化上述策略。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "FullAccessOnTable", "Effect": "Allow", "Action": [ "glue:*Table*", "glue:*Partition*" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:catalog", "arn:aws:glue:us-west-2:123456789012:database/db1", "arn:aws:glue:us-west-2:123456789012:table/db1/books" ] } ] }

请注意,精细访问控制的最小粒度在表级别。这意味着,您不能向用户授予对表中某些分区的访问权限,而不授予对表中其他分区的访问权限,或授予对表中部分列的访问权限,而不授予对其他列的访问权限。用户要么可以访问表的所有内容,要么不能访问表的任何内容。

通过名称前缀和显式拒绝控制访问权限

在此示例中,假设 AWS Glue 数据目录中的数据库和表是使用名称前缀组织的。发展阶段的数据库具有名称前缀 dev-,生产阶段的数据库具有名称前缀 prod-。您可以使用以下策略向开发者授予对所有dev-带有前缀的数据库UDFs、表等的完全访问权限。但是,您会对带有 prod- 前缀的所有内容授予只读访问权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DevAndProdFullAccess", "Effect": "Allow", "Action": [ "glue:*Database*", "glue:*Table*", "glue:*Partition*", "glue:*UserDefinedFunction*", "glue:*Connection*" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:catalog", "arn:aws:glue:us-west-2:123456789012:database/dev-*", "arn:aws:glue:us-west-2:123456789012:database/prod-*", "arn:aws:glue:us-west-2:123456789012:table/dev-*/*", "arn:aws:glue:us-west-2:123456789012:table/*/dev-*", "arn:aws:glue:us-west-2:123456789012:table/prod-*/*", "arn:aws:glue:us-west-2:123456789012:table/*/prod-*", "arn:aws:glue:us-west-2:123456789012:userDefinedFunction/dev-*/*", "arn:aws:glue:us-west-2:123456789012:userDefinedFunction/*/dev-*", "arn:aws:glue:us-west-2:123456789012:userDefinedFunction/prod-*/*", "arn:aws:glue:us-west-2:123456789012:userDefinedFunction/*/prod-*", "arn:aws:glue:us-west-2:123456789012:connection/dev-*", "arn:aws:glue:us-west-2:123456789012:connection/prod-*" ] }, { "Sid": "ProdWriteDeny", "Effect": "Deny", "Action": [ "glue:*Create*", "glue:*Update*", "glue:*Delete*" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:database/prod-*", "arn:aws:glue:us-west-2:123456789012:table/prod-*/*", "arn:aws:glue:us-west-2:123456789012:table/*/prod-*", "arn:aws:glue:us-west-2:123456789012:userDefinedFunction/prod-*/*", "arn:aws:glue:us-west-2:123456789012:userDefinedFunction/*/prod-*", "arn:aws:glue:us-west-2:123456789012:connection/prod-*" ] } ] }

上述策略中的第二条语句使用显式 deny。您可以使用显式 deny 覆盖被授予委托人的任何 allow 权限。这样,您就可以锁定关键资源的访问权限,并阻止其他策略意外授予这些资源的访问权限。

在上述示例中,尽管第一条语句授予对 prod- 资源的完整访问权限,第二条语句则显式撤消这些资源的写入访问权限,只保留 prod- 资源的读取访问权限。

使用标签授权

例如,假设您想将对触发器 t2 的访问限制为您账户中名为 Tom 的特定用户。所有其他用户(包括 Sam)都有权访问触发器 t1。触发器 t1t2 具有以下属性。

aws glue get-triggers { "Triggers": [ { "State": "CREATED", "Type": "SCHEDULED", "Name": "t1", "Actions": [ { "JobName": "j1" } ], "Schedule": "cron(0 0/1 * * ? *)" }, { "State": "CREATED", "Type": "SCHEDULED", "Name": "t2", "Actions": [ { "JobName": "j1" } ], "Schedule": "cron(0 0/1 * * ? *)" } ] }

这些区域有:AWS Glue 管理员附加了要触发的标签值 Tom (aws:ResourceTag/Name": "Tom") t2。这些区域有:AWS Glue 管理员还给了 Tom 一份包含基于标签的条件声明的IAM策略。因此,汤姆只能使用 AWS Glue 对带有标签值的资源进行操作的操作Tom

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "glue:*", "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/Name": "Tom" } } } ] }

当 Tom 尝试访问触发器 t1 时,他收到一条指示访问被拒绝的消息。同时,他可以成功检索触发器 t2

aws glue get-trigger --name t1 An error occurred (AccessDeniedException) when calling the GetTrigger operation: User: Tom is not authorized to perform: glue:GetTrigger on resource: arn:aws:glue:us-east-1:123456789012:trigger/t1 aws glue get-trigger --name t2 { "Trigger": { "State": "CREATED", "Type": "SCHEDULED", "Name": "t2", "Actions": [ { "JobName": "j1" } ], "Schedule": "cron(0 0/1 * * ? *)" } }

Tom 无法使用复数GetTriggersAPI操作列出触发器,因为此操作不支持对标签进行筛选。

为了让 Tom 访问权限GetTriggers,AWS Glue 管理员创建了一个将权限分为两个部分的策略。其中一个部分允许 Tom 使用该GetTriggersAPI操作访问所有触发器。第二部分允许 Tom 访问标有该值的API操作Tom。利用此策略,Tom 可以使用 GetTriggersGetTrigger 来访问触发器 t2

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "glue:GetTriggers", "Resource": "*" }, { "Effect": "Allow", "Action": "glue:*", "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/Name": "Tom" } } } ] }

使用标签拒绝访问

另一种资源策略方法是明确拒绝对资源的访问。

重要

明确的拒绝策略不适用于复数API操作,例如GetTriggers

在以下示例策略中,所有 AWS Glue 允许作业操作。但是,第二条 Effect 语句明确拒绝访问带有 Team 键和 Special 值标记的任务。

当管理员将以下策略附加到身份时,该身份可以访问标记为 Team 键和 Special 值之外的所有任务。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "glue:*", "Resource": "arn:aws:glue:us-east-1:123456789012:job/*" }, { "Effect": "Deny", "Action": "glue:*", "Resource": "arn:aws:glue:us-east-1:123456789012:job/*", "Condition": { "StringEquals": { "aws:ResourceTag/Team": "Special" } } } ] }

使用标签进行列表和批量API操作

编写资源策略的第三种方法是通过列出标签值资源的ListAPI操作来允许访问资源。然后,使用相应的BatchAPI操作来允许访问特定资源的详细信息。使用这种方法,管理员无需允许访问复数GetCrawlersGetDevEndpointsGetJobs、或GetTriggersAPI操作。相反,您可以允许通过以下API操作列出资源:

  • ListCrawlers

  • ListDevEndpoints

  • ListJobs

  • ListTriggers

而且,您可以通过以下API操作来获取有关各个资源的详细信息:

  • BatchGetCrawlers

  • BatchGetDevEndpoints

  • BatchGetJobs

  • BatchGetTriggers

作为管理员,要使用此方法,您可以执行以下操作:

  1. 将标签添加到您的爬网程序、开发终端节点、作业和触发器。

  2. 拒绝用户访问诸如GetCrawlersGetDevEndpontsGetJobs、和之类的GetAPI操作GetTriggers

  3. 要使用户能够了解他们有权访问哪些带标签的资源,请允许用户访问诸如ListCrawlersListDevEndpontsListJobs、和之类的ListAPI操作ListTriggers

  4. 拒绝用户访问 AWS Glue 标记APIs,例如TagResource和。UntagResource

  5. 允许用户通过诸如BatchGetCrawlersBatchGetDevEndpontsBatchGetJobs、和之类的BatchGetAPI操作访问资源详细信息BatchGetTriggers

例如,在调用 ListCrawlers 操作时,请提供标签值以匹配用户名。然后,结果是与提供的标签值匹配的爬网程序的列表。向 BatchGetCrawlers 提供名称列表以获取有关每个带给定标签的爬网程序的详细信息。

例如,如果 Tom 只能检索带有标签的触发器的详细信息Tom,则管理员可以为的触发器添加标签Tom,拒绝所有用户访问该GetTriggersAPI操作,并允许所有用户访问ListTriggersBatchGetTriggers

以下是资源政策 AWS Glue 管理员向 Tom 授予权限。在政策的第一部分中,AWS Glue API的操作被拒绝GetTriggers。在此策略的第二个部分中,所有资源允许 ListTriggers。但在第三个部分中,允许使用 BatchGetTriggers 访问标记了 Tom 的那些资源。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "glue:GetTriggers", "Resource": "*" }, { "Effect": "Allow", "Action": [ "glue:ListTriggers" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "glue:BatchGetTriggers" ], "Resource": [ "*" ], "Condition": { "StringEquals": { "aws:ResourceTag/Name": "Tom" } } } ] }

通过使用上一个示例中的相同触发器,Tom 可以访问触发器 t2 而不是触发器 t1。以下示例显示了 Tom 尝试使用 BatchGetTriggers 访问 t1t2 时的结果。

aws glue batch-get-triggers --trigger-names t2 { "Triggers": { "State": "CREATED", "Type": "SCHEDULED", "Name": "t2", "Actions": [ { "JobName": "j2" } ], "Schedule": "cron(0 0/1 * * ? *)" } } aws glue batch-get-triggers --trigger-names t1 An error occurred (AccessDeniedException) when calling the BatchGetTriggers operation: No access to any requested resource.

以下示例显示了 Tom 尝试通过同一 BatchGetTriggers 调用访问触发器 t2 和触发器 t3(不存在)时的结果。请注意,由于 Tom 有权访问触发器 t2 且该触发器存在,因此,仅返回 t2。虽然 Tom 有权访问触发器 t3,但触发器 t3 不存在,因此在 "TriggersNotFound": [] 列表的响应中将返回 t3

aws glue batch-get-triggers --trigger-names t2 t3 { "Triggers": { "State": "CREATED", "Type": "SCHEDULED", "Name": "t2", "Actions": [ { "JobName": "j2" } ], "TriggersNotFound": ["t3"], "Schedule": "cron(0 0/1 * * ? *)" } }

使用条件键或上下文键控制设置

授予创建和更新任务的权限时,可以使用条件键或上下文键。以下部分讨论了这些键:

使用条件键控制设置的策略

AWS Glue 提供了三个IAM条件键glue:VpcIdsglue:SubnetIds、和glue:SecurityGroupIds。在授予创建和更新任务的权限时,您可以使用IAM策略中的条件键。您可以使用此设置来确保不会在所需VPC环境之外创建(或更新为)作业或会话。VPC设置信息不是从CreateJob请求中直接输入,而是从指向 a 的作业 “连接” 字段中推断出来的 AWS Glue 连接。

示例用法

创建一个 AWS Glue 网络类型连接名为 “traffic-monitored-connection”,带有所需的 VpcId “vpc-id1234”、和。 SubnetIds SecurityGroupIds

在IAM策略中为CreateJobUpdateJob操作指定条件密钥条件。

{ "Effect": "Allow", "Action": [ "glue:CreateJob", "glue:UpdateJob" ], "Resource": [ "*" ], "Condition": { "ForAnyValue:StringLike": { "glue:VpcIds": [ "vpc-id1234" ] } } }

您可以创建类似的IAM策略来禁止创建 AWS Glue 未指定连接信息的作业。

限制会话开启 VPCs

<123>要强制创建的会话在指定的范围内运行VPC,您可以通过在glue:CreateSession操作上添加Deny效果来限制角色权限,条件是 glue: vpc-id 不等于 vpc-id 不等于 vpc-。例如:

"Effect": "Deny", "Action": [ "glue:CreateSession" ], "Condition": { "StringNotEquals" : {"glue:VpcIds" : ["vpc-123"]} }

您还可以强制创建的会话在中运行,VPC方法glue:vpc-id是为空的glue:CreateSession操作添加Deny效果。例如:

{ "Effect": "Deny", "Action": [ "glue:CreateSession" ], "Condition": { "Null": {"glue:VpcIds": true} } }, { "Effect": "Allow", "Action": [ "glue:CreateSession" ], "Resource": ["*"] }

控制使用上下文键控制设置的策略

AWS Glue 为每个角色会话提供上下文密钥 (glue:CredentialIssuingService= glue.amazonaws.com) AWS Glue 可供作业和开发者端点使用。这使您可以对所采取的操作实施安全控制 AWS Glue 脚本。AWS Glue 为每个角色会话提供另一个上下文密钥 (glue:RoleAssumedBy=glue.amazonaws.com),其中 AWS Glue 代表客户调用其他 AWS 服务(不是通过作业/开发端点,而是直接通过 AWS Glue 服务)。

示例用法

在IAM策略中指定条件权限,并将其附加到要由使用的角色上 AWS Glue 工作。这样可以确保根据角色会话是否用于某项操作来允许/拒绝某些操作 AWS Glue 作业运行时环境。

{ "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::confidential-bucket/*", "Condition": { "StringEquals": { "glue:CredentialIssuingService": "glue.amazonaws.com" } } }

拒绝某个身份创建数据预览会话

本节包含一个IAM策略示例,用于拒绝身份创建数据预览会话的能力。将此策略附加到身份,该身份与数据预览会话在运行期间使用的角色是分开的。

{ "Sid": "DatapreviewDeny", "Effect": "Deny", "Action": [ "glue:CreateSession" ], "Resource": [ "arn:aws:glue:*:*:session/glue-studio-datapreview*" ] }