

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

# 联合到 Databricks Unity Catalog
联合到 Databricks

Amazon Glue Data Catalog 联合Databricks使用Databricks服务主 OAuth2 体的凭证。这种身份验证机制 Amazon Glue Data Catalog 允许根据与服务主体关联的权限访问中各种对象（例如目录Databricks Unity Catalog、数据库和表）的元数据。为确保访问正确的对象，必须向服务主体授予读Databricks取这些对象元数据的必要权限。

接下来，目录联合允许发现和查询 Databricks Unity 目录中的Iceberg表。要读取增量表，请使用确保这些表的Iceberg元数据可用Uniform。按照Databricks教程和文档在Databricks工作区中创建服务主体和相关权限。

## 先决条件


在数据目录中创建受 Lake Formation 管理的联合目录之前，请确保您拥有以下权限：

您的 IAM 委托人（用户或角色）必须具有以下权限：
+ **Lake Formation 权限** —`lakeformation:RegisterResource`，`lakeformation:DescribeResource`
+ **Amazon Glue 权限** — `glue:CreateConnection`、`glue:CreateCatalog`、`glue:GetConnection`、`glue:PassConnection`
+ S@@ **ecrets Manager 权限** —`secretsmanager:CreateSecret`，`secretsmanager:GetSecretValue`
+ **IAM 权限** — `iam:CreateRole`、`iam:AttachRolePolicy`、`iam:PassRole`

您必须是 Lake Formation 数据湖管理员或拥有数据目录的`CREATE_CATALOG`权限

## 创建联合目录


### 使用控制台


1. 登录主机并打开 Lake Formation 控制台，网址为[https://console.aws.amazon.com/lakeformation/](https://console.amazonaws.cn/lakeformation/)。

1. 在右上角的页面部分中选择首选 Amazon 区域。

1. 在左侧导航窗格中，选择目录。

1. 选择**创建目录**以打开**创建目录工作流程**。

1. 在**选择数据源**步骤中，Databricks从可用选项中进行选择。

1. 在 **“设置目录详细信息”** 步骤中，您提供了三个信息：目录详细信息、连接详细信息和注册详细信息。

1. 在**目录详细信息**容器中，为您的 Amazon Glue 联合目录提供一个唯一的名称，然后输入现有Databricks目录的名称。

1. 在**连接详细信息**容器中，您可以从您有权访问的现有连接中进行选择，也可以提供配置来创建新的连接器。

1. 新的连接配置包括：
   + 连接名称- Amazon Glue 连接对象的唯一名称。
   + 工作空间 URL-现有Databricks工作空间的终端节点 URL。
   + 身份验证-指定 Amazon Glue 用于连接到远程目录服务器的身份验证配置。 Amazon Glue 同时支持 OAuth2 和自定义身份验证。
   + 令牌 URL-指定远程目录的身份提供商的 URL。
   + OAuth2 客户端 ID-指定与您的远程目录关联的 OAuth2 凭据的客户端 ID。
   + 密钥-使用 Amazon Secrets Manager 或在文本框中输入密码值来存储和使用 OAuth2 客户端密钥。当您在控制台中手动输入密钥时， Amazon Glue 会代表您创建密钥。
   + 令牌 URL 范围-指定身份验证的 OAuth 范围。

1. 创建一个 IAM 角色，该角色 Amazon Glue 和 Lake Formation 服务委托人可以使用该角色分别访问远程Iceberg表和 Amazon S3 位置中的密钥。在注册下拉列表中选择 IAM 角色。有关 IAM 策略的详细信息，请参阅以下 CLI 部分中的步骤 2 和步骤 3。

1. 选择 “测试连接” 以测试您的连接属性和 IAM 角色访问权限配置是否正确。Databricks使用 Amazon VPC 进行连接时，测试连接功能不可用。

1. 选择 “**下一步**” 以查看您的设置。

1. 在查看页面中选择**创建目录**。

### 使用 CLI


1. <a name="databricks-step-1"></a>**创建密 Amazon Secrets Manager 钥**

   该 Amazon Glue 连接器支持两种身份验证类型-**OAuth2**和**自定义**。使用 opti OAuth2 on 时，使用 Amazon Secrets Manager 来存储Databricks服务主体的客户端密钥。稍后您将在创建 Amazon Glue 连接时使用此密钥。对于自定义身份验证， Amazon Secrets Manager 请使用存储和检索访问令牌。

   在以下示例中`<databricks-secret>`，用您自己的信息替换`<client_secret>`、、`<region>`。

   ```
   aws secretsmanager create-secret \
   --name <databricks-secret> \
   --description "Databricks secret" \
   --secret-string '{
   "USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET": "<client_secret>"
   }' \
   --region <region>
   ```
**注意**  
`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET`是一个保留关键字， Amazon Glue 用于引用密钥中的客户机密值。在 Lake Formation 控制台中创建密钥时，也要使用相同的关键字。

1. <a name="databricks-step-2"></a>**创建一个 IAM 角色以向 Amazon Glue 连接对象提供对上一步中创建的密钥的访问权限**

   使用 Amazon Glue Amazon Secrets Manager 连接对象存储、检索和刷新 Amazon Secrets Manager 密钥令牌时，需要访问 OAuth 密钥。当您使用 Amazon VPC 终端节点限制与Databricks工作空间的 Amazon Glue 连接时，连接对象还需要访问权限才能创建、描述和使用 Amazon VPC 网络接口。

   创建 IAM 策略并将其附加到 IAM 角色。将 Amazon Glue 服务主体添加到信任策略中。

   在以下示例中`<your-secrets-manager-ARN>`，用您自己的信息替换`<your-vpc-id>`、和`<your-subnet-id1>`。  
**Example IAM 策略**  

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [{
               "Effect": "Allow",
               "Action": [
                   "secretsmanager:GetSecretValue",
                   "secretsmanager:DescribeSecret",
                   "secretsmanager:PutSecretValue"
               ],
               "Resource": [
                   "<your-secrets-manager-ARN>"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:CreateNetworkInterface",
                   "ec2:DeleteNetworkInterface",
                   "ec2:DescribeNetworkInterfaces"
               ],
               "Resource": "*",
               "Condition": {
                   "ArnEquals": {
                       "ec2:Vpc": "arn:aws:ec2:region:account-id:vpc/<your-vpc-id>",
                       "ec2:Subnet": ["arn:aws:ec2:region:account-id:subnet/<your-subnet-id1>"]
                   }
               }
           }
       ]
   }
   ```  
**Example 信任策略**  

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [{
           "Effect": "Allow",
           "Principal": {
               "Service": "glue.amazonaws.com"
           },
           "Action": "sts:AssumeRole"
       }]
   }
   ```

1. <a name="databricks-step-3"></a>**创建一个 IAM 策略，授予 Lake Formation 对目录的 Amazon S3 位置的读取权限**

   作为数据目录中联合目录的目录所有者，您可以使用 Lake Formation 向数据团队授予粗粒度表访问权限、列级、行级和单元级细粒度访问权限以及基于标签的访问权限。Lake Formation 使用 IAM 角色允许其访问远程 Iceberg 表的底层 Amazon S3 位置。此访问权限允许 Lake Formation 向查询远程表的分析引擎提供限定范围的访问凭证。

   创建 IAM 策略并附加到 IAM 角色。将 Lake Formation 服务委托人添加到 IAM 角色信任策略中。

   在以下示例中，将 `<your-s3-bucket-N>` 和 `<your-kms-key>` 替换为您自己的信息。  
**Example IAM 策略**  

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [{
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject"
               ],
               "Resource": [
                   "arn:aws:s3:::<your-s3-bucket-1>/*",
                   "arn:aws:s3:::<your-s3-bucket-2>/*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket"
               ],
               "Resource": [
                   "arn:aws:s3:::<your-s3-bucket-1>",
                   "arn:aws:s3:::<your-s3-bucket-2>"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "kms:Decrypt",
                   "kms:Encrypt"
               ],
               "Resource": [
                   "<your-kms-key>"
               ]
           }
       ]
   }
   ```  
**Example 信任策略**  

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [{
           "Sid": "",
           "Effect": "Allow",
           "Principal": {
               "Service": "lakeformation.amazonaws.com"
           },
           "Action": "sts:AssumeRole"
       }]
   }
   ```
**注意**  
当您使用 Lake Formation 控制台创建联合目录时，控制台使用一个 IAM 角色并附加两个策略来完成设置。

1. <a name="databricks-step-4"></a>**创建 Amazon Glue 连接对象**

   数据目录支持连接类型`DATABRICKSICEBERGRESTCATALOG`：用于将数据目录连接到。Databricks此 Amazon Glue 连接器支持 OAuth2 和自定义身份验证方法。

   以下示例使用 OAuth2 身份验证配置来创建 Amazon Glue 连接。将 `highlighed sections` 替换为您的信息。

   ```
   aws glue create-connection \
       --connection-input '{
   "Name": "<your-glue-connection-to-databricks-unity-account>",
   "ConnectionType": "DATABRICKSICEBERGRESTCATALOG",
   "ConnectionProperties": {
       "INSTANCE_URL": "<your-databricks-workspace-catalog-URL>",
       "ROLE_ARN": "<your-IAM-role-for-secrets-and-VPC-access>"
   },
   "AuthenticationConfiguration": {
       "AuthenticationType": "OAUTH2",
       "OAuth2Properties": {
           "OAuth2GrantType": "CLIENT_CREDENTIALS",
           "TokenUrl": "<your-internal-or-external-token-server-url>",
           "OAuth2ClientApplication": {
               "UserManagedClientApplicationClientId": "<your-client-id>"
           },
           "TokenUrlParametersMap": {
               "scope": "all-apis"
           }
       },
       "SecretArn": "arn:aws:secretsmanager:<aws-region>:<your-aws-account-id>:secret:<databricks-secret>"
   }
   }'
   ```

1. <a name="databricks-step-5"></a>**将 Amazon Glue 连接注册为 Lake Formation 资源**

   使用 Amazon Glue 连接对象（在步骤 4 中创建）和 IAM 角色（在步骤 3 中创建），您现在可以将 Amazon Glue 连接对象注册为 Lake Formation 托管资源。

   将 `<your-glue-connector-arn>` 和 `<your-IAM-role-ARN-having-LF-access>` 替换为您的信息。

   ```
   aws lakeformation register-resource \
       --resource-arn <your-glue-connector-arn> \
       --role-arn <your-IAM-role-ARN-having-LF-access> \
       --with-federation \
       --with-privileged-access
   ```

1. <a name="databricks-step-6"></a>**在数据目录中创建联合目录**

   创建 Amazon Glue 连接对象并将其注册到 Lake Formation 后，您可以在数据目录中创建联合目录：

   在为联合目录提供一个唯一的名称`<your-federated-catalog-name>`，在中引用目录`"<catalog-name-in-Databricks>`，然后输入之前Databricks在中创建的连接名称`"<your-glue-connection-name>`。

   ```
   aws glue create-catalog \
       --name <your-federated-catalog-name> \
       --catalog-input '{
       "FederatedCatalog": {
           "Identifier": "<catalog-name-in-Databricks>",
           "ConnectionName": "<your-glue-connection-name>"
       },
       "CreateTableDefaultPermissions": [],
       "CreateDatabaseDefaultPermissions": []
   }'
   ```

## 与集成时的注意事项 Databricks

+ 当您在中删除资源（如数据库和表）时Databricks，Lake Formation 不会自动撤消授予该联合资源的权限。要移除访问权限，您需要使用 Lake Formation 显式撤消先前授予的对联合资源的权限。
+ 您可以使用此集成查询存储在 Amazon S3 中的 Iceberg 表。使用任何其他表格式或对象存储时，您可以将远程目录中的元数据与其数据库和表联合起来并列出这些数据库 Amazon Glue 和表，但是查询操作在查询期间`SELECT ColumnFoo from TableBar`会失败，并显示错误 “读取表失败”。Apache Iceberg不支持对象存储位置。'
+ 您可以重复使用相同的 Amazon Glue 连接来创建多个联合目录。删除目录不会删除关联的连接对象。要删除连接对象，请使用 Amazon CLI `aws glue delete-connection` 命令并确保先删除所有关联的目录。