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

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

Amazon Glue 基于资源的策略示例

本部分包含基于资源的策略示例,其中包括用于授予跨账户存取的策略。

此示例使用 Amazon Command Line Interface(Amazon CLI)与 Amazon Glue 服务 API 操作进行交互。您可以使用 Amazon Glue 控制台或使用 Amazon SDK 之一执行相同操作。

重要

通过更改 Amazon Glue 资源策略,您可能意外撤消您账户中现有 Amazon Glue 用户的权限并导致意外中断。仅在开发或测试账户中尝试这些示例,并确保它们不会中断任何现有的工作流,然后再进行更改。

将基于资源的策略用于 Amazon Glue 的注意事项

注意

IAM policy 和 Amazon Glue 资源策略都需要几秒钟进行传播。附加新策略后,您可能会注意到,旧策略仍有效,直至新策略传播到整个系统。

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

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

  • "Principal""NotPrincipal" 必须识别有效的现有主体。不允许使用通配符模式(如 arn:aws:iam::account-id:user/*)。

  • 策略中的 "Resource" 块要求所有资源 ARN 均与以下正则表达式语法匹配(其中第一个 %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 都允许使用,但不允许 *

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

  • 策略不能导致创建它的身份被锁定,无法进一步创建或修改策略。

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

使用资源策略控制同一账户中的访问

在此示例中,账户 A 中的管理员用户创建一个资源策略,该策略向账户 A 中的 IAM 用户 Alice 授予对目录的完整访问权限。Alice 未附加 IAM policy。

为执行此操作,管理员用户需运行以下 Amazon CLI 命令。

# Run as admin of Account A $ aws glue put-resource-policy --profile administrator-name --region us-west-2 --policy-in-json '{ "Version": "2012-10-17", "Statement": [ { "Principal": { "AWS": [ "arn:aws:iam::account-A-id:user/Alice" ] }, "Effect": "Allow", "Action": [ "glue:*" ], "Resource": [ "arn:aws:glue:us-west-2:account-A-id:*" ] } ] }'

不是在 Amazon CLI 命令中输入 JSON 策略文档,您可以将策略文档保存在一个文件中,然后在 Amazon CLI 命令中引用该文件路径,前缀为 file://。下面是具体操作示例。

$ echo '{ "Version": "2012-10-17", "Statement": [ { "Principal": { "AWS": [ "arn:aws:iam::account-A-id:user/Alice" ] }, "Effect": "Allow", "Action": [ "glue:*" ], "Resource": [ "arn:aws:glue:us-west-2:account-A-id:*" ] } ] }' > /temp/policy.json $ aws glue put-resource-policy --profile admin1 \ --region us-west-2 --policy-in-json file:///temp/policy.json

在此资源策略传播后,Alice 可以访问账户 A 中的所有 Amazon Glue 资源,如下所示。

# Run as user Alice $ aws glue create-database --profile alice --region us-west-2 --database-input '{ "Name": "new_database", "Description": "A new database created by Alice", "LocationUri": "s3://my-bucket" }' $ aws glue get-table --profile alice --region us-west-2 --database-name "default" --table-name "tbl1"}

为了响应 Alice 的 get-table 调用,Amazon Glue 服务将返回以下内容。

{ "Table": { "Name": "tbl1", "PartitionKeys": [], "StorageDescriptor": { ...... }, ...... } }