

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

# SQL 扩展数据来源连接
<a name="sagemaker-sql-extension-datasources-connection"></a>

在 JupyterLab 笔记本中使用 SQL 扩展之前，管理员或用户必须创建 AWS Glue 与其数据源的连接。SQL 扩展允许连接到 Amazon Redshift、Amazon Athena 或 Snowflake 等数据来源。

要设置连接，管理员必须先确保其网络配置支持 Studio 和数据来源之间的通信，然后授予必要的 IAM 权限以允许 Studio 访问数据来源。有关管理员如何设置联网的信息，请参阅[配置 Studio 和数据来源之间的网络访问（供管理员使用）](sagemaker-sql-extension-networking.md)。有关必须设置的策略的信息，请参阅[设置访问数据来源所需的 IAM 权限（适用于管理员）](sagemaker-sql-extension-datasources-connection-permissions.md)。建立连接后，数据科学家可以在 JupyterLab 笔记本中使用 SQL 扩展来浏览和查询连接的数据源。

**注意**  
我们建议将数据库访问凭证作为密钥存储在 Secrets Manager 中。要了解如何创建用于存储 Amazon Redshift 或 Snowflake 访问凭证的密钥，请参阅[在 Secrets Manager 中为数据库访问凭证创建密钥](sagemaker-sql-extension-glue-connection-secrets.md)。

本节介绍如何设置 AWS Glue 连接，并列出了 Studio JupyterLab 应用程序通过连接访问数据所需的 IAM 权限。

**注意**  
[亚马逊 SageMaker 资产](sm-assets.md)将[亚马逊 DataZone](https://docs.aws.amazon.com/datazone/latest/userguide/what-is-datazone.html)与 Studio 集成。它包括一个 SageMaker 人工智能蓝图，供管理员在亚马逊 DataZone 域内通过亚马逊 DataZone 项目创建 Studio 环境。  
从使用蓝图创建的 Studio 域启动的 JupyterLab 应用程序的用户在使用 SQL 扩展程序时，可以自动访问与其 Amazon DataZone 目录中数据资产的 AWS Glue 连接。这样就可以查询这些数据来源，而无需手动设置连接。

**Topics**
+ [

# 在 Secrets Manager 中为数据库访问凭证创建密钥
](sagemaker-sql-extension-glue-connection-secrets.md)
+ [

# 创建 AWS Glue 连接（适用于管理员）
](sagemaker-sql-extension-datasources-glue-connection.md)
+ [

# 创建用户定义的 AWS Glue 连接
](sagemaker-sql-extension-datasources-glue-connection-user-defined.md)
+ [

# 设置访问数据来源所需的 IAM 权限（适用于管理员）
](sagemaker-sql-extension-datasources-connection-permissions.md)

# 在 Secrets Manager 中为数据库访问凭证创建密钥
<a name="sagemaker-sql-extension-glue-connection-secrets"></a>

在创建连接之前，我们建议您将数据库访问凭证作为密钥存储在中 AWS Secrets Manager。或者，您可以根据通过 AWS Identity and Access Management (IAM) 权限策略授予的权限生成临时数据库证书，以管理您的用户对您的数据库的访问权限。有关更多信息，请参阅[使用 IAM 身份验证生成数据库用户凭证](https://docs.aws.amazon.com/redshift/latest/mgmt/generating-user-credentials.html)

## 为 Amazon Redshift 访问凭证创建密文
<a name="sagemaker-sql-extension-redshift-secret"></a>

**在 Secrets Manager 中 AWS 存储亚马逊 Redshift 信息**

1. 从中 AWS 管理控制台，导航到 Secrets Manager。

1. 选择**存储新密钥**。

1. 在**密文类型**下，选择 **Amazon Redshift 的凭证**。

1. 输入启动 Amazon Redshift 集群时配置的管理员用户名和密码。

1. 选择与机密相关的 Amazon Redshift 集群。

1. 为密文命名。

1. 其余设置可保留为初始创建密文时的默认值，也可根据需要自定义。

1. 创建密钥并检索其 ARN。

## 为 Amazon Redshift Serverless 访问凭证创建密钥
<a name="sagemaker-sql-extension-redshift-serverless-secret"></a>

**如果您需要连接到 Amazon Redshift Serverless，请按照以下步骤操作**

1. 从中 AWS 管理控制台，导航到 Secrets Manager。

1. 选择**存储新密钥**。

1. 在**密文类型**下，选择**其他密文类型**。

1. 在**键值对**中，选择**明文**，然后复制以下 JSON 内容。将用户和密码替换为其实际值：

   ```
   {
     "user": "redshift_user",
     "password": "redshift_password"
   }
   ```

1. 创建密钥并检索其 ARN。

1. 在中的 SQL 扩展中创建新连接时 JupyterLab，请根据需要提供所有其他 Amazon Redshift 连接参数。

## 为 Snowflake 访问凭证创建密文
<a name="sagemaker-sql-extension-snowflake-secret"></a>

本节将详细介绍 JSON 定义文件中专门针对 Snowflake 的密文和连接属性。在创建连接之前，我们建议将您的 Snowflake 访问凭证作为密钥存储在 Secrets Manager 中。

**在 Secrets Manager 中存储 Amazon Redshift 信息**

1. 从中 AWS 管理控制台，导航到 Secrets Manager。

1. 选择**存储新密钥**。

1. 在**密文类型**下，选择**其他密文类型**。

1. 在键值对中，选择 **Plaintext**，然后复制以下 JSON 内容。用它们的值替换 `user`、`password` 和 `account`。

   ```
   {
       "user":"snowflake_user",
       "password":"snowflake_password",
       "account":"account_id"
   }
   ```

1. 为密文命名。

1. 其余设置可保留为初始创建密文时的默认值，也可根据需要自定义。

1. 创建密钥并检索其 ARN。

# 创建 AWS Glue 连接（适用于管理员）
<a name="sagemaker-sql-extension-datasources-glue-connection"></a>

要使用带有 SQL 扩展模块的数据源，管理员可以为每个数据源设置 AWS Glue 连接。这些连接存储了访问数据来源并与之交互所需的配置详细信息。创建连接并授予[相应权限](sagemaker-sql-extension-datasources-connection-permissions.md)后，所有共享同一执行角色的 [亚马逊 SageMaker Studio 空间](studio-updated-spaces.md)用户都能看到这些连接。

建立这些联系：
+ 首先，创建一个 JSON 文件，定义每个数据来源的连接属性。JSON 文件包含诸如数据源标识符、访问凭证和其他通过 AWS Glue 连接访问数据源的相关配置参数之类的详细信息。
+ 然后使用 AWS Command Line Interface (AWS CLI) 创建 AWS Glue 连接，将 JSON 文件作为参数传递。该 AWS CLI 命令从 JSON 文件中读取连接详细信息并建立相应的连接。
**注意**  
SQL 扩展只支持使用 AWS CLI 创建连接。

在创建 AWS Glue 连接之前，请确保完成以下步骤：
+ 安装并配置 AWS Command Line Interface (AWS CLI)。有关如何安装和配置的更多信息 AWS CLI，请参阅[关于 AWS CLI 版本 2](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)。确保用于配置的 IAM 用户或角色的访问密钥和令牌 AWS CLI 具有创建 AWS Glue 连接所需的权限。添加允许 `glue:CreateConnection` 操作的策略。
+ 了解如何使用 AWS Secrets Manager。我们建议您使用 Secrets Manager 为数据存储提供连接凭证和任何其他敏感信息。有关使用 Secrets Manager 存储凭据的更多信息，请参阅在 S [AWS ecrets Manager 中存储连接凭证](https://docs.aws.amazon.com/glue/latest/dg/connection-properties-secrets-manager.html)。

## 创建连接定义 JSON 文件
<a name="sagemaker-sql-extension-glue-connection-config"></a>

要创建 AWS Glue 连接定义文件，请创建一个 JSON 文件来定义安装和配置的计算机上的连接详细信息 AWS CLI。在本例中，将文件命名为 `sagemaker-sql-connection.json`。

连接定义文件应遵循以下一般格式：
+ **Name** 是连接名称。
+ **Description** 是连接的文字描述。
+ **ConnectionType**是连接的类型。选择 `REDSHIFT`、 `ATHENA` 或 `SNOWFLAKE`。
+ **ConnectionProperties**是连接属性的键值对映射，例如您的 AWS 密钥的 ARN 或数据库的名称。

```
{
    "ConnectionInput": {
        "Name": <GLUE_CONNECTION_NAME>,
        "Description": <GLUE_CONNECTION_DESCRIPTION>,
        "ConnectionType": "REDSHIFT | ATHENA | SNOWFLAKE",
        "ConnectionProperties": {
            "PythonProperties": "{\"aws_secret_arn\": <SECRET_ARN>, \"database\": <...>}"
        }
    }
}
```

**注意**  
`ConnectionProperties` 键中的属性由字符串化的键值对组成。用反斜杠 (`\`) 字符转义键或值中使用的双引号。
Secrets Manager 中的所有属性也可通过 `PythonProperties` 直接提供。但是，不建议在 `PythonProperties` 中包含密码等敏感字段。取而代之的是使用 Secrets Manager。

针对不同数据存储的连接定义文件可在以下章节中找到。

每个数据来源的连接定义文件都包含从 SQL 扩展连接到这些数据存储所需的特定属性和配置。有关定义与该信号源连接的详情，请参阅相应章节。
+ 要为 Amazon Redshift 创建 AWS Glue 连接，请参阅中的示例定义文件。[为 Amazon Redshift 配置 AWS Glue 连接](#sagemaker-sql-extension-redshift-glue-connection-config)
+ 要为 Amazon Athena 创建 AWS Glue 连接，请参阅中的示例定义文件。[为 Ath AWS Glue ena 配置连接](#sagemaker-sql-extension-athena-glue-connection-config)
+ 要为 Snowflake 创建 AWS Glue 连接，请参阅中的示例定义文件。[为 Snowflake 配置 AWS Glue 连接](#sagemaker-sql-extension-snowflake-glue-connection-config)

### 为 Amazon Redshift 配置 AWS Glue 连接
<a name="sagemaker-sql-extension-redshift-glue-connection-config"></a>

本节详细介绍 JSON 定义文件中 Amazon Redshift 特有的密文和连接属性。在创建连接配置文件之前，我们建议在 Secrets Manager 中将 Amazon Redshift 访问凭证存储为机密。或者，您可以根据通过 AWS Identity and Access Management (IAM) 权限策略授予的权限生成临时数据库证书，以管理您的用户对您的 Amazon Redshift 数据库的访问权限。有关更多信息，请参阅[使用 IAM 身份验证生成数据库用户凭证](https://docs.aws.amazon.com/redshift/latest/mgmt/generating-user-credentials.html)。

#### 为 Amazon Redshift 访问凭证创建密文
<a name="sagemaker-sql-extension-redshift-secret"></a>

**在 Secrets Manager 中 AWS 存储亚马逊 Redshift 信息**

1. 在 AWS 控制台中，导航到 Secrets Manager。

1. 选择**存储新密钥**。

1. 在**密文类型**下，选择 **Amazon Redshift 的凭证**。

1. 输入启动 Amazon Redshift 集群时配置的管理员用户名和密码。

1. 选择与机密相关的 Amazon Redshift 集群。

1. 为密文命名。

1. 其余设置可保留为初始创建密文时的默认值，也可根据需要自定义。

1. 创建密钥并检索其 ARN。

#### 为 Amazon Redshift 配置 AWS Glue 连接
<a name="sagemaker-sql-extension-redshift-glue-connection-creation"></a>

SQL 扩展使用自定义 AWS Glue 连接连接到数据源。有关创建 AWS Glue 连接以连接数据源的一般信息，请参见[创建 AWS Glue 连接（适用于管理员）](#sagemaker-sql-extension-datasources-glue-connection)。以下示例是用于 AWS Glue 连接亚马逊 Redshift 的连接定义示例。

在创建新连接之前，请牢记以下建议：
+ `PythonProperties` 键中的属性由字符串化的键值对组成。用反斜杠 (`\`) 字符转义键或值中使用的双引号。
+ 在连接定义文件中输入连接名称和说明，用之前创建的密文的 ARN 替换 `aws_secret_arn` 中密文的 ARN。
+ 确保上述连接定义中按名称声明的数据库与集群数据库一致。您可以访问 [Amazon Redshift 管理控制台](https://console.aws.amazon.com/redshiftv2/)上的集群详细信息页面上，并在**属性**部分的 **数据库配置**下验证数据库名称。
+ 有关其他参数，请参阅 [Amazon Redshift 连接参数](sagemaker-sql-extension-connection-properties.md#sagemaker-sql-extension-connection-properties-redshift) 中的 Amazon Redshift 支持的连接属性列表。
**注意**  
默认情况下，Python 的 SQL 扩展连接器在事务中运行所有查询，除非连接属性中的 `auto_commit` 设置为 `true`。
您可以将包括 `database` 名称在内的所有连接参数添加到密文中。

```
{
  "ConnectionInput": {
      "Name": "Redshift connection name",
      "Description": "Redshift connection description",
      "ConnectionType": "REDSHIFT",
      "ConnectionProperties": {
          "PythonProperties":"{\"aws_secret_arn\": \"arn:aws:secretsmanager:region:account_id:secret:secret_name\", \"database\":\"database_name\", \"database_metadata_current_db_only\": false}"
      }
  }
}
```

更新定义文件后，请按照中的[创建 AWS Glue 连接](#sagemaker-sql-extension-datasources-glue-connection-creation)步骤创建 AWS Glue 连接。

### 为 Ath AWS Glue ena 配置连接
<a name="sagemaker-sql-extension-athena-glue-connection-config"></a>

本节将详细介绍 JSON 定义文件中 Athena 特有的连接属性。

#### 为 Ath AWS Glue ena 配置连接
<a name="sagemaker-sql-extension-athena-glue-connection-creation"></a>

SQL 扩展使用自定义 AWS Glue 连接连接到数据源。有关创建 AWS Glue 连接以连接数据源的一般信息，请参见[创建 AWS Glue 连接（适用于管理员）](#sagemaker-sql-extension-datasources-glue-connection)。以下示例是 AWS Glue 连接到 Athena 的示例连接定义。

在创建新连接之前，请牢记以下建议：
+ `ConnectionProperties` 键中的属性由字符串化的键值对组成。用反斜杠 (`\`) 字符转义键或值中使用的双引号。
+ 在连接定义文件中，输入连接的名称和描述，用目录名称替换 `catalog_name`，用 Amazon S3 存储桶中输出目录的 Amazon S3 URI（统一资源标识符）替换 `s3_staging_dir`，用 Amazon S3 存储桶的区域替换 `region_name`。
+ 有关其他参数，请参阅 [Athena 连接参数](sagemaker-sql-extension-connection-properties.md#sagemaker-sql-extension-connection-properties-athena) 中 Athena 支持的连接属性列表。
**注意**  
您可以将所有连接参数，包括 `catalog_name` 或 `s3_staging_dir` 添加到密文中。
如果指定了 `workgroup`，则无需指定 `s3_staging_dir`。

```
{
    "ConnectionInput": {
        "Name": "Athena connection name",
        "Description": "Athena connection description",
        "ConnectionType": "ATHENA",
        "ConnectionProperties": {
            "PythonProperties": "{\"catalog_name\": \"catalog_name\",\"s3_staging_dir\": \"s3://amzn-s3-demo-bucket_in_same_region/output_query_results_dir/\", \"region_name\": \"region\"}"
        }
    }
}
```

更新定义文件后，请按照中的[创建 AWS Glue 连接](#sagemaker-sql-extension-datasources-glue-connection-creation)步骤创建 AWS Glue 连接。

### 为 Snowflake 配置 AWS Glue 连接
<a name="sagemaker-sql-extension-snowflake-glue-connection-config"></a>

本节将详细介绍 JSON 定义文件中专门针对 Snowflake 的密文和连接属性。在创建连接配置文件之前，我们建议将您的 Snowflake 访问凭证作为机密存储在 Secrets Manager 中。

#### 为 Snowflake 访问凭证创建密文
<a name="sagemaker-sql-extension-snowflake-secret"></a>

**在 Secrets Manager 中存储 Amazon Redshift 信息**

1. 在 AWS 控制台中，导航到 AWS Secrets Manager。

1. 选择**存储新密钥**。

1. 在**密文类型**下，选择**其他密文类型**。

1. 在键值对中，选择 **Plaintext**，然后复制以下 JSON 内容。用它们的值替换 `user`、`password` 和 `account`。

   ```
   {
       "user":"snowflake_user",
       "password":"snowflake_password",
       "account":"account_id"
   }
   ```

1. 为密文命名。

1. 其余设置可保留为初始创建密文时的默认值，也可根据需要自定义。

1. 创建密钥并检索其 ARN。

#### 为 Snowflake 配置 AWS Glue 连接
<a name="sagemaker-sql-extension-snowflake-glue-connection-creation"></a>

SQL 扩展使用自定义 AWS Glue 连接连接到数据源。有关创建 AWS Glue 连接以连接数据源的一般信息，请参见[创建 AWS Glue 连接（适用于管理员）](#sagemaker-sql-extension-datasources-glue-connection)。以下示例是 AWS Glue 连接到 Snowflake 的示例连接定义。

在创建新连接之前，请牢记以下建议：
+ `ConnectionProperties` 键中的属性由字符串化的键值对组成。用反斜杠 (`\`) 字符转义键或值中使用的双引号。
+ 在连接定义文件中输入连接的名称和描述，然后用之前创建的密文的 ARN 替换 `aws_secret_arn` 中的密文 ARN，并替换 `account` 中的账户 ID。
+ 有关其他参数，请参阅 [Snowflake 连接参数](sagemaker-sql-extension-connection-properties.md#sagemaker-sql-extension-connection-properties-snowflake) 中的 Snowflake 支持的连接属性列表。
**注意**  
您可以将包括 `account` 在内的所有连接参数添加到密文中。

```
{
    "ConnectionInput": {
        "Name": "Snowflake connection name",
        "Description": "Snowflake connection description",
        "ConnectionType": "SNOWFLAKE",
        "ConnectionProperties": {
            "PythonProperties":  "{\"aws_secret_arn\": \"arn:aws:secretsmanager:region:account_id:secret:secret_name\", \"account\":\"account_id\"}"}"
        }
    }
}
```

更新定义文件后，请按照中的[创建 AWS Glue 连接](#sagemaker-sql-extension-datasources-glue-connection-creation)步骤创建 AWS Glue 连接。

## 创建 AWS Glue 连接
<a name="sagemaker-sql-extension-datasources-glue-connection-creation"></a>

要通过创建 AWS Glue 连接 AWS CLI，请使用您的连接定义文件并运行此 AWS CLI 命令。用您的 AWS 区域名称替换`region`占位符，并提供定义文件的本地路径。

**注意**  
配置定义文件的路径前必须有 `file://`。

```
aws --region region glue create-connection --cli-input-json file://path_to_file/sagemaker-sql-connection.json
```

通过运行以下命令验证 AWS Glue 连接是否已创建，并检查您的连接名称。

```
aws --region region glue get-connections
```

或者，您可以按如下方式更新现有 AWS Glue 连接：
+ 根据需要修改 AWS Glue 连接定义文件。
+ 运行以下命令更新连接。

  ```
  aws --region region glue update-connection --name glue_connection_name --cli-input-json file://path_to_file/sagemaker-sql-connection.json
  ```

# 创建用户定义的 AWS Glue 连接
<a name="sagemaker-sql-extension-datasources-glue-connection-user-defined"></a>

**注意**  
用户通过 SQL 扩展 UI 创建的所有 AWS Glue 连接都会自动使用以下内容进行标记：  
`UserProfile: user-profile-name`
`AppType: "JL"`
应用于通过 SQL 扩展 UI 创建的 AWS Glue 连接的标签有两个用途。该`"UserProfile": user-profile-name`标签允许识别创建 AWS Glue 连接的特定用户配置文件，从而可以看到负责连接的用户。该`"AppType": "JL"`标签对连接的来源进行分类，将其与应用程序相关联。 JupyterLab 这使得这些连接能够与通过其他方式（例如 AWS CLI）创建的连接区分开来。

## 先决条件
<a name="sagemaker-sql-extension-datasources-glue-connection-user-defined-prerequisites"></a>

在使用 SQL 扩展 UI 创建 AWS Glue 连接之前，请确保您已完成以下任务：
+ 让您的管理员执行以下操作：
  + 启用 Studio 域与要连接的数据来源之间的网络通信。要了解联网要求，请参阅[配置 Studio 和数据来源之间的网络访问（供管理员使用）](sagemaker-sql-extension-networking.md)。
  + 请确保已设置管理 AWS Glue 连接及访问 Secrets Manager 所需的 IAM 权限。要了解所需的权限，请参阅[设置访问数据来源所需的 IAM 权限（适用于管理员）](sagemaker-sql-extension-datasources-connection-permissions.md)。
**注意**  
管理员可以限制用户只能访问由用户在 JupyterLab 应用程序中创建的连接。这可以通过配置限定在用户配置文件范围内的[基于标签的访问控制](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-sql-extension-datasources-connection-permissions.html#user-defined-connections-permissions)来实现。
+ 查看连接属性和说明以便为数据来源创建密钥（见[在 Secrets Manager 中为数据库访问凭证创建密钥](sagemaker-sql-extension-glue-connection-secrets.md)）。

## 用户工作流
<a name="sagemaker-sql-extension-datasources-glue-connection-user-defined-steps"></a>

可执行以下步骤来完成创建用户连接时的工作流：

1. **选择数据来源类型**：选择*添加新连接*图标后，将打开一个表单，提示用户选择要连接到的数据来源的类型，例如 Amazon Redshift、Athena 或 Snowflake。

1. **提供连接属性**：根据所选数据来源，动态加载相关的连接属性。该表单会标明，对于所选数据来源而言，哪些字段是必填字段，哪些字段是可选字段。要了解数据来源的可用属性，请参阅[连接参数](sagemaker-sql-extension-connection-properties.md)。

1. **选择你的 AWS Secrets Manager ARN**：对于 Amazon Redshift 和 Snowflake 数据源，系统会提示用户选择存储用户名和密码等敏感信息的 S AWS ecrets Manager ARN。要了解如何为数据来源创建密钥，请参阅[在 Secrets Manager 中为数据库访问凭证创建密钥](sagemaker-sql-extension-glue-connection-secrets.md)。

1. **保存您的连接详细信息**：单击**创建**后，提供的连接属性将另存为 AWS Glue 连接。

1. **测试您的连接**：如果连接成功，则关联的数据库和表将在资源管理器中显示。如果连接失败，则会显示一条错误消息，提示用户查看连接详细信息并予以纠正。

1. **熟悉 SQL 扩展功能**：要了解扩展的功能，请参阅 [SQL 扩展功能和使用](sagemaker-sql-extension-features.md)。

1. **（可选）更新或删除用户创建的连接**：只要用户获得必要的权限，就可以更新或删除他们创建的连接。要了解有关所需权限的更多信息，请参阅[用户定义的连接需要 IAM 权限](sagemaker-sql-extension-datasources-connection-permissions.md#user-defined-connections-permissions)。

# 设置访问数据来源所需的 IAM 权限（适用于管理员）
<a name="sagemaker-sql-extension-datasources-connection-permissions"></a>

管理员应确保 JupyterLab 应用程序使用的执行角色具有通过配置的 AWS Glue 连接访问数据所必需的 AWS IAM 权限。
+ **管理员使用以下方式创建的** AWS Glue 连接 AWS CLI：要查看[管理员创建的](sagemaker-sql-extension-datasources-glue-connection.md)连接并访问其数据，用户需要让其管理员为其 JupyterLab应用程序在 Studio 中使用的 SageMaker AI 执行角色附加特定权限。这包括访问权限 AWS Glue、Secrets Manager 和特定于数据库的权限。管理员创建的连接对共享执行角色的所有应用程序可见，该执行角色获得了查看特定 AWS Glue 目录或数据库的权限。要了解每种数据来源的所需权限列表，请参阅[管理员定义的连接需要 IAM 权限](#admin-defined-connections-permissions)中管理员定义的连接权限。
+ **用户使用 SQL 扩展 UI** [创建的连接也将列出 JupyterLab：由共享相同执行角色的用户配置文件](sagemaker-sql-extension-datasources-glue-connection-user-defined.md)创建的连接，除非其连接的可见性范围仅限于用户创建的连接。用户创建的连接通过用于创建该连接的用户配置文件进行标记。要将查看、更新或删除这些用户创建的连接的权限仅授予创建这些连接的用户，管理员可以向执行角色 IAM 权限添加其他基于标签的访问控制限制。要了解所需的其他基于标签的访问控制，请参阅[用户定义的连接需要 IAM 权限](#user-defined-connections-permissions)。

## 管理员定义的连接需要 IAM 权限
<a name="admin-defined-connections-permissions"></a>

要向 Studio 中的 JupyterLab 应用程序使用的 SageMaker AI 执行角色授予通过 AWS Glue 连接访问数据源的权限，请将以下内联策略附加到该角色。

要查看每个数据来源或身份验证方法的特定权限和策略详细信息，请在下面选择相关的连接类型。

**注意**  
我们建议将策略的权限限制在所需的资源和操作范围内。  
要缩小策略范围并授予最低权限访问权限，请将策略`"Resource": ["*"]`中的通配符替换 ARNs 为需要访问的确切资源的特定通配符。有关如何控制资源访问权限的更多信息，请参阅 [使用精细的 ARN 权限微调 AWS 资源访问权限](#resource-access-control)。

### 所有连接类型
<a name="datasources-connection-permissions-all"></a>

**注意**  
我们强烈建议将该策略的范围缩小到只需采取的行动和所需的资源。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GetS3AndDataSourcesMetadata",
            "Effect": "Allow",
            "Action": [
                "glue:GetDatabases",
                "glue:GetSchema",
                "glue:GetTables",
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation",
                "glue:GetDatabase",
                "glue:GetTable",
                "glue:ListSchemas",
                "glue:GetPartitions"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*",
                "arn:aws:glue:us-east-1:111122223333:catalog",
    "arn:aws:glue:us-east-1:111122223333:connection/*"
            ]
        },
        {
            "Sid": "ExecuteQueries",
            "Effect": "Allow",
            "Action": [
                "athena:ListDataCatalogs",
                "athena:ListDatabases",
                "athena:ListTableMetadata",
                "athena:StartQueryExecution",
                "athena:GetQueryExecution",
                "athena:RunQuery",
                "athena:StartSession",
                "athena:GetQueryResults",
                "athena:ListWorkGroups",
                "s3:ListMultipartUploadParts",
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "athena:GetDataCatalog",
                "s3:AbortMultipartUpload",
                "s3:GetObject",
                "s3:PutObject",
                "athena:GetWorkGroup"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*",
                "arn:aws:athena:us-east-1:111122223333:workgroup/workgroup-name"
            ]
        },
        {
            "Sid": "GetGlueConnections",
            "Effect": "Allow",
            "Action": [
                "glue:GetConnections",
                "glue:GetConnection"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:111122223333:catalog",
                "arn:aws:glue:us-east-1:111122223333:connection/*"
            ]
        },
        {
            "Sid": "GetSecrets",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret-name"
            ]
        },
        {
            "Sid": "GetClusterCredentials",
            "Effect": "Allow",
            "Action": [
                "redshift:GetClusterCredentials"
            ],
            "Resource": [
                "arn:aws:redshift:us-east-1:111122223333:cluster:cluster-name"
            ]
        }
    ]
}
```

------

### Athena
<a name="datasources-connection-permissions-athena"></a>

**注意**  
我们强烈建议将这一策略的范围缩小到仅需要的资源。

更多信息，请参阅 [Athena 文档](https://docs.aws.amazon.com/athena/latest/ug/federated-query-iam-access.html)中的 *IAM 权限策略示例*。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GetS3AndDataSourcesMetadata",
            "Effect": "Allow",
            "Action": [
                "glue:GetDatabases",
                "glue:GetSchema",
                "glue:GetTables",
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation",
                "glue:GetDatabase",
                "glue:GetTable",
                "glue:ListSchemas",
                "glue:GetPartitions"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*",                
                "arn:aws:glue:us-east-2:111122223333:catalog",
                "arn:aws:glue:us-east-2:111122223333:connection/*"
            ]
        },
        {
            "Sid": "ExecuteAthenaQueries",
            "Effect": "Allow",
            "Action": [
                "athena:ListDataCatalogs",
                "athena:ListDatabases",
                "athena:ListTableMetadata",
                "athena:StartQueryExecution",
                "athena:GetQueryExecution",
                "athena:RunQuery",
                "athena:StartSession",
                "athena:GetQueryResults",
                "athena:ListWorkGroups",
                "s3:ListMultipartUploadParts",
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "athena:GetDataCatalog",
                "s3:AbortMultipartUpload",
                "s3:GetObject",
                "s3:PutObject",
                "athena:GetWorkGroup"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*",
                "arn:aws:athena:us-east-2:111122223333:workgroup/workgroup-name"
            ]
        },
        {
            "Sid": "GetGlueConnections",
            "Effect": "Allow",
            "Action": [
                "glue:GetConnections",
                "glue:GetConnection"
            ],
            "Resource": [
                "arn:aws:glue:us-east-2:111122223333:catalog",
                "arn:aws:glue:us-east-2:111122223333:connection/*"
            ]
        },
        {
            "Sid": "GetSecrets",
            "Effect": "Allow",
            "Action": [                
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret-name"       
            ]
        }
    ]
}
```

------

### Amazon Redshift 和 Amazon Redshift Serverless（用户名和密码验证）/ Snowflake
<a name="datasources-connection-permissions-snowflake-redshift-user-password"></a>

**注意**  
我们强烈建议将这一策略的范围缩小到仅需要的资源。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GetS3Metadata",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Sid": "GetGlueConnections",
            "Effect": "Allow",
            "Action": [
                "glue:GetConnections",
                "glue:GetConnection"
            ],
            "Resource": [
                "arn:aws:glue:us-east-2:111122223333:catalog",
                "arn:aws:glue:us-east-2:111122223333:connection/*"
            ]
        },
        {
            "Sid": "GetSecrets",
            "Effect": "Allow",
            "Action": [                
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret-name"            
            ]
        }
    ]
}
```

------

### Amazon Redshift（IAM 授权）
<a name="datasources-connection-permissions-redshift-iam"></a>

**注意**  
我们强烈建议将这一策略的范围缩小到仅需要的资源。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GetS3Metadata",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*",
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Sid": "GetGlueConnections",
            "Effect": "Allow",
            "Action": [
                "glue:GetConnections",
                "glue:GetConnection"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:111122223333:catalog",
                "arn:aws:glue:us-east-1:111122223333:connection/*",
                "arn:aws:glue:us-east-1:111122223333:connection/connection-name"
            ]
        },
        {
            "Sid": "GetSecrets",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret-name",
                "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret-name-with-suffix"
            ]
        },
        {
            "Sid": "GetClusterCredentials",
            "Effect": "Allow",
            "Action": [
                "redshift:GetClusterCredentials"
            ],
            "Resource": [
                "arn:aws:redshift:us-east-1:111122223333:cluster:cluster-name",
                "arn:aws:redshift:us-east-1:111122223333:dbuser:cluster-name/db-user-name"
            ]
        }
    ]
}
```

------

### Amazon Redshift Serverless（IAM 授权）
<a name="datasources-connection-permissions-redshift-serverless-iam"></a>

**注意**  
我们强烈建议将这一策略的范围缩小到仅需要的资源。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GetS3Metadata",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Sid": "GetGlueConnections",
            "Effect": "Allow",
            "Action": [
                "glue:GetConnections",
                "glue:GetConnection"
            ],
            "Resource": [
                "arn:aws:glue:us-east-2:111122223333:catalog",
                "arn:aws:glue:us-east-2:111122223333:connection/*"
            ]
        },
        {
            "Sid": "GetSecrets",
            "Effect": "Allow",
            "Action": [                
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-2:111122223333:secret:secret-name"         
            ]
        },
        {
            "Sid": "GetRedshiftServerlessCredentials",
            "Effect": "Allow",
            "Action": [
                "redshift-serverless:GetCredentials"
            ],
            "Resource": [
                "arn:aws:redshift-serverless:us-east-2:111122223333:namespace/namespace-id"           
            ]
        }
    ]
}
```

------

## 用户定义的连接需要 IAM 权限
<a name="user-defined-connections-permissions"></a>

用户的 IAM 策略权限可以说明 AWS Glue 连接资源上是否存在`UserProfile`标签。
+ **要查看 AWS Glue 连接，请执行**以下操作：
  + 用户可以查看所有带 `UserProfile` 标签的连接（由管理员创建）。
  + 用户可以查看带 `UserProfile` 标签且标签值与其用户配置文件名称相同的连接。
  + 用户无法查看带 `UserProfile` 标签且标签值与其用户配置文件名称不同的连接。
+ **要更新或删除 AWS Glue 连接**，请执行以下操作：
  + 用户可以更新或删除带 `UserProfile` 标签且标签值与其用户配置文件名称相同的连接。
  + 用户无法更新或删除带 `UserProfile` 标签且标签值与其用户配置文件名称不同的连接。
  + 用户无法更新或删除不带 `UserProfile` 标签的连接。

为此，管理员必须向用户配置文件 JupyterLab 应用程序使用的执行角色授予其现有[管理员定义的连接](#admin-defined-connections-permissions)权限之外的额外权限。具体而言，除了访问管理员定义的 AWS Glue 连接所需的权限外，还必须向用户的执行角色授予以下两项额外的 IAM 权限：
+ 允许创建 AWS Glue 连接并将`UserProfile`标签与用户个人资料名称的值关联起来。
+ 允许查看、更新和删除`UserProfile`标签与用户个人资料名称相匹配的 AWS Glue 连接。

此权限根据特定的用户配置文件标签值限制对 AWS Glue 连接的访问。使用要定位的用户的配置文件名称更新 `UserProfile` 标签值。

```
"Action": [
    "glue:GetConnection",
    "glue:GetConnections"    
],
"Resource": [
    "arn:aws:glue:region:account_id:connection/*"
],
"Condition": {
    "StringEqualsIfExists": {
        "aws:ResourceTag/UserProfile": "user_profile_name"
    }
}
```

此权限仅允许将创建、更新和删除用户创建的连接的功能用于由带指定 `UserProfile` 标签值的用户配置文件创建的连接。

```
"Action": [
    "glue:DeleteConnection",
    "glue:UpdateConnection",
    "glue:CreateConnection",
    "glue:TagResource"
],
"Resource": [
    "arn:aws:glue:region:account_id:connection/*"
],
"Condition": {
    "StringEquals": {
        "aws:ResourceTag/UserProfile": "user_profile"
    }
}
```

## 使用精细的 ARN 权限微调 AWS 资源访问权限
<a name="resource-access-control"></a>

为了更精细地控制对 AWS 资源的访问权限，请将策略`"Resource": ["*"]`中的通配符资源替换为仅包含需要访问的资源的具体 Amazon 资源名称 (ARNs)。使用精确 ARNs字符而不是通配符会限制对预期资源的访问。
+ **使用特定的亚马逊 S3 存储桶 ARNs**

  例如，`"arn:aws:s3:::bucket-name"` 或 ` "arn:aws:s3:::bucket-name/*"` 表示存储桶级或对象级操作。

  有关 Amazon S3 中所有资源类型的信息，请参阅[由 Amazon S3 定义的资源类型](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#amazons3-resources-for-iam-policies)。
+ **使用特定的 AWS Glue 数据库 ARNs**

  例如，` "arn:aws:glue:region:account-id:catalog"` 或 ` "arn:aws:glue:region:account-id:database/db-name"`。有关中所有资源类型的信息 AWS Glue，请参阅[由定义的资源类型 AWS Glue](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-resources-for-iam-policies)。
+ **使用特定的 Athena 工作组 ARNs**

  例如 `"arn:aws:athena:region:account-id:workgroup/workgroup-name"`。有关 Athena 中所有资源类型的信息，请参阅[由 Athena 定义的资源类型](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html#amazonathena-resources-for-iam-policies)。
+ **使用特定的 S AWS ecrets Manager 密钥 ARNs**

  例如 `"arn:aws:secretsmanager:region:account-id:secret:secret-name"`。有关 Secrets Manager 中所有资源类型的信息，请参阅 S AWS ecr [AWS ets Manager 定义的资源类型](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssecretsmanager.html#awssecretsmanager-resources-for-iam-policies)
+ **使用特定的亚马逊 Redshift 集群 ARNs**

  例如 `"arn:aws:redshift:region:account-id:cluster:cluster-name"`。有关 Amazon Redshift 中资源类型的信息，请参阅[由 Amazon Redshift 定义的资源类型](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshift.html#amazonredshift-resources-for-iam-policies)。有关 Redshift Serverless 中所有资源类型的信息，请参阅[由 Redshift Serverless 定义的资源类型](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshiftserverless.html#amazonredshiftserverless-resources-for-iam-policies)。