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

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

用于访问控制的 AWS Glue 资源策略

资源策略 是附加到资源而不是 IAM 身份的策略。例如,在 Amazon Simple Storage Service (Amazon S3) 中,资源策略将附加到 Amazon S3 存储桶。AWS Glue 支持使用资源策略控制对 数据目录 资源的访问。这些资源包括数据库、表、连接和用户定义的函数,以及与这些资源交互的 数据目录 APIs。

AWS Glue 资源策略只能用于管理 数据目录 资源的权限。不能将其附加到任何其他 AWS Glue 资源,如任务、触发器、开发终端节点、爬网程序或分类器。

资源策略附加到目录,目录是上面提到的各种 数据目录 资源的虚拟容器。每个 AWS 账户在 AWS 区域中有单个目录,其目录 ID 与 AWS 账户 ID 相同。不能删除或修改目录。

将对目录的所有 API 调用评估资源策略,其中调用方委托人包含在策略文档的 "Principal" 块中。

注意

目前,每个目录只允许使用一个 资源策略,大小限制为 10 KB。

可使用以 JSON 格式编写的策略文档来创建或修改资源策略。策略语法与 IAM 策略相同(请参阅 IAM JSON 策略参考),但存在以下例外:

  • 每条策略语句需要一个 "Principal""NotPrincipal" 块。

  • "Principal""NotPrincipal" 必须标识现有的有效 AWS 根用户或 IAM 用户、角色或组。不允许使用通配符模式(如 arn:aws:iam::account-id:user/*)。

  • 该策略中的 "Resource" 块要求所有资源 ARNs 与以下正则表达式语法匹配(其中第一个 %sregion 第二个 %saccount-id):

    *arn:aws:glue:%s:%s:(\*|[a-zA-Z\*]+\/?.*)

    例如,arn:aws:glue:us-west-2:account-id:*arn:aws:glue:us-west-2:account-id:database/default 都允许使用,但不允许 *

  • 与基于身份的策略不同,AWS Glue 资源策略只能包含属于该策略附加到的目录的资源的 Amazon 资源名称 (ARN)。此类 ARNs 始终以 arn:aws:glue: 开头。

  • 策略不会使创建它的身份在未来的策略创建或修改中被锁定。

  • 资源策略 JSON 文档的大小不能超过 10 KB。

例如,假定将以下策略附加到账户 A 中的目录。它会向账户 A 中的 IAM 身份 dev 授予在账户 A 的数据库 db1 中创建任意表的权限。该策略还会向账户 B 中的根用户授予相同权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:CreateTable" ], "Principal": {"AWS": [ "arn:aws:iam::account-A-id:user/dev", "arn:aws:iam::account-B-id:root" ]}, "Resource": [ "arn:aws:glue:us-east-1:account-A-id:table/db1/*", "arn:aws:glue:us-east-1:account-A-id:database/db1", "arn:aws:glue:us-east-1:account-A-id:catalog" ] } ] }

下面是一些无效 资源策略文档的示例。

例如,如果策略指定的用户在该策略附加到的目录的账户中不存在,则该策略无效。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:CreateTable" ], "Principal": {"AWS": [ "arn:aws:iam::account-A-id:user/(non-existent-user)" ]}, "Resource": [ "arn:aws:glue:us-east-1:account-A-id:table/db1/tbl1", "arn:aws:glue:us-east-1:account-A-id:database/db1", "arn:aws:glue:us-east-1:account-A-id:catalog" ] } ] }

如果策略包含的资源 ARN 所对应的资源与该策略附加到的目录在不同账户中,则该策略无效。在以下示例中,如果策略附加到 account-A,则该策略不正确。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:CreateTable" ], "Principal": {"AWS": [ "arn:aws:iam::account-A-id:user/dev" ]}, "Resource": [ "arn:aws:glue:us-east-1:account-B-id:table/db1/tbl1", "arn:aws:glue:us-east-1:account-B-id:database/db1", "arn:aws:glue:us-east-1:account-B-id:catalog" ] } ] }

如果策略包含的资源 ARN 所对应的资源不是 AWS Glue 资源(在此示例中为 Amazon S3 存储桶),则该策略无效。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:CreateTable" ], "Principal": {"AWS": [ "arn:aws:iam::account-A-id:user/dev" ]}, "Resource": [ "arn:aws:glue:us-east-1:account-A-id:table/db1/tbl1", "arn:aws:glue:us-east-1:account-A-id:database/db1", "arn:aws:glue:us-east-1:account-A-id:catalog", "arn:aws:s3:::bucket/my-bucket" ] } ] }

AWS Glue 资源策略 APIs

您可以使用以下 AWS Glue 数据目录 APIs 创建、检索、修改和删除 AWS Glue 资源策略:

还可以使用 AWS Glue 控制台来查看和编辑资源策略。有关更多信息,请参阅在 AWS Glue 控制台中使用数据目录设置