Granting Cross-Account Access - AWS Glue
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

Granting Cross-Account Access

授予访问 数据目录 通过帐户的资源,您可以提取、转换和加载(ETL)作业,以查询和加入来自不同帐户的数据。

Methods for Granting Cross-Account Access in AWS Glue

您可以授予对数据的访问权限 AWS 帐户使用 AWS Glue 方法或使用 AWS Lake Formation 跨账户授予。TheThethe AWS Glue 方法使用 AWS Identity and Access Management (IAM)实现细粒度访问控制的策略。 Lake Formation 使用更简单的 GRANT/REVOKE 权限模型类似于 GRANT/REVOKE 关系数据库系统中的命令。

本节介绍使用 AWS Glue 方法。有关使用 Lake Formation 跨账户授予,请参阅 授予LakeFormation权限AWS Lake Formation 开发人员指南.

有两个 AWS Glue 授予跨账户访问资源的方法:

  • Use a 数据目录 resource policy

  • Use an IAM role

使用资源策略授予跨账户访问

以下是授予跨账户访问权限的一般步骤 数据目录 资源政策:

  1. 账户 A 中的管理员(或其他授权身份)将资源策略附加到账户 A 中的 数据目录。此策略将向账户 B 授予对账户 A 的目录中的资源执行操作的具体跨账户权限。

  2. 账户 B 中的管理员将一个 IAM 策略附加到账户 B 中的用户或其他 IAM 身份,用于委派从账户 A 收到的权限。

    现在,账户 B 中的用户或其他身份有权访问账户 A 中的指定资源。

    用户需要许可 both 资源所有者(账户A) and 其父帐户(帐户B)能够访问资源。

授予使用 IAM 角色

以下是授予跨账户访问权限的一般步骤 IAM 角色:

  1. 账户中拥有资源(账户 A)的管理员(或其他授权身份)可创建一个 IAM 角色。

  2. 账户 A 中的管理员会向该角色中附加一个策略,以授予用于访问所涉及资源的跨账户访问权限。

  3. 账户 A 中的管理员将向该角色中附加一个信任策略,用于将其他账户(账户 B)中的 IAM 身份标识为可以代入该角色的委托人。

    如果您需要向 AWS 服务授予代入该角色的权限,则信任策略中的委托人也可以是 AWS 服务委托人。

  4. 现在,账户 B 中的管理员向账户 B 中的一个或多个 IAM 身份委派权限,使其可以代入该角色。这样,账户 B 中的身份便可访问账户 A 中的资源。

有关使用 IAM 要授权权限,请参阅 访问管理IAM 用户指南。有关用户、组、角色和权限的更多信息,请参阅 身份(用户、组和角色)IAM 用户指南.

有关这两种方法的比较,请参阅 IAM角色与基于资源的政策有何不同IAM 用户指南。 AWS Glue 支持两个选项,但资源策略只能授予访问权限 数据目录 资源。

例如,要向账户 B 中的用户 Bob 授予对账户 A 中的数据库 db1 的访问权限,请将以下资源策略附加到账户 A 中的目录。

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

此外,账户 B 还必须将以下 IAM 策略附加至 Bob,然后他才能实际访问账户 A 中的 db1

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:account-A-id:catalog", "arn:aws:glue:us-east-1:account-A-id:database/db1" ] } ] }

Adding or Updating the 数据目录 Resource Policy

您可以添加或更新 AWS Glue 数据目录 使用控制台、API或 AWS Command Line Interface (AWS CLI)。

重要

如果您已经从您的账户中进行了跨账户权限授予, AWS Lake Formation,添加或更新 数据目录 资源策略需要额外步骤。有关详细信息,请参阅 使用胶水和湖形形成管理跨账户权限AWS Lake Formation 开发人员指南.

以确定 Lake Formation 存在跨账户资助,使用 glue:GetResourcePolicies API或 AWS CLI. 如果API返回已经现有的任何策略 数据目录 政策,然后 Lake Formation 资助已存在。有关详细信息,请参阅 使用GetResourcePoliciesAPI查看所有跨账户授予AWS Lake Formation 开发人员指南.

添加或更新 数据目录 资源策略(控制台)

  1. 通过以下网址打开 AWS Glue 控制台:https://console.amazonaws.cn/glue/

    以 AWS Identity and Access Management (IAM)管理用户或用户拥有 glue:PutResourcePolicy 权限。

  2. 在导航窗格中,选择 Settings

  3. 数据目录设置 页面, 权限,将资源策略粘贴到文本区域。然后选择 Save (保存)

    如果控制台显示警报,则表示策略中的权限除了使用 Lake Formation,选择 继续.

添加或更新 数据目录 资源政策(AWS CLI)

Making a Cross-Account API Call

所有 AWS Glue 数据目录 操作都有一个 CatalogId 字段。如果已授予所需的权限来启用跨账户访问,则发起人可以跨账户进行 数据目录 API 调用。发起人通过传递 CatalogId 中的目标 AWS 账户 ID,以访问目标账户中的资源。

如果没有提供 CatalogId 值,AWS Glue 将默认使用调用方自己的账户 ID,但该调用不是跨账户调用。

Making a Cross-Account ETL Call

有些 AWS Glue PySpark 和 Scala API 具有目录 ID 字段。如果已授予启用跨账户访问所需的全部权限,ETL 任务可通过在目录 ID 字段中传递目标 AWS 账户 ID 来对 API 操作进行跨账户的 PySpark 和 Scala 调用,以访问目标账户中的 数据目录 资源。

如果没有提供目录 ID 值,AWS Glue 将默认使用调用方自己的账户 ID,但该调用不是跨账户调用。

对于支持 catalog_id 的 PySpark API,请参阅 GlueContext 类。对于支持 catalogId 的 Scala API,请参阅 AWS Glue Scala GlueContext API

以下示例显示被授权者运行 ETL 任务所需的权限。在本示例中,grantee-account-idcatalog-id 客户运行工作和 grantor-account-id 资源所有者。此示例用于授予对授予者账户中所有目录资源的权限。为限制所授予资源的范围,您可以提供目录、数据库、表和连接的特定 ARN。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetConnection", "glue:GetDatabase", "glue:GetTable", "glue:GetPartition" ], "Principal": {"AWS": ["arn:aws:iam:grantee-account-id:root"]}, "Resource": [ "arn:aws:glue:us-east-1:grantor-account-id:*" ] } ] }
注意

如果授予者账户中的某个表指向同在该账户中的一个 Amazon S3 位置,则授予者账户中用于运行 ETL 作业的 IAM 角色必须有权列出和获取授予者账户中的对象。

如果账户 A 中的客户端已经获得创建和运行 ETL 作业的权限,则设置用于跨账户访问的 ETL 作业的基本步骤如下:

  1. 允许跨账户数据访问(如果已设置 Amazon S3 跨账户访问权限,则可跳过此步骤)。

    1. 更新账户 B 中的 Amazon S3 存储桶策略,以允许来自账户 A 的跨账户访问

    2. 更新账户 A 中的 IAM 策略,以允许访问账户 B 中的存储桶。

  2. 允许跨账户的 数据目录 访问。

    1. 创建或更新账户 B 中附加到 数据目录 的资源策略,以允许来自账户 A 的访问。

    2. 更新账户 A 中的 IAM 策略,以允许访问账户 B 中的 数据目录。

Cross-Account CloudTrail Logging

当 AWS Glue 提取、转换和加载(ETL)作业访问 数据目录 表共享 AWS Lake Formation 跨账户资助,还有 AWS CloudTrail 记录行为。

对于本次讨论, AWS 共享该表的帐户是所有者帐户,并且该表的共享帐户是接收方帐户。当收件人帐户中的ETL作业访问所有者帐户中的表中的数据时,添加到收件人帐户日志的数据访问的CloudTrail事件将被复制到所有者帐户 CloudTrail 日志。这样,所有者帐户可以跟踪各个接收方帐户的数据访问。默认情况下, CloudTrail 事件不包括人可读的主要标识符(主要的ARN)。接收方帐户中的管理员可以选择在日志中包含主要ARN。

有关详细信息,请参阅 跨帐户CloudTrail日志记录AWS Lake Formation 开发人员指南.

AWS Glue Resource Ownership and Operations

您的 AWS 账户对在该账户下创建的 AWS Glue 数据目录 资源具有所有权,而无论创建资源的人员是谁。具体来说,资源的所有者是AWS账户 主要实体 (即,AWS帐户root用户, IAM 用户,或 IAM 角色) authenticated 该资源的创建请求;例如:

  • If you use your AWS account root user credentials to create a table in your 数据目录, your AWS account is the owner of the resource.

  • If you create an IAM user in your AWS account and grant permissions to that user to create a table, every table that the user creates is owned by your AWS account, to which the user belongs.

  • If you create an IAM role in your AWS account with permissions to create a table, anyone who can assume the role can create a table. But again, your AWS account owns the table resources that are created using that role.

对于每个 AWS Glue 资源,该服务都定义一组适用于它的 API 操作。为了授予执行这些 API 操作的权限,AWS Glue 定义了一组您可以在策略中指定的操作。某些 API 操作可能需要多个操作的权限才能执行 API 操作。

Cross-Account Resource Ownership and Billing

当一个 AWS 账户(账户 A)中的用户在其他账户(账户 B)中创建新资源(如数据库)时,该资源的所有者将为账户 B,即创建资源所在的账户。账户 B 中的管理员将自动获得访问这一新资源的完整权限,包括读取、写入和向第三个账户授予访问权限。账户 A 中的用户只有获得账户 B 授予的相应权限后,才能访问他们刚刚创建的资源。

与新资源直接关联的存储成本和其他成本将计入账户 B,即资源所有者。创建资源的用户的请求成本将计入请求者的账户,即账户 A。

有关 AWS Glue 计费和定价的更多信息,请参阅 AWS 定价原理

Cross-Account Access Limitations

AWS Glue 跨账户访问具有以下限制:

  • Cross-account access to AWS Glue is not allowed if the resource owner account has not migrated the Amazon Athena data catalog to AWS Glue. You can find the current migration status using the GetCatalogImportStatus (get_catalog_import_status). For more details on how to migrate an Athena catalog to AWS Glue, see Upgrading to the AWS Glue Data Catalog Step-by-Step in the Amazon Athena User Guide.

  • Cross-account access is only supported for 数据目录 resources, including databases, tables, user-defined functions, and connections.

  • Cross-account access to the 数据目录 is not supported when using an AWS Glue crawler, or Amazon Athena.