用于访问控制的基于身份的策略(IAM 策略) - AWS Glue
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

用于访问控制的基于身份的策略(IAM 策略)

基于身份的策略会附加到 IAM 身份(用户、组、角色或服务)。此类策略为 IAM 身份授予对指定资源的访问权限。

AWS Glue 对所有 AWS Glue 操作均支持基于身份的策略(IAM 策略)。通过将策略附加到账户中的用户或组,可向其授予在 AWS Glue 数据目录 中创建、访问或修改 AWS Glue 资源(例如表)的权限。

通过将策略附加到 IAM 角色,您可以向其他 AWS 账户中的 IAM 身份授予跨账户访问权限。有关更多信息,请参阅授予跨账户访问权限

下面是一个基于身份的示例策略,用于授予 AWS Glue 操作(glue:GetTableGetTablesGetDatabaseGetDatabases)的权限。Resource 值中的通配符字符 (*) 表示,您正在对这些操作授予权限,以获取数据目录中的所有表和数据库的名称和详细信息。如果根据资源策略用户还可以访问其他目录,则该用户也会获得对这些资源的访问权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetTables", "Effect": "Allow", "Action": [ "glue:GetTable", "glue:GetTables", "glue:GetDatabase", "glue:GetDataBases" ], "Resource": "*" } ] }

下面是面向 us-west-2 区域的另一个示例,该示例使用占位符表示特定 AWS 账号。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetTablesActionOnBooks", "Effect": "Allow", "Action": [ "glue:GetTable", "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/books" ] } ] }

此策略授予对名为 books 的数据库中名为 db1 的表的只读权限。 请注意,要授予对表的 Get 权限,还需要对目录和数据库资源的权限。

要拒绝对表的访问权限,需要您创建一个策略,拒绝用户访问该表或其父数据库或目录。这样您可以轻松地拒绝对特定资源的访问权限,通过后续的允许权限无法规避这些拒绝权限。例如,如果您拒绝对数据库 db1 中的表 books 的访问权限,那么如果您授予对数据库 db1 的访问权限,但仍会拒绝对表 books 的访问权限。下面是一个基于身份的策略示例,该示例拒绝对 db1 及其中的所有表执行 AWS Glue 操作(glue:GetTablesGetTable)的权限。

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

有关更多策略示例,请参阅基于身份的策略示例

带标签的基于身份的策略(IAM 策略)

您也可以使用 AWS 标签控制对特定类型的 AWS Glue 资源的访问。有关 AWS Glue 中的标签的更多信息,请参阅AWS 标签

您可以在 IAM 用户策略中使用 Condition 元素与 glue:resourceTag 上下文键,根据与爬网程序、作业、触发器和开发终端节点关联的键来允许或拒绝访问。例如:

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

条件上下文键仅应用于针对爬网程序、作业、触发器和开发终端节点的那些 AWS Glue API 操作。有关哪些 APIs 受到影响的更多信息,请参阅AWS Glue API权限: 操作和资源参考

有关如何使用标签控制访问的信息,请参阅AWS Glue 带标签的基于身份的 (IAM) 访问控制策略示例

资源级权限仅应用于特定的 AWS Glue 对象

您只能定义 AWS Glue 中特定对象的精细控制。因此,您必须编写客户端的 IAM 策略,以便允许 Resource 语句的 Amazon 资源名称 (ARN) 的 API 操作与不允许 ARNs 的 API 操作不混合。 例如,以下 IAM 策略允许对 GetClassifierGetJobRun 执行 API 操作。 它将 Resource 定义为 *,因为 AWS Glue 不允许分类器和作业运行的 ARNs。由于允许对特定的 API 操作(如 ARNs 和 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 对象的列表,请参阅资源 ARNs

使用 AWS Glue 控制台所需要的权限

某个用户要能够使用 AWS Glue 控制台,必须拥有一组允许其使用其 AWS 账户的 AWS Glue 资源的最低权限。除这些 AWS Glue 权限以外,控制台还需要来自以下服务的权限:

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

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

  • 用于处理堆栈的 AWS CloudFormation 权限。

  • 用于列出 Amazon Elastic Compute Cloud、子网、安全组、实例和其他对象的 Amazon EC2 (VPCs) 权限。

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

  • 用于处理集群的 Amazon Redshift 权限。

  • Amazon Relational Database Service (Amazon RDS) 权限,用于列出实例。

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

如果创建比必需的最低权限更为严格的 IAM 策略,对于附加了该 IAM 策略的用户,控制台将无法按预期正常运行。为确保这些用户仍可使用 AWS Glue 控制台,也可向用户附加 AWSGlueConsoleFullAccess 托管策略,如适用于 AWS Glue 的 AWS 托管(预定义)策略中所述。

对于只需要调用 AWS CLI 或 AWS Glue API 的用户,您无需为其提供最低控制台权限。

适用于 AWS Glue 的 AWS 托管(预定义)策略

AWS 通过提供由 AWS 创建和管理的独立 IAM 策略来解决很多常用案例。这些 AWS 托管策略可针对常用案例授予必要的权限,使您免去调查所需权限的工作。有关更多信息,请参阅 https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies 中的 IAM 用户指南AWS 托管策略

下面的 AWS 托管策略可附加到您账户中的用户,这些托管策略特定于 AWS Glue 并且按使用案例场景进行分组:

  • AWSGlueConsoleFullAccess – 在使用 AWS Glue 时授予对 AWS 管理控制台 资源的完全访问权限。如果遵循此策略中指定的资源的命名约定,则用户具有完全控制台功能。此策略通常附加到 AWS Glue 控制台的用户。

  • AWSGlueServiceRole – 授予对各种 AWS Glue 进程代表您运行所需的资源的访问权限。这些资源包括 AWS Glue、Amazon S3、IAM、CloudWatch Logs 和 Amazon EC2。如果您遵循此策略中指定的资源的命名约定,则 AWS Glue 进程具有所需的权限。此策略通常附加到在定义爬网程序、作业和开发终端节点时指定的角色。

  • AWSGlueServiceNotebookRole – 授予对创建笔记本服务器时所需资源的访问权限。这些资源包括 AWS Glue、Amazon S3 和 Amazon EC2。如果您遵循此策略中指定的资源的命名约定,则 AWS Glue 进程具有所需的权限。此策略通常附加到在开发终端节点上创建笔记本服务器时指定的角色。

  • AWSGlueConsoleSageMakerNotebookFullAccess – 在使用 AWS Glue 时授予对 SageMaker 和 AWS 管理控制台 资源的完全访问权限。如果遵循此策略中指定的资源的命名约定,则用户具有完全控制台功能。此策略通常附加到管理 SageMaker 笔记本的 AWS Glue 控制台的用户。

注意

登录 IAM 控制台后搜索特定策略,可以查看这些权限策略。

此外,您还可以创建自己的自定义 IAM 策略,以授予 AWS Glue 操作和资源的相关权限。您可以将这些自定义策略附加到需要这些权限的 IAM 用户或组。