Amazon Glue用于访问控制的 资源策略
资源策略是附加到资源而不是 IAM 身份的策略。例如,在 Amazon Simple Storage Service (Amazon S3) 中,资源策略会附上 Amazon S3 存储桶。Amazon Glue 支持使用资源策略控制对数据目录资源的访问。这些资源包括数据库、表、连接和用户定义的函数,以及与这些资源交互的数据目录 API。
资源策略和语法概览
Amazon Glue 资源策略只能用于管理数据目录资源的权限。不能将其附加到任何其他 Amazon Glue 资源,如任务、触发器、开发终端节点、爬网程序或分类器。
资源策略附加到目录,目录是上面提到的各种数据目录资源的虚拟容器。每个 Amazon 账户在 Amazon 区域中有单个目录,其目录 ID 与 Amazon 账户 ID 相同。不能删除或修改目录。
将对目录的所有 API 调用评估资源策略,其中调用方委托人包含在策略文档的 "Principal"
块中。
目前,每个目录只允许使用一个 资源策略,大小限制为 10 KB。
可使用以 JSON 格式编写的策略文档来创建或修改资源策略。策略语法与 IAM 策略相同(请参阅 IAM JSON 策略参考),但存在以下例外:
-
每条策略语句需要一个
"Principal"
或"NotPrincipal"
块。 -
"Principal"
或"NotPrincipal"
必须标识现有的有效 Amazon 根用户或 IAM 用户、角色或组。不允许使用通配符模式(如arn:aws:iam::
)。account-id
:user/* -
策略中的
"Resource"
块要求所有资源 ARN 均与以下正则表达式语法匹配(其中第一个%s
为region
,第二个%s
为account-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*
。 -
与基于身份的策略不同,Amazon Glue 资源策略只能包含属于该策略附加到的目录的资源的 Amazon 资源名称 (ARN)。此类 ARN 总是以
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 所对应的资源不是 Amazon 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" ] } ] }
Amazon Glue 资源策略 API
您可以使用以下 Amazon Glue Data Catalog API 来创建、检索、修改和删除 Amazon Glue 资源策略:
还可以使用 Amazon Glue 控制台来查看和编辑资源策略。有关更多信息,请参阅 在 Amazon Glue 控制台中使用数据目录设置。