

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

# 管理对 Amazon Redshift 数据共享中数据的权限
管理对 Amazon Redshift 数据共享中数据的权限

使用 AWS Lake Formation，您可以安全地管理 Amazon Redshift 数据共享中的数据。Amazon Redshift 是 AWS Cloud 中的一种完全托管的 PB 级数据仓库服务。使用数据共享功能，Amazon Redshift 可帮助您跨 AWS 账户共享数据。有关 Amazon Redshift 数据共享的更多信息，请参阅 [Amazon Redshift 中的数据共享概述](https://docs.aws.amazon.com/redshift/latest/dg/data_sharing_intro.html)。

在 Amazon Redshift 中，生产者集群管理员会创建一个数据共享，并将其共享给数据湖管理员。有关创建数据湖管理员的逐步说明，请参阅[创建数据湖管理员](initial-lf-config.md#create-data-lake-admin)。

在您（数据湖管理员）接受数据共享后，必须为特定数据共享创建 AWS Glue Data Catalog 数据库。这样您就可以使用 Lake Formation 权限来控制对它的访问。Lake Formation 将每个数据共享映射到相应的数据目录数据库。它们在数据目录中显示为联合数据库。

当数据库指向数据目录外部的实体时，该数据库称为*联合数据库*。Amazon Redshift 数据共享中的表和视图在数据目录中作为单个表列出。您可以通过 Lake Formation 与同一个账户或其他账户中的选定 IAM 主体和 SAML 用户共享联合数据库。您还可以添加行和列筛选表达式，以限制对某些数据的访问。有关更多信息，请参阅 [Lake Formation 中的数据筛选和单元格级别安全性](data-filtering.md)。

 要向用户提供对 Amazon Redshift 数据共享的访问权限，您必须执行以下操作：

1. 更新**数据目录设置**以启用 Lake Formation 权限。

1. 接受 Amazon Redshift 制作者集群管理员发出的数据共享邀请，然后在 Lake Formation 中注册数据共享。

   完成此步骤后，您可以在 Lake Formation 数据目录中管理数据共享。

1. 创建联合数据库并定义对该数据库的权限。

1. 向用户授予对数据库和表的权限。您可以与同一账户或其他账户的用户共享整个数据库或表的子集。

有关限制，请参阅[Amazon Redshift 数据共享限制](notes-rs-datashare.md)。

**Topics**
+ [

# 在 Amazon Redshift 数据共享上设置权限的先决条件
](redshift-ds-prereqs.md)
+ [

# 设置 Amazon Redshift 数据共享权限
](setup-ds-perms.md)
+ [

# 查询联合数据库
](qerying-fed-db.md)

# 在 Amazon Redshift 数据共享上设置权限的先决条件
先决条件

**更新默认数据目录设置**  
要为数据目录资源启用 Lake Formation 权限，我们建议您禁用 Lake Formation 中的默认**数据目录设置**。有关更多信息，请参阅 [更改默认权限模式或使用混合访问模式](initial-lf-config.md#setup-change-cat-settings)。

**更新权限**  
 除了数据湖管理员权限（`AWSLakeFormationDataAdmin`）外，在 Lake Formation 中接受 Amazon Redshift 数据共享还需要以下权限：
+ `glue:PassConnection on aws:redshift`
+ `redshift:AssociateDataShareConsumer`
+ `redshift:DescribeDataSharesForConsumer`
+ `redshift:DescribeDataShares`

数据湖管理员 IAM 用户隐式拥有以下权限。
+ data\$1location\$1access
+ create\$1database 
+ lakefomation:registerResource

# 设置 Amazon Redshift 数据共享权限


 本主题介绍接受数据共享邀请、创建联合数据库和授予权限所需执行的步骤。您可以使用 Lake Formation 控制台或 AWS Command Line Interface (AWS CLI)。本主题中的示例显示了同一个账户中的制作者集群、数据目录和数据使用者。

要了解有关 Lake Formation 跨账户功能的更多信息，请参阅[Lake Formation 中的跨账户数据共享](cross-account-permissions.md)。

**设置数据共享权限**

1. 查看数据共享邀请并接受。

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

   1.  通过 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) 以数据湖管理员的身份登录 Lake Formation 控制台。导航到**数据共享**页面。

   1. 查看已授权您访问的数据共享。**状态**列表示您当前参与数据共享的状态。**待处理**状态表示您已被添加到数据共享，但尚未接受或已拒绝邀请。

   1.  要响应数据共享邀请，请选择数据共享名称，然后选择**查看邀请**。在**接受或拒绝数据共享**中，查看邀请详细信息。选择**接受**接受邀请，或选择**拒绝**拒绝邀请。如果您拒绝邀请，就无法访问数据共享。

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

   以下示例显示如何查看、接受和注册邀请。将 AWS 账户 ID 替换为有效的 AWS 账户 ID。将 `data-share-arn` 替换为引用数据共享的实际 Amazon 资源名称 (ARN)。

   1. 查看待处理的邀请。

      ```
      aws redshift describe-data-shares \
       --data-share-arn 'arn:aws:redshift:us-east-1:111122223333:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/federatedds' \
      ```

   1. 接受数据共享。

      ```
       aws redshift associate-data-share-consumer \
       --data-share-arn 'arn:aws:redshift:us-east-1:111122223333:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/federatedds' \
       --consumer-arn 'arn:aws:glue:us-east-1:111122223333:catalog
      ```

   1. 在 Lake Formation 账户中注册数据共享。使用 [RegisterResource](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_RegisterResource.html) API 操作在 Lake Formation 中注册数据共享。`DataShareArn` 是 `ResourceArn` 的输入参数。
**注意**  
此步骤为必需步骤。

      ```
      aws lakeformation register-resource \
       --resource-arn 'arn:aws:redshift:us-east-1:111122223333:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/federatedds'
      ```

------

1. 创建数据库。

    接受数据共享邀请后，您需要创建一个指向与数据共享关联的 Amazon Redshift 数据库的数据库。您必须是数据湖管理员才能创建数据库。

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

   1.  从**邀请**窗格中选择数据共享，然后选择**设置数据库详细信息**。

   1.  在**设置数据库详细信息**中，输入数据共享的唯一名称和标识符。使用此标识符可在元数据层次结构（dbName.schema.table）中对数据共享进行内部映射。

   1.  选择**下一步**，向其他用户授予对共享数据库和表的权限。

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

    在 AWS CLI 中使用以下示例代码创建指向与 Lake Formation 共享的 Amazon Redshift 数据库的数据库。

   ```
   aws glue create-database --cli-input-json \
   
   '{
    "CatalogId": "111122223333",
    "DatabaseInput": {
     "Name": "tahoedb",
     "FederatedDatabase": {
          "Identifier": "arn:aws:redshift:us-east-1:111122223333:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/federatedds",
          "ConnectionName": "aws:redshift"
      }
    }
    }'
   ```

------

1. 授予权限

    创建数据库后，可以向账户中的用户或外部 AWS 账户和组织授予权限。您将无法针对映射到 Amazon Redshift 数据共享的联合数据库授予写入数据权限（插入、删除）和元数据权限（更改、删除、创建）。有关授予权限的更多信息，请参阅[管理 Lake Formation 权限](managing-permissions.md)。
**注意**  
作为数据湖管理员，您只能查看联合数据库中的表。要执行任何其它操作，您都需要授予自己对这些表的更多权限。

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

   1. 在**授予权限**屏幕上，选择要向其授予权限的用户。

   1. 选择**授权**。

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

   在 AWS CLI 中使用以下示例通过以下方式授予数据库和表权限：

   ```
   aws lakeformation grant-permissions --input-cli-json file://input.json
   
   {
      "Principal": {
              "DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/non-admin"
      },
      "Resource": {
             "Database": {
                   "CatalogId": "111122223333",
                    "Name": "tahoedb"
              }
       },
       "Permissions": [
                "DESCRIBE"
        ],
       "PermissionsWithGrantOption": [
                            
        ]
    }
   ```

   ```
   aws lakeformation grant-permissions --input-cli-json file://input.json
   
   {
                      "Principal": {
                             "DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/non-admin"
                      },
                     "Resource": {
                            "Table": {
                                 "CatalogId": "111122223333",
                                 "DatabaseName": "tahoedb",
                                 "Name": "public.customer"
                          }
                     },
                    "Permissions": [
                           "SELECT"
                     ],
                    "PermissionsWithGrantOption": [
                            "SELECT"
                      ]
    }
   ```

------

# 查询联合数据库


 在您授予权限后，用户可以登录并开始使用 Amazon Redshift 查询联合数据库。用户现在可以在 SQL 查询中使用本地数据库名称引用 Amazon Redshift 数据共享。在 Amazon Redshift 中，通过数据共享来共享的公共架构中的客户表将在数据目录中创建相应的表，即 `public.customer`。

1. 在使用 Amazon Redshift 查询联合数据库之前，集群管理员使用以下命令通过数据目录数据库创建一个数据库：

   ```
   CREATE DATABASE sharedcustomerdb FROM ARN 'arn:aws:glue:<region>:111122223333:database/tahoedb' WITH DATA CATALOG SCHEMA tahoedb
   ```

1.  集群管理员授予对数据库的使用权限。

   ```
   GRANT USAGE ON DATABASE sharedcustomerdb TO IAM:user;
   ```

1.  您（联合用户）现在可以登录 SQL 工具来查询表。

   ```
   Select * from sharedcustomerdb.public.customer limit 10;
   ```

 有关更多信息，请参阅《Amazon Redshift 管理指南》中的[查询 AWS Glue Data Catalog](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2-glue.html)。