Glue 基于身份的策略示例 Amazon - Amazon Glue
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Glue 基于身份的策略示例 Amazon

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

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

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

注意

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

策略最佳实践

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

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

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

  • 使用IAM策略中的条件进一步限制访问权限-您可以在策略中添加条件以限制对操作和资源的访问权限。例如,您可以编写一个策略条件来指定所有请求都必须使用发送SSL。如果服务操作是通过特定的方式使用的,则也可以使用条件来授予对服务操作的访问权限 Amazon Web Services 服务,例如 Amazon 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 用户 Amazon Web Services 账户,请打开MFA以提高安全性。要要求MFA何时调用API操作,请在策略中添加MFA条件。有关更多信息,请参阅《IAM用户指南》MFA中的使用进行安全API访问

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

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

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

例如,以下IAM策略允许对GetClassifier和进行API操作GetJobRun。它将 “定义为” 是*Resource为 Amazon 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" ] } ] }

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

使用 Amazon Glue 控制台

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

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

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

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

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

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

  • Amazon CloudFormation 使用堆栈的权限。

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

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

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

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

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

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

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

此示例说明如何创建允许IAM用户查看附加到其用户身份的内联和托管策略的策略。此策略包括在控制台上或使用或以编程方式完成此操作的 Amazon CLI 权限。 Amazon 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" ] } ] }

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

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

在此示例中,假设 Amazon 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 * * ? *)" } ] }

这些区域有:Amazon Glue 管理员附加了要触发的标签值 Tom (aws:ResourceTag/Name": "Tom") t2。这些区域有:Amazon Glue 管理员还给了 Tom 一份包含基于标签的条件声明的IAM策略。因此,汤姆只能使用 Amazon 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,Amazon 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

在以下示例策略中,所有 Amazon 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. 拒绝用户访问 Amazon Glue 标记APIs,例如TagResource和。UntagResource

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

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

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

以下是资源政策 Amazon Glue 管理员向 Tom 授予权限。在政策的第一部分中,Amazon 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 * * ? *)" } }

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

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

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

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

示例用法

创建一个 Amazon 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策略来禁止创建 Amazon 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": ["*"] }

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

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

示例用法

在IAM策略中指定条件权限,并将其附加到要由使用的角色上 Amazon Glue 工作。这样可以确保根据角色会话是否用于某项操作来允许/拒绝某些操作 Amazon 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*" ] }