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
或ConsoleAccess
Amazon 托管策略附加到实体。有关更多信息,请参阅《用户指南》中的向IAM用户添加权限。ReadOnly
让用户使用 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
中有三个表,即 customers
、stores
和 store_sales
。以下策略向 stores
和 store_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
。触发器 t1
和 t2
具有以下属性。
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 无法使用复数GetTriggers
API操作列出触发器,因为此操作不支持对标签进行筛选。
为了让 Tom 访问权限GetTriggers
,Amazon Glue 管理员创建了一个将权限分为两个部分的策略。其中一个部分允许 Tom 使用该GetTriggers
API操作访问所有触发器。第二部分允许 Tom 访问标有该值的API操作Tom
。利用此策略,Tom 可以使用 GetTriggers
和 GetTrigger
来访问触发器 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操作
编写资源策略的第三种方法是通过列出标签值资源的List
API操作来允许访问资源。然后,使用相应的Batch
API操作来允许访问特定资源的详细信息。使用这种方法,管理员无需允许访问复数GetCrawlers
、GetDevEndpoints
GetJobs
、或GetTriggers
API操作。相反,您可以允许通过以下API操作列出资源:
-
ListCrawlers
-
ListDevEndpoints
-
ListJobs
-
ListTriggers
而且,您可以通过以下API操作来获取有关各个资源的详细信息:
-
BatchGetCrawlers
-
BatchGetDevEndpoints
-
BatchGetJobs
-
BatchGetTriggers
作为管理员,要使用此方法,您可以执行以下操作:
-
将标签添加到您的爬网程序、开发终端节点、作业和触发器。
-
拒绝用户访问诸如
GetCrawlers
、GetDevEndponts
GetJobs
、和之类的Get
API操作GetTriggers
。 -
要使用户能够了解他们有权访问哪些带标签的资源,请允许用户访问诸如
ListCrawlers
、ListDevEndponts
ListJobs
、和之类的List
API操作ListTriggers
。 -
拒绝用户访问 Amazon Glue 标记APIs,例如
TagResource
和。UntagResource
-
允许用户通过诸如
BatchGetCrawlers
、BatchGetDevEndponts
BatchGetJobs
、和之类的BatchGet
API操作访问资源详细信息BatchGetTriggers
。
例如,在调用 ListCrawlers
操作时,请提供标签值以匹配用户名。然后,结果是与提供的标签值匹配的爬网程序的列表。向 BatchGetCrawlers
提供名称列表以获取有关每个带给定标签的爬网程序的详细信息。
例如,如果 Tom 只能检索带有标签的触发器的详细信息Tom
,则管理员可以为的触发器添加标签Tom
,拒绝所有用户访问该GetTriggers
API操作,并允许所有用户访问ListTriggers
和BatchGetTriggers
。
以下是资源政策 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
访问 t1
和 t2
时的结果。
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:VpcIds
glue:SubnetIds
、和glue:SecurityGroupIds
。在授予创建和更新任务的权限时,您可以使用IAM策略中的条件键。您可以使用此设置来确保不会在所需VPC环境之外创建(或更新为)作业或会话。VPC设置信息不是从CreateJob
请求中直接输入,而是从指向 a 的作业 “连接” 字段中推断出来的 Amazon Glue 连接。
示例用法
创建一个 Amazon Glue 网络类型连接名为 “traffic-monitored-connection”,带有所需的 VpcId “vpc-id1234”、和。 SubnetIds SecurityGroupIds
在IAM策略中为CreateJob
和UpdateJob
操作指定条件密钥条件。
{ "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*" ] }