

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

# Lake Formation 中的跨账户数据共享
<a name="cross-account-permissions"></a>

Lake Formation 跨账户功能允许用户安全地跨多个 AWS 组织共享分布式数据湖 AWS 账户，或者直接与其他账户中的 IAM 委托人共享分布式数据湖，从而提供对数据目录元数据和底层数据的精细访问权限。大型企业通常使用多个账户 AWS 账户，其中许多账户可能需要访问由单个账户管理的数据湖 AWS 账户。用户和 AWS Glue 提取、转换和加载 (ETL) 作业可以跨多个账户查询和联接表，但仍然可以利用 Lake Formation 表级和列级数据保护。

当您将数据目录资源的 Lake Formation 权限授予外部账户或直接授予其他账户中的 IAM 委托人时，Lake Formation 会使用 AWS Resource Access Manager (AWS RAM) 服务共享该资源。如果被授权者账户与授予者账户在同一个组织中，则被授权者立即可以使用共享资源。如果被授权者账户不在同一个组织中，则会向被授权者账户 AWS RAM 发送邀请，要求其接受或拒绝资源授予。然后，要使共享资源可用，被授权者账户中的数据湖管理员必须使用 AWS RAM 控制台或接受 AWS CLI 邀请。

 Lake Formation 支持在混合访问模式下与外部账户共享数据目录资源。混合访问模式使您可以灵活地且有选择性地为 AWS Glue Data Catalog中的数据库和表启用 Lake Formation 权限。  在混合访问模式下，您现在有了增量路径，可您为一组特定的用户设置 Lake Formation 权限，而不会中断其他现有用户或工作负载的权限策略。

有关更多信息，请参阅 [混合访问模式](hybrid-access-mode.md)。

**直接跨账户共享**  
授权主体可以与外部账户中的 IAM 主体显式共享资源。当账户所有者想要控制外部账户中谁可以访问资源时，此功能非常有用。IAM 主体获得的权限将是直接授权和向下级联到主体的账户级别授予的并集。只有权限授予的接收者才能查看直接跨账户授予。获得资源共享的主体不能与其他主体共享该资源。

**共享数据目录资源的方法**  
通过单个 Lake Formation 授权操作，您可以授予对以下数据目录资源的跨账户权限。
+ 数据库
+ 单个表（带有可选列筛选功能）
+ 一些选定表
+ 数据库中的所有表（通过使用“所有表”通配符）

您可以通过两种方式与另一账户中的其他用户 AWS 账户 或另一账户中的 IAM 委托人共享您的数据库和表。
+ Lake Formation 基于标签的访问控制 (LF-TBAC)（推荐）

  Lake Formation 基于标签的访问控制是一种授权策略，它根据属性来定义权限。您可以使用基于标签的访问控制与外部 IAM 委托人、Organizations 和组织单位 () 共享数据目录资源（OUs数据库、 AWS 账户表和列）。在 Lake Formation 中，这些属性被称为“LF 标签”。有关更多信息，请参阅[使用 Lake Formation 基于标签的访问控制管理数据湖](https://docs.aws.amazon.com/lake-formation/latest/dg/managing-dl-tutorial.html)。
**注意**  
授予数据目录权限的 LF-TBAC 方法用于 AWS Resource Access Manager 跨账户授权。  
Lake Formation 现在支持使用 LF-TBAC 方法向组织和组织单位授予跨账户权限。  
要启用此功能，您需要将**跨账户版本设置**更新为**版本 3** 或更高版本。  
有关更多信息，请参阅 [更新跨账户数据共享版本设置](optimize-ram.md)。
+ Lake Formation 命名资源

  使用命名资源方法的 Lake Formation 跨账户数据共享允许您向外部 AWS 账户、IAM 委托人、组织或组织单位授予 Lake Formation 权限以及数据目录表和数据库的授予选项。授权操作可自动将这些资源共享。

**注意**  
您还可以允许 AWS Glue 爬网程序使用 Lake Formation 凭据访问其他账户中的数据存储。有关更多信息，请参阅 AWS Glue 开发者指南中的[跨账户抓取](https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html#cross-account-crawling)。

Athena 和 Amazon Redshift Spectrum 等集成服务需要资源链接才能在查询中包含共享资源。有关资源链接的更多信息，请参阅[资源链接在 Lake Formation 中的工作原理](resource-links-about.md)。

有关注意事项和限制，请参阅[跨账户数据共享最佳实践和注意事项](cross-account-notes.md)。

**Topics**
+ [先决条件](cross-account-prereqs.md)
+ [更新跨账户数据共享版本设置](optimize-ram.md)
+ [跨外部账户 AWS 账户 或来自外部账户的 IAM 委托人共享数据目录表和数据库](cross-account-data-share-steps.md)
+ [授予对与您的账户共享的数据库或表的权限](regranting-shared-resources.md)
+ [授予资源链接权限](granting-link-permissions.md)
+ [访问共享表的基础数据](cross-account-read-data.md)
+ [跨账户 CloudTrail 日志](cross-account-logging.md)
+ [使用 AWS Glue 和 Lake Formation 管理跨账户权限。](hybrid-cross-account.md)
+ [使用 GetResourceShares API 操作查看所有跨账户授权](cross-account-getresourcepolicies.md)

**相关主题**  
[Lake Formation 权限概述](lf-permissions-overview.md)
[访问和查看共享数据目录表和数据库](viewing-shared-resources.md)
[创建资源链接](creating-resource-links.md)
[对跨账户访问问题进行故障排除](troubleshooting.md#trouble-cross-account)

# 先决条件
<a name="cross-account-prereqs"></a>

在您的 AWS 账户可以与其他账户或另一个账户中的委托人共享数据目录资源（目录、数据库和表）之前，以及访问与您的账户共享的资源之前，必须满足以下先决条件。

**跨账户数据共享的一般要求**
+ 要在混合访问模式下共享 Data Catalog 数据库和表，以及共享联合目录中的对象，您需要将**跨账户版本设置**更新为**版本 4**。
+ 在向数据目录资源授予跨账户权限之前，必须撤销该 `IAMAllowedPrincipals` 组对该资源的所有 Lake Formation 权限。如果调用主体拥有跨账户访问资源的权限，并且对于该资源存在 `IAMAllowedPrincipals` 权限，则 Lake Formation 会引发 `AccessDeniedException`。

  仅当在 Lake Formation 模式下注册基础数据位置时，此要求才适用。如果在混合模式下注册数据位置，则对于共享数据库或表可以存在 `IAMAllowedPrincipals` 组权限。
+  对于包含要共享的表的数据库，必须防止新表的默认授权 `Super` 为 `IAMAllowedPrincipals`。在 Lake Formation 控制台上，编辑数据库并关闭 “**仅对该数据库中的新表使用 IAM 访问控制”，或者输入以下 AWS CLI 命令（`database`替换为**数据库名称）。如果基础数据位置是在混合访问模式下注册的，则无需更改此默认设置。在混合访问模式下，Lake Formation 允许您有选择地对亚马逊 S3 和同一资源强制执行 Lake Formati AWS Glue on 权限和 IAM 权限策略。

  ```
  aws glue update-database --name database --database-input '{"Name":"database","CreateTableDefaultPermissions":[]}'
  ```
+ 要授予跨账户权限，授予者必须对AWS Glue和 AWS RAM 服务具有必需的 AWS Identity and Access Management (IAM) 权限。 AWS 托管策略`AWSLakeFormationCrossAccountManager`授予所需的权限。

  使用接收资源共享的账户中的数据湖管理员 AWS RAM 必须遵守以下附加策略。它允许管理员接受 AWS RAM 资源共享邀请。它还允许管理员启用与组织的资源共享。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "ram:AcceptResourceShareInvitation",
                  "ram:RejectResourceShareInvitation",
                  "ec2:DescribeAvailabilityZones",
                  "ram:EnableSharingWithAwsOrganization"
              ],
              "Resource": "*"
          }
      ]
  }
  ```

------
+ 如果要与 AWS Organizations 或组织单位共享数据目录资源，则必须在中启用与组织共享 AWS RAM。

  有关如何启用与组织共享的信息，请参阅*《AWS RAM 用户指南》*中的[启用与 AWS 组织共享](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-orgs)。

  您必须拥有用于启用与组织的共享所需的 `ram:EnableSharingWithAwsOrganization` 权限。
+ 要直接与其他账户中的 IAM 主体共享资源，您需要将**跨账户版本设置**更新为**版本 3**。此设置在**数据目录设置**页面上提供。如果您使用的是**版本 1**，请参阅有关更新设置 [更新跨账户数据共享版本设置](optimize-ram.md) 的说明。
+ 您不能与其他账户共享使用 AWS Glue 服务托管密钥加密的数据目录资源。您只能共享使用客户加密密钥加密的数据目录资源，并且接收资源共享的账户必须对数据目录加密密钥拥有相应权限才能解密对象。

**使用 LF-TBAC 要求进行跨账户数据共享**
+  要 AWS Organizations 与组织单位 (OUs) 共享数据目录资源，您需要将**跨账户版本设置更新为版本** **3** 或更高版本。
+ 要使用“版本 3”这一**跨账户版本设置**共享数据目录资源，授予者需要拥有在您的账户中的 AWS 托管策略 `AWSLakeFormationCrossAccountManager` 中定义的 IAM 权限。
+ 如果您使用的**跨账户版本设置**是“版本 1”或“版本 2”，则必须具有启用 LF-TBAC 的数据目录资源策略 (`glue:PutResourcePolicy`)。有关更多信息，请参阅 [使用 AWS Glue 和 Lake Formation 管理跨账户权限。](hybrid-cross-account.md)。
+ 如果您当前在使用 AWS Glue 数据目录资源策略共享资源，并且想要使用“版本 3”这一**跨账户版本设置**授予跨账户权限，则必须使用 `glue:PutResourcePolicy` API 操作在数据目录设置中添加 `glue:ShareResource` 权限，如[使用 AWS Glue 和 Lake Formation 管理跨账户权限。](hybrid-cross-account.md)一节所示。如果您的账户未进行跨账户授权，即未使用 AWS Glue 数据目录资源策略（版本 1 和版本 2 使用 `glue:PutResourcePolicy` 权限）授予跨账户访问权限，则无需此策略。

  ```
  {
        "Effect": "Allow",
        "Action": [
          "glue:ShareResource"
        ],
        "Principal": {"Service": [
          "ram.amazonaws.com"
        ]},
        "Resource": [
          "arn:aws:glue:<region>:<account-id>:table/*/*",
          "arn:aws:glue:<region>:<account-id>:database/*",
          "arn:aws:glue:<region>:<account-id>:catalog"
        ]
      }
  ```
+ 如果您的账户已使用 AWS Glue Data Catalog 资源策略进行跨账户共享，并且您当前在使用命名资源方法或**跨账户设置**为“版本 3”的 LF-TBAC 来共享资源（使用 AWS RAM 共享资源），则在调用 `glue:PutResourcePolicy` API 操作时必须将 `EnableHybrid` 参数设置为 `'true'`。有关更多信息，请参阅 [使用 AWS Glue 和 Lake Formation 管理跨账户权限。](hybrid-cross-account.md)。

**访问共享资源的每个账户所需的设置**
+ 如果您与共享资源 AWS 账户，则消费者账户中必须至少有一个用户是数据湖管理员才能查看共享资源。有关如何创建数据湖管理员的信息，请参阅[创建数据湖管理员](initial-lf-config.md#create-data-lake-admin)。

  数据湖管理员可以向账户中的其他主体授予对共享资源的 Lake Formation 权限。在数据湖管理员向其他主体授予对共享资源的权限之前，这些主体无法访问共享资源。
+ Athena 和 Redshift Spectrum 等集成服务需要资源链接才能在查询中包含共享资源。主体需要在其数据目录中创建指向其他 AWS 账户中共享资源的资源链接。有关资源链接的更多信息，请参阅[资源链接在 Lake Formation 中的工作原理](resource-links-about.md)。
+ 当直接与 IAM 主体共享资源时，要使用 Athena 查询表，则主体需要创建资源链接。要创建资源链接，主体需要 Lake Formation `CREATE_TABLE` 或 `CREATE_DATABASE` 权限，以及 `glue:CreateTable` 或 `glue:CreateDatabase` IAM 权限。

  如果制作者账户与同一主体或其他主体共享同一数据库下的不同表，则该主体立即可以查询该表。

**注意**  
对于数据湖管理员和数据湖管理员已向其授予权限的主体，共享资源在数据目录中显示为本地（自有）资源。提取、转换、加载 (ETL) 作业可以访问共享资源的基础数据。  
对于共享资源，Lake Formation 控制台上的**表**和**数据库**页面会显示所有者的账户 ID。  
访问共享资源的底层数据时，将在共享资源接收者的账户和资源所有者的账户中生成 CloudTrail 日志事件。 CloudTrail 事件可以包含访问数据的委托人的 ARN，但前提是接收方账户选择在日志中包含委托人 ARN。有关更多信息，请参阅 [跨账户 CloudTrail 日志](cross-account-logging.md)。

# 更新跨账户数据共享版本设置
<a name="optimize-ram"></a>

 不时 AWS Lake Formation 更新跨账户数据共享设置，以区分对 AWS RAM 使用情况所做的更改，并支持对跨账户数据共享功能所做的更新。当 Lake Formation 执行此操作时，它会创建新版本的**跨账户版本设置**。

## 跨账户版本设置之间的主要区别
<a name="cross-account-version-diff"></a>

有关如何在不同**跨账户版本设置**下进行跨账户数据共享的更多信息，请参阅以下章节。

**注意**  
要与其他账户共享数据，授予者必须拥有 `AWSLakeFormationCrossAccountManager` 托管 IAM 策略权限。这是所有版本的先决条件。  
更新**跨账户版本设置**不会影响接收方对共享资源的权限。这适用于从版本 1 更新为版本 2、从版本 2 更新为版本 3 以及从版本 1 更新为版本 3 的情况。更新版本时，请参阅下面列出的注意事项。

**版本 1**  
*命名资源方法：*将授予的每个跨账户 Lake Formation 权限映射到一个 AWS RAM 资源共享。用户（授予者角色或主体）不需要其他权限。  
*LF-TBAC 方法：跨账户* Lake Formation 权限授予不 AWS RAM 用于共享数据。您必须拥有 `glue:PutResourcePolicy` 权限。  
*更新版本的好处：*初始版本 - 不适用。  
*更新版本时的注意事项：*初始版本 - 不适用

**版本 2**  
*命名资源方法：*通过将多个跨账户权限授予映射到一个 AWS RAM 资源共享来优化 AWS RAM 资源共享的数量。用户不需要额外的权限。  
*LF-TBAC 方法：跨账户* Lake Formation 权限授予不 AWS RAM 用于共享数据。您必须拥有 `glue:PutResourcePolicy` 权限。  
*更新版本的好处：*通过优化 AWS RAM 容量利用率实现可扩展的跨账户设置。  
*更新版本时的注意事项：*想要授予跨账户 Lake Formation 权限的用户必须拥有`AWSLakeFormationCrossAccountManager` AWS 托管策略中的权限。否则，您需要拥有 `ram:AssociateResourceShare` 和 `ram:DisassociateResourceShare` 权限才能成功与其他账户共享资源。

**版本 3**  
*命名资源方法：*通过将多个跨账户权限授予映射到一个 AWS RAM 资源共享来优化 AWS RAM 资源共享的数量。用户不需要额外的权限。  
*LF-TBAC 方法：Lake Formation* 用于 AWS RAM 跨账户拨款。用户必须在`glue:PutResourcePolicy`权限中添加 glue: ShareResource 语句。收件人必须接受来自的资源共享邀请 AWS RAM。  
*更新版本的好处：*支持以下功能：  
+ 允许与外部账户中的 IAM 主体显式共享资源。

  有关更多信息，请参阅 [授予对数据目录资源的权限](granting-catalog-permissions.md)。
+ 使用 LF-TBAC 方法向 Organizations 或组织单位 () 启用跨账户共享。OUs
+ 消除了维护跨账户授予额外 AWS Glue 政策的开销。
*更新版本时的注意事项：*使用 LF-TBAC 方法共享资源时，如果授予者使用的版本低于版本 3，而接收者使用的是版本 3 或更高版本，则授予者会收到以下错误信息：“跨账户授权请求无效。使用者账户可以选择使用跨账户版本：v3。请更新`CrossAccountVersion``DataLakeSetting`至最低版本 v3（服务： AmazonDataCatalog；状态码：400；错误代码： InvalidInputException）”。但是，如果授予者使用版本 3，而接收者使用版本 1 或版本 2，那么使用 LF-Tags 的跨账户授权就会成功完成。  
使用命名资源方法进行的跨账户授权在不同版本之间是兼容的。即使授予者账户使用的是旧版本（版本 1 或 2），而接收者账户使用的是新版本（版本 3 或更高版本），跨账户访问功能也能无缝运行，不会出现任何兼容性问题或错误。  
要直接与其他账户中的 IAM 主体共享资源，只有授予者需要使用版本 3。  
使用 LF-TBAC 方法进行的跨账户授权要求用户的账户中具有 AWS Glue Data Catalog 资源策略。当您更新为版本 3 时，LF-TBAC 会授权使用 AWS RAM。要允许 AWS RAM 基于跨账户的授予成功，您必须将该`glue:ShareResource`声明添加到现有的 Data Catalog 资源策略中，如[使用 AWS Glue 和 Lake Formation 管理跨账户权限。](hybrid-cross-account.md)部分所示。

**版本 4**  
授予者需要版本 4 或更高版本才能在混合访问模式下共享 Data Catalog 资源，或共享联合目录中的对象。

**第 5 版**  
跨账户版本 5 增强了跨账户资源共享，使您能够将无限数量的表共享给另一个账户，从而消除了以前每种资源类型的资源关联限制。首先，请通过 Lake Formation 控制台或 API 升级到跨账户版本 5。任何新的跨账户权限授予都将在资源共享中自动使用通配符模式，而不是单个资源关联。所有现有的跨账户共享将继续发挥作用，所有现有的 Lake Formation 都 APIs 保持兼容。  
*更新版本的好处：*跨账户 v5 增强了跨账户共享，允许您跨账户共享数十万张表格。  
*更新版本时的注意事项：版本* 5 升级后的新授权将向现有资源管理器资源共享添加通配符 AWS 资源模式或使用通配符模式创建新共享。一旦升级到版本 5，就不支持降级。

## 优化 AWS RAM 资源共享
<a name="optimize-version"></a>

跨账户赠款的新版本（第 2 版及更高版本）以最佳方式利用 AWS RAM 容量来最大限度地提高跨账户使用率。当您与外部 AWS 账户 或 IAM 委托人共享资源时，Lake Formation 可能会创建新的资源共享或将该资源与现有共享关联。通过与现有共享关联，Lake Formation 减少了用户需要接受的资源共享邀请的数量。版本 5 通过使用基于通配符的资源模式而不是单个资源关联进一步优化 RAM 使用情况，从而显著减少每个资源共享的资源关联。

## 通过 TBAC 启用 AWS RAM 共享或直接与委托人共享资源
<a name="ram-tbac-direct-iam-version"></a>

要直接与其他账户中的 IAM 主体共享资源或者为组织或组织单位启用 TBAC 跨账户共享，您需要将**跨账户版本设置**更新为版本 3。有关 AWS RAM 资源限制的更多信息，请参阅[跨账户数据共享最佳实践和注意事项](cross-account-notes.md)。

### 更新跨账户版本设置所需的权限
<a name="req-permissions-version-update"></a>

 如果跨账户权限授予者拥有 `AWSLakeFormationCrossAccountManager` 托管 IAM 策略权限，则无需为跨账户权限授予者角色或主体进行额外的权限设置。但是，如果跨账户授予者未使用托管策略，则授予者角色或主体应授予以下 IAM 权限，新版本的跨账户授权才能成功完成。

------
#### [ JSON ]

****  

```
  
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "VisualEditor1",
      "Effect": "Allow",
      "Action": [
         "ram:AssociateResourceShare",
         "ram:DisassociateResourceShare",
         "ram:GetResourceShares"
       ],
     "Resource": "*",
     "Condition": {
       "StringLike": {
         "ram:ResourceShareName": "LakeFormation*"
        }
      }
    }
  ]
}
```

------

## 启用新版本
<a name="version-update-steps"></a>

按照以下步骤通过 AWS Lake Formation控制台或更新**跨账户版本设置** AWS CLI。

------
#### [ Console ]

1. 在**数据目录**设置页面的**跨账户版本设置下选择版本 **2**、版本** ****3**、版本 4** **或版本 5**。如果您选择**版本 1**，Lake Formation 将使用默认的资源共享模式。  
![\[显示了账户中所有 LF 标签的权限的屏幕。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/cross-account-version-setting.png)

1. 选择**保存**。

------
#### [ AWS Command Line Interface (AWS CLI) ]

使用`put-data-lake-settings` AWS CLI 命令设置`CROSS_ACCOUNT_VERSION`参数。可接受的值为 1、2、3、4 和 5。

```
aws lakeformation put-data-lake-settings --region us-east-1 --data-lake-settings file://settings
{
    "DataLakeAdmins": [
        {
            "DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/test"
        }
    ],
    "CreateDatabaseDefaultPermissions": [],
    "CreateTableDefaultPermissions": [],
    "Parameters": {
        "CROSS_ACCOUNT_VERSION": "3"
    }
}
```

------

**重要**  
选择**版本 2** 或**版本 3** 后，所有新的**命名资源**授权都将通过新的跨账户授权模式进行。为了以最佳方式使用现有跨账户共享的 AWS RAM 容量，我们建议您撤销旧版本的授权，并在新模式下重新授权。

# 跨外部账户 AWS 账户 或来自外部账户的 IAM 委托人共享数据目录表和数据库
<a name="cross-account-data-share-steps"></a>

本节包括有关如何向外部账户、IAM 委托人、组织或组织单位授予数据目录资源的跨 AWS 账户权限的说明。 AWS 授权操作可自动将这些资源共享。

**Topics**
+ [使用基于标签的访问控制共享数据](cross-account-TBAC.md)
+ [使用命名资源方法进行跨账户数据共享](cross-account-named-resource.md)

# 使用基于标签的访问控制共享数据
<a name="cross-account-TBAC"></a>

AWS Lake Formation 基于标签的访问控制 (LF-TBAC) 是一种基于属性定义权限的授权策略。以下步骤说明如何使用 LF 标签授予跨账户权限。

**需要在 producer/grantor 账户上进行设置**

1. 添加 LF 标签。

   1. 以数据湖管理员或 LF 标签创建者身份登录 Lake Formation 控制台。

   1. 在左侧导航栏中选择**权限**，然后选择 **LF 标签和权限**。

   1. 选择**添加 LF 标签**。

      有关创建 LF 标签的详细说明，请参阅[创建 LF 标签](TBAC-creating-tags.md)。

1. **向您的账户或**外部** and/or 账户中的 IAM 委托人授予 Describe Associate 权限 **LF-Tag 键值**对。**

   对 **LF 标签键值**对授予权限，让主体可以查看 LF 标签并将其分配给 Data Catalog 资源（数据库、表和列）。

1. 接下来，数据湖管理员或具有 **Associate** 权限的 IAM 主体可以将 LF 标签分配给数据库、表或列。有关更多信息，请参阅 [将 LF 标签分配给数据目录资源](TBAC-assigning-tags.md)。

1. 接下来，使用 LF 标签表达式向外部账户授予数据权限。通过这种方式，被授权者或权限的接收者能够访问使用相同键和值标记的 Data Catalog 资源。

   1. 在导航窗格中，选择**权限**和**数据权限**。

   1. 选择**授权**。

   1. 如果是向外部主体进行直接的跨账户授予，则在**授予权限**页面上，对于**主体**，选择**外部账户**，然后输入被授权者 AWS 账户 ID 或主体的 IAM 角色或主体的 Amazon 资源名称（ARN）（主体 ARN）。输入账户 ID 后，您需要按 **Enter** 键。  
![\[指定了外部账户和 LF 标签键值对的授予权限屏幕。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/cross-acct-grant-tags.png)

   1. 对于 **LF 标签或目录资源**，选择**通过 LF 标签匹配的资源（推荐）**。

      1. 选择选项 **LF 标签键值对**或**已保存的 LF 标签表达式**。

      1. **如果您选择 **LF 标签键值对**，请输入**与被授权者账户共享的 Data Catalog 资源关联的 **LF 标签**的键和值。

         被授权者将获得在 LF 标签表达式中分配了匹配 LF 标签的 Data Catalog 资源的权限。如果 LF 标签表达式为每个标签键指定多个值，则任何一个标签值都可以是匹配项。

   1. 选择要对与 LF 标签表达式匹配的资源授予的数据库级或表级权限。
**重要**  
由于数据湖管理员必须向被授权者账户中的主体授予对共享资源的权限，因此必须始终使用授予选项授予跨账户权限。

      有关更多信息，请参阅 [使用控制台授予 LF 标签权限](TBAC-granting-tags-console.md)。
**注意**  
对于获得直接跨账户授权的主体，将不提供**可授予的权限**选项。

**需要在 receiving/grantee 账户上进行设置**

1. 以使用者账户的数据湖管理员身份登录 Lake Formation 控制台。

1.  接下来，在使用者账户中接收资源共享。

   1.  打开控制 AWS RAM 台。

   1.  在导航窗格中的**与我共享**下面，选择**资源共享**。

   1.  选择资源共享，选择**接受资源共享**。

1. 当您与其他账户共享资源时，该资源仍属于制作者账户，并且在 Athena 控制台中不可见。要使资源在 Athena 控制台中可见，您需要创建一个指向共享资源的资源链接。有关创建资源链接的说明，请参阅[创建指向共享数据目录表的资源链接](create-resource-link-table.md)和[创建指向共享数据目录数据库的资源链接](create-resource-link-database.md)

   1.  选择 Data Catalog 下面的**数据库**或**表**。

   1. 在 Databases/Tables 页面上，选择**创建**，**资源链接**。

   1. 为数据库资源链接输入以下信息：
      + **资源链接名称**：资源链接的唯一名称。
      + **目标目录**：您要在其中创建资源链接的目录。
      + **共享数据库区域**：这是当您在另一个区域中创建资源链接时，要与您共享的数据库的区域。
      + **共享数据库**：选择共享数据库。
      + **共享数据库的目录 ID**：输入共享数据库的目录 ID。

   1.  选择**创建**。您可以在数据库列表中看到新创建的资源链接。

   同样，您可以创建指向共享表的资源链接。

1. 现在，向正在共享资源的 IAM 主体授予对资源链接的 **Describe** 权限。

   1. 在**数据库/表**页面上，选择资源链接，然后在**操作**菜单上选择**授予**。

   1. 在**授予权限**部分，选择 **IAM 用户和角色**。

   1. 选择用于向资源链接授予访问权限的 IAM 角色。

   1. 在**资源链接权限**部分，选择 **Describe**。

   1. 选择**授权**。

1. 接下来，向使用者账户中的主体授予 **LF 标签键值权限**。

   您应该能够在 Lake Formation 控制台的**权限**、**LF 标签和权限**下面，在使用者账户中找到与您共享的 LF 标签。您可以将授权人共享的标签关联到从授权人账户共享的资源上，这些资源包括：数据库、表和列。您可以进一步向其他主体授予对这些资源的权限。  
![\[显示了账户中 LF 标签的权限的屏幕。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/lf-tag-permissions.png)

   1.  在导航窗格中**权限**下的**数据权限**中，选择**授予**。

   1.  在**授予权限**页面上，选择 **IAM 用户和角色**。

   1. 接下来，选择您账户中的 IAM 用户和角色以授予对共享数据库/表的访问权限。

   1. 接下来，在 **LF 标签或目录资源**中，选择**通过 LF 标签匹配的资源**。

   1.  接下来，选择与您共享的 LF 标签的键和值。

   1.  接下来，选择要向 IAM 用户和角色授予的数据库和表权限。您也可以选择**可授予的权限**，让 IAM 用户和角色可以向其他用户/角色授予权限。

   1.  选择**授权**。

   1. 您可以在 Lake Formation 控制台的**数据权限**下查看权限授予。

# 使用命名资源方法进行跨账户数据共享
<a name="cross-account-named-resource"></a>

您可以直接向其他 AWS 账户中的委托人授予权限，也可以向外部 AWS 账户 或 AWS Organizations授予权限。向组织或组织单位授予 Lake Formation 权限等同于向该组织或组织单位 AWS 账户 中的每个人授予权限。

向外部账户或组织授予权限时，必须包括**可授予的权限**选项。只有外部账户中的数据湖管理员才能访问共享资源，直到管理员向外部账户中的其他主体授予对共享资源的权限。

**注意**  
直接向外部账户中的 IAM 主体授予权限时，**可授予的权限**选项不受支持。

请按照[使用命名资源方法授予数据库权限](granting-database-permissions.md)中的说明，使用命名资源方法来授予跨账户权限。

 以下视频演示了如何使用 Lake Formation 与 AWS 组织共享数据。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/S-Mdcmq6oPM?controls=0&/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/S-Mdcmq6oPM?controls=0&)


# 授予对与您的账户共享的数据库或表的权限
<a name="regranting-shared-resources"></a>

将属于另一个 AWS 账户的数据目录资源与您的 AWS 账户共享后，作为数据湖管理员，您可以向账户中的其他委托人授予共享资源的权限。但是，您不能向其他 AWS 账户或组织授予对该资源的权限。

您可以使用 AWS Lake Formation 控制台、API 或 AWS Command Line Interface (AWS CLI) 来授予权限。

**授予对共享数据库的权限（命名资源方法、控制台）**
+ 按照[使用命名资源方法授予数据库权限](granting-database-permissions.md)中的说明进行操作。在 **LF 标签或目录资源**下的**数据库**列表中，确保选择的是外部账户中的数据库，而不是数据库的资源链接。

  如果您在数据库列表中看不到该数据库，请确保您已接受关于该数据库的 AWS Resource Access Manager (AWS RAM) 资源共享邀请。有关更多信息，请参阅 [接受来自的资源共享邀请 AWS RAM](accepting-ram-invite.md)。

  另外，对于 `CREATE_TABLE` 和 `ALTER` 权限，请按照[授予数据位置权限（同一账户）](granting-location-permissions-local.md)中的说明进行操作，并确保在**注册账户位置**字段中输入所有者账户 ID。

**授予对共享表的权限（命名资源方法、控制台）**
+ 按照[使用命名资源方法授予表权限](granting-table-permissions.md)中的说明进行操作。在 **LF 标签或目录资源**下的**数据库**列表中，确保选择的是外部账户中的数据库，而不是数据库的资源链接。

  如果您在表列表中看不到该表，请确保您已接受关于该表的 AWS RAM 资源共享邀请。有关更多信息，请参阅 [接受来自的资源共享邀请 AWS RAM](accepting-ram-invite.md)。

  另外，对于 `ALTER` 权限，请按照[授予数据位置权限（同一账户）](granting-location-permissions-local.md)中的说明进行操作，并确保在**注册账户位置**字段中输入所有者账户 ID。

**授予对共享资源的权限（LF-TBAC 方法、控制台）**
+ 按照[授予数据目录权限](granting-catalog-perms-TBAC.md#granting-cat-perms-TBAC-console)中的说明进行操作。在 **LF 标签或目录资源**部分，授予外部账户向您的账户授予的精确 LF 标签表达式或该表达式的子集。

  例如，如果外部账户使用授权选项向您的账户授予了 LF 标签表达式 `module=customers AND environment=production`，则作为数据湖管理员，您可以向您账户中的主体授予相同的表达式，即 `module=customers` 或 `environment=production`。您只能授予通过 LF 标签表达式授予的对资源的相同或部分 Lake Formation 权限（例如 `SELECT`、`ALTER` 等）。

**要授予共享表（命名为资源方法 AWS CLI）的权限**
+ 输入类似以下的命令。在本示例中：
  + 你的 AWS 账户编号是 1111-2222-3333。
  + 拥有该表并将其授予您的账户的账户是 1234-5678-9012。
  + 正在向用户 `datalake_user1` 授予对共享表 `pageviews` 的 `SELECT` 权限。该用户是您账户中的主体。
  + `pageviews` 表位于 `analytics` 数据库中，该数据库归账户 1234-5678-9012 所有。

  ```
  aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "SELECT" --resource '{ "Table": {"CatalogId":"123456789012", "DatabaseName":"analytics", "Name":"pageviews"}}'
  ```

  请注意，必须在 `resource` 参数的 `CatalogId` 属性中指定所有者账户。

# 授予资源链接权限
<a name="granting-link-permissions"></a>

按照以下步骤向 AWS 账户中的委托人授予对一个或多个资源链接的 AWS Lake Formation 权限。

创建资源链接时，只有您可以查看和访问它。（这假定没有为该数据库启用**仅对此数据库中的新表使用 IAM 访问控制**。） 要允许您账户中的其他主体访问资源链接，请至少授予 `DESCRIBE` 权限。

**重要**  
授予对资源链接的权限不会授予对目标（链接）数据库或表的权限。您必须单独授予对目标的权限。

你可以使用 Lake Formation 控制台、API 或 AWS Command Line Interface (AWS CLI) 来授予权限。

------
#### [ console ]

**使用 Lake Formation 控制台授予资源链接权限**

1. 请执行以下操作之一：
   + 对于数据库资源链接，请按照[使用命名资源方法授予数据库权限](granting-database-permissions.md)中的步骤执行以下操作：

     1.  从 Data Catalog 的**数据库**下面的数据库列表中选择资源链接。

     1.  选择**授予**以打开**授予权限**页面。

     1.  指定要对其授予权限的主体。

     1.  **目录**和**数据库**字段已填入。
   + 对于表资源链接，请按照[使用命名资源方法授予表权限](granting-table-permissions.md)中的步骤执行以下操作：

     1.  从 Data Catalog 的**表**下面的表列表中选择资源链接。

     1. 打开**授予权限**页面。

     1.  指定主体。

     1.  **目录**、**数据库**、**表**字段已填入。

     1.  指定主体。

1. 在**权限**下，选择要授予的权限。（可选）选择可授予的权限。  
![\[“权限”部分包含一个磁贴。磁贴包含一组复选框，代表要授予的资源链接权限。这些复选框包括 Drop 和 Describe。该组下方是另一组相同的复选框，代表可授予的权限。\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/images/grant-resource-link-permissions-TBAC.png)

1. 选择**授权**。

------
#### [ AWS CLI ]

**要授予资源链接权限，请使用 AWS CLI**
+ 运行 `grant-permissions` 命令，指定资源链接作为资源。  
**Example**  

  此示例`DESCRIBE`向 AWS 账户 1111-2222-3333 中的数据库`incidents-link``issues`中的表资源链接`datalake_user1`上的用户授权。

  ```
  1. aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "DESCRIBE" --resource '{ "Table": {"DatabaseName":"issues", "Name":"incidents-link"}}'
  ```

------

**另请参见：**  
 [创建资源链接](creating-resource-links.md) 
 [Lake Formation 权限参考](lf-permissions-reference.md) 

# 访问共享表的基础数据
<a name="cross-account-read-data"></a>

假设 AWS 账户 A 与账户 B 共享一个数据目录表，例如，通过向`SELECT`账户 B 授予表上的授予选项。要使账户 B 中的委托人能够读取共享表的基础数据，必须满足以下条件：
+ 账户 B 中的数据湖管理员必须接受共享。（如果账户 A 和账户 B 在同一个组织中，或者如果使用 Lake Formation 基于标签的访问控制方法进行授权，则无需这样做。）
+ 数据湖管理员必须向主体重新授予账户 A 被授予的对共享表的 Lake Formation `SELECT` 权限。
+ 主体必须对表、包含该表的数据库和账户 A 数据目录拥有以下 IAM 权限。
**注意**  
在以下 IAM 策略中：  
*<account-id-A>*替换为 AWS 账户 A 的账户 ID
*<region>*替换为有效的区域。
*<database>*替换为账户 A 中包含共享表的数据库的名称。
*<table>*替换为共享表的名称。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "glue:GetTable",
              "glue:GetTables",
              "glue:GetPartition",
              "glue:GetPartitions",
              "glue:BatchGetPartition",
              "glue:GetDatabase",
              "glue:GetDatabases"
             ],
             "Resource": [
              "arn:aws:glue:us-east-1:111122223333:table/<database>/<table>",
              "arn:aws:glue:us-east-1:111122223333:database/<database>",
              "arn:aws:glue:us-east-1:111122223333:catalog"
             ]
          },
          {
            "Effect": "Allow",
            "Action": [
              "lakeformation:GetDataAccess"
             ],
            "Resource": [
              "*"
             ]
      }
     ]
  }
  ```

------

**另请参见：**  
[接受来自的资源共享邀请 AWS RAM](accepting-ram-invite.md)

# 跨账户 CloudTrail 日志
<a name="cross-account-logging"></a>

Lake Formation 提供了有关对数据湖中数据的所有跨账户访问的集中审计跟踪记录。当接收者 AWS 账户访问共享表中的数据时，Lake Formation CloudTrail 会将事件复制到拥有该账户的 CloudTrail 日志中。复制的事件包括通过集成服务（例如 Amazon Athena 和 Amazon Redshift Spectrum）对数据的查询，以及按任务访问AWS Glue的数据。

CloudTrail 对数据目录资源进行跨账户操作的事件同样会被复制。

作为资源所有者，如果您在 Amazon S3 中启用对象级日志记录，则可以运行将 S3 CloudTrail 事件与 Lake Formation 事件关联的查询，以确定访问了您的 S3 存储桶的账户。 CloudTrail 

**Topics**
+ [在跨账户 CloudTrail 日志中包含主体身份](#cross-account-logging-optin)
+ [查询 Amazon S3 跨账户访问 CloudTrail 日志](#cross-account-logging-s3)

## 在跨账户 CloudTrail 日志中包含主体身份
<a name="cross-account-logging-optin"></a>

默认情况下，添加到共享资源接收者日志并复制到资源所有者日志的跨账户 CloudTrail 事件仅包含外部账户委托人的委托人 ID，而不是 AWS 委托人（委托人 ARN）的人类可读的 Amazon 资源名称 (ARN)。在可信范围内（例如在同一个组织或团队内）共享资源时，您可以选择在活动中包括委托人 ARN。 CloudTrail 然后，资源所有者账户可以对访问他们拥有的资源的接收方账户中主体进行跟踪。

**重要**  
作为共享资源接收者，要在自己的 CloudTrail 日志中查看事件中的委托人 ARN，您必须选择与所有者账户共享委托人 ARN。  
如果数据访问是通过资源链接进行的，则共享资源接收方账户中会记录两个事件：一个是资源链接访问事件，另一个是目标资源访问事件。资源链接访问事件*确实*包括主体 ARN。目标资源访问事件不包括主体 ARN（不含选择服务）。资源链接访问事件不会被复制到所有者账户。

以下是默认跨账户 CloudTrail 事件的摘录（没有选择加入）。执行数据访问的账户为 1111-2222-3333。这是同时显示在调用账户和资源所有者账户中的日志。在跨账户案例中，Lake Formation 会在两个账户中填充日志。

```
{
    "eventVersion": "1.05",
    "userIdentity": {
        "type": "AWSAccount",
        "principalId": "AROAQGFTBBBGOBWV2EMZA:GlueJobRunnerSession",
        "accountId": "111122223333"
    },
    "eventSource": "lakeformation.amazonaws.com",
    "eventName": "GetDataAccess",
...
...
    "additionalEventData": {
        "requesterService": "GLUE_JOB",
        "lakeFormationRoleSessionName": "AWSLF-00-GL-111122223333-G13T0Rmng2"
    },
...
}
```

作为共享资源使用者，当您选择包括主体 ARN 时，摘录将变为以下内容。`lakeFormationPrincipal` 字段表示通过 Amazon Athena、Amazon Redshift Spectrum 或 AWS Glue 作业执行查询的最终角色或用户。

```
{
    "eventVersion": "1.05",
    "userIdentity": {
        "type": "AWSAccount",
        "principalId": "AROAQGFTBBBGOBWV2EMZA:GlueJobRunnerSession",
        "accountId": "111122223333"
    },
    "eventSource": "lakeformation.amazonaws.com",
    "eventName": "GetDataAccess",
...
...
    "additionalEventData": {
        "requesterService": "GLUE_JOB",
        "lakeFormationPrincipal": "arn:aws:iam::111122223333:role/ETL-Glue-Role",
        "lakeFormationRoleSessionName": "AWSLF-00-GL-111122223333-G13T0Rmng2"
    },
...
}
```

**选择在跨账户 CloudTrail 日志 ARNs 中包含本金**

1. 打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

   以 `Administrator` 用户或具有 `Administrator Access` IAM 策略的用户身份登录。

1. 在导航窗格中，选择**设置**。

1. 在**数据目录设置**页面的**资源所有****者的默认权限 AWS CloudTrail**部分中，输入一个或多个 AWS 资源所有者帐户 IDs。

   在输入每个账户 ID 之后按 **Enter** 键。

1. 选择**保存**。

   现在，存储在共享资源接收者和资源所有者的日志中的跨账户 CloudTrail 事件包含委托人 ARN。

## 查询 Amazon S3 跨账户访问 CloudTrail 日志
<a name="cross-account-logging-s3"></a>

作为共享资源所有者，您可以查询 S3 CloudTrail 日志以确定访问过您的 Amazon S3 存储桶的账户（前提是您在 Amazon S3 中启用了对象级日志记录）。这仅适用于您在 Lake Formation 中注册的 S3 位置。如果共享资源使用者选择在 Lake Formation CloudTrail 日志 ARNs 中包含委托人，则可以确定访问存储桶的角色或用户。

使用运行查询时 Amazon Athena，您可以通过会话名称属性加入 Lake Formation CloudTrail CloudTrail 事件和 S3 事件。查询还可以筛选关于 `eventName="GetDataAccess"` 的 Lake Formation 事件以及关于 `eventName="Get Object"` 或 `eventName="Put Object"` 的 S3 事件。

以下是 Lake Formation 跨账户 CloudTrail 事件的摘录，在该事件中，已注册 S3 位置的数据被访问。

```
{
  "eventSource": "lakeformation.amazonaws.com",
  "eventName": "GetDataAccess",
  ..............
  ..............
  "additionalEventData": {
    "requesterService": "GLUE_JOB",
    "lakeFormationPrincipal": "arn:aws:iam::111122223333:role/ETL-Glue-Role",
    "lakeFormationRoleSessionName": "AWSLF-00-GL-111122223333-B8JSAjo5QA"
   }
}
```

`lakeFormationRoleSessionName`密钥值可以与 S3 CloudTrail 事件`principalId`密钥中的会话名称合并。`AWSLF-00-GL-111122223333-B8JSAjo5QA`以下是 S3 CloudTrail 事件的摘录。它显示会话名称的位置。

```
{
   "eventSource": "s3.amazonaws.com",
   "eventName": "Get Object"
   ..............
   ..............
   "principalId": "AROAQSOX5XXUR7D6RMYLR:AWSLF-00-GL-111122223333-B8JSAjo5QA",
   "arn": "arn:aws:sets::111122223333:assumed-role/Deformationally/AWSLF-00-GL-111122223333-B8JSAjo5QA",  
   "session Context": {
     "session Issuer": {
       "type": "Role",
       "principalId": "AROAQSOX5XXUR7D6RMYLR",
       "arn": "arn:aws:iam::111122223333:role/aws-service-role/lakeformation.amazonaws.com/Deformationally",
       "accountId": "111122223333",
       "user Name": "Deformationally"
     },
   ..............
   ..............
}
```

会话名称的格式如下：

```
AWSLF-<version-number>-<query-engine-code>-<account-id->-<suffix>
```

**`version-number`**  
此格式的版本，当前为 `00`。如果会话名称格式发生变化，则下一个版本将是 `01`。

**`query-engine-code`**  
表示访问数据的实体。当前值如下：      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/lake-formation/latest/dg/cross-account-logging.html)

**`account-id`**  
向 Lake Formation 请求凭证的 AWS 账户 ID。

**`suffix`**  
随机生成的字符串。

# 使用 AWS Glue 和 Lake Formation 管理跨账户权限。
<a name="hybrid-cross-account"></a>

可以使用 AWS Glue 或 AWS Lake Formation授予对数据目录资源和基础数据的跨账户访问权限。

在 AWS Glue 中，您可以通过创建或更新数据目录资源策略来授予跨账户权限。在 Lake Formation 中，您可以使用 Lake Formation `GRANT/REVOKE` 权限模型和 `Grant Permissions` API 操作来授予跨账户权限。

**提示**  
我们建议仅依靠 Lake Formation 权限来保护您的数据湖。

你可以使用 Lake Formation 控制台或 AWS Resource Access Manager (AWS RAM) 控制台查看 Lake Formation 跨账户授权。但是，这些控制台页面不显示通过 AWS Glue 数据目录资源策略授予的跨账户权限。同样，您可以使用 AWS Glue 控制台的**设置**页面在数据目录资源策略中查看跨账户授权，但该页面不显示使用 Lake Formation 授予的跨账户权限。

为了确保您在查看和管理跨账户权限时不会错过任何授权，Lake Formation 和 AWS Glue 会要求您执行以下操作，以表明您知道并将允许 Lake Formation 和 AWS Glue 进行跨账户授权。

**使用 AWS Glue 数据目录资源策略授予跨账户权限时**  
如果您的账户（授予者账户或生产者账户）没有使用 AWS RAM 共享资源的跨账户授权，您可以像往常一样在 AWS Glue 中保存数据目录资源策略。但是，如果已经进行了涉及 AWS RAM 资源共享的授权，则必须执行以下操作之一，以确保成功保存资源策略：
+ 当您在 AWS Glue 控制台的**设置** 页面上保存资源策略时，控制台会发出警报，指出除了使用 Lake Formation 控制台授予的任何权限之外，还将授予该策略中的权限。必须选择**继续**才能保存该策略。
+ 使用 `glue:PutResourcePolicy` API 操作保存资源策略时，必须将 `EnableHybrid` 字段设置为“`TRUE`”（类型 = 字符串）。

  要更新现有资源策略，请先使用 `glue:GetResourcePolicy` API 操作检索您当前的策略，然后在调用 `glue:PutResourcePolicy` 之前根据需要对其进行修改。
**注意**  
在为跨账户访问创建 AWS Glue 资源策略时，请仅授予您的特定用例所需的最低权限。

  *有关更多信息，请参阅[PutResourcePolicy 《开发者指南》中的操作（Python：put\$1resource\$1policy）](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-security.html#aws-glue-api-jobs-security-PutResourcePolicy)。AWS Glue *

**使用 Lake Formation 命名资源方法授予跨账户权限时**  
如果您的账户（生产者账户）中没有数据目录资源策略，您进行的 Lake Formation 跨账户授权将照常进行。但是，如果存在数据目录资源策略，则必须在其中添加以下语句，以确保使用命名资源方法进行的跨账户授权成功完成。*<region>*替换为有效的地区*<account-id>*名称和您的 AWS 账户 ID（制作人账户 ID）。

```
    {
      "Effect": "Allow",
      "Action": [
        "glue:ShareResource"
      ],
      "Principal": {"Service": [
        "ram.amazonaws.com"
      ]},
      "Resource": [
        "arn:aws:glue:<region>:<account-id>:table/*/*",
        "arn:aws:glue:<region>:<account-id>:database/*",
        "arn:aws:glue:<region>:<account-id>:catalog"
      ]
    }
```

如果没有这份额外的声明，Lake Formation 授权就会成功 AWS RAM，但会被封锁，接收者账户将无法访问授予的资源。

**重要**  
使用 Lake Formation 基于标签的访问控制 (LF-TBAC) 方法进行跨账户授权时，您的数据目录资源策略必须至少含有[先决条件](cross-account-prereqs.md)中指定的权限。

**另请参见：**  
[元数据访问控制](access-control-metadata.md)（用于讨论命名资源方法与 Lake Formation 基于标签的访问控制 (LF-TBAC) 方法）。
[查看共享数据目录表和数据库](viewing-available-shared-resources.md)
《AWS Glue 开发人员指南》中的[在 AWS Glue 控制台中使用数据目录设置](https://docs.aws.amazon.com/glue/latest/dg/console-data-catalog-settings.html)**
《AWS Glue 开发人员指南》中的[授予跨账户访问权限](https://docs.aws.amazon.com/glue/latest/dg/cross-account-access.html)（适用于数据目录资源策略示例）**

# 使用 GetResourceShares API 操作查看所有跨账户授权
<a name="cross-account-getresourcepolicies"></a>

如果您的企业同时使用 AWS Glue Data Catalog 资源策略和 Lake Formation 授权来授予跨账户权限，那么在一个地方查看所有跨账户授权的唯一方法就是使用 `glue:GetResourceShares` API 操作。

当您使用指定资源方法向账户授予 Lake Formation 权限时， AWS Resource Access Manager (AWS RAM) 会创建一个 AWS Identity and Access Management (IAM) 资源策略并将其存储在您的 AWS 账户中。该策略授予访问资源所需的权限。 AWS RAM 为每项跨账户授予创建单独的资源策略。您可以使用 `glue:GetResourceShares` API 操作查看所有这些策略。

**注意**  
此操作还会返回数据目录资源策略。但是，如果您在数据目录设置中启用了元数据加密，并且您没有 AWS KMS 密钥权限，则该操作将不会返回数据目录资源策略。

**查看所有跨账户授权**
+ 输入以下 AWS CLI 命令。

  ```
  aws glue get-resource-policies
  ```

以下是一个资源策略示例，当您向 AWS 账户 1111-2222-3333 授予数据库`t`中表的权限时，`db1`该策略 AWS RAM 会创建和存储。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
         "glue:GetTable",
         "glue:GetTables",
         "glue:GetTableVersion",         
         "glue:GetTableVersions",
         "glue:GetPartition", 
         "glue:GetPartitions",
         "glue:BatchGetPartition",
         "glue:SearchTables"
       ],
      "Principal": {"AWS": [
        "111122223333"
      ]},
      "Resource": [
      "arn:aws:glue:us-east-1:111122223333:table/db1/t"
     ]
    }
  ]
}
```

------

**另请参阅：**  
GetResourceShares *开发者指南中的@@ [操作（Python：get\$1resource\$1policies）](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-security.html#aws-glue-api-jobs-security-GetResourcePolicies)AWS Glue *