

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 通过 AWS Lake Formation 查询数据
<a name="redshift-iam-access-control-idp-analytics-connecting-steps"></a>

使用 AWS Lake Formation 可以更轻松地集中管理和保护您的数据湖，并可用于提供数据访问。通过对 AWS IAM Identity Center 和 Redshift 进行配置，将身份传播到 Lake Formation，这样管理员就可以根据组织的身份提供者（IdP）组，实现对 Amazon S3 数据湖精细的访问控制。这些组通过 AWS IAM Identity Center 进行管理。此部分介绍如何配置几个应用场景，用于从数据湖中进行查询和从数据共享中进行查询，以演示如何将 AWS IAM Identity Center 与 Redshift 结合使用，来连接到由 Lake Formation 管理的资源。

## 使用 AWS IAM Identity Center 和 Redshift 连接来查询数据湖
<a name="redshift-iam-access-control-idp-analytics-connecting-datalake"></a>

这些步骤涵盖的应用场景是，您使用 AWS IAM Identity Center 连接到 Redshift，以便查询 Lake Formation 管理的数据湖。

**先决条件**

此过程有多个先决条件步骤：

1. AWS IAM Identity Center 必须设置为支持 Redshift 的身份验证和身份管理。您可以从控制台启用 AWS IAM Identity Center 并选择身份提供者（IdP）来源。之后，将您的一组 IdP 用户与 AWS IAM Identity Center 同步。您还必须按照本文档前面详述的步骤，在 AWS IAM Identity Center 与 Redshift 之间建立连接。

1. 创建新的 Amazon Redshift 集群，并在配置步骤中启用通过 AWS IAM Identity Center 进行身份管理。

1. 为 Lake Formation 创建托管 AWS IAM Identity Center 应用程序并对其进行配置。此配置应在设置了 AWS IAM Identity Center 与 Redshift 之间的连接之后进行。步骤如下：

   1. 在 AWS CLI 中，使用 `modify-redshift-idc-application` 命令启用 Lake Formation 服务与 AWS IAM Identity Center 托管的 Redshift 应用程序的集成。此调用包括 `service-integrations` 参数，该参数设置为启用对 Lake Formation 进行授权的配置字符串值。

   1. 使用 `create-lake-formation-identity-center-configuration` 命令配置 Lake Formation。这将创建一个适用于 Lake Formation 的 AWS IAM Identity Center 应用程序，该应用程序在 AWS IAM Identity Center 门户中可见。管理员必须设置 `––cli-input-json` 参数，其值是 JSON 文件的路径，该文件使用所有 AWS CLI API 调用的标准格式。您必须包括以下各项的值：
      + `CatalogId` – Lake Formation 目录 ID。
      + `InstanceArn` – AWS IAM Identity Center 实例 ARN 值。

管理员完成先决条件配置后，数据库管理员可以创建用于查询数据湖的外部架构。

1. **管理员创建外部架构** – Redshift 数据库管理员使用以下 SQL 语句连接到数据库并创建外部架构：

   ```
   CREATE EXTERNAL SCHEMA if not exists my_external_schema from DATA CATALOG database 'my_lf_integrated_db' catalog_id '12345678901234';
   ```

   请注意，在这种情况下不需要指定 IAM 角色，因为访问权限是通过 AWS IAM Identity Center 管理的。

1. **管理员授予权限** – 管理员向 AWS IAM Identity Center 组授予使用权限，这会授予对 Redshift 资源的权限。此步骤通过运行如下所示的 SQL 语句完成：

   ```
   GRANT USAGE ON SCHEMA "my_external_schema" to "MYCO:sales";
   ```

   随后，管理员根据组织的要求，使用 AWS CLI 授予 Lake Formation 在对象上的权限：

   ```
   aws lakeformation grant-permissions ...
   ```

1. **用户运行查询** – 举例说明，此时销售人员组中的 AWS IAM Identity Center 用户，可以通过查询编辑器 v2 登录到 Redshift 数据库。然后，他们可以运行访问外部架构中的表的查询，如以下示例：

   ```
   SELECT * from my_external_schema.table1;
   ```

## 使用 AWS IAM Identity Center 和 Redshift 连接来连接到数据共享
<a name="redshift-iam-access-control-idp-analytics-connecting-datashare"></a>

 通过 AWS IAM Identity Center 管理访问权限时，您可以从不同的 Redshift 数据仓库访问数据共享。为此，您需要运行查询来设置外部数据库。完成这些步骤的要求是，假定您已在 Redshift 和 AWS IAM Identity Center 之间建立连接，并且您已经创建了 AWS Lake Formation 应用程序，如前面的过程所述。

1. **创建外部数据库** – 管理员创建外部数据库用于数据共享，并通过其 ARN 进行引用。以下是演示如何操作的示例：

   ```
   CREATE DATABASE "redshift_external_db" FROM ARN 'arn:aws:glue:us-east-1:123456789012:database/redshift_external_db-iad' WITH NO DATA CATALOG SCHEMA;
   ```

   在本使用场景中，您将 AWS IAM Identity Center 与 Redshift 用于身份管理，但不包括 IAM 角色。

1. **管理员设置权限** – 创建数据库后，管理员向 AWS IAM Identity Center 组授予使用权限。这将授予对 Redshift 资源的权限：

   ```
   GRANT USAGE ON DATABASE "my_external_db" to "MYCO:sales";
   ```

   管理员还使用 AWS CLI 授予 Lake Formation 在对象上的权限：

   ```
   aws lakeformation grant-permissions ...
   ```

1. **用户运行查询** – 销售组中的用户可以基于分配的权限查询数据库中的表：

   ```
   select * from redshift_external_db.public.employees;
   ```

有关授予数据湖权限和授予数据共享权限的更多信息，请参阅 [Granting permissions to users and groups](https://docs.aws.amazon.com/lake-formation/latest/dg/grant-permissions-sso.html)。有关向架构或数据库授予使用权限的更多信息，请参阅 [GRANT](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html)。